diff --git a/android/assets/uiskin.atlas b/android/assets/uiskin.atlas index cdee16f..810c86d 100755 --- a/android/assets/uiskin.atlas +++ b/android/assets/uiskin.atlas @@ -12,14 +12,6 @@ check-off orig: 14, 14 offset: 0, 0 index: -1 -textfield - rotate: false - xy: 11, 5 - size: 14, 14 - split: 3, 3, 3, 3 - orig: 14, 14 - offset: 0, 0 - index: -1 check-on rotate: false xy: 125, 35 @@ -28,6 +20,22 @@ check-on orig: 14, 14 offset: 0, 0 index: -1 +check-disabled + rotate: false + xy: 192, 20 + size: 14, 14 + split: 5, 5, 5, 5 + orig: 14, 14 + offset: 0, 0 + index: -1 +textfield + rotate: false + xy: 11, 5 + size: 14, 14 + split: 3, 3, 3, 3 + orig: 14, 14 + offset: 0, 0 + index: -1 cursor rotate: false xy: 23, 1 @@ -224,15 +232,15 @@ white pause rotate: false xy: 1, 50 - size: 44, 44 - orig: 44, 44 + size: 45, 45 + orig: 45, 45 offset: 0, 0 index: -1 pause-down rotate: false - xy: 46, 50 - size: 44, 44 - orig: 44, 44 + xy: 1, 96 + size: 45, 45 + orig: 45, 45 offset: 0, 0 index: -1 bar-fill @@ -267,32 +275,67 @@ left-button-down orig: 12, 20 offset: 0, 0 index: -1 -arrow +play rotate: false - xy: 91, 50 - size: 44, 44 - orig: 44, 44 + xy: 47, 50 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +play-down + rotate: false + xy: 47, 96 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +fast-forward + rotate: false + xy: 93, 50 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +fast-forward-down + rotate: false + xy: 93, 96 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +rewind + rotate: false + xy: 139, 50 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +rewind-down + rotate: false + xy: 139, 96 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +shuffle + rotate: false + xy: 185, 50 + size: 45, 45 + orig: 45, 45 + offset: 0, 0 + index: -1 +shuffle-down + rotate: false; + xy: 185, 96 + size: 45, 45 + orig: 45, 45 offset: 0, 0 index: -1 loading rotate: false; - xy: 136, 50 - size: 44, 44 - orig: 44, 44 - offset: 0, 0 - index: -1 -left-double-arrow - rotate: false; - xy: 1, 95 - size: 21, 21 - orig: 21, 21 - offset: 0, 0 - index: -1 -right-double-arrow - rotate: false; - xy: 23, 95 - size: 21, 21 - orig: 21, 21 + xy: 47, 142 + size: 45, 45 + orig: 45, 45 offset: 0, 0 index: -1 holo-pane diff --git a/android/assets/uiskin.png b/android/assets/uiskin.png index fa5bcfe..67b53ba 100755 Binary files a/android/assets/uiskin.png and b/android/assets/uiskin.png differ diff --git a/core/src/zero1hd/rhythmbullet/RhythmBullet.java b/core/src/zero1hd/rhythmbullet/RhythmBullet.java index 83e5a38..11e0c5d 100755 --- a/core/src/zero1hd/rhythmbullet/RhythmBullet.java +++ b/core/src/zero1hd/rhythmbullet/RhythmBullet.java @@ -1,5 +1,7 @@ package zero1hd.rhythmbullet; +import java.awt.Checkbox; + import com.badlogic.gdx.Application; import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; @@ -20,6 +22,7 @@ import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox.CheckBoxStyle; +import com.badlogic.gdx.scenes.scene2d.ui.ImageButton.ImageButtonStyle; import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle; import com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle; @@ -290,16 +293,39 @@ public class RhythmBullet extends Game { getDefaultSkin().add("default", defaultScrollPane); CheckBoxStyle defaultCheckBox = new CheckBoxStyle(getDefaultSkin().getDrawable("check-off"), getDefaultSkin().getDrawable("check-on"), getDefaultSkin().getFont("window-font"), getDefaultSkin().getColor("default")); + defaultCheckBox.disabled = getDefaultSkin().getDrawable("check-disabled"); getDefaultSkin().add("default", defaultCheckBox); - CheckBoxStyle expandableCheckBox = new CheckBoxStyle(defaultCheckBox); - expandableCheckBox.font = getDefaultSkin().getFont("sub-font"); - getDefaultSkin().add("expandable", expandableCheckBox); - SelectBoxStyle defaultSelectBox = new SelectBoxStyle(getDefaultSkin().getFont("default-font"), getDefaultSkin().getColor("default"), getDefaultSkin().getDrawable("default-select"), defaultScrollPane, defaultList); getDefaultSkin().add("default", defaultSelectBox); Gdx.app.debug("Prelaunch Debug Info", "UI Skin has been defined."); + + CheckBoxStyle playButtonStyle = new CheckBoxStyle(defaultCheckBox); + playButtonStyle.checkboxOn = getDefaultSkin().getDrawable("play-down"); + playButtonStyle.checkboxOff = getDefaultSkin().getDrawable("play"); + getDefaultSkin().add("play-button", playButtonStyle); + + ImageButtonStyle pauseButtonStyle = new ImageButtonStyle(); + pauseButtonStyle.down = getDefaultSkin().getDrawable("pause-down"); + pauseButtonStyle.up = getDefaultSkin().getDrawable("pause"); + getDefaultSkin().add("pause-button", pauseButtonStyle); + + ImageButtonStyle fastForwardButtonStyle = new ImageButtonStyle(); + fastForwardButtonStyle.down = getDefaultSkin().getDrawable("fast-forward-down"); + fastForwardButtonStyle.up = getDefaultSkin().getDrawable("fast-forward"); + getDefaultSkin().add("fast-forward-button", fastForwardButtonStyle); + + ImageButtonStyle reverseButtonStyle = new ImageButtonStyle(); + reverseButtonStyle.down = getDefaultSkin().getDrawable("rewind-down"); + reverseButtonStyle.up = getDefaultSkin().getDrawable("rewind"); + getDefaultSkin().add("rewind-button", reverseButtonStyle); + + CheckBoxStyle shuffleButtonStyle = new CheckBoxStyle(defaultCheckBox); + shuffleButtonStyle.checkboxOff = getDefaultSkin().getDrawable("shuffle"); + shuffleButtonStyle.checkboxOn = getDefaultSkin().getDrawable("shuffle-down"); + getDefaultSkin().add("shuffle-button", shuffleButtonStyle); + } public RoundingResolutionHandler getrRHandler() { diff --git a/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java b/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java index 7fc72d9..1ccae0a 100755 --- a/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java +++ b/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java @@ -209,7 +209,7 @@ public class Mp3Manager implements MusicManager { } @Override - public float getPosition() { + public float getPositionInSeconds() { return playbackMusic.getPosition(); } diff --git a/core/src/zero1hd/rhythmbullet/audio/MusicManager.java b/core/src/zero1hd/rhythmbullet/audio/MusicManager.java index 21cbc1e..ed6c10a 100755 --- a/core/src/zero1hd/rhythmbullet/audio/MusicManager.java +++ b/core/src/zero1hd/rhythmbullet/audio/MusicManager.java @@ -60,8 +60,8 @@ public interface MusicManager extends Disposable { public void play(); public boolean isPlaying(); - - public float getPosition(); + + public float getPositionInSeconds(); public void setPosition(float position); diff --git a/core/src/zero1hd/rhythmbullet/audio/SongListController.java b/core/src/zero1hd/rhythmbullet/audio/SongListController.java index f4e6937..66321b0 100755 --- a/core/src/zero1hd/rhythmbullet/audio/SongListController.java +++ b/core/src/zero1hd/rhythmbullet/audio/SongListController.java @@ -89,7 +89,6 @@ public class SongListController implements OnCompletionListener { public void setShuffle(boolean shuffle) { this.shuffle = shuffle; - shuffle(); } public boolean isShuffle() { @@ -105,6 +104,16 @@ public class SongListController implements OnCompletionListener { mdp.dispose(); } + if (shuffle) { + currentPlaybackID = rand.nextInt(songList.getAmountOfSongs()); + } else { + if (currentPlaybackID > songList.getAmountOfSongs() -1) { + currentPlaybackID = 0; + } + } + if (currentPlaybackID < 0) { + currentPlaybackID = 0; + } this.mdp = songList.getMusicInfoFromIndex(currentPlaybackID); if (mdp == null) { if (!Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3").exists()) { diff --git a/core/src/zero1hd/rhythmbullet/audio/WAVManager.java b/core/src/zero1hd/rhythmbullet/audio/WAVManager.java index a768e80..399704e 100755 --- a/core/src/zero1hd/rhythmbullet/audio/WAVManager.java +++ b/core/src/zero1hd/rhythmbullet/audio/WAVManager.java @@ -104,7 +104,7 @@ public class WAVManager implements MusicManager { } @Override - public float getPosition() { + public float getPositionInSeconds() { return playbackMusic.getPosition(); } diff --git a/core/src/zero1hd/rhythmbullet/audio/visualizer/BasicVisualizer.java b/core/src/zero1hd/rhythmbullet/audio/visualizer/BasicVisualizer.java index 45a994e..5d88e4d 100755 --- a/core/src/zero1hd/rhythmbullet/audio/visualizer/BasicVisualizer.java +++ b/core/src/zero1hd/rhythmbullet/audio/visualizer/BasicVisualizer.java @@ -39,7 +39,7 @@ public class BasicVisualizer extends VisualizerCore { pixmap.setColor(Color.WHITE); pixmap.fill(); barCount = 65; - smoothRange = 2; + smoothRange = 3; angleRot = new Vector2(MathUtils.cosDeg(rotation), MathUtils.sinDeg(rotation)); textures = new Texture[barCount]; bars = new Sprite[barCount]; @@ -110,7 +110,7 @@ public class BasicVisualizer extends VisualizerCore { super.setMM(mm); maxAvgHeight = 0; currentAvg = 0; - float validBins = (5000/((mm.getSampleRate()/2)/((audioPCM.length/2)+1))); + float validBins = (5500/((mm.getSampleRate()/2)/((audioPCM.length/2)+1))); Gdx.app.debug("Visualizer", "valid frequency bins " + validBins); binsPerBar = MathUtils.round((validBins/barCount)); barHeights = new float[barCount]; diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/components/GraphicsOptions.java b/core/src/zero1hd/rhythmbullet/graphics/ui/components/GraphicsOptions.java index 0ad3db3..9dd14db 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/components/GraphicsOptions.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/components/GraphicsOptions.java @@ -37,7 +37,7 @@ public class GraphicsOptions extends Table { add(shaders).fillX(); row(); - glowShader = new CheckBox(" Glow Shader", skin, "expandable"); + glowShader = new CheckBox(" Glow Shader", skin); glowShader.setChecked(prefs.getBoolean("glow shader", true)); glowShader.addListener(new ChangeListener() { @Override @@ -45,12 +45,15 @@ public class GraphicsOptions extends Table { save(); if (glowShader.isChecked()) { mainMenu.loadShaders(); + enhancedGlow.setDisabled(false); } else { mainMenu.unloadShaders(); + enhancedGlow.setChecked(false); + enhancedGlow.setDisabled(true); } } }); - add(glowShader).minHeight(shaders.getHeight()); + add(glowShader); row(); enhancedGlow = new CheckBox(" Enhanced Glow", skin); @@ -66,7 +69,7 @@ public class GraphicsOptions extends Table { } } }); - add(enhancedGlow).minHeight(shaders.getHeight()); + add(enhancedGlow); row(); resolutions = new Label("Resolutions: ", skin); diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/components/TitleBarVisualizer.java b/core/src/zero1hd/rhythmbullet/graphics/ui/components/TitleBarVisualizer.java index 71c66c8..416c0d2 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/components/TitleBarVisualizer.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/components/TitleBarVisualizer.java @@ -33,26 +33,28 @@ public class TitleBarVisualizer extends Group implements Disposable { public TitleBarVisualizer(AssetManager assets) { if (assets == null) throw new NullPointerException("TitleBarVisualizer requires assets manager... ITS NULL YOU FOOL"); visual = new Visualizer(); - visual.getVis().setSpaceBetweenBars(visual.getVis().getBarWidth()-1); + visual.getVis().setSpaceBetweenBars(visual.getVis().getBarWidth()-2); addActor(visual); setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()*0.2f); setPosition(0, (Gdx.graphics.getHeight()-getHeight())/2f); visual.setWidth(getWidth()); visual.setHeight(getHeight()); - visual.setY(-2); visual.getVis().flip(); visual.getVis().reverse(); visual2 = new MirrorVisualizer(); visual.setUpdatePositioning(false); visual.getVis().addMirrorVisualizer(visual2); visual2.setyPos(MathUtils.round(getHeight())); + visual.setY(-2); visual.updateVisualPosition(); Pixmap pixmap = new Pixmap(MathUtils.round(getWidth()), MathUtils.round(getHeight()), Format.RGBA8888); pixmap.setColor(Color.WHITE); pixmap.drawLine(0, 0, pixmap.getWidth(), 0); + pixmap.drawLine(0, 1, pixmap.getWidth(), 1); pixmap.drawLine(0, pixmap.getHeight()-1, pixmap.getWidth(), pixmap.getHeight()-1); + pixmap.drawLine(0, pixmap.getHeight()-2, pixmap.getWidth(), pixmap.getHeight()-2); bgTexture = new Texture(pixmap); pixmap.dispose(); diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/components/Visualizer.java b/core/src/zero1hd/rhythmbullet/graphics/ui/components/Visualizer.java index d6306da..48ac3e0 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/components/Visualizer.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/components/Visualizer.java @@ -34,11 +34,7 @@ public class Visualizer extends Widget { } vis.modify(delta); - vis.setHeight(getHeight()); - vis.setWidth(getWidth()); - vis.setxPos(getX()); - vis.setyPos(getY()); - vis.setRotation(getRotation()); + setVisualizerPosProp(); if (updatePositioning) { vis.updatePositionInfo(); vis.setxPos((getWidth() - vis.getActualWidth())/2f); @@ -65,14 +61,23 @@ public class Visualizer extends Widget { super.setColor(r, g, b, a); } + public void setVisualizerPosProp() { + vis.setHeight(getHeight()); + vis.setWidth(getWidth()); + vis.setxPos(getX()); + vis.setyPos(getY()); + vis.setRotation(getRotation()); + } + public void setUpdatePositioning(boolean updatePositioning) { - vis.updatePositionInfo(); + updateVisualPosition(); vis.setxPos(((vis.getWidth() - vis.getActualWidth())/2f)); - vis.updatePositionInfo(); + updateVisualPosition(); this.updatePositioning = updatePositioning; } public void updateVisualPosition() { + setVisualizerPosProp(); vis.updatePositionInfo(); } diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java index 1d6ecd3..f2a9c78 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java @@ -14,6 +14,7 @@ import zero1hd.rhythmbullet.RhythmBullet; import zero1hd.rhythmbullet.audio.MusicManager; import zero1hd.rhythmbullet.audio.SongListController; import zero1hd.rhythmbullet.events.OnDifferentSongListener; +import zero1hd.rhythmbullet.graphics.ui.components.MusicControls; import zero1hd.rhythmbullet.graphics.ui.components.TitleBarVisualizer; public class MainPage extends Page implements OnDifferentSongListener { @@ -25,6 +26,8 @@ public class MainPage extends Page implements OnDifferentSongListener { private TextButton playButton; private TextButton optionsButton; private TextButton quitButton; + + private MusicControls musicControls; public MainPage(RhythmBullet core, Vector3 targetPosition, SongListController sc) { this.sc = sc; @@ -75,6 +78,10 @@ public class MainPage extends Page implements OnDifferentSongListener { } }); table.add(quitButton).fillX(); + + musicControls = new MusicControls(core.getDefaultSkin(), sc); + musicControls.setPosition((getWidth()-musicControls.getMinWidth() - 20f), getHeight()-musicControls.getMinHeight()); + addActor(musicControls); } @Override diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java index ad19e0a..31028ae 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java @@ -67,7 +67,7 @@ public class OptionsPage extends Page { core.getPrefs().putFloat("music vol", musicVolSlider.getPercent()); } }); - optionsTable.add(musicVolPercentage).center(); + optionsTable.add(musicVolPercentage).left(); optionsTable.row(); @@ -85,13 +85,13 @@ public class OptionsPage extends Page { } }); - optionsTable.add(fxVolPercentage).center(); + optionsTable.add(fxVolPercentage).left(); optionsTable.row(); Label musicDirectoryLabel = new Label("Music Directory: ", core.getDefaultSkin()); optionsTable.add(musicDirectoryLabel).left(); - Label songCount = new Label(": " + sc.getSongList().getAmountOfSongs(), core.getDefaultSkin(), "sub-font", core.getDefaultSkin().getColor("default")); + Label songCount = new Label("Songs: " + sc.getSongList().getAmountOfSongs(), core.getDefaultSkin(), "sub-font", core.getDefaultSkin().getColor("default")); directoryField = new TextField(null, core.getDefaultSkin() ) { @Override public void act(float delta) { @@ -100,7 +100,7 @@ public class OptionsPage extends Page { if (musicSearchTimer <= 0) { sc.getSongList().setSearchPath(directoryField.getText()); sc.getSongList().refresh(); - songCount.setText(": " + sc.getSongList().getAmountOfSongs()); + songCount.setText("Songs: " + sc.getSongList().getAmountOfSongs()); } } super.act(delta); @@ -115,7 +115,7 @@ public class OptionsPage extends Page { } }); optionsTable.add(directoryField).fillX(); - optionsTable.add(songCount); + optionsTable.add(songCount).left(); optionsTable.row(); diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicController.java b/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicController.java index 84a3b82..d68d18a 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicController.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicController.java @@ -34,8 +34,8 @@ public class MusicController extends Window implements OnCompletionListener { @Override public void changed(ChangeEvent event, Actor actor) { - audiofile.setPosition(audiofile.getPosition() - 2); - info.setText(String.valueOf(MathUtils.round(audiofile.getPosition())) + " sec"); + audiofile.setPosition(audiofile.getPositionInSeconds() - 2); + info.setText(String.valueOf(MathUtils.round(audiofile.getPositionInSeconds())) + " sec"); } }); @@ -72,8 +72,8 @@ public class MusicController extends Window implements OnCompletionListener { public void changed(ChangeEvent event, Actor actor) { if (audiofile != null) { audiofile.play(); - audiofile.setPosition(audiofile.getPosition() + 2); - info.setText(String.valueOf(MathUtils.round(audiofile.getPosition())) + " sec"); + audiofile.setPosition(audiofile.getPositionInSeconds() + 2); + info.setText(String.valueOf(MathUtils.round(audiofile.getPositionInSeconds())) + " sec"); } } }); @@ -84,7 +84,7 @@ public class MusicController extends Window implements OnCompletionListener { @Override public void act(float delta) { if (audiofile != null && audiofile.isPlaying()) { - setText(String.valueOf(MathUtils.round(audiofile.getPosition())) + " sec"); + setText(String.valueOf(MathUtils.round(audiofile.getPositionInSeconds())) + " sec"); } super.act(delta); } diff --git a/core/src/zero1hd/rhythmbullet/screens/MainMenu.java b/core/src/zero1hd/rhythmbullet/screens/MainMenu.java index 1e7e9f3..095c67f 100755 --- a/core/src/zero1hd/rhythmbullet/screens/MainMenu.java +++ b/core/src/zero1hd/rhythmbullet/screens/MainMenu.java @@ -66,6 +66,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter { sc = new SongListController(songList, core.getPrefs()); sc.setAutoPlay(true); sc.setShuffle(true); + sc.shuffle(); postTransition(); }