music selection screen now changes song; currently playing song is now highlighted on screen open;
This commit is contained in:
parent
6cc9288c13
commit
8cebf891a0
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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<FileHandle> 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;
|
||||
}
|
||||
|
138
core/src/zero1hd/rhythmbullet/audio/MusicListController.java
Executable file
138
core/src/zero1hd/rhythmbullet/audio/MusicListController.java
Executable file
@ -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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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<MusicSelectable> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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<String> fileNames;
|
||||
private List<String> 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);
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user