added Youtube download, Video conversion and caching, tweaked some settings

This commit is contained in:
Raybz@Raybz 2013-06-21 08:44:06 +02:00
parent f9e5988dca
commit 031c350dd0
7 changed files with 105 additions and 73 deletions

View File

@ -30,9 +30,9 @@ import com.jme3.renderer.ViewPort;
import com.jme3.scene.Node; import com.jme3.scene.Node;
import org.wyrez.persij.PersiJContainer; import org.wyrez.persij.PersiJContainer;
import org.wyrez.shootingstars.data.AudioDataManager; import org.wyrez.shootingstars.data.AudioDataManager;
import org.wyrez.shootingstars.data.YTDownloader;
import org.wyrez.shootingstars.factories.Materials; import org.wyrez.shootingstars.factories.Materials;
import org.wyrez.shootingstars.game.GameSettings; import org.wyrez.shootingstars.game.GameSettings;
import org.wyrez.shootingstars.states.GameState;
import org.wyrez.shootingstars.states.State; import org.wyrez.shootingstars.states.State;
import org.wyrez.shootingstars.states.StateManager; import org.wyrez.shootingstars.states.StateManager;
import org.wyrez.shootingstars.states.util.OptionSettings; import org.wyrez.shootingstars.states.util.OptionSettings;
@ -48,9 +48,9 @@ public class ShootingStars extends SimpleApplication {
private StateManager sManager; private StateManager sManager;
private OptionSettings optionSettings; private OptionSettings optionSettings;
public ShootingStars() { public ShootingStars(OptionSettings optionSettings) {
super(new StatsAppState(), new DebugKeysAppState()); super(new StatsAppState(), new DebugKeysAppState());
optionSettings = new OptionSettings(); this.optionSettings = optionSettings;
} }
@Override @Override
@ -59,13 +59,9 @@ public class ShootingStars extends SimpleApplication {
registerTypes(); registerTypes();
initGUI(); initGUI();
initKeys(); initKeys();
initSettings();
Materials.initialize(assetManager); Materials.initialize(assetManager);
cam.setFrustumFar(2500f); cam.setFrustumFar(2500f);
//TODO debug
//cam.setLocation(new Vector3f(0f, 2500f, 0f));
sManager = container.resolve(StateManager.class); sManager = container.resolve(StateManager.class);
sManager.setState(State.START); sManager.setState(State.START);
} }
@ -89,30 +85,21 @@ public class ShootingStars extends SimpleApplication {
container.registerType(StateManager.class, true); container.registerType(StateManager.class, true);
container.registerType(Screen.class, true); container.registerType(Screen.class, true);
container.registerType(AudioDataManager.class, true); container.registerType(AudioDataManager.class, true);
container.registerType(YTDownloader.class);
} }
private void initKeys() { private void initKeys() {
inputManager.addMapping("Pause", new KeyTrigger(KeyInput.KEY_P)); inputManager.addMapping("Pause", new KeyTrigger(KeyInput.KEY_P));
inputManager.deleteMapping(INPUT_MAPPING_EXIT); inputManager.deleteMapping(INPUT_MAPPING_EXIT);
inputManager.addMapping("ESC", new KeyTrigger(KeyInput.KEY_ESCAPE)); inputManager.addMapping("ESC", new KeyTrigger(KeyInput.KEY_ESCAPE));
}
private void initSettings() {
if (optionSettings.saveExists()) {
optionSettings.init(false);
optionSettings.load();
} else {
optionSettings.init(true);
optionSettings.save();
}
} }
public static void main(String[] args) { public static void main(String[] args) {
ShootingStars app = new ShootingStars(); OptionSettings optionSettings = new OptionSettings();
optionSettings.init();
//app.setSettings(optionSettings); ShootingStars app = new ShootingStars(optionSettings);
app.setShowSettings(false);
app.setSettings(optionSettings.getAppSettings());
app.start(); app.start();
} }
} }

View File

@ -171,28 +171,28 @@ public class AudioDataManager {
return bpm; return bpm;
} }
private int calcIndex() { private int calcIndex(int length) {
int index = (int) (currentTime * indexFactor); int index = (int) (currentTime * indexFactor);
if (index >= speedData.length) { if (index >= length) {
index = speedData.length - 1; index = length - 1;
} }
return index; return index;
} }
public boolean isFlash() { public boolean isFlash() {
return flashData[calcIndex()] > peakAverageFlash * 0.5f; return flashData[calcIndex(flashData.length)] > peakAverageFlash * 0.5f;
} }
public float getFlashData() { public float getFlashData() {
return flashData[calcIndex()]; return flashData[calcIndex(flashData.length)];
} }
public boolean isGroundMove() { public boolean isGroundMove() {
return groundMoveData[calcIndex()] > 0f; return groundMoveData[calcIndex(groundMoveData.length)] > 0f;
} }
public float getGroundMoveData() { public float getGroundMoveData() {
return groundMoveData[calcIndex()]; return groundMoveData[calcIndex(flashData.length)];
} }
public float getMovementData() { public float getMovementData() {
@ -202,7 +202,7 @@ public class AudioDataManager {
} }
public float getSpeedData() { public float getSpeedData() {
return speedData[calcIndex()]; return speedData[calcIndex(flashData.length)];
} }
public float getMidData() { public float getMidData() {

View File

@ -25,6 +25,7 @@ import java.io.File;
public class PathHelper { public class PathHelper {
private static final String CACHE_FOLDER = "cache/"; private static final String CACHE_FOLDER = "cache/";
public static final String CONFIG = "shootingstars.conf";
public static String getCacheFolder() { public static String getCacheFolder() {
File file = new File(CACHE_FOLDER); File file = new File(CACHE_FOLDER);

View File

@ -89,10 +89,6 @@ public class GameState extends AbstractAppState implements GameListener, ActionL
this.settings = settings; this.settings = settings;
} }
public void setSettings(GameSettings settings) {
this.settings = settings;
}
public void loadGround() { public void loadGround() {
ground = new Ground(audioDataManager); ground = new Ground(audioDataManager);
FilterPostProcessor fpp = new FilterPostProcessor(assetManager); FilterPostProcessor fpp = new FilterPostProcessor(assetManager);
@ -122,17 +118,20 @@ public class GameState extends AbstractAppState implements GameListener, ActionL
player.addControl(new PlayerCamControl(camera)); player.addControl(new PlayerCamControl(camera));
} }
private void setRunning(boolean running) {
isRunning = running;
player.setUserData(UserDataKeys.RUNNING, running);
}
public void start() { public void start() {
gui.setStart(); gui.setStart();
inputManager.setCursorVisible(false); inputManager.setCursorVisible(false);
player.setUserData(UserDataKeys.RUNNING, true);
mediaPlayer.play(); mediaPlayer.play();
isRunning = true; setRunning(true);
} }
@Override @Override
public void stateAttached(AppStateManager stateManager) { public void stateAttached(AppStateManager stateManager) {
// stateManager.attach(new FlyCamAppState()); //TODO debug
rootNode.attachChild(cinema); rootNode.attachChild(cinema);
rootNode.attachChild(ground); rootNode.attachChild(ground);
rootNode.attachChild(player); rootNode.attachChild(player);
@ -142,7 +141,6 @@ public class GameState extends AbstractAppState implements GameListener, ActionL
@Override @Override
public void stateDetached(AppStateManager stateManager) { public void stateDetached(AppStateManager stateManager) {
// stateManager.detach(new FlyCamAppState()); //TODO debug
gui.detach(); gui.detach();
rootNode.detachChild(player); rootNode.detachChild(player);
rootNode.detachChild(ground); rootNode.detachChild(ground);
@ -167,14 +165,11 @@ public class GameState extends AbstractAppState implements GameListener, ActionL
@Override @Override
public void cleanup() { public void cleanup() {
super.cleanup(); super.cleanup();
setRunning(false);
mediaPlayer.release(); mediaPlayer.release();
mediaPlayerFactory.release(); mediaPlayerFactory.release();
} }
public GameSettings getSettings() {
return settings;
}
public DirectMediaPlayer getMediaPlayer() { public DirectMediaPlayer getMediaPlayer() {
return mediaPlayer; return mediaPlayer;
} }
@ -185,18 +180,21 @@ public class GameState extends AbstractAppState implements GameListener, ActionL
public void onAction(String name, boolean isPressed, float tpf) { public void onAction(String name, boolean isPressed, float tpf) {
if (name.equals("ESC") && !isPressed) { if (name.equals("ESC") && !isPressed) {
setRunning(false);
mediaPlayer.pause();
inputManager.setCursorVisible(true);
gui.showMenu(); gui.showMenu();
//cinema.pause();
} }
} }
public void resume() { public void resume() {
gui.resumeGame(); gui.resumeGame();
//cinema.play(); inputManager.setCursorVisible(false);
mediaPlayer.play();
setRunning(true);
} }
public void cancelTrack() { public void cancelTrack() {
//cinema.stop();
stateManager.setState(State.MENU); stateManager.setState(State.MENU);
} }
} }

View File

@ -118,7 +118,7 @@ public class LoadingState extends AbstractAppState {
private boolean initAudioAnalysis() { private boolean initAudioAnalysis() {
GameState gs = stateManager.getState(State.GAME); GameState gs = stateManager.getState(State.GAME);
return audioDataManager.initialize(gs.getSettings(), gs.getMediaPlayer()); return audioDataManager.initialize(settings, gs.getMediaPlayer());
} }
private void convertAudio() throws Exception { private void convertAudio() throws Exception {

View File

@ -18,6 +18,9 @@ package org.wyrez.shootingstars.states;
import com.jme3.app.state.AbstractAppState; import com.jme3.app.state.AbstractAppState;
import com.jme3.app.state.AppStateManager; import com.jme3.app.state.AppStateManager;
import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.wyrez.shootingstars.data.YTDownloader; import org.wyrez.shootingstars.data.YTDownloader;
import org.wyrez.shootingstars.game.GameSettings; import org.wyrez.shootingstars.game.GameSettings;
import org.wyrez.shootingstars.gui.YTDownloadGUI; import org.wyrez.shootingstars.gui.YTDownloadGUI;
@ -30,12 +33,14 @@ import tonegod.gui.core.Screen;
* @author Snowsun * @author Snowsun
*/ */
public class YTDownloadState extends AbstractAppState implements YTDownloadListener { public class YTDownloadState extends AbstractAppState implements YTDownloadListener {
private static final Pattern YT_LINK_PATTERN = Pattern.compile("\\?v=[^\\&]*\\&??");
/**/
private StateManager stateManager; private StateManager stateManager;
private GameSettings settings; private GameSettings settings;
private YTDownloadGUI gui; private YTDownloadGUI gui;
private YTDownloader downloader; private YTDownloader downloader;
public YTDownloadState(Screen screen, StateManager stateManager, public YTDownloadState(Screen screen, StateManager stateManager,
GameSettings settings, YTDownloader downloader) { GameSettings settings, YTDownloader downloader) {
this.stateManager = stateManager; this.stateManager = stateManager;
@ -43,20 +48,50 @@ public class YTDownloadState extends AbstractAppState implements YTDownloadListe
this.gui = new YTDownloadGUI(screen, this); this.gui = new YTDownloadGUI(screen, this);
this.downloader = downloader; this.downloader = downloader;
} }
@Override @Override
public void stateAttached(AppStateManager stateManager) { public void stateAttached(AppStateManager stateManager) {
gui.attach(); gui.attach();
} }
@Override @Override
public void stateDetached(AppStateManager stateManager) { public void stateDetached(AppStateManager stateManager) {
gui.detach(); gui.detach();
} }
public void downloadYTVideo(String url) { public void downloadYTVideo(String url) {
downloader.download(url, PathHelper.getCacheFolder()); try {
settings.setVideoFile(downloader.getLastTarget().getPath()); Matcher matcher = YT_LINK_PATTERN.matcher(url);
stateManager.setState(State.FILEMETAINFO); String identifier = "";
if (matcher.find()) {
identifier = matcher.group().replace("?v=", "");
} else {
//TODO add error message
stateManager.setState(State.MENU);
}
String path;
if ((path = getVideoCache(identifier)) == null) {
downloader.download(url, PathHelper.getCacheFolder());
path = downloader.getLastTarget().getPath();
new File(path).renameTo(new File(PathHelper.getCacheFolder()
+ identifier + path.substring(path.lastIndexOf("."), path.length())));
System.out.println("rename " + path + " --> " + (PathHelper.getCacheFolder()
+ identifier + path.substring(path.lastIndexOf("."), path.length())));
}
settings.setVideoFile(path);
stateManager.setState(State.FILEMETAINFO);
} catch (Exception ex) {
stateManager.setState(State.MENU);
}
}
private String getVideoCache(String identifier) {
File[] cachedFiles = new File(PathHelper.getCacheFolder()).listFiles();
for (File file : cachedFiles) {
if (file.getName().substring(0, file.getName().lastIndexOf(".")).equals(identifier)) {
return file.getPath();
}
}
return null;
} }
} }

View File

@ -23,15 +23,26 @@ import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Set; import java.util.Set;
import org.wyrez.shootingstars.helper.PathHelper;
/** /**
* *
* @author Snowsun * @author Snowsun
*/ */
public class OptionSettings { public class OptionSettings {
private AppSettings settings; private AppSettings settings;
private static final String FILENAME = "shootingstars.conf";
public void init() {
if (saveExists()) {
init(false);
load();
} else {
init(true);
save();
}
}
public void init(boolean loadDefault) { public void init(boolean loadDefault) {
settings = new AppSettings(loadDefault); settings = new AppSettings(loadDefault);
create(loadDefault); create(loadDefault);
@ -41,8 +52,8 @@ public class OptionSettings {
settings = new AppSettings(false); settings = new AppSettings(false);
settings.putAll(settings); settings.putAll(settings);
} }
private void create(boolean loadDefault) { private void create(boolean loadDefault) {
if (loadDefault) { if (loadDefault) {
settings.setResolution(1024, 600); settings.setResolution(1024, 600);
settings.setTitle("Shooting Stars"); settings.setTitle("Shooting Stars");
@ -55,7 +66,7 @@ public class OptionSettings {
setParticleDensity(3); setParticleDensity(3);
} }
} }
public void setUsername(String username) { public void setUsername(String username) {
settings.putString("Username", username); settings.putString("Username", username);
} }
@ -103,19 +114,19 @@ public class OptionSettings {
public void setWidth(int width) { public void setWidth(int width) {
settings.setWidth(width); settings.setWidth(width);
} }
public void setFrequency(int frequency) { public void setFrequency(int frequency) {
settings.setFrequency(frequency); settings.setFrequency(frequency);
} }
public void setDepthBits(int depthBits) { public void setDepthBits(int depthBits) {
settings.setDepthBits(depthBits); settings.setDepthBits(depthBits);
} }
public void setParticleDensity(int particleDensity) { public void setParticleDensity(int particleDensity) {
settings.putInteger("ParticleDensity", particleDensity); settings.putInteger("ParticleDensity", particleDensity);
} }
public int getKey(String keyId) { public int getKey(String keyId) {
return settings.getInteger(keyId); return settings.getInteger(keyId);
} }
@ -159,22 +170,22 @@ public class OptionSettings {
public int getWidth() { public int getWidth() {
return settings.getWidth(); return settings.getWidth();
} }
public int getFrequency() { public int getFrequency() {
return settings.getFrequency(); return settings.getFrequency();
} }
public int getDepthBits() { public int getDepthBits() {
return settings.getDepthBits(); return settings.getDepthBits();
} }
public int getParticleDensity() { public int getParticleDensity() {
return settings.getInteger("ParticleDensity"); return settings.getInteger("ParticleDensity");
} }
public void save() { public void save() {
try { try {
OutputStream os = new FileOutputStream(FILENAME); OutputStream os = new FileOutputStream(PathHelper.CONFIG);
settings.save(os); settings.save(os);
} catch (Exception ex) { } catch (Exception ex) {
System.out.println("Can't save settings"); System.out.println("Can't save settings");
@ -183,7 +194,7 @@ public class OptionSettings {
public void load() { public void load() {
try { try {
InputStream is = new FileInputStream(FILENAME); InputStream is = new FileInputStream(PathHelper.CONFIG);
settings.load(is); settings.load(is);
} catch (Exception ex) { } catch (Exception ex) {
System.out.println("Can't load settings"); System.out.println("Can't load settings");
@ -191,13 +202,13 @@ public class OptionSettings {
} }
public boolean saveExists() { public boolean saveExists() {
return new File(FILENAME).exists(); return new File(PathHelper.CONFIG).exists();
} }
public void put(String key, Object value){ public void put(String key, Object value) {
settings.put(key, value); settings.put(key, value);
} }
public Set<String> keySet() { public Set<String> keySet() {
return settings.keySet(); return settings.keySet();
} }
@ -205,8 +216,8 @@ public class OptionSettings {
public Object get(String key) { public Object get(String key) {
return settings.get(key); return settings.get(key);
} }
public AppSettings getAppSettings(){ public AppSettings getAppSettings() {
return settings; return settings;
} }
} }