implementing music directory search thread (cont. music selection ui)
This commit is contained in:
parent
a710e2f321
commit
8e205891f1
@ -5,12 +5,10 @@ import com.badlogic.gdx.ScreenAdapter;
|
|||||||
import com.badlogic.gdx.graphics.GL20;
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
import com.badlogic.gdx.math.Vector3;
|
import com.badlogic.gdx.math.Vector3;
|
||||||
import com.badlogic.gdx.scenes.scene2d.InputEvent;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.Stage;
|
import com.badlogic.gdx.scenes.scene2d.Stage;
|
||||||
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
import com.badlogic.gdx.scenes.scene2d.ui.Label;
|
||||||
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
|
|
||||||
|
|
||||||
import zero1hd.polyjet.Polyjet;
|
import zero1hd.polyjet.Polyjet;
|
||||||
import zero1hd.polyjet.TransitionAdapter;
|
import zero1hd.polyjet.TransitionAdapter;
|
||||||
@ -32,7 +30,6 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter {
|
|||||||
|
|
||||||
Label lastStatement;
|
Label lastStatement;
|
||||||
|
|
||||||
MusicSelectionPage musicSelection;
|
|
||||||
private MainMenu mainMenu;
|
private MainMenu mainMenu;
|
||||||
|
|
||||||
public PreGameScreen(final Polyjet core) {
|
public PreGameScreen(final Polyjet core) {
|
||||||
@ -52,7 +49,7 @@ public class PreGameScreen extends ScreenAdapter implements TransitionAdapter {
|
|||||||
public void postTransition() {
|
public void postTransition() {
|
||||||
stage.clear();
|
stage.clear();
|
||||||
//draw music selector
|
//draw music selector
|
||||||
musicSelection = new MusicSelectionPage(core, mainMenu);
|
MusicSelectionPage musicSelection = new MusicSelectionPage(core, mainMenu);
|
||||||
stage.addActor(musicSelection);
|
stage.addActor(musicSelection);
|
||||||
|
|
||||||
statusText = new Label(null, core.defaultSkin);
|
statusText = new Label(null, core.defaultSkin);
|
||||||
|
@ -7,8 +7,8 @@ import com.badlogic.gdx.Preferences;
|
|||||||
import com.badlogic.gdx.files.FileHandle;
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import com.badlogic.gdx.graphics.Pixmap;
|
import com.badlogic.gdx.graphics.Pixmap;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.Button;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
|
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
|
||||||
import com.mpatric.mp3agic.ID3v2;
|
import com.mpatric.mp3agic.ID3v2;
|
||||||
import com.mpatric.mp3agic.InvalidDataException;
|
import com.mpatric.mp3agic.InvalidDataException;
|
||||||
@ -17,7 +17,7 @@ import com.mpatric.mp3agic.UnsupportedTagException;
|
|||||||
|
|
||||||
import zero1hd.wavedecoder.WavInfo;
|
import zero1hd.wavedecoder.WavInfo;
|
||||||
|
|
||||||
public class MusicSelectable extends ImageButton {
|
public class MusicSelectable extends Button {
|
||||||
Image imageIcon;
|
Image imageIcon;
|
||||||
FileHandle musicFile;
|
FileHandle musicFile;
|
||||||
boolean invalidMusic;
|
boolean invalidMusic;
|
||||||
@ -25,9 +25,10 @@ public class MusicSelectable extends ImageButton {
|
|||||||
String songName;
|
String songName;
|
||||||
|
|
||||||
WavInfo wavinfo;
|
WavInfo wavinfo;
|
||||||
|
private byte[] albumWorkBytes;
|
||||||
|
|
||||||
public MusicSelectable(FileHandle musicFile, Preferences musicData, Skin skin) {
|
public MusicSelectable(FileHandle musicFile, Preferences musicData, Skin skin) {
|
||||||
super(skin, "info-pane");
|
super(skin, "info-button");
|
||||||
|
|
||||||
this.musicFile = musicFile;
|
this.musicFile = musicFile;
|
||||||
|
|
||||||
@ -38,24 +39,15 @@ public class MusicSelectable extends ImageButton {
|
|||||||
|
|
||||||
if (mp3File.hasId3v2Tag()) {
|
if (mp3File.hasId3v2Tag()) {
|
||||||
ID3v2 id3v2tag = mp3File.getId3v2Tag();
|
ID3v2 id3v2tag = mp3File.getId3v2Tag();
|
||||||
byte[] albumWorkBytes = id3v2tag.getAlbumImage();
|
albumWorkBytes = id3v2tag.getAlbumImage();
|
||||||
|
|
||||||
Pixmap albumArt = new Pixmap(albumWorkBytes, 0, albumWorkBytes.length);
|
|
||||||
Texture albumArtTexture = new Texture(albumArt);
|
|
||||||
imageIcon = new Image(albumArtTexture);
|
|
||||||
float scale = 0.25f*Gdx.graphics.getHeight()/imageIcon.getHeight();
|
|
||||||
|
|
||||||
imageIcon.setScale(scale);
|
|
||||||
|
|
||||||
add(imageIcon);
|
|
||||||
|
|
||||||
albumArtTexture.dispose();
|
|
||||||
|
|
||||||
songName = id3v2tag.getTitle();
|
songName = id3v2tag.getTitle();
|
||||||
}
|
}
|
||||||
} catch (UnsupportedTagException | InvalidDataException | IOException e) {
|
} catch (UnsupportedTagException | InvalidDataException | IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setSize(0.2f*Gdx.graphics.getWidth(), 0.8f*Gdx.graphics.getHeight());
|
||||||
} else {
|
} else {
|
||||||
wavinfo = new WavInfo(musicFile.file());
|
wavinfo = new WavInfo(musicFile.file());
|
||||||
durationInSeconds = wavinfo.getDurationInSeconds();
|
durationInSeconds = wavinfo.getDurationInSeconds();
|
||||||
@ -68,5 +60,19 @@ public class MusicSelectable extends ImageButton {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void renderAlbumCover() {
|
||||||
|
if (albumWorkBytes != null) {
|
||||||
|
Pixmap albumArt = new Pixmap(albumWorkBytes, 0, albumWorkBytes.length);
|
||||||
|
Texture albumArtTexture = new Texture(albumArt);
|
||||||
|
imageIcon = new Image(albumArtTexture);
|
||||||
|
float scale = 0.25f*getHeight()/imageIcon.getHeight();
|
||||||
|
imageIcon.setScale(scale);
|
||||||
|
|
||||||
|
add(imageIcon);
|
||||||
|
albumArtTexture.dispose();
|
||||||
|
} else {
|
||||||
|
//TODO load default album cover texture
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,36 @@
|
|||||||
package zero1hd.polyjet.ui.pages;
|
package zero1hd.polyjet.ui.pages;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FilenameFilter;
|
||||||
|
|
||||||
|
import com.badlogic.gdx.Gdx;
|
||||||
|
import com.badlogic.gdx.Preferences;
|
||||||
|
import com.badlogic.gdx.files.FileHandle;
|
||||||
import com.badlogic.gdx.scenes.scene2d.Actor;
|
import com.badlogic.gdx.scenes.scene2d.Actor;
|
||||||
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
import com.badlogic.gdx.scenes.scene2d.actions.Actions;
|
||||||
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
import com.badlogic.gdx.scenes.scene2d.ui.Image;
|
||||||
|
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane;
|
||||||
|
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.ui.TextButton;
|
||||||
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
|
||||||
|
|
||||||
import zero1hd.polyjet.Polyjet;
|
import zero1hd.polyjet.Polyjet;
|
||||||
import zero1hd.polyjet.screens.MainMenu;
|
import zero1hd.polyjet.screens.MainMenu;
|
||||||
|
import zero1hd.polyjet.ui.builders.MusicSelectable;
|
||||||
|
|
||||||
public class MusicSelectionPage extends Page {
|
public class MusicSelectionPage extends Page {
|
||||||
Image loading;
|
Image loading;
|
||||||
|
volatile Table musicChoices;
|
||||||
|
Preferences musicFileAnnotation;
|
||||||
|
private Polyjet core;
|
||||||
|
|
||||||
public MusicSelectionPage(final Polyjet core, final MainMenu mainMenu) {
|
public MusicSelectionPage(final Polyjet core, final MainMenu mainMenu) {
|
||||||
super("Select music", core.defaultSkin);
|
super("Select music", core.defaultSkin);
|
||||||
|
this.core = core;
|
||||||
|
|
||||||
|
musicFileAnnotation = Gdx.app.getPreferences("music_file_annotation");
|
||||||
|
|
||||||
|
|
||||||
TextButton back = new TextButton("Back", core.defaultSkin);
|
TextButton back = new TextButton("Back", core.defaultSkin);
|
||||||
back.setPosition(getWidth()-back.getWidth()-15f, getHeight()-back.getHeight()-15f);
|
back.setPosition(getWidth()-back.getWidth()-15f, getHeight()-back.getHeight()-15f);
|
||||||
@ -30,5 +47,58 @@ public class MusicSelectionPage extends Page {
|
|||||||
loading.setOrigin(loading.getWidth()/2, loading.getHeight()/2);
|
loading.setOrigin(loading.getWidth()/2, loading.getHeight()/2);
|
||||||
loading.addAction(Actions.forever(Actions.rotateBy(-360f, 2f)));
|
loading.addAction(Actions.forever(Actions.rotateBy(-360f, 2f)));
|
||||||
addActor(loading);
|
addActor(loading);
|
||||||
|
|
||||||
|
musicChoices = new Table();
|
||||||
|
ScrollPane musicChoiceScroller = new ScrollPane(musicChoices);
|
||||||
|
musicChoiceScroller.setSize(getHeight(), getWidth());
|
||||||
|
addActor(musicChoiceScroller);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void act(float delta) {
|
||||||
|
if (musicChoices.hasChildren()) {
|
||||||
|
loading.remove();
|
||||||
|
}
|
||||||
|
super.act(delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void beginMusicSearch() {
|
||||||
|
Thread musicFinder = new Thread(new MusicFinderRunnable(Gdx.files.absolute(core.prefs.getString("music dir")), core.defaultSkin, 0));
|
||||||
|
musicFinder.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
class MusicFinderRunnable implements Runnable {
|
||||||
|
private FileHandle[] musicFiles;
|
||||||
|
private int startingID;
|
||||||
|
private Skin skin;
|
||||||
|
private FileHandle musicDir;
|
||||||
|
|
||||||
|
public MusicFinderRunnable(FileHandle musicDir, Skin skin, int startingID) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.startingID = startingID;
|
||||||
|
this.skin = skin;
|
||||||
|
this.musicDir = musicDir;
|
||||||
|
|
||||||
|
System.out.println(musicDir.exists());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
|
||||||
|
musicFiles = musicDir.list(new FilenameFilter() {
|
||||||
|
@Override
|
||||||
|
public boolean accept(File dir, String name) {
|
||||||
|
if (name.endsWith("mp3") || name.endsWith("wav")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
for (int music = startingID; music < musicFiles.length && music < 15; music++) {
|
||||||
|
musicChoices.add(new MusicSelectable(musicFiles[music], musicFileAnnotation, skin));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user