From eba5459ab3fc5eb4a5c99ceb56171a9c5fe12073 Mon Sep 17 00:00:00 2001 From: Recrown Date: Tue, 4 Sep 2018 04:33:25 -0500 Subject: [PATCH] splash screen more reasonable; resizing now functions as intended; --- android/assets/splash_texture.png | Bin 0 -> 35386 bytes android/assets/splashlogo.png | Bin 31587 -> 0 bytes .../zero1hd/rhythmbullet/RhythmBullet.java | 83 +++++++++++------- .../zero1hd/rhythmbullet/audio/MusicList.java | 6 +- .../DoubleHorizontalVisualizer.java | 4 + .../audio/visualizer/PCMSystem.java | 2 + .../zero1hd/rhythmbullet/util/AssetPack.java | 2 +- .../rhythmbullet/util/InitialScreen.java | 3 +- .../util/ScreenConfiguration.java | 2 +- .../desktop/DesktopAssetPack.java | 2 +- .../rhythmbullet/desktop/DesktopLauncher.java | 2 + .../desktop/DesktopScreenConfiguration.java | 6 +- .../desktop/audio/PCMObtainer.java | 37 +++++--- .../desktop/screens/SplashScreen.java | 20 ++--- .../desktop/screens/main/MainPage.java | 8 +- .../desktop/screens/main/MainScreen.java | 33 ++++--- .../screens/main/MusicSelectionPage.java | 2 + .../desktop/screens/main/OptionsPage.java | 2 +- 18 files changed, 126 insertions(+), 88 deletions(-) create mode 100755 android/assets/splash_texture.png delete mode 100755 android/assets/splashlogo.png diff --git a/android/assets/splash_texture.png b/android/assets/splash_texture.png new file mode 100755 index 0000000000000000000000000000000000000000..906d1db345f9db8ce048ff9a66e6a63de3094f51 GIT binary patch literal 35386 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 literal 0 HcmV?d00001 diff --git a/android/assets/splashlogo.png b/android/assets/splashlogo.png deleted file mode 100755 index f2fab6d08909ed955d9624c7ebb56b3a3b41ece5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31587 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 diff --git a/core/src/zero1hd/rhythmbullet/RhythmBullet.java b/core/src/zero1hd/rhythmbullet/RhythmBullet.java index 2c086c8..3842c43 100755 --- a/core/src/zero1hd/rhythmbullet/RhythmBullet.java +++ b/core/src/zero1hd/rhythmbullet/RhythmBullet.java @@ -32,7 +32,7 @@ public class RhythmBullet extends Game { public static final int SPAWN_CIRCLE_RADIUS = 6; public static int pixels_per_unit; private boolean initiated; - private boolean resizing; + private boolean resizing, simpleResizeOnce; private int screenWidth, screenHeight; public static final String VERSION = "(1.0.0) R1-PreAlpha"; @@ -53,15 +53,25 @@ public class RhythmBullet extends Game { this.initialScreen = initialScreen; this.assetPack = assetPack; this.screenConfiguration = screenConfiguration; + screenConfiguration.queueBorderless(true); } @Override public void create() { - Gdx.app.setLogLevel(Application.LOG_DEBUG); - initialScreen.init(); setScreen(initialScreen); - - assetPack.initiateResources(); + Gdx.app.setLogLevel(Application.LOG_DEBUG); + screenWidth = Gdx.graphics.getWidth(); + screenHeight = Gdx.graphics.getHeight(); + initialScreen.init(); + initialLoad(); + } + + private void initialLoad() { + if (initiated) throw new IllegalStateException("Initiation cannot occur more than once."); + + simpleResizeOnce = true; + skin = new Skin(); + assetPack.initiate(); preferences = Gdx.app.getPreferences("RhythmBullet Preferences"); @@ -84,18 +94,23 @@ public class RhythmBullet extends Game { assetManager.setLoader(Sound.class, new SoundLoader(genericFileFinder)); rRHandler.setResolution(getPreferences().getInteger("screen-width"), getPreferences().getInteger("screen-height")); + queueAssets(); + } + + private void initialLoadComplete() { + screenConfiguration.queueBorderless(preferences.getBoolean("borderless", false)); - - screenWidth = Gdx.graphics.getWidth(); - screenHeight = Gdx.graphics.getHeight(); - + skin.addRegions(assetManager.get("uiskin.atlas", TextureAtlas.class)); pixels_per_unit = (int) (Float.valueOf(screenHeight)/Float.valueOf(WORLD_HEIGHT)); - if (getPreferences().getBoolean("fullscreen", true)) { Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode()); } else { Gdx.graphics.setWindowedMode(getPreferences().getInteger("screen-width"), getPreferences().getInteger("screen-height")); } + assetPack.generateFonts(skin); + assetPack.setupSkin(skin); + assetPack.complete(assetManager); + } @Override @@ -110,8 +125,7 @@ public class RhythmBullet extends Game { Gdx.app.debug("Resize", "Post resize is starting..."); if (skin != null) skin.dispose(); skin = new Skin(); - skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class); - getSkin().addRegions(skinAtlas); + skin.addRegions(assetManager.get("uiskin.atlas", TextureAtlas.class)); assetPack.generateFonts(skin); assetPack.setupSkin(skin); @@ -119,15 +133,14 @@ public class RhythmBullet extends Game { if (getScreen() instanceof ResizeReadyScreen) { ((ResizeReadyScreen) getScreen()).postAssetLoad(); } else { - throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen."); + throw new IllegalStateException("Cannot perform window resize on a screen that isn't resize ready."); } Gdx.app.debug("Resize", "Post resize has ended."); - - if (!initiated) { - setScreen(((InitialScreen) initialScreen).createMainScreen(this)); - initiated = true; - } resizing = false; + } else if (!initiated) { + initiated = true; + initialLoadComplete(); + setScreen(((InitialScreen) initialScreen).advance(this)); } return true; } @@ -142,6 +155,7 @@ public class RhythmBullet extends Game { try { advancedResizeScreen.preAssetLoad(); } catch (NullPointerException cleanScreen) { + Gdx.app.debug("Screen", "clean screen: " + advancedResizeScreen.getClass().getSimpleName()); //Tried to perform pre-asset reload, but had uninitialized objects, meaning this is a new screen, or "clean" screen. } finally { advancedResizeScreen.postAssetLoad(); @@ -152,25 +166,30 @@ public class RhythmBullet extends Game { @Override public void resize(int width, int height) { - Gdx.app.debug("resize", "Current size:" + screenWidth + "x" + screenHeight + " new size: " + width + "x" + height); - if (width != screenWidth || height != screenHeight) { - screenWidth = Gdx.graphics.getWidth(); - screenHeight = Gdx.graphics.getHeight(); - + if (screenWidth != width || screenHeight != height) { + Gdx.app.debug("resize", "Current size:" + screenWidth + "x" + screenHeight + " new size: " + width + "x" + height); + screenWidth = width; + screenHeight = height; pixels_per_unit = (int) (Float.valueOf(screenHeight)/Float.valueOf(WORLD_HEIGHT)); - Gdx.app.debug("Resize", "Pre-resize is happening. Resizing to " + width + "x" + height); rRHandler.setResolution(width, height); - if (getScreen() instanceof ResizeReadyScreen) { - ((ResizeReadyScreen) getScreen()).preAssetLoad(); - } else { - throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen."); - } preferences.putInteger("screen-width", width); preferences.putInteger("screen-height", height); preferences.flush(); - resizing = true; - assetManager.clear(); - queueAssets(); + + if (!simpleResizeOnce) { + Gdx.app.debug("Resize", "complex pre-resize is happening. Resizing to " + width + "x" + height); + if (getScreen() instanceof ResizeReadyScreen) { + ((ResizeReadyScreen) getScreen()).preAssetLoad(); + } else { + throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen."); + } + + resizing = true; + assetManager.clear(); + queueAssets(); + } else { + simpleResizeOnce = false; + } super.resize(width, height); } } diff --git a/core/src/zero1hd/rhythmbullet/audio/MusicList.java b/core/src/zero1hd/rhythmbullet/audio/MusicList.java index 7b2b461..3a31d75 100755 --- a/core/src/zero1hd/rhythmbullet/audio/MusicList.java +++ b/core/src/zero1hd/rhythmbullet/audio/MusicList.java @@ -43,11 +43,11 @@ public class MusicList extends Observable { } /** - * Wrapper method that uses async refresh. + * Asynchronous recursive search on music directory. * Also notifies listeners that are on the main thread. * @param refresh does a search whether or not path has changed and whether or not this list has searched before this. */ - public void asyncSearch(boolean refresh) { + public void attemptAsyncSearch(boolean refresh) { if (refresh) { notifyObservers(states.LOADING); if (searchThread != null) { @@ -62,7 +62,7 @@ public class MusicList extends Observable { } } else { if (!searched || hasChanged()) { - asyncSearch(true); + attemptAsyncSearch(true); } } } diff --git a/core/src/zero1hd/rhythmbullet/audio/visualizer/DoubleHorizontalVisualizer.java b/core/src/zero1hd/rhythmbullet/audio/visualizer/DoubleHorizontalVisualizer.java index 0841902..27e9d20 100755 --- a/core/src/zero1hd/rhythmbullet/audio/visualizer/DoubleHorizontalVisualizer.java +++ b/core/src/zero1hd/rhythmbullet/audio/visualizer/DoubleHorizontalVisualizer.java @@ -147,6 +147,10 @@ public class DoubleHorizontalVisualizer implements Disposable { return y; } + public void updateMusic() { + pcm.updateMusic(); + } + @Override public void dispose() { pcm.dispose(); diff --git a/core/src/zero1hd/rhythmbullet/audio/visualizer/PCMSystem.java b/core/src/zero1hd/rhythmbullet/audio/visualizer/PCMSystem.java index 125d981..8bc3761 100755 --- a/core/src/zero1hd/rhythmbullet/audio/visualizer/PCMSystem.java +++ b/core/src/zero1hd/rhythmbullet/audio/visualizer/PCMSystem.java @@ -7,4 +7,6 @@ public interface PCMSystem extends Disposable { float[] getFrequencyBins(); int getWindowSize(); + + void updateMusic(); } \ No newline at end of file diff --git a/core/src/zero1hd/rhythmbullet/util/AssetPack.java b/core/src/zero1hd/rhythmbullet/util/AssetPack.java index a6271f2..d38d5f1 100755 --- a/core/src/zero1hd/rhythmbullet/util/AssetPack.java +++ b/core/src/zero1hd/rhythmbullet/util/AssetPack.java @@ -9,7 +9,7 @@ public interface AssetPack extends Disposable { /** * Called right after the game instance is created and passed to LWJGL. This method is called once for you to instantiate things for later use but require Libgdx functions. */ - public void initiateResources(); + public void initiate(); /** * Game manager calls this when it needs to load textures. diff --git a/core/src/zero1hd/rhythmbullet/util/InitialScreen.java b/core/src/zero1hd/rhythmbullet/util/InitialScreen.java index efeab6f..bc48afc 100755 --- a/core/src/zero1hd/rhythmbullet/util/InitialScreen.java +++ b/core/src/zero1hd/rhythmbullet/util/InitialScreen.java @@ -6,11 +6,12 @@ import zero1hd.rhythmbullet.RhythmBullet; public interface InitialScreen extends ResizeReadyScreen { /** + * Called when everythings loaded and ready to advance. * Screen should be created on platform. * @param gameManager the game manager. * @return the screen that is created. */ - public Screen createMainScreen(RhythmBullet gameManager); + public Screen advance(RhythmBullet gameManager); /** * Immediately called after the LibGDX instance has been instantiated. diff --git a/core/src/zero1hd/rhythmbullet/util/ScreenConfiguration.java b/core/src/zero1hd/rhythmbullet/util/ScreenConfiguration.java index f2aa9f6..4bcab49 100755 --- a/core/src/zero1hd/rhythmbullet/util/ScreenConfiguration.java +++ b/core/src/zero1hd/rhythmbullet/util/ScreenConfiguration.java @@ -26,5 +26,5 @@ public interface ScreenConfiguration { public void setWindowLocation(int x, int y); - public void setWindowBorderless(boolean borderless); + public void queueBorderless(boolean borderless); } diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/DesktopAssetPack.java b/desktop/src/zero1hd/rhythmbullet/desktop/DesktopAssetPack.java index e32e05a..e9bfc0f 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/DesktopAssetPack.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/DesktopAssetPack.java @@ -31,7 +31,7 @@ public class DesktopAssetPack implements AssetPack { private FreeTypeFontGenerator darktech_ldr_fontGenerator; @Override - public void initiateResources() { + public void initiate() { default_fontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/Gasalt-Regular.ttf")); darktech_ldr_fontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/darktech_ldr.ttf")); } diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/DesktopLauncher.java b/desktop/src/zero1hd/rhythmbullet/desktop/DesktopLauncher.java index 02d1a56..eadd3e8 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/DesktopLauncher.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/DesktopLauncher.java @@ -17,6 +17,8 @@ public class DesktopLauncher { config.resizable = false; config.useHDPI = true; config.samples = 2; + config.width = 320; + config.height = 320; config.allowSoftwareMode = true; core = new RhythmBullet(); core.setup(new SplashScreen(), new DesktopAssetPack(), screenConfig); diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/DesktopScreenConfiguration.java b/desktop/src/zero1hd/rhythmbullet/desktop/DesktopScreenConfiguration.java index b37bfae..a5f67d6 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/DesktopScreenConfiguration.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/DesktopScreenConfiguration.java @@ -73,9 +73,7 @@ public class DesktopScreenConfiguration implements ScreenConfiguration { } @Override - public void setWindowBorderless(boolean borderless) { - if (borderless) { - System.setProperty("org.lwjgl.opengl.Window.undecorated", String.valueOf(borderless)); - } + public void queueBorderless(boolean borderless) { + System.setProperty("org.lwjgl.opengl.Window.undecorated", String.valueOf(borderless)); } } diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/audio/PCMObtainer.java b/desktop/src/zero1hd/rhythmbullet/desktop/audio/PCMObtainer.java index 7d4e826..fccd51a 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/audio/PCMObtainer.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/audio/PCMObtainer.java @@ -119,8 +119,9 @@ public class PCMObtainer implements Observer, PCMSystem { } return false; } - - private void setMusic() { + + @Override + public void updateMusic() { Gdx.app.debug("PCMObtainer", "music set."); sourceID = -1; @@ -128,6 +129,8 @@ public class PCMObtainer implements Observer, PCMSystem { sampleRate = mc.getCurrentMusicHeader().getSampleRate(); String millisPerWindowF = df.format(windowSize/(float) sampleRate); millisPerWindow = (long) (Float.valueOf(millisPerWindowF)*1000); + + attemptToSync(); } @Override @@ -223,22 +226,28 @@ public class PCMObtainer implements Observer, PCMSystem { public void update(Observable o, Object arg) { if (o == mc) { if (arg == mc.states.LOADED) { - setMusic(); + updateMusic(); } else if (arg == mc.states.PLAYING) { - if (sourceID == -1) { - try { - Field sourceIDField = ClassReflection.getDeclaredField(OpenALMusic.class, "sourceID"); - sourceIDField.setAccessible(true); - sourceID = (int) sourceIDField.get(mc.getCurrentMusic()); - } catch (ReflectionException e) { - e.printStackTrace(); - } - } - streamReadThread.start(); + attemptToSync(); } } } - + + private void attemptToSync() { + if (mc.isPlaying()) { + if (sourceID == -1) { + try { + Field sourceIDField = ClassReflection.getDeclaredField(OpenALMusic.class, "sourceID"); + sourceIDField.setAccessible(true); + sourceID = (int) sourceIDField.get(mc.getCurrentMusic()); + } catch (ReflectionException e) { + e.printStackTrace(); + } + } + streamReadThread.start(); + } + } + @Override public void dispose() { streamReadThread.stop(); diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/SplashScreen.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/SplashScreen.java index c237ddf..f6d6f1e 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/SplashScreen.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/SplashScreen.java @@ -3,10 +3,8 @@ package zero1hd.rhythmbullet.desktop.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Screen; import com.badlogic.gdx.ScreenAdapter; -import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.graphics.g2d.Sprite; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import zero1hd.rhythmbullet.RhythmBullet; @@ -14,18 +12,13 @@ import zero1hd.rhythmbullet.desktop.screens.main.MainScreen; import zero1hd.rhythmbullet.util.InitialScreen; public class SplashScreen extends ScreenAdapter implements InitialScreen { - private Sprite splashSprite; + private Texture splashTexture; private SpriteBatch batch; - private Color color = new Color(1f, 1f, 1f, 1f); - private float fadeTime = 1.5f; @Override public void init() { batch = new SpriteBatch(); - splashSprite = new Sprite(new Texture(Gdx.files.internal("splashlogo.png"))); - float scale = (Gdx.graphics.getHeight()/3f)/splashSprite.getHeight(); - splashSprite.setSize(scale*splashSprite.getWidth(), scale*splashSprite.getHeight()); - splashSprite.setPosition((Gdx.graphics.getWidth()-splashSprite.getWidth())/2f, (Gdx.graphics.getHeight()-splashSprite.getHeight())/2f); + splashTexture = new Texture(Gdx.files.internal("splash_texture.png")); } @Override @@ -33,10 +26,7 @@ public class SplashScreen extends ScreenAdapter implements InitialScreen { Gdx.gl.glClearColor(1f, 1f, 1f, 1f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); batch.begin(); - float change = delta/fadeTime; - color.a -= change; - splashSprite.setColor(color); - splashSprite.draw(batch); + batch.draw(splashTexture, 0, 0); batch.end(); super.render(delta); @@ -44,7 +34,7 @@ public class SplashScreen extends ScreenAdapter implements InitialScreen { @Override public void hide() { - splashSprite.getTexture().dispose(); + splashTexture.dispose(); super.hide(); } @@ -62,7 +52,7 @@ public class SplashScreen extends ScreenAdapter implements InitialScreen { } @Override - public Screen createMainScreen(RhythmBullet game) { + public Screen advance(RhythmBullet game) { return new MainScreen(game); } } diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainPage.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainPage.java index 3bdcb7a..1b9196b 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainPage.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainPage.java @@ -101,6 +101,12 @@ public class MainPage extends Page implements Observer { scrollText.setWidth(0.5f*getWidth()); scrollText.setPosition(15, getHeight() - scrollText.getHeight()-30f); addActor(scrollText); + + if (mc.getMusicList().isSearched() && amc.isSameSizeMusicList()) { + scrollText.setText("Currently playing: " + amc.getAudioMetadata(mc.getCurrentMusicFileHandle()).getTitle(), null); + dhv.updateMusic(); + } + } @Override @@ -145,7 +151,7 @@ public class MainPage extends Page implements Observer { } } } else if (o == amc) { - if (amc.size() != 0) { + if (amc.isSameSizeMusicList()) { scrollText.setText("Currently playing: " + amc.getAudioMetadata(mc.getCurrentMusicFileHandle()).getTitle(), null); } } else if (o == mc.getMusicList()) { diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java index a59eea7..c6a61cb 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MainScreen.java @@ -44,6 +44,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { private Texture background; private Batch screenBatch; + private boolean resizing; public MainScreen(RhythmBullet core) { this.rhythmBullet = core; @@ -64,19 +65,22 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { public void render(float delta) { Gdx.gl.glClearColor(0f, 0f, 0f, 1f); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); - stage.act(delta); - if (bloomShader != null) { - bloomShader.begin(); - draw(); - bloomShader.end(stage.getWidth(), stage.getHeight()); - } else { - draw(); - } + + if (!resizing) { + stage.act(delta); + if (bloomShader != null) { + bloomShader.begin(); + draw(); + bloomShader.end(stage.getWidth(), stage.getHeight()); + } else { + draw(); + } - if (stage.getCamera().position.x != cameraPosition.x || stage.getCamera().position.y != cameraPosition.y) { - stage.getCamera().position.lerp(cameraPosition, 0.15f); - stage.getViewport().apply(); - } + if (stage.getCamera().position.x != cameraPosition.x || stage.getCamera().position.y != cameraPosition.y) { + stage.getCamera().position.lerp(cameraPosition, 0.15f); + stage.getViewport().apply(); + } + } super.render(delta); } @@ -91,6 +95,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { @Override public void preAssetLoad() { + resizing = true; stage.clear(); if (bloomShader != null) { bloomShader.dispose(); @@ -103,7 +108,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { @Override public void postAssetLoad() { - + resizing = false; bloomShader = new BloomShader(screenBatch); background = rhythmBullet.getAssetManager().get("backgrounds/mainBG.png", Texture.class); @@ -130,7 +135,7 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen { analysisPage = new AnalysisPage(rhythmBullet.getSkin(), listeners.returnToMainPageListener, listeners.confirmedSongListener); stage.addActor(analysisPage); - musicController.getMusicList().asyncSearch(false); + musicController.getMusicList().attemptAsyncSearch(false); } @Override diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java index ca748e0..042cb5b 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/MusicSelectionPage.java @@ -124,6 +124,8 @@ public class MusicSelectionPage extends Page implements Observer { mc.addObserver(this); mc.getMusicList().addObserver(this); selectionLoaderThread = new musicSelectionLoaderThread(); + + musicInfoTable.setToDefault(); } @Override diff --git a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/OptionsPage.java b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/OptionsPage.java index 5840cd4..f227962 100755 --- a/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/OptionsPage.java +++ b/desktop/src/zero1hd/rhythmbullet/desktop/screens/main/OptionsPage.java @@ -93,7 +93,7 @@ public class OptionsPage extends Page { musicSearchTimer -= delta; if (musicSearchTimer <= 0) { musicController.getMusicList().setSearchPath(directoryField.getText()); - musicController.getMusicList().asyncSearch(false); + musicController.getMusicList().attemptAsyncSearch(false); } } super.act(delta);