diff --git a/core/src/zero1hd/polyjet/screens/MainMenu.java b/core/src/zero1hd/polyjet/screens/MainMenu.java index 956384c..d005690 100755 --- a/core/src/zero1hd/polyjet/screens/MainMenu.java +++ b/core/src/zero1hd/polyjet/screens/MainMenu.java @@ -67,7 +67,6 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter { targetPosition.y = 0.5f*Gdx.graphics.getHeight(); } moreOptionsPage.controlUnselect(); - optionsPage.saveOptions(core.prefs); } return super.keyUp(event, keycode); } @@ -93,6 +92,14 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter { super.show(); } + @Override + public void hide() { + if (optionsPage != null) { + optionsPage.saveOptions(core.prefs); + } + super.hide(); + } + @Override public void render(float delta) { Gdx.gl.glClearColor(1f, 1f, 1f, 1f); diff --git a/core/src/zero1hd/polyjet/screens/PreGameScreen.java b/core/src/zero1hd/polyjet/screens/PreGameScreen.java index ab8a9e4..fcf1d11 100755 --- a/core/src/zero1hd/polyjet/screens/PreGameScreen.java +++ b/core/src/zero1hd/polyjet/screens/PreGameScreen.java @@ -32,12 +32,12 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter { private MainMenu mainMenu; - public PreGameScreen(final Polyjet core) { + public PreGameScreen(final Polyjet core, MainMenu mainMenu) { this.core = core; analyzer = new AudioAnalyzer(); rhythmMap = new RhythmMap(analyzer); - mainMenu = (MainMenu) core.getScreen(); + this.mainMenu = mainMenu; stage = new Stage(); diff --git a/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java b/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java index be78548..84577d4 100755 --- a/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java +++ b/core/src/zero1hd/polyjet/ui/builders/MusicSelectable.java @@ -49,6 +49,8 @@ public class MusicSelectable extends Button implements Disposable { super(skin, "info-button"); this.skin = skin; + setName(musicFile.name()); + this.albumCover = defaultAlbumC; if (musicFile.extension().toLowerCase().equals("mp3")) { @@ -57,7 +59,7 @@ public class MusicSelectable extends Button implements Disposable { mp3File = new MP3File(musicFile.file()); durationInSeconds = mp3File.getAudioHeader().getTrackLength(); - if (mp3File.getTag() != null) { + if (mp3File.getTag() != null && mp3File.getTag().getFirstArtwork() != null) { albumWorkBytes = mp3File.getTag().getFirstArtwork().getBinaryData(); } @@ -91,8 +93,8 @@ public class MusicSelectable extends Button implements Disposable { songName = musicFile.nameWithoutExtension(); } - previousTop = musicData.getInteger(songName + ":previous top"); - ratedDifficulty = musicData.getInteger(songName + ":difficulty"); + previousTop = musicData.getInteger(songName + ":previous top", -1); + ratedDifficulty = musicData.getInteger(songName + ":difficulty", -1); if (author == null || author.isEmpty()) { author = "N/A"; @@ -105,7 +107,7 @@ public class MusicSelectable extends Button implements Disposable { defaults().align(Align.top); - add(displayName).fillX().padTop(15f).top(); + add(displayName).expandX().fillX().padTop(15f).top(); row(); String formattedTime = "Run time: "+ String.valueOf(durationInSeconds/60) + ":"; @@ -124,11 +126,11 @@ public class MusicSelectable extends Button implements Disposable { songInfoTable.add(authorLabel).expandY(); songInfoTable.row(); - previousTopLabel = new Label("Previous Top: " + previousTop, skin, "sub-font", skin.getColor("default")); + previousTopLabel = new Label("High Score: " + (previousTop != -1 ? previousTop : "N/A"), skin, "sub-font", skin.getColor("default")); songInfoTable.add(previousTopLabel).center(); songInfoTable.row(); - ratedDifficultyLabel = new Label("Difficulty: " + ratedDifficulty, skin, "sub-font", skin.getColor("default")); + ratedDifficultyLabel = new Label("Difficulty: " + (ratedDifficulty != -1 ? ratedDifficulty : "N/A"), skin, "sub-font", skin.getColor("default")); songInfoTable.add(ratedDifficultyLabel).expandY(); songInfoTable.row(); @@ -148,7 +150,7 @@ public class MusicSelectable extends Button implements Disposable { } Gdx.app.debug("UI", "album cover invalid or null for image: " + songName); } - add(imageIcon).size(246f); + add(imageIcon).prefSize(256f).expandY().center(); } public int getPreviousTop() { diff --git a/core/src/zero1hd/polyjet/ui/builders/ScrollText.java b/core/src/zero1hd/polyjet/ui/builders/ScrollText.java index f1ad146..a9841ac 100755 --- a/core/src/zero1hd/polyjet/ui/builders/ScrollText.java +++ b/core/src/zero1hd/polyjet/ui/builders/ScrollText.java @@ -77,18 +77,21 @@ public class ScrollText extends Widget { @Override public void act(float delta) { - if (scrollOnHover) { - if ((int) textOffset != 0 || currentlyHovering) { + clipBounds.setPosition(getParent().getX()+getX(), getParent().getY()+getY()); + if (fontWidth > clipBounds.getWidth()) { + if (scrollOnHover) { + if ((int) textOffset != 0 || currentlyHovering) { + if (textOffset < -fontWidth) { + textOffset = clipBounds.getWidth(); + } + textOffset -= 60*delta; + } + } else { if (textOffset < -fontWidth) { textOffset = clipBounds.getWidth(); } textOffset -= 60*delta; } - } else { - if (textOffset < -fontWidth) { - textOffset = clipBounds.getWidth(); - } - textOffset -= 60*delta; } super.act(delta); } diff --git a/core/src/zero1hd/polyjet/ui/pages/MainPage.java b/core/src/zero1hd/polyjet/ui/pages/MainPage.java index 6ed5cf1..d9871dd 100755 --- a/core/src/zero1hd/polyjet/ui/pages/MainPage.java +++ b/core/src/zero1hd/polyjet/ui/pages/MainPage.java @@ -14,6 +14,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import zero1hd.polyjet.Polyjet; +import zero1hd.polyjet.screens.MainMenu; import zero1hd.polyjet.screens.PreGameScreen; public class MainPage extends Page { @@ -99,7 +100,7 @@ public class MainPage extends Page { Actions.run(new Runnable() { @Override public void run() { - core.setScreen(new PreGameScreen(core)); + core.setScreen(new PreGameScreen(core, (MainMenu) core.getScreen())); } }), Actions.parallel(Actions.scaleTo(1, 1), Actions.alpha(0.6f)))); } diff --git a/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java b/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java index 9623887..af97592 100755 --- a/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java +++ b/core/src/zero1hd/polyjet/ui/pages/MusicSelectionPage.java @@ -7,9 +7,11 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.actions.Actions; import com.badlogic.gdx.scenes.scene2d.ui.Image; +import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane; import com.badlogic.gdx.scenes.scene2d.ui.Table; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; @@ -20,10 +22,11 @@ import zero1hd.polyjet.screens.MainMenu; import zero1hd.polyjet.ui.builders.MusicSelectable; public class MusicSelectionPage extends Page { - Image loading; + private volatile Image loading; private volatile Table musicChoices; Preferences musicFileAnnotation; private Polyjet core; + private volatile Label status; public MusicSelectionPage(final Polyjet core, final MainMenu mainMenu) { super("Select music", core.defaultSkin); @@ -43,11 +46,16 @@ public class MusicSelectionPage extends Page { addActor(back); loading = new Image(core.defaultSkin, "loading"); - loading.setPosition((getWidth()-loading.getWidth())/2, (getHeight()-loading.getHeight())/2); + loading.setPosition((getWidth()-loading.getWidth())/2, getHeight()-loading.getHeight() - 32f); loading.setOrigin(loading.getWidth()/2, loading.getHeight()/2); loading.addAction(Actions.forever(Actions.rotateBy(-360f, 2f))); addActor(loading); + status = new Label("Loading: ", core.defaultSkin, "sub-font", core.defaultSkin.getColor("default")); + status.setPosition(loading.getX()+loading.getWidth()+12f, loading.getY()-15f); + addActor(status); + + musicChoices = new Table(); musicChoices.defaults().pad(10f); ScrollPane musicChoiceScroller = new ScrollPane(musicChoices); @@ -57,9 +65,7 @@ public class MusicSelectionPage extends Page { @Override public void act(float delta) { - if (musicChoices.hasChildren()) { - loading.remove(); - } + super.act(delta); } @@ -68,7 +74,6 @@ public class MusicSelectionPage extends Page { @Override public void run() { - FileHandle[] musicFiles = new FileHandle(core.prefs.getString("music dir")).list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { @@ -78,17 +83,32 @@ public class MusicSelectionPage extends Page { return false; } }); - for (int music = 0; music < musicFiles.length; music++) { - final MusicSelectable selectable = new MusicSelectable(musicFiles[music], musicFileAnnotation, core.defaultSkin, core.assetManager.get("defaultCover.png", Texture.class)); - Gdx.app.postRunnable(new Runnable() { - @Override - public void run() { - musicChoices.add(selectable).size(256f, 0.8f*getHeight()); - selectable.addInfoToPanel(); - } - }); + + if (musicFiles.length != 0) { + for (int music = 0; music < musicFiles.length; music++) { + final MusicSelectable selectable = new MusicSelectable(musicFiles[music], musicFileAnnotation, core.defaultSkin, core.assetManager.get("defaultCover.png", Texture.class)); + Gdx.app.postRunnable(new Runnable() { + @Override + public void run() { + Gdx.app.debug("Music Search Thread", "Finished loading: " + selectable.getName()); + musicChoices.add(selectable).prefSize(256, 0.8f*getHeight()); + selectable.addInfoToPanel(); + } + }); + System.out.println(music); + int prog = (int) (100f*music/(musicFiles.length-1f)); + status.setText("Loading: " + prog + "%"); + } + + loading.clearActions(); + status.setText("Done!"); + } else { + loading.clearActions(); + status.setText("No music found."); } } }).start(); + + } } diff --git a/core/src/zero1hd/polyjet/ui/pages/OptionsPage.java b/core/src/zero1hd/polyjet/ui/pages/OptionsPage.java index f681596..be26eec 100755 --- a/core/src/zero1hd/polyjet/ui/pages/OptionsPage.java +++ b/core/src/zero1hd/polyjet/ui/pages/OptionsPage.java @@ -45,7 +45,6 @@ public class OptionsPage extends Page { musicVolSlider.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - saveOptions(core.prefs); musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%"); } }); @@ -62,7 +61,6 @@ public class OptionsPage extends Page { fxVolSlider.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - saveOptions(core.prefs); fxVolPercentage.setText(MathUtils.round(fxVolSlider.getValue()) + "%"); } }); @@ -88,7 +86,6 @@ public class OptionsPage extends Page { if (keycode == Keys.ENTER) { Gdx.app.debug("Debug Field", debugCodeField.getText()); if (debugCodeField.getText().equals("creative")) { - saveOptions(core.prefs); Gdx.app.debug("Debug Field", "going to creative test room..."); goToScreen = 1; } @@ -140,10 +137,10 @@ public class OptionsPage extends Page { }); optionsTable.add(graphicsSettings).colspan(2).fill(); - saveOptions(core.prefs); } public void saveOptions(Preferences prefs) { + Gdx.app.debug("Preferences", "Saved all basic options page values."); prefs.putFloat("music vol", musicVolSlider.getValue()); prefs.putFloat("fx vol", fxVolSlider.getValue()); prefs.putString("music dir", directoryField.getText());