further optimized music selection screen

This commit is contained in:
Harrison Deng 2018-08-29 23:18:49 -05:00
parent 97afc449b2
commit 8e68157273

View File

@ -131,7 +131,6 @@ public class MusicSelectionPage extends Page implements Observer {
if (frameUsed) {
frameUsed = false;
simpleDebug("New frame.");
}
if (down) {
@ -259,7 +258,7 @@ public class MusicSelectionPage extends Page implements Observer {
private Thread thread;
private String name = "Music-Selection-Loader-Thread";
private volatile boolean work = true;
private LinkedBlockingQueue<AudioMetadata> queue;
private LinkedBlockingQueue<MusicSelectable> queue;
public musicSelectionLoaderThread() {
queue = new LinkedBlockingQueue<>();
}
@ -267,11 +266,15 @@ public class MusicSelectionPage extends Page implements Observer {
@Override
public void run() {
while (work) {
AudioMetadata metadata;
try {
metadata = queue.take();
metadata.loadAlbumCover();
simpleDebug("Loading " + metadata.getTitle());
MusicSelectable selectable = queue.take();
if (!selectable.isOffScreen()) {
selectable.getMetadata().loadAlbumCover();
selectable.loadAttempted();
simpleDebug("Loaded " + selectable.getMetadata().getTitle());
} else {
simpleDebug("Skipping " + selectable.getMetadata().getTitle());
}
} catch (InterruptedException e) {
simpleDebug("Thread was interupted.");
}
@ -300,8 +303,8 @@ public class MusicSelectionPage extends Page implements Observer {
queue.clear();
}
public void queue(AudioMetadata metadata) {
queue.add(metadata);
public void queue(MusicSelectable selectable) {
queue.add(selectable);
}
}
@ -312,12 +315,11 @@ public class MusicSelectionPage extends Page implements Observer {
private Table informationTable;
private Label name, artist;
private Label time;
private boolean offScreen;
private float timeSinceChanged;
private AudioMetadata metadata;
private Texture defaultAlbumArt;
private TextureRegion albumArtTexture;
private boolean albumArtDisplayed, albumArtAttempted;
private volatile boolean offScreen, albumArtDisplayed, albumArtQueued, noReset;
public MusicSelectable(AudioMetadata metadata) {
super(skin, "selectable-button");
@ -353,7 +355,7 @@ public class MusicSelectionPage extends Page implements Observer {
actualCoords.x = getX() + getParent().getX();
actualCoords.y = getY() + getParent().getY();
if ((actualCoords.y < 0 - getHeight() - getStage().getHeight()*1.5f || actualCoords.y > getStage().getHeight()*2.5f) && selectables.getChecked() != this) {
if ((actualCoords.y < 0 - getHeight() - getStage().getHeight()*0.5f || actualCoords.y > getStage().getHeight()*1.5f) && selectables.getChecked() != this) {
offScreenAct(delta);
} else {
onScreenAct(delta);
@ -370,16 +372,16 @@ public class MusicSelectionPage extends Page implements Observer {
if (offScreen) {
offScreen = false;
timeSinceChanged = 0;
} else if (timeSinceChanged < 0.075f) {
} else if (timeSinceChanged < 0.05f) {
timeSinceChanged += delta;
} else {
if (!frameUsed && metadata.getAlbumCover() != null && !albumArtDisplayed) {
updateAlbumArtImage(metadata.getAlbumCover());
albumArtDisplayed = true;
frameUsed = true;
} else if (!albumArtAttempted) {
selectionLoaderThread.queue(metadata);
albumArtAttempted = true;
} else if (!albumArtQueued) {
selectionLoaderThread.queue(this);
albumArtQueued = true;
}
}
}
@ -401,7 +403,8 @@ public class MusicSelectionPage extends Page implements Observer {
updateAlbumArtImage(defaultAlbumArt);
metadata.unloadAlbumCover();
albumArtDisplayed = false;
albumArtAttempted = false;
albumArtQueued = false;
noReset = false;
}
}
}
@ -427,6 +430,18 @@ public class MusicSelectionPage extends Page implements Observer {
public TextureRegion getAlbumArtTexture() {
return albumArtTexture;
}
public boolean isOffScreen() {
if (offScreen && !noReset) {
albumArtDisplayed = false;
albumArtQueued = false;
}
return offScreen;
}
public void loadAttempted() {
noReset = true;
}
}
private class MusicSelectableButtonGroup extends ButtonGroup<MusicSelectable> {