further optimized music selection screen
This commit is contained in:
parent
97afc449b2
commit
8e68157273
@ -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> {
|
||||
|
Loading…
x
Reference in New Issue
Block a user