From 8e6815727358fcb7994720eb7f3ae24503c8bdaf Mon Sep 17 00:00:00 2001 From: Recrown Date: Wed, 29 Aug 2018 23:18:49 -0500 Subject: [PATCH] further optimized music selection screen --- .../screens/main/MusicSelectionPage.java | 47 ++++++++++++------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java index 595acf1..3ce10a7 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java @@ -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 queue; + private LinkedBlockingQueue 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 {