progress on untested framework
This commit is contained in:
parent
590cb39902
commit
45da676d0d
@ -36,7 +36,7 @@ public class RhythmBullet extends Game {
|
||||
private AssetManager assetManager = new AssetManager();
|
||||
private Skin skin;
|
||||
TextureAtlas skinAtlas;
|
||||
private Preferences prefs;
|
||||
private Preferences preferences;
|
||||
private RoundingResolutionHandler rRHandler;
|
||||
private Screen initialScreen;
|
||||
private AssetPack assetPack;
|
||||
@ -58,7 +58,7 @@ public class RhythmBullet extends Game {
|
||||
|
||||
assetPack.initiateResources();
|
||||
|
||||
prefs = Gdx.app.getPreferences("RhythmBullet Preferences");
|
||||
preferences = Gdx.app.getPreferences("RhythmBullet Preferences");
|
||||
|
||||
Resolution[] resolution = {
|
||||
new Resolution(1280, 720, "1280x720"),
|
||||
@ -78,7 +78,7 @@ public class RhythmBullet extends Game {
|
||||
assetManager.setLoader(ParticleEffect.class, new ParticleEffectLoader(genericFileFinder));
|
||||
assetManager.setLoader(Sound.class, new SoundLoader(genericFileFinder));
|
||||
|
||||
rRHandler.setResolution(getPrefs().getInteger("screen-width"), getPrefs().getInteger("screen-height"));
|
||||
rRHandler.setResolution(getPreferences().getInteger("screen-width"), getPreferences().getInteger("screen-height"));
|
||||
|
||||
|
||||
screenWidth = Gdx.graphics.getWidth();
|
||||
@ -86,10 +86,10 @@ public class RhythmBullet extends Game {
|
||||
|
||||
pixels_per_unit = (int) (Float.valueOf(screenHeight)/Float.valueOf(WORLD_HEIGHT));
|
||||
|
||||
if (getPrefs().getBoolean("fullscreen", true)) {
|
||||
if (getPreferences().getBoolean("fullscreen", true)) {
|
||||
Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
|
||||
} else {
|
||||
Gdx.graphics.setWindowedMode(getPrefs().getInteger("screen-width"), getPrefs().getInteger("screen-height"));
|
||||
Gdx.graphics.setWindowedMode(getPreferences().getInteger("screen-width"), getPreferences().getInteger("screen-height"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,9 +161,9 @@ public class RhythmBullet extends Game {
|
||||
} else {
|
||||
throw new IllegalStateException("Cannot perform window resize on a screen that isn't using a resize ready screen.");
|
||||
}
|
||||
prefs.putInteger("screen-width", width);
|
||||
prefs.putInteger("screen-height", height);
|
||||
prefs.flush();
|
||||
preferences.putInteger("screen-width", width);
|
||||
preferences.putInteger("screen-height", height);
|
||||
preferences.flush();
|
||||
resizing = true;
|
||||
assetManager.clear();
|
||||
queueAssets();
|
||||
@ -185,8 +185,8 @@ public class RhythmBullet extends Game {
|
||||
return skin;
|
||||
}
|
||||
|
||||
public Preferences getPrefs() {
|
||||
return prefs;
|
||||
public Preferences getPreferences() {
|
||||
return preferences;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -31,8 +31,12 @@ public class MusicList extends Observable {
|
||||
* Also notifies listeners that are on the main thread.
|
||||
*/
|
||||
public void asyncSearch() {
|
||||
if (!searchThread.start()) {
|
||||
searchThread.stop();
|
||||
searchThread = new RecursiveMusicSearchThread("Music Search Thread");
|
||||
searchThread.start();
|
||||
}
|
||||
}
|
||||
|
||||
public void setSearchPath(String searchPath) {
|
||||
searchThread.setSearchDirectory(Gdx.files.absolute(searchPath));
|
||||
@ -96,6 +100,7 @@ public class MusicList extends Observable {
|
||||
private Thread thread;
|
||||
private String threadName;
|
||||
private FileHandle directory;
|
||||
private volatile boolean work;
|
||||
|
||||
public RecursiveMusicSearchThread(String name) {
|
||||
this.threadName = name;
|
||||
@ -107,23 +112,32 @@ public class MusicList extends Observable {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
musicList = recursiveMusicSearch(directory);
|
||||
Array<FileHandle> obtainedAudioFiles = recursiveMusicSearch(directory);
|
||||
if (work) {
|
||||
musicList = obtainedAudioFiles;
|
||||
searchComplete();
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if (thread == null && !thread.isAlive()) {
|
||||
public boolean start() {
|
||||
if (thread == null) {
|
||||
work = true;
|
||||
thread = new Thread(this, threadName);
|
||||
thread.start();
|
||||
return true;
|
||||
} else {
|
||||
throw new IllegalStateException("Two " + threadName + " instances (threads) were created. This is not allowed for optimization as there is no reason to have two running.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
work = false;
|
||||
}
|
||||
|
||||
private Array<FileHandle> recursiveMusicSearch(FileHandle fileHandle) {
|
||||
Array<FileHandle> musicFiles = new Array<>();
|
||||
FileHandle[] files = fileHandle.list();
|
||||
for (int i = 0; i < files.length; i++) {
|
||||
for (int i = 0; i < files.length && work; i++) {
|
||||
if (files[i].isDirectory()) {
|
||||
musicFiles.addAll(recursiveMusicSearch(files[i]));
|
||||
} else {
|
||||
|
@ -11,7 +11,7 @@ import zero1hd.rhythmbullet.audio.metadata.AudioMetadata;
|
||||
import zero1hd.rhythmbullet.audio.metadata.MP3Metadata;
|
||||
import zero1hd.rhythmbullet.audio.metadata.WAVMetadata;
|
||||
|
||||
public class MusicMetadataController implements Disposable, Observer {
|
||||
public class MusicMetadataController extends Observable implements Disposable, Observer {
|
||||
private MusicList musicList;
|
||||
private Array<AudioMetadata> metadataArray;
|
||||
private MetadataLoadingThread loadingThread;
|
||||
@ -20,6 +20,8 @@ public class MusicMetadataController implements Disposable, Observer {
|
||||
public MusicMetadataController(MusicList musicList) {
|
||||
this.musicList = musicList;
|
||||
metadataArray = new Array<>();
|
||||
loadingThread = new MetadataLoadingThread();
|
||||
musicList.addObserver(this);
|
||||
}
|
||||
|
||||
public MusicList getMusicList() {
|
||||
@ -29,9 +31,13 @@ public class MusicMetadataController implements Disposable, Observer {
|
||||
/**
|
||||
* Non-blocking, loads on separate thread.
|
||||
*/
|
||||
public void loadSongInfo() {
|
||||
public void loadAudioMetadata() {
|
||||
if (!loadingThread.start()) {
|
||||
loadingThread.stop();
|
||||
loadingThread = new MetadataLoadingThread();
|
||||
loadingThread.start();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isDone() {
|
||||
return (metadataArray.size == musicList.getMusicArray().size);
|
||||
@ -66,6 +72,7 @@ public class MusicMetadataController implements Disposable, Observer {
|
||||
private class MetadataLoadingThread implements Runnable {
|
||||
private Thread thread;
|
||||
private String name = "Metadata-Load";
|
||||
private volatile boolean work;
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
@ -74,7 +81,7 @@ public class MusicMetadataController implements Disposable, Observer {
|
||||
metadataArray.get(i).dispose();
|
||||
}
|
||||
metadataArray.clear();
|
||||
for (int i = 0; i < musicList.getTotal(); i++) {
|
||||
for (int i = 0; i < musicList.getTotal() && work; i++) {
|
||||
FileHandle musicFile = musicList.getMusicArray().get(i);
|
||||
synchronized (this) {
|
||||
switch (SupportedFormats.valueOf(musicFile.extension().toUpperCase())) {
|
||||
@ -90,19 +97,32 @@ public class MusicMetadataController implements Disposable, Observer {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (work) {
|
||||
searching = false;
|
||||
notifyObservers();
|
||||
}
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if (thread != null && !thread.isAlive()) {
|
||||
public boolean start() {
|
||||
if (thread == null) {
|
||||
thread = new Thread(this, name);
|
||||
thread.start();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
work = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Observable o, Object arg) {
|
||||
// TODO Auto-generated method stub
|
||||
if (o == musicList) {
|
||||
loadingThread.stop();
|
||||
loadAudioMetadata();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,13 +2,12 @@ package zero1hd.rhythmbullet.audio.analyzer;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.math.MathUtils;
|
||||
import com.badlogic.gdx.utils.Disposable;
|
||||
import com.badlogic.gdx.utils.FloatArray;
|
||||
|
||||
import edu.emory.mathcs.jtransforms.fft.FloatFFT_1D;
|
||||
import zero1hd.rhythmbullet.audio.processor.AudioProcessor;
|
||||
|
||||
public class AudioAnalyzer implements Runnable, Disposable {
|
||||
public class AudioAnalyzer implements Runnable {
|
||||
private Thread thread;
|
||||
private String threadName = "Audio-Analyzer";
|
||||
|
||||
@ -38,15 +37,15 @@ public class AudioAnalyzer implements Runnable, Disposable {
|
||||
private int PUID;
|
||||
private int progress;
|
||||
|
||||
public AudioAnalyzer(AudioProcessor audioProcessor) {
|
||||
this.processor = audioProcessor;
|
||||
}
|
||||
|
||||
public void start() {
|
||||
if (thread == null || !thread.isAlive()) {
|
||||
public boolean start(AudioProcessor processor) {
|
||||
if (thread == null) {
|
||||
this.processor = processor;
|
||||
work = true;
|
||||
thread = new Thread(this, threadName);
|
||||
thread.start();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -283,13 +282,6 @@ public class AudioAnalyzer implements Runnable, Disposable {
|
||||
return progress;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
if (thread != null) {
|
||||
work = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void stop() {
|
||||
work = false;
|
||||
}
|
||||
|
@ -37,7 +37,13 @@ public interface AudioMetadata extends Disposable {
|
||||
*
|
||||
* @return the length of the song with proper fomatting.
|
||||
*/
|
||||
public String getLength();
|
||||
public String getDuration();
|
||||
|
||||
/**
|
||||
*
|
||||
* @return the length of the song in seconds.
|
||||
*/
|
||||
public int getLength();
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -18,7 +18,8 @@ import com.badlogic.gdx.graphics.Pixmap;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
|
||||
public class MP3Metadata implements AudioMetadata {
|
||||
private String title, author, length, genre;
|
||||
private String title, author, duration, genre;
|
||||
private int length;
|
||||
private Texture albumCover;
|
||||
private FileHandle fileHandle;
|
||||
|
||||
@ -38,9 +39,9 @@ public class MP3Metadata implements AudioMetadata {
|
||||
|
||||
|
||||
|
||||
int lenInSec = mp3file.getAudioHeader().getTrackLength();
|
||||
int min = (int) (lenInSec/60);
|
||||
length = (lenInSec/60) + ":" + (lenInSec - (min*60));
|
||||
length = mp3file.getAudioHeader().getTrackLength();
|
||||
int min = (int) (length/60);
|
||||
duration = (length/60) + ":" + (length - (min*60));
|
||||
|
||||
author = tag.getFirst(ID3v23FieldKey.ARTIST);
|
||||
genre = tag.getFirst(ID3v23FieldKey.GENRE);
|
||||
@ -86,7 +87,12 @@ public class MP3Metadata implements AudioMetadata {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getLength() {
|
||||
public String getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
|
@ -17,7 +17,8 @@ import com.badlogic.gdx.graphics.Pixmap;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
|
||||
public class WAVMetadata implements AudioMetadata {
|
||||
private String title, author, length, genre;
|
||||
private String title, author, duration, genre;
|
||||
private int length;
|
||||
private Texture albumCover;
|
||||
private FileHandle fileHandle;
|
||||
|
||||
@ -26,9 +27,9 @@ public class WAVMetadata implements AudioMetadata {
|
||||
|
||||
try {
|
||||
AudioFile wav = AudioFileIO.read(fileHandle.file());
|
||||
int lenInSec = wav.getAudioHeader().getTrackLength();
|
||||
int min = (int) (lenInSec/60);
|
||||
this.length = (lenInSec/60) + ":" + (lenInSec - (min*60));
|
||||
length = wav.getAudioHeader().getTrackLength();
|
||||
int min = (int) (length/60);
|
||||
this.duration = (length/60) + ":" + (length - (min*60));
|
||||
|
||||
Tag tag = wav.getTag();
|
||||
title = tag.getFirst(FieldKey.TITLE);
|
||||
@ -70,9 +71,15 @@ public class WAVMetadata implements AudioMetadata {
|
||||
return title;
|
||||
}
|
||||
@Override
|
||||
public String getLength() {
|
||||
public String getDuration() {
|
||||
return duration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Texture getAlbumCover() {
|
||||
return albumCover;
|
||||
|
74
core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicSelectable.java
Executable file
74
core/src/zero1hd/rhythmbullet/graphics/ui/components/MusicSelectable.java
Executable file
@ -0,0 +1,74 @@
|
||||
package zero1hd.rhythmbullet.graphics.ui.components;
|
||||
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Button;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
|
||||
|
||||
import zero1hd.rhythmbullet.audio.metadata.AudioMetadata;
|
||||
|
||||
public class MusicSelectable extends Button {
|
||||
private Vector2 actualCoords;
|
||||
private Image album;
|
||||
private Table informationTable;
|
||||
private ShortenedLabel name, artist;
|
||||
private Label time;
|
||||
private float timeSinceOnScreen;
|
||||
private AudioMetadata metadata;
|
||||
private Texture defaultAlbumArt;
|
||||
|
||||
|
||||
public MusicSelectable(Skin skin, Texture defaultAlbumArt, AudioMetadata metadata) {
|
||||
super(skin, "music-selectable");
|
||||
this.metadata = metadata;
|
||||
this.defaultAlbumArt = defaultAlbumArt;
|
||||
|
||||
album = new Image(defaultAlbumArt);
|
||||
add(album).expand().left();
|
||||
|
||||
informationTable = new Table();
|
||||
name = new ShortenedLabel(metadata.getTitle(), skin, "default-font", skin.getColor("default"));
|
||||
informationTable.add(name).colspan(2).expandX();
|
||||
informationTable.row();
|
||||
artist = new ShortenedLabel(metadata.getTitle(), skin, "sub-font", skin.getColor("default"));
|
||||
informationTable.add(artist).expandX();
|
||||
time = new Label(metadata.getDuration(), skin, "sub-font", skin.getColor("default"));
|
||||
informationTable.add(time).expandX();
|
||||
add(informationTable).expand().fill();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
actualCoords.x = getX() + getParent().getX();
|
||||
actualCoords.y = getY() + getParent().getY();
|
||||
|
||||
if (actualCoords.y < 0-getHeight() || actualCoords.y > getStage().getHeight() || actualCoords.x < 0-getWidth() || actualCoords.x > getStage().getWidth()) {
|
||||
offScreenAct(delta);
|
||||
} else {
|
||||
onScreenAct(delta);
|
||||
}
|
||||
super.act(delta);
|
||||
}
|
||||
|
||||
public void onScreenAct(float delta) {
|
||||
timeSinceOnScreen = 0;
|
||||
if (metadata.getAlbumCover() == null) {
|
||||
metadata.loadAlbumCover();
|
||||
album.setDrawable(new TextureRegionDrawable(new TextureRegion(metadata.getAlbumCover())));
|
||||
}
|
||||
}
|
||||
|
||||
public void offScreenAct(float delta) {
|
||||
if (metadata.getAlbumCover() != null) {
|
||||
timeSinceOnScreen += delta;
|
||||
if (timeSinceOnScreen >= 2) {
|
||||
metadata.unloadAlbumCover();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -89,6 +89,8 @@ public class ScrollText extends Widget {
|
||||
|
||||
@Override
|
||||
public void layout() {
|
||||
super.layout();
|
||||
|
||||
if (getHeight() < (textHeight+4)) {
|
||||
setHeight(textHeight + 4);
|
||||
}
|
||||
@ -98,7 +100,6 @@ public class ScrollText extends Widget {
|
||||
if (text1Width < clipBounds.getWidth()) {
|
||||
text1Offset = (clipBounds.getWidth()-text1Width)/2f;
|
||||
}
|
||||
super.layout();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -3,34 +3,37 @@ package zero1hd.rhythmbullet.graphics.ui.components;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.g2d.BitmapFont;
|
||||
import com.badlogic.gdx.graphics.g2d.GlyphLayout;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
|
||||
public class ShortenedTextLabel extends Label {
|
||||
public class ShortenedLabel extends Label {
|
||||
private String originalText;
|
||||
private int targetWidth;
|
||||
private GlyphLayout gl;
|
||||
private BitmapFont font;
|
||||
private Vector2 size;
|
||||
|
||||
public ShortenedTextLabel(CharSequence text, Skin skin, String fontName, Color color) {
|
||||
super(text, skin, fontName, color);
|
||||
public ShortenedLabel(CharSequence text, Skin skin, String fontName, Color color) {
|
||||
super(null, skin, fontName, color);
|
||||
originalText = text.toString();
|
||||
font = skin.getFont(fontName);
|
||||
if (text != null) {
|
||||
gl = new GlyphLayout(skin.getFont(fontName), text);
|
||||
}
|
||||
}
|
||||
size = new Vector2();
|
||||
|
||||
public void setTargetWidth(int targetWidth) {
|
||||
this.targetWidth = targetWidth;
|
||||
setWrap(true);
|
||||
}
|
||||
|
||||
public void resize() {
|
||||
setToOriginalText();
|
||||
while (gl.width > targetWidth && (getText().length - 4) > 0) {
|
||||
setText(getText().substring(0, getText().length - 4).concat("..."));
|
||||
gl.setText(font, getText());
|
||||
String text = getText().toString();
|
||||
while (gl.width > targetWidth && (text.length() - 4) > 0) {
|
||||
text = text.substring(0, text.length() - 4).concat("...");
|
||||
gl.setText(font, text);
|
||||
}
|
||||
setText(text);
|
||||
}
|
||||
|
||||
public void setToOriginalText() {
|
||||
@ -41,6 +44,10 @@ public class ShortenedTextLabel extends Label {
|
||||
@Override
|
||||
public void layout() {
|
||||
super.layout();
|
||||
size.x = getWidth();
|
||||
size.y = getHeight();
|
||||
targetWidth = (int) getStage().stageToScreenCoordinates(size).x;
|
||||
resize();
|
||||
}
|
||||
|
||||
public void setOriginalText(String originalText) {
|
@ -11,6 +11,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.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle;
|
||||
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;
|
||||
@ -170,6 +171,11 @@ public class DesktopAssetPack implements AssetPack {
|
||||
shuffleButtonStyle.checkboxOff = skin.getDrawable("shuffle");
|
||||
shuffleButtonStyle.checkboxOn = skin.getDrawable("shuffle-down");
|
||||
skin.add("shuffle-button", shuffleButtonStyle);
|
||||
|
||||
ButtonStyle musicSelectable = new ButtonStyle();
|
||||
musicSelectable.checked = skin.getDrawable("holo-pane-down");
|
||||
musicSelectable.up = skin.getDrawable("holo-pane");
|
||||
skin.add("music-selectable", musicSelectable);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -26,7 +26,7 @@ public class GraphicsOptions extends Table {
|
||||
_1366x768;
|
||||
|
||||
|
||||
public GraphicsOptions(Skin skin, final Preferences prefs) {
|
||||
public GraphicsOptions(Skin skin, final Preferences prefs, ChangeListener bloomLevelSliderListener) {
|
||||
align(Align.center);
|
||||
defaults().space(10f);
|
||||
this.prefs = prefs;
|
||||
@ -35,8 +35,9 @@ public class GraphicsOptions extends Table {
|
||||
row();
|
||||
|
||||
glowShaderLevel = new Slider(0, 4, 1, false, skin);
|
||||
glowShaderLevel.setValue(prefs.getInteger("glow shader"));
|
||||
add(glowShaderLevel).fillX();
|
||||
glowShaderLevel.addListener(bloomLevelSliderListener);
|
||||
glowShaderLevel.setValue(prefs.getInteger("glow shader"));
|
||||
|
||||
row();
|
||||
|
||||
@ -95,7 +96,8 @@ public class GraphicsOptions extends Table {
|
||||
prefs.putInteger("glow shader", (int) glowShaderLevel.getValue());
|
||||
}
|
||||
|
||||
public Slider getGlowLevelSlider() {
|
||||
return glowShaderLevel;
|
||||
public int getBloomShaderLevel() {
|
||||
return (int) glowShaderLevel.getValue();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,118 +0,0 @@
|
||||
package zero1hd.rhythmbullet.desktop.graphics.ui.components;
|
||||
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.WidgetGroup;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
||||
import com.badlogic.gdx.utils.Disposable;
|
||||
|
||||
import zero1hd.rhythmbullet.audio.MusicInfo;
|
||||
import zero1hd.rhythmbullet.desktop.screens.main.MusicSelectionPage;
|
||||
import zero1hd.rhythmbullet.graphics.ui.components.ShortenedTextLabel;
|
||||
|
||||
public class MusicSelectable extends WidgetGroup implements Disposable {
|
||||
private Table table;
|
||||
|
||||
private ShortenedTextLabel displayName;
|
||||
|
||||
private boolean selected;
|
||||
|
||||
private MusicSelectionPage msp;
|
||||
private MusicInfo musicInfo;
|
||||
|
||||
private FileHandle musicFile;
|
||||
|
||||
public MusicSelectable(FileHandle musicFile, Skin skin, MusicSelectionPage msp) {
|
||||
this.musicFile = musicFile;
|
||||
table = new Table(skin);
|
||||
table.setBackground("holo-pane");
|
||||
table.setFillParent(true);
|
||||
this.msp = msp;
|
||||
setName(musicFile.nameWithoutExtension());
|
||||
table.defaults().pad(5f).space(15f).expandX();
|
||||
|
||||
displayName = new ShortenedTextLabel(musicFile.nameWithoutExtension().replace('_', ' '), skin, "sub-font", skin.getColor("default"));
|
||||
table.add(displayName);
|
||||
|
||||
table.pack();
|
||||
addActor(table);
|
||||
addListener(new ClickListener() {
|
||||
@Override
|
||||
public void clicked(InputEvent event, float x, float y) {
|
||||
select();
|
||||
super.clicked(event, x, y);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* updates the UI side of information.
|
||||
* needs to be called in thread with gl context.
|
||||
* @param musicInfo the music information for this song.
|
||||
*/
|
||||
public void updateInfo(MusicInfo musicInfo) {
|
||||
this.musicInfo = musicInfo;
|
||||
displayName.setOriginalText(musicInfo.getMusicName());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void layout() {
|
||||
displayName.setTargetWidth((int) (getWidth()*0.8f));
|
||||
displayName.resize();
|
||||
super.layout();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Batch batch, float parentAlpha) {
|
||||
super.draw(batch, parentAlpha);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
super.act(delta);
|
||||
}
|
||||
|
||||
public boolean isMusicInvalid() {
|
||||
return musicInfo.isInvalidMusic();
|
||||
}
|
||||
|
||||
/**
|
||||
* Selects this panel
|
||||
*/
|
||||
public void select() {
|
||||
msp.deselectAll();
|
||||
table.setBackground("holo-pane-down");
|
||||
selected = true;
|
||||
msp.setCurrentlySelected(this);
|
||||
}
|
||||
|
||||
public void deselect() {
|
||||
table.setBackground("holo-pane");
|
||||
selected = false;
|
||||
}
|
||||
|
||||
public boolean isSelected() {
|
||||
return selected;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getPrefHeight() {
|
||||
return table.getMinHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
public FileHandle getMusicFile() {
|
||||
return musicFile;
|
||||
}
|
||||
|
||||
public MusicInfo getMusicInfo() {
|
||||
return musicInfo;
|
||||
}
|
||||
}
|
@ -12,7 +12,7 @@ import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
|
||||
public class ResolutionButton extends TextButton {
|
||||
|
||||
public ResolutionButton(final int width, final int height, Skin skin, final Preferences prefs) {
|
||||
public ResolutionButton(int width, int height, Skin skin, Preferences prefs) {
|
||||
super(width + "x" + height, skin);
|
||||
|
||||
Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
|
||||
|
@ -1,6 +1,5 @@
|
||||
package zero1hd.rhythmbullet.desktop.screens.main;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.math.Vector3;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
@ -12,15 +11,14 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
|
||||
import zero1hd.rhythmbullet.RhythmBullet;
|
||||
import zero1hd.rhythmbullet.audio.analyzer.AudioAnalyzer;
|
||||
import zero1hd.rhythmbullet.audio.metadata.AudioMetadata;
|
||||
import zero1hd.rhythmbullet.audio.processor.AudioProcessor;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.pages.Page;
|
||||
import zero1hd.rhythmbullet.desktop.screens.GameScreen;
|
||||
|
||||
public class AnalysisPage extends Page {
|
||||
private boolean confirmed;
|
||||
private TextButton backButton;
|
||||
private AudioAnalyzer aa;
|
||||
private AudioAnalyzer audioAnalyzer;
|
||||
private Table table;
|
||||
private Table adjustment;
|
||||
private Label difficultyModLabel, healthModLabel, speedModLabel;
|
||||
@ -29,17 +27,14 @@ public class AnalysisPage extends Page {
|
||||
private Label progressLabel;
|
||||
private TextButton confirmButton;
|
||||
private Image albumArt;
|
||||
private RhythmBullet core;
|
||||
|
||||
public AnalysisPage(MainScreen mainScreen) {
|
||||
public AnalysisPage(Skin skin, ChangeListener backButtonListener, ChangeListener confirmedButtonListener) {
|
||||
super(2, 0);
|
||||
table = new Table();
|
||||
table.setFillParent(true);
|
||||
table.defaults().space(10f);
|
||||
addActor(table);
|
||||
this.core = mainScreen.rhythmBullet;
|
||||
adjustment = new Table();
|
||||
Skin skin = core.getSkin();
|
||||
|
||||
difficultyModLabel = new Label("Difficulty Modifier: ", skin, "sub-font", skin.getColor("default"));
|
||||
difficultyModifierSlider = new Slider(1, 3, 0.5f, false, skin);
|
||||
@ -85,7 +80,6 @@ public class AnalysisPage extends Page {
|
||||
confirmButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
confirmed = true;
|
||||
confirmButton.setDisabled(true);
|
||||
speedModifierSlider.setDisabled(true);
|
||||
healthModifierSlider.setDisabled(true);
|
||||
@ -94,6 +88,7 @@ public class AnalysisPage extends Page {
|
||||
progressLabel.setText("Loading...");
|
||||
}
|
||||
});
|
||||
confirmButton.addListener(confirmedButtonListener);
|
||||
|
||||
adjustment.add(confirmButton).colspan(3).fillX();
|
||||
adjustment.row();
|
||||
@ -101,49 +96,40 @@ public class AnalysisPage extends Page {
|
||||
adjustment.add(progressLabel).colspan(2).left().spaceTop(20f);
|
||||
|
||||
backButton = new TextButton("Cancel", skin);
|
||||
backButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.musicSelectionPage);
|
||||
aa.dispose();
|
||||
}
|
||||
});
|
||||
backButton.addListener(backButtonListener);
|
||||
backButton.setPosition(15, getHeight()-backButton.getHeight()-25);
|
||||
addActor(backButton);
|
||||
|
||||
audioAnalyzer = new AudioAnalyzer();
|
||||
}
|
||||
|
||||
public void processSong(MusicManager mm, Texture albumCover, MusicInfo mi) {
|
||||
public void processSong(AudioProcessor mm, Texture albumCover, AudioMetadata metadata) {
|
||||
this.albumArt = new Image(albumCover);
|
||||
confirmButton.setDisabled(false);
|
||||
speedModifierSlider.setDisabled(false);
|
||||
healthModifierSlider.setDisabled(false);
|
||||
difficultyModifierSlider.setDisabled(false);
|
||||
|
||||
table.clear();
|
||||
table.add(this.albumArt).size(adjustment.getMinHeight());
|
||||
table.row();
|
||||
table.add(adjustment);
|
||||
if (aa != null) {
|
||||
aa.dispose();
|
||||
}
|
||||
|
||||
aa = new AudioAnalyzer(mm);
|
||||
aa.start();
|
||||
if (!audioAnalyzer.start(mm)) {
|
||||
audioAnalyzer.stop();
|
||||
audioAnalyzer = new AudioAnalyzer();
|
||||
audioAnalyzer.start(mm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
if (aa != null && aa.isDone()) {
|
||||
if (confirmed) {
|
||||
core.setScreen(new GameScreen(core.getAssetManager(), core.getPrefs()));
|
||||
}
|
||||
}
|
||||
super.act(delta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
aa.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCameraPositionToPage(Vector3 cameraPosition) {
|
||||
confirmButton.setDisabled(false);
|
||||
speedModifierSlider.setDisabled(false);
|
||||
healthModifierSlider.setDisabled(false);
|
||||
difficultyModifierSlider.setDisabled(false);
|
||||
|
||||
super.setCameraPositionToPage(cameraPosition);
|
||||
}
|
||||
}
|
||||
|
@ -1,37 +1,32 @@
|
||||
package zero1hd.rhythmbullet.desktop.screens.main;
|
||||
|
||||
import com.badlogic.gdx.Preferences;
|
||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.components.GraphicsOptions;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.pages.Page;
|
||||
|
||||
public class GraphicsOptionsPage extends Page {
|
||||
public class GraphicsPage extends Page {
|
||||
private ScrollPane scrollPane;
|
||||
private GraphicsOptions graphicsTable;
|
||||
private TextButton backButton;
|
||||
|
||||
public GraphicsOptionsPage(MainScreen mainScreen) {
|
||||
public GraphicsPage(Skin skin, Preferences preferences, ChangeListener backButtonListener, ChangeListener bloomLevelSliderListener) {
|
||||
super(-1, 1);
|
||||
graphicsTable = new GraphicsOptions(mainScreen.rhythmBullet.getSkin(), mainScreen.rhythmBullet.getPrefs());
|
||||
scrollPane = new ScrollPane(graphicsTable, mainScreen.rhythmBullet.getSkin());
|
||||
graphicsTable = new GraphicsOptions(skin, preferences, bloomLevelSliderListener);
|
||||
scrollPane = new ScrollPane(graphicsTable, skin);
|
||||
scrollPane.setFadeScrollBars(false);
|
||||
scrollPane.setFillParent(true);
|
||||
addActor(scrollPane);
|
||||
|
||||
backButton = new TextButton("Back", mainScreen.rhythmBullet.getSkin());
|
||||
backButton = new TextButton("Back", skin);
|
||||
backButton.setPosition(10, getHeight() - 10 - backButton.getHeight());
|
||||
backButton.setWidth(backButton.getWidth() + 20);
|
||||
backButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.optionsPage);
|
||||
}
|
||||
});
|
||||
backButton.addListener(backButtonListener);
|
||||
|
||||
addActor(backButton);
|
||||
}
|
||||
@ -50,7 +45,7 @@ public class GraphicsOptionsPage extends Page {
|
||||
graphicsTable.save();
|
||||
}
|
||||
|
||||
public Slider getGlowLevelSlider() {
|
||||
return graphicsTable.getGlowLevelSlider();
|
||||
public int getBloomLevel() {
|
||||
return graphicsTable.getBloomShaderLevel();
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package zero1hd.rhythmbullet.desktop.screens.main;
|
||||
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.assets.AssetManager;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
|
||||
@ -8,27 +9,21 @@ import zero1hd.rhythmbullet.controls.KeyMap;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.components.ControlOptions;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.pages.Page;
|
||||
|
||||
public class KeybindOptionsPage extends Page {
|
||||
public class KeybindPage extends Page {
|
||||
private ControlOptions controlTable;
|
||||
private KeyMap keyMap;
|
||||
private TextButton backButton;
|
||||
public KeybindOptionsPage(MainScreen mainScreen) {
|
||||
public KeybindPage(AssetManager assetManager, Skin skin, ChangeListener backButtonListener) {
|
||||
super(-1, -1);
|
||||
keyMap = new KeyMap(mainScreen.rhythmBullet.getAssetManager());
|
||||
controlTable = new ControlOptions(mainScreen.rhythmBullet.getSkin(), keyMap);
|
||||
keyMap = new KeyMap(assetManager);
|
||||
controlTable = new ControlOptions(skin, keyMap);
|
||||
|
||||
addActor(controlTable);
|
||||
|
||||
backButton = new TextButton("Back", mainScreen.rhythmBullet.getSkin());
|
||||
backButton = new TextButton("Back", skin);
|
||||
backButton.setPosition(10, getHeight() - 10 - backButton.getHeight());
|
||||
backButton.setWidth(backButton.getWidth() + 20);
|
||||
backButton.addListener(new ChangeListener() {
|
||||
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.optionsPage);
|
||||
}
|
||||
});
|
||||
backButton.addListener(backButtonListener);
|
||||
|
||||
addActor(backButton);
|
||||
}
|
@ -4,11 +4,13 @@ import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.assets.AssetManager;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
@ -37,22 +39,19 @@ public class MainPage extends Page implements Observer {
|
||||
|
||||
private DoubleHorizontalVisualizer dhv;
|
||||
|
||||
private RhythmBullet rhythmBullet;
|
||||
public MainPage(MainScreen mainScreen) {
|
||||
public MainPage(MusicController musicController, AssetManager assetManager, Skin skin, ChangeListener playButtonListener, ChangeListener optionsButtonListener) {
|
||||
super(0, 0);
|
||||
this.mc = mainScreen.musicController;
|
||||
this.rhythmBullet = mainScreen.rhythmBullet;
|
||||
this.mc = musicController;
|
||||
|
||||
dhv = new DoubleHorizontalVisualizer(70, (int) getWidth(), (int) (getHeight()*0.3), 0.3f, mc);
|
||||
dhv.setPosition(0, (int) ((getHeight() - dhv.getHeight())/2f));
|
||||
|
||||
title = new Image(rhythmBullet.getAssetManager().get("title.png", Texture.class));
|
||||
title = new Image(assetManager.get("title.png", Texture.class));
|
||||
title.setScale(dhv.getHeight()/title.getHeight());
|
||||
title.setPosition((getWidth()-title.getWidth())/2f, (getHeight()-title.getHeight())/2f);
|
||||
addActor(title);
|
||||
|
||||
versionLabel = new Label("Version: " + RhythmBullet.VERSION, rhythmBullet.getSkin(), "sub-font",
|
||||
rhythmBullet.getSkin().getColor("default"));
|
||||
versionLabel = new Label("Version: " + RhythmBullet.VERSION, skin, "sub-font");
|
||||
versionLabel.setPosition(3, 3);
|
||||
addActor(versionLabel);
|
||||
|
||||
@ -61,30 +60,19 @@ public class MainPage extends Page implements Observer {
|
||||
menuTable.align(Align.center);
|
||||
menuTable.defaults().space(10f);
|
||||
addActor(menuTable);
|
||||
playButton = new TextButton("Start!", rhythmBullet.getSkin());
|
||||
playButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.musicSelectionPage);
|
||||
getStage().setKeyboardFocus(mainScreen.musicSelectionPage);
|
||||
}
|
||||
});
|
||||
playButton = new TextButton("Start!", skin);
|
||||
playButton.addListener(playButtonListener);
|
||||
menuTable.add(playButton).width(Gdx.graphics.getWidth()*0.2f);
|
||||
|
||||
menuTable.row();
|
||||
|
||||
optionsButton = new TextButton("Options", rhythmBullet.getSkin(), "sub");
|
||||
optionsButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.optionsPage);
|
||||
}
|
||||
});
|
||||
optionsButton = new TextButton("Options", skin, "sub");
|
||||
optionsButton.addListener(optionsButtonListener);
|
||||
menuTable.add(optionsButton).fillX();
|
||||
|
||||
menuTable.row();
|
||||
|
||||
quitButton = new TextButton("Quit", rhythmBullet.getSkin(), "sub");
|
||||
quitButton = new TextButton("Quit", skin, "sub");
|
||||
quitButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
@ -93,11 +81,11 @@ public class MainPage extends Page implements Observer {
|
||||
});
|
||||
menuTable.add(quitButton).fillX();
|
||||
|
||||
musicControls = new MusicControls(rhythmBullet.getSkin(), mc);
|
||||
musicControls = new MusicControls(skin, mc);
|
||||
musicControls.setPosition((getWidth()-musicControls.getMinWidth() - 20f), getHeight()-musicControls.getMinHeight()-20f);
|
||||
addActor(musicControls);
|
||||
|
||||
scrollText = new ScrollText("...", "...", rhythmBullet.getSkin(), false, true);
|
||||
scrollText = new ScrollText("...", "...", skin, false, true);
|
||||
scrollText.setWidth(0.5f*getWidth());
|
||||
scrollText.setPosition(15, getHeight() - scrollText.getHeight()-25f);
|
||||
addActor(scrollText);
|
||||
|
@ -28,19 +28,20 @@ import zero1hd.rhythmbullet.util.ResizeReadyScreen;
|
||||
public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
private Stage stage;
|
||||
private Vector3 cameraPosition;
|
||||
private Listeners listeners;
|
||||
|
||||
protected MainPage mainPage;
|
||||
protected OptionsPage optionsPage;
|
||||
protected CreditsPage creditsPage;
|
||||
protected KeybindOptionsPage keybindPage;
|
||||
protected GraphicsOptionsPage graphicsPage;
|
||||
protected MusicSelectionPage musicSelectionPage;
|
||||
protected AnalysisPage analysisPage;
|
||||
private MainPage mainPage;
|
||||
private OptionsPage optionsPage;
|
||||
private KeybindPage keybindPage;
|
||||
private GraphicsPage graphicsPage;
|
||||
private CreditsPage creditsPage;
|
||||
private MusicSelectionPage musicSelectionPage;
|
||||
private AnalysisPage analysisPage;
|
||||
|
||||
protected MusicController musicController;
|
||||
protected MusicMetadataController musicMetadataController;
|
||||
private MusicController musicController;
|
||||
private MusicMetadataController musicMetadataController;
|
||||
|
||||
protected RhythmBullet rhythmBullet;
|
||||
private RhythmBullet rhythmBullet;
|
||||
|
||||
private BloomShader bloomShader;
|
||||
|
||||
@ -56,12 +57,14 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
cameraPosition = new Vector3(stage.getCamera().position);
|
||||
|
||||
MusicList musicList = new MusicList(new DesktopAudioProcessorFactory());
|
||||
musicList.setSearchPath(core.getPrefs().getString("music dir"));
|
||||
musicController = new MusicController(musicList, core.getPrefs());
|
||||
musicList.setSearchPath(core.getPreferences().getString("music dir"));
|
||||
musicController = new MusicController(musicList, core.getPreferences());
|
||||
musicController.setAutoPlay(true);
|
||||
musicController.setShuffle(true);
|
||||
|
||||
musicMetadataController = new MusicMetadataController(musicList);
|
||||
|
||||
listeners = new Listeners();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -114,47 +117,32 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
background = rhythmBullet.getAssetManager().get("backgrounds/mainBG.png", Texture.class);
|
||||
screenBatch = new SpriteBatch();
|
||||
|
||||
mainPage = new MainPage(this);
|
||||
|
||||
|
||||
mainPage = new MainPage(musicController, rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), listeners.musicSelectionPageButtonListener, listeners.optionsPageButtonListener);
|
||||
stage.addActor(mainPage);
|
||||
//End main menu
|
||||
|
||||
optionsPage = new OptionsPage(this);
|
||||
optionsPage = new OptionsPage(musicController, rhythmBullet.getSkin(), rhythmBullet.getPreferences(), listeners.returnToMainPageListener, listeners.graphicsPageButtonListener, listeners.keybindPageButtonListener);
|
||||
stage.addActor(optionsPage);
|
||||
|
||||
analysisPage = new AnalysisPage(this);
|
||||
stage.addActor(analysisPage);
|
||||
|
||||
musicSelectionPage = new MusicSelectionPage(this);
|
||||
stage.addActor(musicSelectionPage);
|
||||
|
||||
|
||||
keybindPage = new KeybindOptionsPage(this);
|
||||
keybindPage = new KeybindPage(rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), listeners.returnToMainPageListener);
|
||||
stage.addActor(keybindPage);
|
||||
|
||||
graphicsPage = new GraphicsOptionsPage(this);
|
||||
if (graphicsPage.getGlowLevelSlider().getValue() > 0) {
|
||||
if (bloomShader == null) bloomShader = new BloomShader(screenBatch);
|
||||
bloomShader.setBloomLevel((int) graphicsPage.getGlowLevelSlider().getValue());
|
||||
}
|
||||
graphicsPage.getGlowLevelSlider().addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
if (graphicsPage.getGlowLevelSlider().getValue() > 0) {
|
||||
if (bloomShader == null) bloomShader = new BloomShader(screenBatch);
|
||||
bloomShader.setBloomLevel((int) graphicsPage.getGlowLevelSlider().getValue());
|
||||
} else if (bloomShader != null) {
|
||||
bloomShader.dispose();
|
||||
bloomShader = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
graphicsPage = new GraphicsPage(rhythmBullet.getSkin(), rhythmBullet.getPreferences(), listeners.returnToMainPageListener, listeners.bloomLevelShaderListener);
|
||||
stage.addActor(graphicsPage);
|
||||
|
||||
|
||||
creditsPage = new CreditsPage(rhythmBullet.getSkin());
|
||||
creditsPage.setPosition(0, Gdx.graphics.getHeight());
|
||||
stage.addActor(creditsPage);
|
||||
|
||||
musicSelectionPage = new MusicSelectionPage(rhythmBullet.getAssetManager(), rhythmBullet.getSkin(), musicController, musicMetadataController, listeners.returnToMainPageListener, listeners.analysisPageButtonListener);
|
||||
stage.addActor(musicSelectionPage);
|
||||
|
||||
analysisPage = new AnalysisPage(rhythmBullet.getSkin(), listeners.returnToMainPageListener, listeners.confirmedSongListener);
|
||||
stage.addActor(analysisPage);
|
||||
|
||||
|
||||
|
||||
stage.addListener(new InputListener() {
|
||||
@Override
|
||||
public boolean keyUp(InputEvent event, int keycode) {
|
||||
@ -199,8 +187,8 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
|
||||
public void saveAll() {
|
||||
if (optionsPage != null) {
|
||||
optionsPage.saveOptions(rhythmBullet.getPrefs());
|
||||
rhythmBullet.getPrefs().flush();
|
||||
optionsPage.saveOptions(rhythmBullet.getPreferences());
|
||||
rhythmBullet.getPreferences().flush();
|
||||
}
|
||||
}
|
||||
|
||||
@ -233,4 +221,76 @@ public class MainScreen extends ScreenAdapter implements ResizeReadyScreen {
|
||||
page.setCameraPositionToPage(cameraPosition);
|
||||
}
|
||||
|
||||
private class Listeners {
|
||||
ChangeListener musicSelectionPageButtonListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
setDisplayedPage(musicSelectionPage);
|
||||
stage.setKeyboardFocus(musicSelectionPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener analysisPageButtonListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
musicSelectionPage.getSelectedMusic();
|
||||
setDisplayedPage(analysisPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener returnToMainPageListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
setDisplayedPage(mainPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener optionsPageButtonListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
setDisplayedPage(optionsPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener graphicsPageButtonListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
setDisplayedPage(graphicsPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener keybindPageButtonListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
setDisplayedPage(keybindPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener creditPageButtonListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
setDisplayedPage(creditsPage);
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener bloomLevelShaderListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
if (graphicsPage.getBloomLevel() > 0) {
|
||||
if (bloomShader == null) bloomShader = new BloomShader(screenBatch);
|
||||
bloomShader.setBloomLevel((int) graphicsPage.getBloomLevel());
|
||||
} else if (bloomShader != null) {
|
||||
bloomShader.dispose();
|
||||
bloomShader = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
ChangeListener confirmedSongListener = new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package zero1hd.rhythmbullet.desktop.screens.main;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Observable;
|
||||
import java.util.Observer;
|
||||
|
||||
@ -7,6 +8,7 @@ import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.Input.Keys;
|
||||
import com.badlogic.gdx.Preferences;
|
||||
import com.badlogic.gdx.assets.AssetManager;
|
||||
import com.badlogic.gdx.audio.Music;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.Texture;
|
||||
@ -27,8 +29,8 @@ import com.badlogic.gdx.utils.Array;
|
||||
|
||||
import zero1hd.rhythmbullet.audio.MusicMetadataController;
|
||||
import zero1hd.rhythmbullet.audio.MusicController;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.components.MusicSelectable;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.pages.Page;
|
||||
import zero1hd.rhythmbullet.graphics.ui.components.MusicSelectable;
|
||||
import zero1hd.rhythmbullet.graphics.ui.components.ScrollText;
|
||||
|
||||
public class MusicSelectionPage extends Page implements Observer {
|
||||
@ -36,10 +38,11 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
|
||||
private MusicController mc;
|
||||
private MusicMetadataController mmc;
|
||||
|
||||
private Array<MusicSelectable> selectables;
|
||||
private TextButton back;
|
||||
private Table musicTable;
|
||||
private ScrollPane musicTableScrollPane;
|
||||
private TextButton back;
|
||||
|
||||
private Table musicInfoTable;
|
||||
private Table musicSubInfo;
|
||||
@ -48,29 +51,24 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
private Label songLength;
|
||||
private Label previousTop;
|
||||
private Label ratedDifficulty;
|
||||
private Texture albumCoverTexture;
|
||||
private Image albumCover;
|
||||
|
||||
private AssetManager assets;
|
||||
private MusicSelectable currentlySelected;
|
||||
|
||||
private Skin skin;
|
||||
private boolean down, up;
|
||||
private int musicSelectableIndex;
|
||||
|
||||
private TextButton beginButton;
|
||||
|
||||
private int uiSongCount;
|
||||
private int uiSongInfoCount;
|
||||
private float scrollTimer, scrollDelay = 0.2f, scrollDelMod, songSelectionTimer;
|
||||
|
||||
public MusicSelectionPage(MainScreen mainScreen) {
|
||||
public MusicSelectionPage(AssetManager assetManager, Skin skin, MusicController musicController, MusicMetadataController musicMetadataController, ChangeListener backButtonListener, ChangeListener beginButtonListener) {
|
||||
super(1, 0);
|
||||
this.assets = mainScreen.rhythmBullet.getAssetManager();
|
||||
this.skin = mainScreen.rhythmBullet.getSkin();
|
||||
this.mc = mainScreen.musicController;
|
||||
this.mmc = mainScreen.musicMetadataController;
|
||||
this.assets = assetManager;
|
||||
this.mc = musicController;
|
||||
this.mmc = musicMetadataController;
|
||||
musicFileAnnotation = Gdx.app.getPreferences("music_file_annotation");
|
||||
|
||||
musicTable = new Table();
|
||||
musicTableScrollPane = new ScrollPane(musicTable, skin);
|
||||
musicTable.defaults().spaceTop(5f).spaceBottom(5f);
|
||||
@ -79,16 +77,10 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
musicTableScrollPane.setOverscroll(false, false);
|
||||
musicTableScrollPane.setColor(Color.BLUE);
|
||||
addActor(musicTableScrollPane);
|
||||
selectables = new Array<>();
|
||||
back = new TextButton("Back", skin);
|
||||
back.setWidth(back.getWidth()+20f);
|
||||
back.setPosition(getWidth()-back.getWidth()-15f, getHeight() - back.getHeight() - 15f);
|
||||
back.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.mainPage);
|
||||
}
|
||||
});
|
||||
back.addListener(backButtonListener);
|
||||
addActor(back);
|
||||
back.toFront();
|
||||
|
||||
@ -134,15 +126,7 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
albumCover = new Image(assets.get("defaultCover.png", Texture.class));
|
||||
|
||||
beginButton = new TextButton("Begin", skin);
|
||||
beginButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
if (getSelectedMusic() != null) {
|
||||
mainScreen.setDisplayedPage(mainScreen.analysisPage);
|
||||
ap.processSong(mc.getMusicList().newAudioProcessor(getSelectedMusic()), (albumCoverTexture != null ? albumCoverTexture : assets.get("defaultCover.png", Texture.class)), mmc.getInfo(getSelectedMusic()));
|
||||
}
|
||||
}
|
||||
});
|
||||
beginButton.addListener(beginButtonListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -178,30 +162,23 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
setCurrentMusic();
|
||||
}
|
||||
}
|
||||
|
||||
attemptRefreshUpdate();
|
||||
super.act(delta);
|
||||
}
|
||||
|
||||
private void attemptRefreshUpdate() {
|
||||
if (mc.getMusicList().isSearched() && uiSongInfoCount != mc.getMusicList().getTotal()) {
|
||||
if (uiSongCount < mc.getMusicList().getTotal()) {
|
||||
MusicSelectable selectable = new MusicSelectable(mc.getMusicList().getSongFileHandleFromIndex(uiSongCount), skin, this);
|
||||
selectables.add(selectable);
|
||||
musicTable.add(selectables.get(uiSongCount)).expandX().fillX();
|
||||
uiSongCount++;
|
||||
musicTable.row();
|
||||
if (uiSongCount == mc.getMusicList().getTotal()) {
|
||||
selectMusicUI(mc.getCurrentMusicManager());
|
||||
}
|
||||
} else if (uiSongInfoCount < selectables.size && mmc.isDone()) {
|
||||
selectables.get(uiSongInfoCount).updateInfo(mmc.getMetadataArray().get(uiSongInfoCount));
|
||||
uiSongInfoCount++;
|
||||
if (uiSongInfoCount == selectables.size) {
|
||||
updateInformation();
|
||||
private void scrollDown() {
|
||||
if ((musicSelectableIndex = (musicTable.getChildren().indexOf(currentlySelected, true) + 1)) == musicTable.getChildren().size) {
|
||||
musicSelectableIndex = 0;
|
||||
}
|
||||
((MusicSelectable)musicTable.getChildren().get(musicSelectableIndex)).select();
|
||||
musicTableScrollPane.scrollTo(currentlySelected.getX(), currentlySelected.getY(), currentlySelected.getWidth(), currentlySelected.getHeight());
|
||||
}
|
||||
|
||||
private void scrollUp() {
|
||||
if ((musicSelectableIndex = (musicTable.getChildren().indexOf(currentlySelected, true) - 1)) < 0) {
|
||||
musicSelectableIndex = musicTable.getChildren().size-1;
|
||||
}
|
||||
((MusicSelectable)musicTable.getChildren().get(musicSelectableIndex)).select();
|
||||
musicTableScrollPane.scrollTo(currentlySelected.getX(), currentlySelected.getY(), currentlySelected.getWidth(), currentlySelected.getHeight());
|
||||
}
|
||||
|
||||
public FileHandle getSelectedMusic() {
|
||||
@ -212,15 +189,11 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
}
|
||||
}
|
||||
|
||||
public MusicInfo getSelectedMusicInfo() {
|
||||
return currentlySelected.getMusicInfo();
|
||||
}
|
||||
|
||||
public void refreshUIList() {
|
||||
for (int i = 0; i < selectables.size; i++) {
|
||||
selectables.get(i).dispose();
|
||||
}
|
||||
mmc.loadSongInfo();
|
||||
mmc.loadAudioMetadata();
|
||||
musicTable.clear();
|
||||
selectables.clear();
|
||||
musicInfoTable.clear();
|
||||
@ -253,98 +226,30 @@ public class MusicSelectionPage extends Page implements Observer {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
public void deselectAll() {
|
||||
if (currentlySelected != null) {
|
||||
currentlySelected.deselect();
|
||||
} else {
|
||||
for (int i = 0; i < selectables.size; i++) {
|
||||
selectables.get(i).deselect();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setCurrentlySelected(MusicSelectable currentlySelected) {
|
||||
this.currentlySelected = currentlySelected;
|
||||
songSelectionTimer = 1f;
|
||||
|
||||
if (mmc.isDone() && uiSongInfoCount == selectables.size) {
|
||||
updateInformation();
|
||||
}
|
||||
}
|
||||
|
||||
private void scrollDown() {
|
||||
if ((musicSelectableIndex = (musicTable.getChildren().indexOf(currentlySelected, true) + 1)) == musicTable.getChildren().size) {
|
||||
musicSelectableIndex = 0;
|
||||
}
|
||||
((MusicSelectable)musicTable.getChildren().get(musicSelectableIndex)).select();
|
||||
musicTableScrollPane.scrollTo(currentlySelected.getX(), currentlySelected.getY(), currentlySelected.getWidth(), currentlySelected.getHeight());
|
||||
}
|
||||
|
||||
private void scrollUp() {
|
||||
if ((musicSelectableIndex = (musicTable.getChildren().indexOf(currentlySelected, true) - 1)) < 0) {
|
||||
musicSelectableIndex = musicTable.getChildren().size-1;
|
||||
}
|
||||
((MusicSelectable)musicTable.getChildren().get(musicSelectableIndex)).select();
|
||||
musicTableScrollPane.scrollTo(currentlySelected.getX(), currentlySelected.getY(), currentlySelected.getWidth(), currentlySelected.getHeight());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Observable o, Object arg) {
|
||||
if (o == mc && arg == MusicController.States.Loaded) {
|
||||
selectMusicUI(mc.getCurrentMusic());
|
||||
selectMusicUI(mc.getCurrentMusicFileHandle());
|
||||
}
|
||||
}
|
||||
|
||||
public void selectMusicUI(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 selectMusicUI(FileHandle fileHandle) {
|
||||
selectables.get(mc.getMusicList().getMusicArray().indexOf(fileHandle, true)).select();
|
||||
}
|
||||
|
||||
private void setCurrentMusic() {
|
||||
playSelectedMusic();
|
||||
@Override
|
||||
public void setCameraPositionToPage(Vector3 cameraPosition) {
|
||||
getStage().setKeyboardFocus(this);
|
||||
super.setCameraPositionToPage(cameraPosition);
|
||||
}
|
||||
|
||||
private void playSelectedMusic() {
|
||||
if (currentlySelected.getMusicFile() != mc.getCurrentMusicManager().getMusicFile()) {
|
||||
int index = mc.getMusicList().getMusicArray().indexOf(currentlySelected.getMusicFile(), true);
|
||||
mc.setMusicByIndex(index);
|
||||
}
|
||||
}
|
||||
private class musicSelectionLoaderThread implements Runnable {
|
||||
|
||||
/**
|
||||
* This should only be called when everything is loaded.
|
||||
*/
|
||||
private void updateInformation() {
|
||||
Gdx.app.debug("MusicSelectionPage", "Updating song info panel...");
|
||||
if (currentlySelected == null) throw new NullPointerException("Buddy, you need to update this page to have the proper current music selected...");
|
||||
if (currentlySelected.getMusicInfo() == null) throw new NullPointerException("K, ur music info is null.");
|
||||
songTitle.setText(currentlySelected.getMusicInfo().getMusicName(), null);
|
||||
author.setText("Author: " + currentlySelected.getMusicInfo().getAuthor());
|
||||
if (albumCoverTexture != null) {
|
||||
albumCoverTexture.dispose();
|
||||
}
|
||||
long lengthInSeconds = currentlySelected.getMusicInfo().getDurationInSeconds();
|
||||
int min = (int) (lengthInSeconds/60);
|
||||
int sec = (int) (lengthInSeconds - (min*60));
|
||||
songLength.setText("Length: " + min + ":" + (sec > 9 ? sec : "0" + sec));
|
||||
@Override
|
||||
public void run() {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
previousTop.setText("Highscore: " + currentlySelected.getMusicInfo().getPreviousTop());
|
||||
|
||||
String difficulty = (getSelectedMusicInfo().getRatedDifficulty() == -1 ? "N/A" : String.valueOf(getSelectedMusicInfo().getRatedDifficulty()));
|
||||
ratedDifficulty.setText("Rated Difficulty: " + difficulty);
|
||||
albumCoverTexture = currentlySelected.getMusicInfo().loadTexture();
|
||||
if (albumCoverTexture != null) {
|
||||
albumCover.setDrawable((new TextureRegionDrawable(new TextureRegion(albumCoverTexture))));
|
||||
} else {
|
||||
albumCover.setDrawable((new TextureRegionDrawable(new TextureRegion(assets.get("defaultCover.png", Texture.class)))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6,12 +6,14 @@ import com.badlogic.gdx.math.MathUtils;
|
||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.ProgressBar;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Slider;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.Table;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
|
||||
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
|
||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||
|
||||
import zero1hd.rhythmbullet.audio.MusicController;
|
||||
import zero1hd.rhythmbullet.desktop.graphics.ui.pages.Page;
|
||||
|
||||
public class OptionsPage extends Page {
|
||||
@ -21,17 +23,12 @@ public class OptionsPage extends Page {
|
||||
private TextField directoryField;
|
||||
private float musicSearchTimer;
|
||||
|
||||
public OptionsPage(MainScreen mainScreen) {
|
||||
super(-1, 0, "General", mainScreen.rhythmBullet.getSkin());
|
||||
public OptionsPage(MusicController musicController, Skin skin, Preferences preferences, ChangeListener backButtonListener, ChangeListener graphicsButtonListener, ChangeListener controlsButtonListener) {
|
||||
super(-1, 0, "General", skin);
|
||||
|
||||
//Back button
|
||||
TextButton backButton = new TextButton("Back", mainScreen.rhythmBullet.getSkin());
|
||||
backButton.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.mainPage);
|
||||
}
|
||||
});
|
||||
TextButton backButton = new TextButton("Back", skin);
|
||||
backButton.addListener(backButtonListener);
|
||||
backButton.setWidth(backButton.getWidth() + 20);
|
||||
backButton.setPosition(getWidth() - backButton.getWidth() - 10, getHeightBelowTitle() + 5);
|
||||
addActor(backButton);
|
||||
@ -41,36 +38,36 @@ public class OptionsPage extends Page {
|
||||
optionsTable.setSize(getWidth(), getHeight());
|
||||
addActor(optionsTable);
|
||||
|
||||
Label musicVolSliderLabel = new Label("Music Volume: ", mainScreen.rhythmBullet.getSkin());
|
||||
Label musicVolSliderLabel = new Label("Music Volume: ", skin);
|
||||
optionsTable.add(musicVolSliderLabel);
|
||||
musicVolSlider = new Slider(0, 100, 0.1f, false, mainScreen.rhythmBullet.getSkin());
|
||||
musicVolSlider.setValue(mainScreen.rhythmBullet.getPrefs().getFloat("music vol", 100f)*100f);
|
||||
musicVolSlider = new Slider(0, 100, 0.1f, false, skin);
|
||||
musicVolSlider.setValue(preferences.getFloat("music vol", 100f)*100f);
|
||||
optionsTable.add(musicVolSlider).minWidth(0.3f*getWidth());
|
||||
final Label musicVolPercentage = new Label(MathUtils.round(musicVolSlider.getValue()) + "%", mainScreen.rhythmBullet.getSkin());
|
||||
final Label musicVolPercentage = new Label(MathUtils.round(musicVolSlider.getValue()) + "%", skin);
|
||||
musicVolSlider.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
musicVolPercentage.setText(MathUtils.round(musicVolSlider.getValue()) + "%");
|
||||
mainScreen.musicController.getCurrentMusic().setVolume(musicVolSlider.getPercent());
|
||||
musicController.getCurrentMusic().setVolume(musicVolSlider.getPercent());
|
||||
|
||||
mainScreen.rhythmBullet.getPrefs().putFloat("music vol", musicVolSlider.getPercent());
|
||||
preferences.putFloat("music vol", musicVolSlider.getPercent());
|
||||
}
|
||||
});
|
||||
optionsTable.add(musicVolPercentage);
|
||||
|
||||
optionsTable.row();
|
||||
|
||||
Label fxVolSliderLabel = new Label("FX Volume: ", mainScreen.rhythmBullet.getSkin());
|
||||
Label fxVolSliderLabel = new Label("FX Volume: ", skin);
|
||||
optionsTable.add(fxVolSliderLabel);
|
||||
fxVolSlider = new Slider(0, 100, 0.1f, false, mainScreen.rhythmBullet.getSkin());
|
||||
fxVolSlider.setValue(mainScreen.rhythmBullet.getPrefs().getFloat("fx vol", 100f)*100f);
|
||||
fxVolSlider = new Slider(0, 100, 0.1f, false, skin);
|
||||
fxVolSlider.setValue(preferences.getFloat("fx vol", 100f)*100f);
|
||||
optionsTable.add(fxVolSlider).fillX();
|
||||
final Label fxVolPercentage = new Label(MathUtils.round(fxVolSlider.getValue()) + "%", mainScreen.rhythmBullet.getSkin());
|
||||
final Label fxVolPercentage = new Label(MathUtils.round(fxVolSlider.getValue()) + "%", skin);
|
||||
fxVolSlider.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
fxVolPercentage.setText(MathUtils.round(fxVolSlider.getValue()) + "%");
|
||||
mainScreen.rhythmBullet.getPrefs().putFloat("fx vol", fxVolSlider.getPercent());
|
||||
preferences.putFloat("fx vol", fxVolSlider.getPercent());
|
||||
}
|
||||
});
|
||||
|
||||
@ -78,22 +75,22 @@ public class OptionsPage extends Page {
|
||||
|
||||
optionsTable.row();
|
||||
|
||||
Label musicDirectoryLabel = new Label("Music Directory: ", mainScreen.rhythmBullet.getSkin());
|
||||
Label musicDirectoryLabel = new Label("Music Directory: ", skin);
|
||||
optionsTable.add(musicDirectoryLabel);
|
||||
directoryField = new TextField(null, mainScreen.rhythmBullet.getSkin() ) {
|
||||
directoryField = new TextField(null, skin ) {
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
if (musicSearchTimer > 0) {
|
||||
musicSearchTimer -= delta;
|
||||
if (musicSearchTimer <= 0) {
|
||||
mainScreen.musicController.getMusicList().setSearchPath(directoryField.getText());
|
||||
mainScreen.musicController.getMusicList().asyncSearch();
|
||||
musicController.getMusicList().setSearchPath(directoryField.getText());
|
||||
musicController.getMusicList().asyncSearch();
|
||||
}
|
||||
}
|
||||
super.act(delta);
|
||||
}
|
||||
};
|
||||
directoryField.setText(mainScreen.rhythmBullet.getPrefs().getString("music dir", System.getProperty("user.home")+System.getProperty("file.separator")+"Music"));
|
||||
directoryField.setText(preferences.getString("music dir", System.getProperty("user.home")+System.getProperty("file.separator")+"Music"));
|
||||
directoryField.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
@ -104,29 +101,19 @@ public class OptionsPage extends Page {
|
||||
|
||||
optionsTable.row();
|
||||
|
||||
TextButton keybindSettings = new TextButton("Set Controls", mainScreen.rhythmBullet.getSkin());
|
||||
keybindSettings.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.keybindPage);
|
||||
}
|
||||
});
|
||||
TextButton keybindSettings = new TextButton("Set Controls", skin);
|
||||
keybindSettings.addListener(controlsButtonListener);
|
||||
optionsTable.add(keybindSettings).colspan(2).fillX();
|
||||
|
||||
optionsTable.row();
|
||||
|
||||
TextButton graphicsSettings = new TextButton("Graphics", mainScreen.rhythmBullet.getSkin());
|
||||
graphicsSettings.addListener(new ChangeListener() {
|
||||
@Override
|
||||
public void changed(ChangeEvent event, Actor actor) {
|
||||
mainScreen.setDisplayedPage(mainScreen.graphicsPage);
|
||||
}
|
||||
});
|
||||
TextButton graphicsSettings = new TextButton("Graphics", skin);
|
||||
graphicsSettings.addListener(graphicsButtonListener);
|
||||
optionsTable.add(graphicsSettings).colspan(2).fillX();
|
||||
|
||||
optionsTable.row();
|
||||
|
||||
Label fpsLabel = new Label("", mainScreen.rhythmBullet.getSkin()) {
|
||||
Label fpsLabel = new Label("", skin) {
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
setText("Current FPS: " + Gdx.graphics.getFramesPerSecond());
|
||||
@ -137,7 +124,7 @@ public class OptionsPage extends Page {
|
||||
|
||||
optionsTable.row();
|
||||
|
||||
Label usageLabel = new Label("Current usage (lower the better): " + 100f*((float)(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(float)Runtime.getRuntime().totalMemory()) + "%", mainScreen.rhythmBullet.getSkin()) {
|
||||
Label usageLabel = new Label("Current usage (lower the better): " + 100f*((float)(Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(float)Runtime.getRuntime().totalMemory()) + "%", skin) {
|
||||
float refreshTime = 60;
|
||||
@Override
|
||||
public void act(float delta) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user