diff --git a/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java b/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java index c74b225..f039ade 100755 --- a/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java +++ b/core/src/zero1hd/rhythmbullet/audio/Mp3Manager.java @@ -43,12 +43,14 @@ public class Mp3Manager implements MusicManager { private byte[] workset; private int indexHead = -1; + private FileHandle file; ReentrantLock lock = new ReentrantLock(); private ExecutorService exec; private String basicSongName; public Mp3Manager(FileHandle audioFile) { + this.file = audioFile; lock = new ReentrantLock(); this.basicSongName = audioFile.name(); exec = Executors.newSingleThreadExecutor(); @@ -250,4 +252,9 @@ public class Mp3Manager implements MusicManager { public String getBasicSongName() { return basicSongName; } + + @Override + public FileHandle getMusicFile() { + return file; + } } diff --git a/core/src/zero1hd/rhythmbullet/audio/SongList.java b/core/src/zero1hd/rhythmbullet/audio/MusicList.java similarity index 90% rename from core/src/zero1hd/rhythmbullet/audio/SongList.java rename to core/src/zero1hd/rhythmbullet/audio/MusicList.java index bf92e83..11f554e 100755 --- a/core/src/zero1hd/rhythmbullet/audio/SongList.java +++ b/core/src/zero1hd/rhythmbullet/audio/MusicList.java @@ -6,11 +6,11 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; -public class SongList extends Observable { +public class MusicList extends Observable { private Array songList; private String searchPath; private boolean searched; - public SongList() { + public MusicList() { songList = new Array<>(); } @@ -53,7 +53,7 @@ public class SongList extends Observable { return getAudioData(songList.get(index)); } - public int getAmountOfSongs() { + public int getAmountOfMusic() { return songList.size; } diff --git a/core/src/zero1hd/rhythmbullet/audio/MusicListController.java b/core/src/zero1hd/rhythmbullet/audio/MusicListController.java new file mode 100755 index 0000000..2981bbe --- /dev/null +++ b/core/src/zero1hd/rhythmbullet/audio/MusicListController.java @@ -0,0 +1,138 @@ +package zero1hd.rhythmbullet.audio; + +import java.security.InvalidParameterException; +import java.util.Observable; +import java.util.Random; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.Preferences; +import com.badlogic.gdx.audio.Music; +import com.badlogic.gdx.audio.Music.OnCompletionListener; + +public class MusicListController extends Observable implements OnCompletionListener { + private MusicList musicList; + private MusicManager mm; + private int currentPlaybackID; + private boolean autoPlay; + private boolean shuffle; + private Random rand; + + private Preferences prefs; + public MusicListController(MusicList musicList, Preferences prefs) { + if (prefs == null) throw new NullPointerException("preferences can't be null..."); + if (musicList == null) throw new NullPointerException("music list can't be null..."); + if (!musicList.isSearched()) throw new InvalidParameterException("music list has to be searched already."); + + this.prefs = prefs; + this.musicList = musicList; + rand = new Random(); + changeMusic(); + } + + public void play() { + mm.play(); + mm.setVolume(prefs.getFloat("music vol", 1f)); + + } + + public void setMusicByIndex(int index) { + this.currentPlaybackID = index; + changeMusic(); + } + + public void skip() { + currentPlaybackID++; + if (shuffle) { + shuffle(false); + } + changeMusic(); + } + + public void previous() { + currentPlaybackID--; + if (shuffle) { + shuffle(false); + } + changeMusic(); + } + + @Override + public void onCompletion(Music music) { + if (autoPlay) { + if (shuffle) { + if (musicList.getAmountOfMusic() != 0) { + currentPlaybackID = rand.nextInt(musicList.getAmountOfMusic()); + } else { + currentPlaybackID = 0; + } + } else { + currentPlaybackID++; + if (currentPlaybackID > musicList.getAmountOfMusic()) { + currentPlaybackID = 0; + } + } + changeMusic(); + play(); + } + } + + /** + * Shuffles the controller whether the shuffle boolean is true or false. + * @param load whether this method should also make sure to load the music, dispose of the last one, etc. Normally called unless you plan to manually call it elswhere. + */ + public void shuffle(boolean load) { + if (musicList.getAmountOfMusic() == 0) { + currentPlaybackID = 0; + } else { + currentPlaybackID = rand.nextInt(musicList.getAmountOfMusic()); + } + if (load) { + changeMusic(); + } + } + + public void setAutoPlay(boolean autoPlay) { + this.autoPlay = autoPlay; + } + + public void setShuffle(boolean shuffle) { + this.shuffle = shuffle; + } + + public boolean isShuffle() { + return shuffle; + } + + public boolean isAutoPlay() { + return autoPlay; + } + + private void changeMusic() { + if (mm != null) { + mm.dispose(); + } + if (currentPlaybackID < 0) { + currentPlaybackID = musicList.getAmountOfMusic(); + } + this.mm = musicList.getMusicInfoFromIndex(currentPlaybackID); + if (mm == null) { + if (!Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3").exists()) { + Gdx.files.internal("music/Alan Walker - Spectre.mp3").copyTo(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3")); + } + mm = musicList.getAudioData(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3")); + } + mm.setOnCompletionListener(this); + + setChanged(); + notifyObservers(mm); + } + + public MusicList getMusicList() { + return musicList; + } + + + public MusicManager getCurrentMusicManager() { + return mm; + } +} diff --git a/core/src/zero1hd/rhythmbullet/audio/MusicManager.java b/core/src/zero1hd/rhythmbullet/audio/MusicManager.java index f421e8b..c740316 100755 --- a/core/src/zero1hd/rhythmbullet/audio/MusicManager.java +++ b/core/src/zero1hd/rhythmbullet/audio/MusicManager.java @@ -2,6 +2,7 @@ package zero1hd.rhythmbullet.audio; import com.badlogic.gdx.audio.Music.OnCompletionListener; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Disposable; public interface MusicManager extends Disposable { @@ -81,4 +82,9 @@ public interface MusicManager extends Disposable { * @return basic song name */ public String getBasicSongName(); + + /** + * @return the song filehandle. + */ + public FileHandle getMusicFile(); } diff --git a/core/src/zero1hd/rhythmbullet/audio/SongListController.java b/core/src/zero1hd/rhythmbullet/audio/SongListController.java deleted file mode 100755 index ed237b4..0000000 --- a/core/src/zero1hd/rhythmbullet/audio/SongListController.java +++ /dev/null @@ -1,137 +0,0 @@ -package zero1hd.rhythmbullet.audio; - -import java.security.InvalidParameterException; -import java.util.Observable; -import java.util.Random; - -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.Preferences; -import com.badlogic.gdx.audio.Music; -import com.badlogic.gdx.audio.Music.OnCompletionListener; - -public class SongListController extends Observable implements OnCompletionListener { - private SongList songList; - private MusicManager mdp; - private int currentPlaybackID; - private boolean autoPlay; - private boolean shuffle; - private Random rand; - - private Preferences prefs; - public SongListController(SongList songList, Preferences prefs) { - if (prefs == null) throw new NullPointerException("preferences can't be null..."); - if (songList == null) throw new NullPointerException("song list can't be null..."); - if (!songList.isSearched()) throw new InvalidParameterException("Song list has to be searched already."); - - this.prefs = prefs; - this.songList = songList; - rand = new Random(); - changeSong(); - } - - public void play() { - mdp.play(); - mdp.setVolume(prefs.getFloat("music vol", 1f)); - } - - public void setSongByIndex(int index) { - this.currentPlaybackID = index; - changeSong(); - } - - public void skip() { - currentPlaybackID++; - changeSong(); - } - - public void previous() { - currentPlaybackID--; - changeSong(); - } - - @Override - public void onCompletion(Music music) { - if (autoPlay) { - if (shuffle) { - if (songList.getAmountOfSongs() != 0) { - currentPlaybackID = rand.nextInt(songList.getAmountOfSongs()); - } else { - currentPlaybackID = 0; - } - } else { - currentPlaybackID++; - if (currentPlaybackID > songList.getAmountOfSongs()) { - currentPlaybackID = 0; - } - } - changeSong(); - play(); - } - } - - public void shuffle() { - if (songList.getAmountOfSongs() == 0) { - currentPlaybackID = 0; - } else { - currentPlaybackID = rand.nextInt(songList.getAmountOfSongs()); - } - changeSong(); - } - - public void setAutoPlay(boolean autoPlay) { - this.autoPlay = autoPlay; - } - - public void setShuffle(boolean shuffle) { - this.shuffle = shuffle; - } - - public boolean isShuffle() { - return shuffle; - } - - public boolean isAutoPlay() { - return autoPlay; - } - - private void changeSong() { - if (mdp != null) { - mdp.dispose(); - } - - if (shuffle) { - if (songList.getAmountOfSongs() == 0) { - currentPlaybackID = 0; - } else { - currentPlaybackID = rand.nextInt(songList.getAmountOfSongs()); - } - } else { - if (currentPlaybackID > songList.getAmountOfSongs() -1) { - currentPlaybackID = 0; - } - } - if (currentPlaybackID < 0) { - currentPlaybackID = songList.getAmountOfSongs(); - } - this.mdp = songList.getMusicInfoFromIndex(currentPlaybackID); - if (mdp == null) { - if (!Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3").exists()) { - Gdx.files.internal("music/Alan Walker - Spectre.mp3").copyTo(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3")); - } - mdp = songList.getAudioData(Gdx.files.external("RhythmBullet/Alan Walker - Spectre.mp3")); - } - mdp.setOnCompletionListener(this); - - setChanged(); - notifyObservers(mdp); - } - - public SongList getSongList() { - return songList; - } - - - public MusicManager getCurrentSong() { - return mdp; - } -} diff --git a/core/src/zero1hd/rhythmbullet/audio/WAVManager.java b/core/src/zero1hd/rhythmbullet/audio/WAVManager.java index bde92a3..0c35af0 100755 --- a/core/src/zero1hd/rhythmbullet/audio/WAVManager.java +++ b/core/src/zero1hd/rhythmbullet/audio/WAVManager.java @@ -19,9 +19,10 @@ public class WAVManager implements MusicManager { private int currentReadWindowIndex; private Music playbackMusic; WavDecoder decoder; - + private FileHandle file; private String basicSongName; public WAVManager(FileHandle file) { + this.file = file; basicSongName = file.name(); try { decoder = new WavDecoder(file); @@ -134,4 +135,9 @@ public class WAVManager implements MusicManager { public String getBasicSongName() { return basicSongName; } + + @Override + public FileHandle getMusicFile() { + return file; + } } diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicControls.java b/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicControls.java index d6ceb87..ae7b287 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicControls.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicControls.java @@ -7,21 +7,21 @@ import com.badlogic.gdx.scenes.scene2d.ui.ImageButton; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; -import zero1hd.rhythmbullet.audio.SongListController; +import zero1hd.rhythmbullet.audio.MusicListController; public class MusicControls extends HorizontalGroup { - private SongListController sc; + private MusicListController sc; private ImageButton reverse, forward; private CheckBox shuffle, play; private float disableTimer; - public MusicControls(Skin skin, SongListController sc) { + public MusicControls(Skin skin, MusicListController sc) { this.sc = sc; reverse = new ImageButton(skin, "rewind-button"); reverse.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - boolean wasPlaying = sc.getCurrentSong().isPlaying(); + boolean wasPlaying = sc.getCurrentMusicManager().isPlaying(); sc.previous(); if (wasPlaying) { sc.play(); @@ -37,7 +37,7 @@ public class MusicControls extends HorizontalGroup { play = new CheckBox(null, skin, "play-button") { @Override public void act(float delta) { - play.setChecked(sc.getCurrentSong().isPlaying()); + play.setChecked(sc.getCurrentMusicManager().isPlaying()); super.act(delta); } }; @@ -45,9 +45,9 @@ public class MusicControls extends HorizontalGroup { @Override public void changed(ChangeEvent event, Actor actor) { if (play.isChecked()) { - sc.getCurrentSong().play(); + sc.getCurrentMusicManager().play(); } else { - sc.getCurrentSong().pause(); + sc.getCurrentMusicManager().pause(); } } }); @@ -57,7 +57,7 @@ public class MusicControls extends HorizontalGroup { forward.addListener(new ChangeListener() { @Override public void changed(ChangeEvent event, Actor actor) { - boolean wasPlaying = sc.getCurrentSong().isPlaying(); + boolean wasPlaying = sc.getCurrentMusicManager().isPlaying(); sc.skip(); if (wasPlaying) { sc.play(); diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicSelectable.java b/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicSelectable.java index 7e6f032..d1f59bb 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicSelectable.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicSelectable.java @@ -67,7 +67,6 @@ public class MusicSelectable extends WidgetGroup implements Disposable { addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { - msp.deselectAll(); select(); super.clicked(event, x, y); } @@ -125,7 +124,12 @@ public class MusicSelectable extends WidgetGroup implements Disposable { return songInfo.isInvalidMusic(); } + /** + * Selects this panel + * @param updateGlobalSelection whether or not to tell everything that this is selected. Usually true unless you set the global somewhere else. + */ public void select() { + msp.deselectAll(); table.setBackground("holo-pane-down"); selected = true; msp.setCurrentlySelected(this); diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java index f24212a..cb146ec 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MainPage.java @@ -16,7 +16,7 @@ import com.badlogic.gdx.utils.Align; import zero1hd.rhythmbullet.RhythmBullet; import zero1hd.rhythmbullet.audio.MusicManager; -import zero1hd.rhythmbullet.audio.SongListController; +import zero1hd.rhythmbullet.audio.MusicListController; import zero1hd.rhythmbullet.graphics.ui.components.MusicControls; import zero1hd.rhythmbullet.graphics.ui.components.ScrollText; import zero1hd.rhythmbullet.graphics.ui.components.TitleBarVisualizer; @@ -25,7 +25,7 @@ import zero1hd.rhythmbullet.screens.MainMenu; public class MainPage extends Page implements Observer { private Label versionLabel; - private SongListController sc; + private MusicListController sc; private TitleBarVisualizer titleBar; private Table table; private TextButton playButton; @@ -35,7 +35,7 @@ public class MainPage extends Page implements Observer { private MusicControls musicControls; private ScrollText scrollText; - public MainPage(RhythmBullet core, Vector3 targetPosition, SongListController sc, MainMenu mm) { + public MainPage(RhythmBullet core, Vector3 targetPosition, MusicListController sc, MainMenu mm) { this.sc = sc; setTextureBackground(core.getAssetManager().get("gradients.atlas", TextureAtlas.class).findRegion("red-linear")); @@ -120,6 +120,6 @@ public class MainPage extends Page implements Observer { public void updateVisualsForDifferentSong(MusicManager mm) { titleBar.getHvisual().setMM(mm); - scrollText.setText(mm.getBasicSongName(), null); + scrollText.setText("Currently playing: " + mm.getBasicSongName(), null); } } diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MusicSelectionPage.java b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MusicSelectionPage.java index c81db40..36bb9ab 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MusicSelectionPage.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/MusicSelectionPage.java @@ -27,17 +27,18 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.Array; +import zero1hd.rhythmbullet.audio.MusicManager; import zero1hd.rhythmbullet.audio.SongInfo; -import zero1hd.rhythmbullet.audio.SongList; +import zero1hd.rhythmbullet.audio.MusicListController; import zero1hd.rhythmbullet.graphics.ui.components.MusicSelectable; import zero1hd.rhythmbullet.graphics.ui.components.ScrollText; public class MusicSelectionPage extends Page implements Observer { Preferences musicFileAnnotation; - private SongList songList; + private MusicListController mc; private Array selectables; - private Table songTable; + private Table musicTable; private ScrollPane scrollbar; private TextButton back; @@ -61,10 +62,10 @@ public class MusicSelectionPage extends Page implements Observer { private Texture white; private boolean down, up; - private int index; - private float scrollTimer, scrollDelay = 0.2f, scrollDelMod; + private int musicSelectableIndex; + private float scrollTimer, scrollDelay = 0.2f, scrollDelMod, songSelectionTimer; - public MusicSelectionPage(Skin skin, SongList songList, AssetManager assetManager, Vector3 cameraTarget) { + public MusicSelectionPage(Skin skin, MusicListController musicList, AssetManager assetManager, Vector3 cameraTarget) { super("Select music", skin); songInfoTable = new Table(); songTitle = new ScrollText("", null, skin, false, false); @@ -75,12 +76,12 @@ public class MusicSelectionPage extends Page implements Observer { setTextureBackground(assetManager.get("gradients.atlas", TextureAtlas.class).findRegion("red-round")); this.skin = skin; - this.songList = songList; + this.mc = musicList; musicFileAnnotation = Gdx.app.getPreferences("music_file_annotation"); this.assets = assetManager; - songTable = new Table(); - songTable.defaults().spaceBottom(10f); - scrollbar = new ScrollPane(songTable, skin); + musicTable = new Table(); + musicTable.defaults().spaceBottom(10f); + scrollbar = new ScrollPane(musicTable, skin); scrollbar.setSize(0.45f*getWidth(), getHeightBelowTitle()); scrollbar.setFadeScrollBars(false); scrollbar.setOverscroll(false, false); @@ -153,6 +154,7 @@ public class MusicSelectionPage extends Page implements Observer { if (scrollTimer <= 0) { scrollTimer = scrollDelay*scrollDelMod; scrollDown(); + } else { scrollTimer -= delta; } @@ -169,6 +171,13 @@ public class MusicSelectionPage extends Page implements Observer { scrollTimer -= delta; } } + + if (songSelectionTimer > 0f) { + songSelectionTimer -= delta; + if (songSelectionTimer <= 0f) { + playCurrentMusic(); + } + } super.act(delta); } @@ -181,20 +190,20 @@ public class MusicSelectionPage extends Page implements Observer { } public void refresh() { - songTable.clear(); + musicTable.clear(); selectables.clear(); for (int i = 0; i < selectables.size; i++) { selectables.get(i).dispose(); } Gdx.app.debug("MusicSelectionPage", "Refreshing..."); - for (int i = 0; i < songList.getAmountOfSongs(); i++) { + for (int i = 0; i < mc.getMusicList().getAmountOfMusic(); i++) { - MusicSelectable selectable = new MusicSelectable(songList.getSongFileHandleFromIndex(i), musicFileAnnotation, skin, assets.get("defaultCover.png", Texture.class), this); + MusicSelectable selectable = new MusicSelectable(mc.getMusicList().getSongFileHandleFromIndex(i), musicFileAnnotation, skin, assets.get("defaultCover.png", Texture.class), this); selectables.add(selectable); - songTable.add(selectable).expandX().fillX(); - songTable.row(); + musicTable.add(selectable).expandX().fillX(); + musicTable.row(); } ExecutorService exec = Executors.newSingleThreadExecutor(); @@ -230,32 +239,54 @@ public class MusicSelectionPage extends Page implements Observer { public void setCurrentlySelected(MusicSelectable currentlySelected) { this.currentlySelected = currentlySelected; + songSelectionTimer = 1f; } private void scrollDown() { - if ((index = (songTable.getChildren().indexOf(currentlySelected, true) + 1)) == songTable.getChildren().size) { - index = 0; + if ((musicSelectableIndex = (musicTable.getChildren().indexOf(currentlySelected, true) + 1)) == musicTable.getChildren().size) { + musicSelectableIndex = 0; } - deselectAll(); - - ((MusicSelectable)songTable.getChildren().get(index)).select(); + ((MusicSelectable)musicTable.getChildren().get(musicSelectableIndex)).select(); scrollbar.scrollTo(currentlySelected.getX(), currentlySelected.getY(), currentlySelected.getWidth(), currentlySelected.getHeight()); } private void scrollUp() { - if ((index = (songTable.getChildren().indexOf(currentlySelected, true) - 1)) < 0) { - index = songTable.getChildren().size-1; + if ((musicSelectableIndex = (musicTable.getChildren().indexOf(currentlySelected, true) - 1)) < 0) { + musicSelectableIndex = musicTable.getChildren().size-1; } deselectAll(); - - ((MusicSelectable)songTable.getChildren().get(index)).select(); + ((MusicSelectable)musicTable.getChildren().get(musicSelectableIndex)).select(); scrollbar.scrollTo(currentlySelected.getX(), currentlySelected.getY(), currentlySelected.getWidth(), currentlySelected.getHeight()); } @Override public void update(Observable o, Object arg) { - if (o == songList) { - deselectAll(); + MusicManager mm = (MusicManager) arg; + if (o == mc) { + selectSong(mm); + } + } + + public void selectSong(MusicManager mm) { + if (currentlySelected == null || mm.getMusicFile() != currentlySelected.getMusicFile()) { + for (int i = 0; i < selectables.size; i++) { + if (selectables.get(i).getMusicFile() == mm.getMusicFile()) { + selectables.get(i).select(); + musicSelectableIndex = i; + break; + } + } + } + } + + public void playCurrentMusic() { + if (currentlySelected.getMusicFile() != mc.getCurrentMusicManager().getMusicFile()) { + int index = mc.getMusicList().getSongList().indexOf(currentlySelected.getMusicFile(), true); + boolean playing = mc.getCurrentMusicManager().isPlaying(); + mc.setMusicByIndex(index); + if (playing) { + mc.play(); + } } } } diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java index f8012f8..026c71b 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/pages/OptionsPage.java @@ -19,7 +19,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.Align; import zero1hd.rhythmbullet.RhythmBullet; -import zero1hd.rhythmbullet.audio.SongListController; +import zero1hd.rhythmbullet.audio.MusicListController; import zero1hd.rhythmbullet.screens.CreativeScreen; import zero1hd.rhythmbullet.screens.MainMenu; @@ -30,7 +30,7 @@ public class OptionsPage extends Page { private TextField directoryField; private float musicSearchTimer; - public OptionsPage(RhythmBullet core, Vector3 targetPosition, KeybindOptionsPage moreOptionsPage, SongListController sc) { + public OptionsPage(RhythmBullet core, Vector3 targetPosition, KeybindOptionsPage moreOptionsPage, MusicListController sc) { super("General", core.getDefaultSkin()); setTextureBackground(core.getAssetManager().get("gradients.atlas", TextureAtlas.class).findRegion("red-round")); //Back button @@ -62,7 +62,7 @@ public class OptionsPage extends Page { @Override public void changed(ChangeEvent event, Actor actor) { musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%"); - sc.getCurrentSong().setVolume(musicVolSlider.getPercent()); + sc.getCurrentMusicManager().setVolume(musicVolSlider.getPercent()); core.getPrefs().putFloat("music vol", musicVolSlider.getPercent()); } @@ -91,16 +91,16 @@ public class OptionsPage extends Page { Label musicDirectoryLabel = new Label("Music Directory: ", core.getDefaultSkin()); optionsTable.add(musicDirectoryLabel).left(); - Label songCount = new Label("Songs: " + sc.getSongList().getAmountOfSongs(), core.getDefaultSkin(), "sub-font", core.getDefaultSkin().getColor("default")); + Label songCount = new Label("Songs: " + sc.getMusicList().getAmountOfMusic(), core.getDefaultSkin(), "sub-font", core.getDefaultSkin().getColor("default")); directoryField = new TextField(null, core.getDefaultSkin() ) { @Override public void act(float delta) { if (musicSearchTimer > 0) { musicSearchTimer -= delta; if (musicSearchTimer <= 0) { - sc.getSongList().setSearchPath(directoryField.getText()); - sc.getSongList().refresh(); - songCount.setText("Songs: " + sc.getSongList().getAmountOfSongs()); + sc.getMusicList().setSearchPath(directoryField.getText()); + sc.getMusicList().refresh(); + songCount.setText("Songs: " + sc.getMusicList().getAmountOfMusic()); } } super.act(delta); @@ -154,7 +154,7 @@ public class OptionsPage extends Page { Gdx.app.debug("Debug Field", debugCodeField.getText()); if (debugCodeField.getText().equals("creative")) { Gdx.app.debug("Debug Field", "going to creative test room..."); - core.setScreen(new CreativeScreen(core, (MainMenu) core.getScreen(), sc.getSongList())); + core.setScreen(new CreativeScreen(core, (MainMenu) core.getScreen(), sc.getMusicList())); } } return super.keyUp(event, keycode); diff --git a/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicSelector.java b/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicSelector.java index bbc7bec..4bc6bd2 100755 --- a/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicSelector.java +++ b/core/src/zero1hd/rhythmbullet/graphics/ui/windows/MusicSelector.java @@ -12,7 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.badlogic.gdx.utils.Array; import zero1hd.rhythmbullet.audio.MusicManager; -import zero1hd.rhythmbullet.audio.SongList; +import zero1hd.rhythmbullet.audio.MusicList; import zero1hd.rhythmbullet.util.MiniEvents; import zero1hd.rhythmbullet.util.MiniSender; @@ -23,10 +23,10 @@ public class MusicSelector extends Window { Array fileNames; private List musicList; private ScrollPane listScroller; - private SongList songList; + private MusicList songList; public MiniSender miniSender; - public MusicSelector(String title, Skin skin, final String path, SongList songList) { + public MusicSelector(String title, Skin skin, final String path, MusicList songList) { super(title, skin, "tinted"); padTop(25f); padLeft(5f); diff --git a/core/src/zero1hd/rhythmbullet/screens/CreativeScreen.java b/core/src/zero1hd/rhythmbullet/screens/CreativeScreen.java index c5f2da2..1050c2f 100755 --- a/core/src/zero1hd/rhythmbullet/screens/CreativeScreen.java +++ b/core/src/zero1hd/rhythmbullet/screens/CreativeScreen.java @@ -3,7 +3,7 @@ package zero1hd.rhythmbullet.screens; import com.badlogic.gdx.Preferences; import zero1hd.rhythmbullet.RhythmBullet; -import zero1hd.rhythmbullet.audio.SongList; +import zero1hd.rhythmbullet.audio.MusicList; import zero1hd.rhythmbullet.stages.CreativeHUD; public class CreativeScreen extends GameScreen { @@ -11,7 +11,7 @@ public class CreativeScreen extends GameScreen { Preferences prefs; - public CreativeScreen(RhythmBullet core, MainMenu mainMenu, SongList sl) { + public CreativeScreen(RhythmBullet core, MainMenu mainMenu, MusicList sl) { super(core, mainMenu); chud = new CreativeHUD(core, mainMenu, gameArea, gameHUD, sl); inputs.addProcessor(chud); diff --git a/core/src/zero1hd/rhythmbullet/screens/MainMenu.java b/core/src/zero1hd/rhythmbullet/screens/MainMenu.java index 656acb9..42283e9 100755 --- a/core/src/zero1hd/rhythmbullet/screens/MainMenu.java +++ b/core/src/zero1hd/rhythmbullet/screens/MainMenu.java @@ -22,8 +22,8 @@ import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.utils.viewport.ScreenViewport; import zero1hd.rhythmbullet.RhythmBullet; -import zero1hd.rhythmbullet.audio.SongList; -import zero1hd.rhythmbullet.audio.SongListController; +import zero1hd.rhythmbullet.audio.MusicList; +import zero1hd.rhythmbullet.audio.MusicListController; import zero1hd.rhythmbullet.graphics.ui.pages.CreditsPage; import zero1hd.rhythmbullet.graphics.ui.pages.KeybindOptionsPage; import zero1hd.rhythmbullet.graphics.ui.pages.MainPage; @@ -45,7 +45,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ private RhythmBullet core; - private SongListController sc; + private MusicListController mc; private float lerpAlpha; private ShaderProgram gaussianBlurShader; @@ -65,13 +65,13 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ stage = new Stage(new ScreenViewport()); cameraPosition = new Vector3(stage.getCamera().position); - SongList songList = new SongList(); + MusicList songList = new MusicList(); songList.setSearchPath(core.getPrefs().getString("music dir")); songList.refresh(); - sc = new SongListController(songList, core.getPrefs()); - sc.setAutoPlay(true); - sc.setShuffle(true); - sc.shuffle(); + mc = new MusicListController(songList, core.getPrefs()); + mc.setAutoPlay(true); + mc.setShuffle(true); + mc.shuffle(true); postTransition(); } @@ -80,7 +80,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ public void postTransition() { attemptLoadShaders(); - mainPage = new MainPage(core, cameraPosition, sc, this); + mainPage = new MainPage(core, cameraPosition, mc, this); mainPage.setPosition(0, 0); stage.addActor(mainPage); //End main menu @@ -94,7 +94,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ graphicsPage.setPosition(-1f*Gdx.graphics.getWidth(), 1f*Gdx.graphics.getHeight()); stage.addActor(graphicsPage); - optionsPage = new OptionsPage(core, cameraPosition, keybindPage, sc); + optionsPage = new OptionsPage(core, cameraPosition, keybindPage, mc); optionsPage.setPosition(-Gdx.graphics.getWidth(), 0); stage.addActor(optionsPage); @@ -102,7 +102,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ creditsPage.setPosition(0, Gdx.graphics.getHeight()); stage.addActor(creditsPage); - musicSelectionPage = new MusicSelectionPage(core.getDefaultSkin(), sc.getSongList(), core.getAssetManager(), cameraPosition); + musicSelectionPage = new MusicSelectionPage(core.getDefaultSkin(), mc, core.getAssetManager(), cameraPosition); musicSelectionPage.setPosition(1f*Gdx.graphics.getWidth(), 0f); stage.addActor(musicSelectionPage); @@ -131,11 +131,11 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ super.clicked(event, x, y); } }); - sc.deleteObservers(); - sc.addObserver(mainPage); - mainPage.updateVisualsForDifferentSong(sc.getCurrentSong()); - - sc.getSongList().addObserver(this); + mc.deleteObservers(); + mc.addObserver(mainPage); + mc.addObserver(musicSelectionPage); + mainPage.updateVisualsForDifferentSong(mc.getCurrentMusicManager()); + mc.getMusicList().addObserver(this); Gdx.app.debug("Post Transition", "Beginning screen setup for Main menu."); } @@ -293,7 +293,8 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ @Override public void show() { Gdx.input.setInputProcessor(stage); - sc.play(); + mc.play(); + musicSelectionPage.selectSong(mc.getCurrentMusicManager()); calcLerpAlpha(Gdx.graphics.getWidth()); super.show(); } @@ -369,7 +370,7 @@ public class MainMenu extends ScreenAdapter implements TransitionAdapter, Observ @Override public void update(Observable o, Object arg) { - if (o == sc.getSongList()) { + if (o == mc.getMusicList()) { musicSelectionPage.refresh(); } } diff --git a/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java b/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java index b31ee4d..df2bd9b 100755 --- a/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java +++ b/core/src/zero1hd/rhythmbullet/screens/PreGameScreen.java @@ -8,7 +8,7 @@ import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.utils.viewport.ScreenViewport; import zero1hd.rhythmbullet.RhythmBullet; -import zero1hd.rhythmbullet.audio.SongList; +import zero1hd.rhythmbullet.audio.MusicListController; import zero1hd.rhythmbullet.graphics.ui.pages.AnalyzePage; import zero1hd.rhythmbullet.graphics.ui.pages.MusicSelectionPage; import zero1hd.rhythmbullet.util.MiniEvents; @@ -23,13 +23,13 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter, M public AnalyzePage ap; private Vector3 cameraPos; private RhythmBullet core; - private SongList songList; + private MusicListController songListController; - public PreGameScreen(RhythmBullet core, SongList songList) { + public PreGameScreen(RhythmBullet core, MusicListController songList) { stage = new Stage(new ScreenViewport()); cameraPos = new Vector3(stage.getCamera().position); this.core = core; - this.songList = songList; + this.songListController = songList; postTransition(); } @@ -64,7 +64,7 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter, M switch (ID) { case MUSIC_SELECTED: cameraPos.x = 1.5f*Gdx.graphics.getWidth(); - ap.setSong(songList.getAudioData(ms.getSelectedMusic()), ms.getSelectedMusicInfo(), this); + ap.setSong(songListController.getMusicList().getAudioData(ms.getSelectedMusic()), ms.getSelectedMusicInfo(), this); break; case BACK: if (cameraPos.x == 1.5f*Gdx.graphics.getWidth()) { @@ -87,7 +87,7 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter, M @Override public void postTransition() { - ms = new MusicSelectionPage(core.getDefaultSkin(), songList, core.getAssetManager(), cameraPos); + ms = new MusicSelectionPage(core.getDefaultSkin(), songListController, core.getAssetManager(), cameraPos); ms.miniSender.addListener(this); stage.addActor(ms); diff --git a/core/src/zero1hd/rhythmbullet/stages/CreativeHUD.java b/core/src/zero1hd/rhythmbullet/stages/CreativeHUD.java index d661d9f..17b3671 100755 --- a/core/src/zero1hd/rhythmbullet/stages/CreativeHUD.java +++ b/core/src/zero1hd/rhythmbullet/stages/CreativeHUD.java @@ -16,7 +16,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import zero1hd.rhythmbullet.RhythmBullet; import zero1hd.rhythmbullet.audio.AudioAnalyzer; import zero1hd.rhythmbullet.audio.AudioDataPackage; -import zero1hd.rhythmbullet.audio.SongList; +import zero1hd.rhythmbullet.audio.MusicList; import zero1hd.rhythmbullet.audio.map.RhythmMapAlgorithm; import zero1hd.rhythmbullet.graphics.ui.components.AudioGraph; import zero1hd.rhythmbullet.graphics.ui.windows.BeatViewer; @@ -47,7 +47,7 @@ public class CreativeHUD extends Stage implements MiniListener { GamePlayArea gpa; GameHUD ghud; - public CreativeHUD(final RhythmBullet core, final MainMenu mainMenu, final GamePlayArea gpa, GameHUD ghud, SongList sl) { + public CreativeHUD(final RhythmBullet core, final MainMenu mainMenu, final GamePlayArea gpa, GameHUD ghud, MusicList sl) { this.gpa = gpa; this.ghud = ghud;