diff --git a/ShootingStars/lib/BaseIO-1.0.jar b/ShootingStars/lib/BaseIO-1.0.jar new file mode 100644 index 0000000..f3ea3bf Binary files /dev/null and b/ShootingStars/lib/BaseIO-1.0.jar differ diff --git a/ShootingStars/lib/PersiJ-1.0.jar b/ShootingStars/lib/PersiJ-1.0.jar new file mode 100644 index 0000000..c4bdb9a Binary files /dev/null and b/ShootingStars/lib/PersiJ-1.0.jar differ diff --git a/ShootingStars/lib/jaudiotagger-2.2.0.jar b/ShootingStars/lib/jaudiotagger-2.2.0.jar deleted file mode 100644 index e9e479f..0000000 Binary files a/ShootingStars/lib/jaudiotagger-2.2.0.jar and /dev/null differ diff --git a/ShootingStars/nbproject/project.properties b/ShootingStars/nbproject/project.properties index c168e00..b832b26 100644 --- a/ShootingStars/nbproject/project.properties +++ b/ShootingStars/nbproject/project.properties @@ -32,18 +32,19 @@ dist.javadoc.dir=${dist.dir}/javadoc endorsed.classpath= excludes= file.reference.AudioProcessing-1.0.jar=lib\\AudioProcessing-1.0.jar +file.reference.BaseIO-1.0.jar=lib/BaseIO-1.0.jar file.reference.commons-codec-1.4.jar=lib\\commons-codec-1.4.jar file.reference.commons-io-2.1.jar=lib\\commons-io-2.1.jar file.reference.commons-lang3-3.1.jar=lib\\commons-lang3-3.1.jar file.reference.commons-logging-1.1.1.jar=lib\\commons-logging-1.1.1.jar file.reference.httpclient-4.1.3.jar=lib\\httpclient-4.1.3.jar file.reference.httpcore-4.1.4.jar=lib\\httpcore-4.1.4.jar -file.reference.jaudiotagger-2.2.0.jar=lib\\jaudiotagger-2.2.0.jar file.reference.jl1.0.1.jar=lib\\jl1.0.1.jar file.reference.jna-3.5.2.jar=lib\\jna-3.5.2.jar file.reference.jogg-0.0.7.jar=lib\\jogg-0.0.7.jar file.reference.jorbis-0.0.15.jar=lib\\jorbis-0.0.15.jar file.reference.mp3spi1.9.5.jar=lib\\mp3spi1.9.5.jar +file.reference.PersiJ-1.0.jar=lib/PersiJ-1.0.jar file.reference.platform-3.5.2.jar=lib\\platform-3.5.2.jar file.reference.sqlite-jdbc-3.7.2.jar=lib\\sqlite-jdbc-3.7.2.jar file.reference.tritonus_aos-0.3.6.jar=lib\\tritonus_aos-0.3.6.jar @@ -72,7 +73,6 @@ javac.classpath=\ ${file.reference.tritonus_share-0.3.6.jar}:\ ${file.reference.AudioProcessing-1.0.jar}:\ ${libs.jme3-libraries-effects.classpath}:\ - ${file.reference.jaudiotagger-2.2.0.jar}:\ ${file.reference.commons-codec-1.4.jar}:\ ${file.reference.commons-io-2.1.jar}:\ ${file.reference.commons-lang3-3.1.jar}:\ @@ -87,7 +87,9 @@ javac.classpath=\ ${file.reference.xmlpull-1.1.3.1.jar}:\ ${file.reference.xpp3_min-1.1.4c.jar}:\ ${file.reference.xstream-1.4.2.jar}:\ - ${file.reference.sqlite-jdbc-3.7.2.jar} + ${file.reference.sqlite-jdbc-3.7.2.jar}:\ + ${file.reference.BaseIO-1.0.jar}:\ + ${file.reference.PersiJ-1.0.jar} # Space-separated list of extra javac options javac.compilerargs= javac.deprecation=false diff --git a/ShootingStars/src/org/wyrez/persij/NoSuitableConstructorFoundException.java b/ShootingStars/src/org/wyrez/persij/NoSuitableConstructorFoundException.java deleted file mode 100644 index 1714221..0000000 --- a/ShootingStars/src/org/wyrez/persij/NoSuitableConstructorFoundException.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2012 Darth Affe and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.wyrez.persij; - -/** - * Exception thrown by the PersiJConstructor - * - * @author Darth Affe - */ -public class NoSuitableConstructorFoundException extends Exception { - - NoSuitableConstructorFoundException() { - } - - NoSuitableConstructorFoundException(String msg) { - super(msg); - } -} diff --git a/ShootingStars/src/org/wyrez/persij/PersiJConstructor.java b/ShootingStars/src/org/wyrez/persij/PersiJConstructor.java deleted file mode 100644 index 11813f7..0000000 --- a/ShootingStars/src/org/wyrez/persij/PersiJConstructor.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2012 Darth Affe and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.wyrez.persij; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -/** - * Marks an Constructor for primary use by the PersiJConstructor - * - * @author Darth Affe - */ -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.CONSTRUCTOR) -public @interface PersiJConstructor { - - /** - * Returns the default state of the annotation - * - * @return true if default; false otherwise - */ - boolean isDefault(); - - /** - * Returns the id of the param mapping - * - * @return id of the param mapping - */ - int customParamMappingId() default -1; -} diff --git a/ShootingStars/src/org/wyrez/persij/PersiJContainer.java b/ShootingStars/src/org/wyrez/persij/PersiJContainer.java deleted file mode 100644 index 33a0b9a..0000000 --- a/ShootingStars/src/org/wyrez/persij/PersiJContainer.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2012 Darth Affe and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.wyrez.persij; - -import java.lang.reflect.Array; -import java.util.HashMap; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * Mapping and object container for PersiJ - * - * @author Darth Affe - */ -public final class PersiJContainer { - - private static final Logger logger = Logger.getLogger("org.wyrez.persij"); - private final HashMap mappings = new HashMap(); - - public PersiJContainer() { - registerSingleton(PersiJContainer.class, this); - } - - /** - * Registers a mapping - * - * @param type Type which should be mapped - */ - public final void registerType(Class type) { - registerType(type, false); - } - - /** - * Registers a mapping - * - * @param type Type which should be mapped - * @param singleton Singleton indicator - */ - public final void registerType(Class type, boolean singleton) { - registerType(type, type, singleton); - } - - /** - * Registers a mapping - * - * @param type Source-type which should be mapped - * @param mapping Target-type which should be mapped - */ - public final void registerType(Class type, Class mapping) { - registerType(type, mapping, false); - } - - /** - * Registers a mapping - * - * @param type Source-type which should be mapped - * @param mapping Target-type which should be mapped - * @param singleton Singleton indicator - */ - public final void registerType(Class type, Class mapping, boolean singleton) { - mappings.put(type, new PersiJMapping(mapping, singleton)); - } - - /** - * Registers a singleton-mapping to an existing object - * - * @param type Source-type which should be mapped - * @param instance Singleton instance - */ - public final void registerSingleton(Class type, T instance) { - mappings.put(type, new PersiJMapping(type, instance)); - } - - /** - * Tests if the specified type is registered - * - * @param type Type which should be tested - * @return true if the type is registered; else otherwise - */ - public final boolean isTypeRegistered(Class type) { - return mappings.containsKey(type); - } - - /** - * Creates an instance of the type mapped to the given type - * - * @param Type to resolve - * @param type Class of the type to resolve - * @return Insance of T - */ - public final T resolve(Class type) { - PersiJMapping mapping = mappings.get(type); - if (mapping != null) { - try { - return (T) mapping.getInstance(this, null); - } catch (NoSuitableConstructorFoundException ex) { - logger.log(Level.WARNING, "Can't create object for type: " - + type.getName(), ex); - return null; - } - } else { - logger.log(Level.WARNING, "Can't find a mapping for type: " - + type.getName()); - return null; - } - } - - /** - * Creates an instance of the type mapped to the given type - * - * @param Type to resolve - * @param type Class of the type to resolve - * @param paramMapping - * @return Instance of T - */ - public final T resolve(Class type, PersiJParamMapping paramMapping) { - PersiJMapping mapping = mappings.get(type); - if (mapping != null) { - try { - return (T) mapping.getInstance(this, paramMapping); - } catch (NoSuitableConstructorFoundException ex) { - logger.log(Level.WARNING, "Can't create object for type: " - + type.getName(), ex); - return null; - } - } else { - logger.log(Level.WARNING, "Can't find a mapping for type: " - + type.getName()); - return null; - } - } - - /** - * Creates an array with instances of the type mapped to the given type - * - * @param Type to resolve - * @param type Class of the type to resolve - * @param number Size of the array - * @return Array of T - */ - public final T[] resolve(Class type, int number) { - PersiJMapping mapping = mappings.get(type); - if (mapping != null) { - try { - T[] array = (T[]) Array.newInstance(type, number); - return (T[]) mapping.getInstances(this, null, array); - } catch (NoSuitableConstructorFoundException ex) { - logger.log(Level.WARNING, "Can't create object for type: " - + type.getName(), ex); - return null; - } - } else { - logger.log(Level.WARNING, "Can't find a mapping for type: " - + type.getName()); - return null; - } - } -} diff --git a/ShootingStars/src/org/wyrez/persij/PersiJMapping.java b/ShootingStars/src/org/wyrez/persij/PersiJMapping.java deleted file mode 100644 index a00162c..0000000 --- a/ShootingStars/src/org/wyrez/persij/PersiJMapping.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2012 Darth Affe and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.wyrez.persij; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Constructor; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author Darth Affe - */ -final class PersiJMapping { - - private static final Logger logger = Logger.getLogger("org.wyrez.persij"); - private Object singletonInstance; - private Class type; - private boolean singleton; - - PersiJMapping(Class type, boolean singleton) { - this.type = type; - this.singleton = singleton; - } - - PersiJMapping(Class type, Object singleton) { - this.type = type; - this.singleton = true; - singletonInstance = singleton; - } - - final boolean isSingleton() { - return singleton; - } - - /** - * Creates a new instance - * - * @param container Container to resolve missing dependencies - * @param paramMapping Optional parameters used to resolve dependencies - * (null if not used) - * @return New instance - * @throws NoSuitableConstructorFoundException thrown if no suitable - * constructor to instantiate could be found - */ - final Object getInstance(PersiJContainer container, PersiJParamMapping paramMapping) throws NoSuitableConstructorFoundException { - if (isSingleton()) { - if (singletonInstance == null) { - singletonInstance = createInstance(container, paramMapping); - } - return singletonInstance; - } else { - return createInstance(container, paramMapping); - } - } - - /** - * Creates an array with new instances - * - * @param container Container to resolve missing dependencies - * @param paramMapping Optional parameters used to resolve dependencies - * (null if not used) - * @param array Array which should be filled and returned - * @return New array with instances - * @throws NoSuitableConstructorFoundException thrown if no suitable - * constructor to instantiate could be found - */ - final Object getInstances(PersiJContainer container, PersiJParamMapping paramMapping, Object[] array) throws NoSuitableConstructorFoundException { - if (isSingleton()) { - if (singletonInstance == null) { - singletonInstance = createInstance(container, paramMapping); - } - for (int i = 0; i < array.length; i++) { - array[i] = singletonInstance; - } - return array; - } else { - return createInstances(container, paramMapping, array); - } - } - - /** - * Creates a new instance - * - * @param container Container to resolve missing dependencies - * @param paramMapping Optional parameters used to resolve dependencies - * (null if not used) - * @return New instance - * @throws NoSuitableConstructorFoundException thrown if no suitable - * constructor to instantiate could be found - */ - private Object createInstance(PersiJContainer container, PersiJParamMapping paramMapping) throws NoSuitableConstructorFoundException { - Constructor constructor = getBestConstructor(container, paramMapping); - return createInstance(container, constructor, paramMapping); - } - - /** - * Creates an array with new instances - * - * @param container Container to resolve missing dependencies - * @param paramMapping Optional parameters used to resolve dependencies - * (null if not used) - * @param array Array which should be filled and returned - * @return New array with instances - * @throws NoSuitableConstructorFoundException thrown if no suitable - * constructor to instantiate could be found - */ - private Object createInstances(PersiJContainer container, PersiJParamMapping paramMapping, Object[] array) throws NoSuitableConstructorFoundException { - Constructor constructor = getBestConstructor(container, paramMapping); - for (int i = 0; i < array.length; i++) { - array[i] = createInstance(container, constructor, paramMapping); - } - return array; - } - - /** - * Creates an instance using the given constructor - * - * @param container Container to resolve missing dependencies - * @param constructor Constructor to instantiate - * @param paramMapping Optional parameters used to resolve dependencies - * (null if not used) - * @return New instance - * @throws NoSuitableConstructorFoundException thrown if no suitable - * constructor to instantiate could be found - */ - private Object createInstance(PersiJContainer container, Constructor constructor, PersiJParamMapping paramMapping) throws NoSuitableConstructorFoundException { - Object[] params; - if (paramMapping != null && paramMapping.getType() == type) { - params = paramMapping.getParams(); - } else { - Class[] conParams = constructor.getParameterTypes(); - int paramCount = conParams.length; - params = new Object[paramCount]; - for (int i = 0; i < paramCount; i++) { - params[i] = container.resolve(conParams[i], paramMapping); - } - } - try { - return constructor.newInstance(params); - } catch (Exception ex) { - logger.log(Level.WARNING, "Error while creating instance of an object", ex); - return null; - } - } - - /** - * Determines the best constructor to instantiate - * - * @param container Container to check registered types - * @param paramMapping Optional parameters used to resolve dependencies - * (null if not used) - * @return Best constructor to instantiate - * @throws NoSuitableConstructorFoundException thrown if no suitable - * constructor to instantiate could be found - */ - private Constructor getBestConstructor(PersiJContainer container, PersiJParamMapping paramMapping) throws NoSuitableConstructorFoundException { - Constructor bestToCreate = null; - int paramCount = -1; - for (Constructor c : type.getConstructors()) { - Annotation annotation = c.getAnnotation(PersiJConstructor.class); - if (paramMapping != null && paramMapping.getType() == type) { - if (annotation != null && ((PersiJConstructor) annotation).customParamMappingId() == paramMapping.getParamMappingId()) { - bestToCreate = c; - break; - } - } else { - boolean possible = true; - for (Class t : c.getParameterTypes()) { - if (t.isPrimitive() || t == String.class || t == Object.class || !container.isTypeRegistered(t)) { - possible = false; - break; - } - } - if (possible) { - int pCount = c.getParameterTypes().length; - if (annotation != null) { - if (((PersiJConstructor) annotation).isDefault()) { - bestToCreate = c; - break; - } - } else if (pCount > paramCount) { - bestToCreate = c; - paramCount = pCount; - } - } - } - } - if (bestToCreate == null) { - throw new NoSuitableConstructorFoundException(); - } - return bestToCreate; - } -} diff --git a/ShootingStars/src/org/wyrez/persij/PersiJParamMapping.java b/ShootingStars/src/org/wyrez/persij/PersiJParamMapping.java deleted file mode 100644 index 0c446c3..0000000 --- a/ShootingStars/src/org/wyrez/persij/PersiJParamMapping.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2012 Darth Affe and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.wyrez.persij; - -/** - * - * @author Darth Affe - */ -public final class PersiJParamMapping { - - private Class type; - private Object[] params; - private int paramMappingId; - - public PersiJParamMapping(Class type, Object... params) { - this(-1, type, params); - } - - public PersiJParamMapping(int paramMappingId, Class type, Object... params) { - this.type = type; - this.params = params; - this.paramMappingId = paramMappingId; - } - - /** - * Returns the Type to which the ParamMapping belongs - * - * @return Type of the ParamMapping - */ - public final Class getType() { - return type; - } - - /** - * Returns the mapped parameters - * - * @return Array with mapped parameters - */ - public final Object[] getParams() { - return params; - } - - /** - * Returns the id of the mapping - * - * @return id of the mapping - */ - public final int getParamMappingId() { - return paramMappingId; - } -} diff --git a/ShootingStars/src/org/wyrez/shootingstars/controls/StarDeathControl.java b/ShootingStars/src/org/wyrez/shootingstars/controls/StarDeathControl.java index 823e595..8fb584c 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/controls/StarDeathControl.java +++ b/ShootingStars/src/org/wyrez/shootingstars/controls/StarDeathControl.java @@ -17,6 +17,7 @@ package org.wyrez.shootingstars.controls; import com.jme3.effect.ParticleEmitter; +import com.jme3.effect.shapes.EmitterShape; import com.jme3.math.ColorRGBA; import com.jme3.scene.Spatial; import com.jme3.scene.control.Control; @@ -63,12 +64,13 @@ public class StarDeathControl extends BaseControl { effect.setEndColor(new ColorRGBA(points.getColor().r, points.getColor().g, points.getColor().b, 0f)); } - effect.setStartSize((Float) spatial.getUserData(UserDataKeys.SIZE)); + effect.setStartSize((Float) spatial.getUserData(UserDataKeys.SIZE)*0.5f); effect.setEndSize(0f); effect.setHighLife(FX_TIME); effect.setLowLife(0f); effect.setLocalTranslation(spatial.getLocalTranslation()); effect.setParticlesPerSec(0f); + effect.setRandomAngle(true); spatial.getParent().attachChild(effect); spatial.setCullHint(Spatial.CullHint.Always); diff --git a/ShootingStars/src/org/wyrez/shootingstars/controls/StarPointControl.java b/ShootingStars/src/org/wyrez/shootingstars/controls/StarPointControl.java index 8c7d724..e0584b0 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/controls/StarPointControl.java +++ b/ShootingStars/src/org/wyrez/shootingstars/controls/StarPointControl.java @@ -56,7 +56,7 @@ public class StarPointControl extends BaseControl { @Override protected void controlUpdate(float tpf) { - if ((Boolean)spatial.getUserData(UserDataKeys.HITTED) && !isHitted) { + if ((Boolean) spatial.getUserData(UserDataKeys.HITTED) && !isHitted) { player.setUserData(UserDataKeys.POINTS, (Integer) (player.getUserData(UserDataKeys.POINTS)) + (int) Math.round(points)); isHitted = true; @@ -64,10 +64,10 @@ public class StarPointControl extends BaseControl { if (points > 1f) { points -= 2f * tpf; color = ColorHelper.calcColor(points / MAX_POINTS); - } else if (points < 1f) { - spatial.setUserData(UserDataKeys.HITTED, true); //TODO test + } else if (points <= 1f) { points = 1f; color = ColorHelper.calcColor(points / MAX_POINTS); + spatial.setUserData(UserDataKeys.HITTED, true); } material.setColor("Color", color); } else { diff --git a/ShootingStars/src/org/wyrez/shootingstars/data/YTDownloader.java b/ShootingStars/src/org/wyrez/shootingstars/data/YTDownloader.java index bd1fe42..8b47e01 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/data/YTDownloader.java +++ b/ShootingStars/src/org/wyrez/shootingstars/data/YTDownloader.java @@ -16,7 +16,6 @@ package org.wyrez.shootingstars.data; * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - import com.github.axet.vget.VGet; import com.github.axet.vget.info.VideoInfo; import com.github.axet.vget.info.VideoInfo.VideoQuality; @@ -30,6 +29,7 @@ import java.net.URL; public class YTDownloader { private File lastTarget; + private String lastTitle; public YTDownloader() { } @@ -50,6 +50,7 @@ public class YTDownloader { VGet v = new VGet(info, new File(targetFolder)); v.download(); lastTarget = v.getTarget(); + lastTitle = v.getVideo().getTitle(); System.out.println("success!"); return true; } catch (Exception e) { @@ -70,4 +71,8 @@ public class YTDownloader { public File getLastTarget() { return lastTarget; } + + public String getLastTitle() { + return lastTitle; + } } diff --git a/ShootingStars/src/org/wyrez/shootingstars/game/GameSettings.java b/ShootingStars/src/org/wyrez/shootingstars/game/GameSettings.java index 4d131a7..11facd9 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/game/GameSettings.java +++ b/ShootingStars/src/org/wyrez/shootingstars/game/GameSettings.java @@ -35,18 +35,21 @@ public class GameSettings { private boolean useVideo; private String trackTitle; private String trackArtist; + private int trackLength; public GameSettings() { } public void setAudioFile(String audioFile) { this.audioFile = audioFile; - this.useVideo = false; } public void setVideoFile(String videoFile) { this.videoFile = videoFile; - this.useVideo = true; + } + + public void useVideo(boolean useVideo) { + this.useVideo = useVideo; } public void setTrackTitle(String trackTitle) { @@ -57,6 +60,10 @@ public class GameSettings { this.trackArtist = trackArtist; } + public void setTrackLength(int length) { + this.trackLength = length; + } + public String getAudioFile() { return audioFile; } @@ -96,4 +103,8 @@ public class GameSettings { public String getTrackTitle() { return trackTitle; } + + public int getTrackLength() { + return trackLength; + } } diff --git a/ShootingStars/src/org/wyrez/shootingstars/game/Player.java b/ShootingStars/src/org/wyrez/shootingstars/game/Player.java index 6277667..9941797 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/game/Player.java +++ b/ShootingStars/src/org/wyrez/shootingstars/game/Player.java @@ -19,11 +19,9 @@ package org.wyrez.shootingstars.game; import com.jme3.asset.AssetManager; import com.jme3.input.InputManager; import com.jme3.light.AmbientLight; -import com.jme3.material.Material; import com.jme3.math.ColorRGBA; import com.jme3.renderer.Camera; import com.jme3.renderer.ViewPort; -import com.jme3.renderer.queue.RenderQueue; import com.jme3.scene.Geometry; import com.jme3.scene.Node; import com.jme3.scene.Spatial; @@ -41,6 +39,7 @@ import org.wyrez.shootingstars.helper.MathHelper; import org.wyrez.shootingstars.helper.UserDataKeys; import org.wyrez.shootingstars.mesh.HexPrism; import org.wyrez.shootingstars.states.StateManager; +import org.wyrez.shootingstars.states.util.OptionSettings; /** * @@ -54,13 +53,15 @@ public class Player extends Node { public Player(Node rootNode, StateManager stateManager, AssetManager assetManager, ViewPort viewPort, GameGUI gui, InputManager inputManager, Camera camera, - AudioDataManager audioDataManager, Node starNode) { + AudioDataManager audioDataManager, Node starNode, OptionSettings settings) { super("Player"); - + initPlayer(inputManager, camera, audioDataManager, gui); - initWeapon(assetManager); - initProjectile(rootNode); - initWeaponContainer(); + if (settings.isShowWeaponEnabled()) { + initWeapon(assetManager); + initProjectile(rootNode); + initWeaponContainer(); + } initGhostProjectile(starNode); addLight(); } @@ -95,7 +96,7 @@ public class Player extends Node { geom2.setMaterial(Materials.WEAPON.create()); geom2.move(0f, 0.25f, -5f); projectile.attachChild(geom2); - + projectile.addControl(new WeaponProjectileControl(rootNode, this)); } @@ -111,13 +112,13 @@ public class Player extends Node { this.attachChild(weaponContainer); } - + private void initGhostProjectile(Node starNode) { Geometry ghostProjectile = new Geometry("ghostProjectile", new Box(0.1f, 0.1f, 2500f)); ghostProjectile.setMaterial(Materials.UNSHADED.create()); ghostProjectile.setCullHint(CullHint.Always); - ghostProjectile.move(0f,0f,2510f); - ghostProjectile.addControl(new WeaponProjectileCollisionControl(starNode,this)); + ghostProjectile.move(0f, 0f, 2510f); + ghostProjectile.addControl(new WeaponProjectileCollisionControl(starNode, this)); this.attachChild(ghostProjectile); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/game/StarManager.java b/ShootingStars/src/org/wyrez/shootingstars/game/StarManager.java index ffba394..f28f192 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/game/StarManager.java +++ b/ShootingStars/src/org/wyrez/shootingstars/game/StarManager.java @@ -38,7 +38,7 @@ import org.wyrez.shootingstars.states.GameState; * * @author Darth Affe */ -public class StarManager{ +public class StarManager { private static final Random random; private static final float MAX_STAR_SIZE = 15f; @@ -93,7 +93,7 @@ public class StarManager{ star.addControl(new StarFaceControl(player)); star.addControl(new StarDeathControl()); star.addControl(new StarPointControl(player, value)); - + starNode.attachChild(star); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/FileMetaInfoGUI.java b/ShootingStars/src/org/wyrez/shootingstars/gui/FileMetaInfoGUI.java index 87b066f..5d33526 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/FileMetaInfoGUI.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/FileMetaInfoGUI.java @@ -19,11 +19,6 @@ package org.wyrez.shootingstars.gui; import com.jme3.input.event.MouseButtonEvent; import com.jme3.math.Vector2f; import java.io.File; -import org.jaudiotagger.audio.AudioFile; -import org.jaudiotagger.audio.AudioFileIO; -import org.jaudiotagger.audio.AudioHeader; -import org.jaudiotagger.tag.FieldKey; -import org.jaudiotagger.tag.Tag; import org.wyrez.shootingstars.game.GameSettings; import org.wyrez.shootingstars.gui.controls.ButtonBase; import org.wyrez.shootingstars.gui.listener.FileMetaInfoListener; @@ -42,10 +37,10 @@ public class FileMetaInfoGUI extends Panel implements Gui { private FileMetaInfoListener listener; private GameSettings settings; private ScreenHelper screenHelper; - private String fileName = ""; - private String duration = ""; - private String title = ""; - private String artist = ""; + private Label lblFileName; + private Label lblArtist; + private Label lblTitel; + private Label lblDuration; public FileMetaInfoGUI(Screen screen, FileMetaInfoListener listener, GameSettings settings, ScreenHelper screenHelper) { super(screen, new Vector2f(0f, 0f), new Vector2f(1280f, 720f)); @@ -63,48 +58,35 @@ public class FileMetaInfoGUI extends Panel implements Gui { float marginLeft = screenHelper.calcX(110f); float buttonWidth = screenHelper.calcX(153.6f); float labelFontSize = screenHelper.calcX(20f); - - File file = null; - if(settings.useVideo()) { - file = new File(settings.getVideoFile()); - } else { - file = new File(settings.getAudioFile()); - } - readMetaData(file); - Label lblFileNameHead = new Label(screen, new Vector2f(startPointx, startPointy), new Vector2f(screenHelper.calcX(100f), screenHelper.calcY(40f))); lblFileNameHead.setText("Track Name"); lblFileNameHead.setFontSize(labelFontSize); - - Label lblFileName = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); - lblFileName.setText(fileName); + + lblFileName = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); lblFileName.setFontSize(labelFontSize); - + Label lblArtistHead = new Label(screen, new Vector2f(startPointx, startPointy + screenHelper.calcY(50f)), new Vector2f(screenHelper.calcX(100f), screenHelper.calcY(40f))); lblArtistHead.setText("Artist"); lblArtistHead.setFontSize(labelFontSize); - - Label lblArtist = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy + screenHelper.calcY(50f)), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); - lblArtist.setText(artist); + + lblArtist = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy + screenHelper.calcY(50f)), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); lblArtist.setFontSize(labelFontSize); - + Label lblTitelHead = new Label(screen, new Vector2f(startPointx, startPointy + screenHelper.calcY(100f)), new Vector2f(screenHelper.calcX(100f), screenHelper.calcY(40f))); lblTitelHead.setText("Titel"); lblTitelHead.setFontSize(labelFontSize); - - Label lblTitel = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy + screenHelper.calcY(100f)), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); - lblTitel.setText(title); + + lblTitel = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy + screenHelper.calcY(100f)), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); lblTitel.setFontSize(labelFontSize); - + Label lblDurationHead = new Label(screen, new Vector2f(startPointx, startPointy + screenHelper.calcY(150f)), new Vector2f(screenHelper.calcX(100f), screenHelper.calcY(40f))); lblDurationHead.setText("Duration"); lblDurationHead.setFontSize(labelFontSize); - - Label lblDuration = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy + screenHelper.calcY(150f)), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); - lblDuration.setText(duration); + + lblDuration = new Label(screen, new Vector2f(startPointx + marginLeft, startPointy + screenHelper.calcY(150f)), new Vector2f(screenHelper.calcX(400f), screenHelper.calcY(40f))); lblDuration.setFontSize(labelFontSize); - + Button btnStartLoading = new ButtonBase(screen, new Vector2f(startPointx + screenHelper.calcX(653f), startPointy + screenHelper.calcY(438.8f)), new Vector2f(buttonWidth, screenHelper.calcY(40))) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -113,7 +95,7 @@ public class FileMetaInfoGUI extends Panel implements Gui { }; btnStartLoading.setText("Play"); btnStartLoading.setFontSize(labelFontSize); - + Button btnCancel = new ButtonBase(screen, new Vector2f(startPointx + screenHelper.calcX(836f), startPointy + screenHelper.calcY(438.8f)), new Vector2f(buttonWidth, screenHelper.calcY(40))) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -122,7 +104,7 @@ public class FileMetaInfoGUI extends Panel implements Gui { }; btnCancel.setText("Cancel"); btnCancel.setFontSize(labelFontSize); - + this.addChild(lblFileNameHead); this.addChild(lblFileName); this.addChild(lblArtistHead); @@ -135,27 +117,11 @@ public class FileMetaInfoGUI extends Panel implements Gui { this.addChild(btnCancel); } - private void readMetaData(File file) { - try { - fileName = file.getName(); - AudioFile f = AudioFileIO.read(file); - Tag tag = f.getTag(); - AudioHeader ah = f.getAudioHeader(); - - if (ah != null) { - duration = String.valueOf(ah.getTrackLength()) + " s"; - } - - if (tag != null) { - if (tag.hasField(FieldKey.TITLE)) { - title = tag.getFirst(FieldKey.TITLE); - settings.setTrackTitle(title); - } - artist = tag.getFirst(FieldKey.ARTIST); - settings.setTrackArtist(artist); - } - } catch (Exception ex) { - } + public void refresh() { + lblDuration.setText(String.valueOf(settings.getTrackLength()) + " s"); + lblTitel.setText(settings.getTrackTitle()); + lblArtist.setText(settings.getTrackArtist()); + lblFileName.setText(new File(settings.getVideoFile()).getName()); } public void attach() { diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/Gui.java b/ShootingStars/src/org/wyrez/shootingstars/gui/Gui.java index 882ef9b..4857e92 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/Gui.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/Gui.java @@ -22,6 +22,8 @@ package org.wyrez.shootingstars.gui; */ public interface Gui { + public void refresh(); + public void attach(); public void detach(); diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/HighscoreGUI.java b/ShootingStars/src/org/wyrez/shootingstars/gui/HighscoreGUI.java index 17692cc..c1f76ad 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/HighscoreGUI.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/HighscoreGUI.java @@ -45,7 +45,7 @@ public class HighscoreGUI extends Panel implements Gui { this.highscoreManager = highscoreManager; this.screenHelper = screenHelper; this.setIgnoreMouse(true); - this.setIsVisible(false); + this.setIsVisible(false); create(); } @@ -66,7 +66,7 @@ public class HighscoreGUI extends Panel implements Gui { float marginScoreSongNameLeft = screenHelper.calcX(600f); float marginScoreTop = screenHelper.calcY(50f); - + float labelFontSize = screenHelper.calcX(20f); List highscores = highscoreManager.getScores(); @@ -84,12 +84,12 @@ public class HighscoreGUI extends Panel implements Gui { lblScoreSongNameHead.setFontSize(labelFontSize); int maxScores = 0; - if(highscores.size() > 10) { + if (highscores.size() > 10) { maxScores = 10; } else { maxScores = highscores.size(); } - + for (int i = 0; i < maxScores; i++) { Score score = highscores.get(i); Label lblScoreName = new Label(screen, new Vector2f(startPointx + marginScoreNameLeft, startPointy + marginScoreTop), new Vector2f(screenHelper.calcX(250f), screenHelper.calcY(40f))); @@ -101,7 +101,7 @@ public class HighscoreGUI extends Panel implements Gui { lblScorePoints.setFontSize(labelFontSize); Label lblScoreSongName = new Label(screen, new Vector2f(startPointx + marginScoreSongNameLeft, startPointy + marginScoreTop), new Vector2f(screenHelper.calcX(600f), screenHelper.calcY(40f))); - lblScoreSongName.setText(score.getSongName()); + lblScoreSongName.setFontSize(labelFontSize); this.addChild(lblScoreName); @@ -124,4 +124,7 @@ public class HighscoreGUI extends Panel implements Gui { this.addChild(lblScoreSongNameHead); this.addChild(btnBack); } + + public void refresh() { + } } diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/MenuGUI.java b/ShootingStars/src/org/wyrez/shootingstars/gui/MenuGUI.java index 18cbc84..d30fa52 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/MenuGUI.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/MenuGUI.java @@ -40,12 +40,12 @@ public class MenuGUI extends Panel implements Gui { this.listener = listener; this.screenHelper = screenHelper; this.setIgnoreMouse(true); - this.setIsVisible(false); + this.setIsVisible(false); create(); } private void create() { - + float startPointx = screenHelper.calcX(256f); float startPointy = screenHelper.calcY(252f); float labelFontSize = screenHelper.calcX(89f); @@ -56,11 +56,11 @@ public class MenuGUI extends Panel implements Gui { float marginButtonTop = screenHelper.calcY(25f); float distanceLabelLabely = screenHelper.calcY(60f); float buttonFontSize = screenHelper.calcX(20f); - + Label lblWyrez = new Label(screen, new Vector2f(startPointx, startPointy), new Vector2f(screenHelper.calcX(300), screenHelper.calcY(40))); lblWyrez.setFontSize(labelFontSize); lblWyrez.setText("Wyrez"); - + Label lblShootingStars = new Label(screen, new Vector2f(startPointx, startPointy + distanceLabelLabely), new Vector2f(screenHelper.calcX(500), screenHelper.calcY(40))); lblShootingStars.setFontSize(labelFontSize); lblShootingStars.setText("Shooting Stars"); @@ -73,7 +73,7 @@ public class MenuGUI extends Panel implements Gui { }; btnStart.setText("Start Game"); btnStart.setFontSize(buttonFontSize); - + Button btnHighscore = new ButtonBase(screen, new Vector2f(startPointx + buttonButtonDistancex, startPointy + marginButtonTop), new Vector2f(buttonWidth, screenHelper.calcY(40))) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -82,7 +82,7 @@ public class MenuGUI extends Panel implements Gui { }; btnHighscore.setText("Highscore"); btnHighscore.setFontSize(buttonFontSize); - + Button btnOptions = new ButtonBase(screen, new Vector2f(startPointx + buttonLabelDistancex, startPointy + buttonButtonDistancey), new Vector2f(buttonWidth, screenHelper.calcY(40))) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -91,7 +91,7 @@ public class MenuGUI extends Panel implements Gui { }; btnOptions.setText("Options"); btnOptions.setFontSize(buttonFontSize); - + Button btnExit = new ButtonBase(screen, new Vector2f(startPointx + buttonButtonDistancex, startPointy + buttonButtonDistancey), new Vector2f(buttonWidth, screenHelper.calcY(40))) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -109,6 +109,9 @@ public class MenuGUI extends Panel implements Gui { this.addChild(lblShootingStars); } + public void refresh() { + } + public void attach() { screen.addElement(this); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/OptionsGUI.java b/ShootingStars/src/org/wyrez/shootingstars/gui/OptionsGUI.java index daa9b51..badfe2a 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/OptionsGUI.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/OptionsGUI.java @@ -42,10 +42,8 @@ public class OptionsGUI extends Panel implements Gui { private OptionsListener listener; private OptionSettings settings; private ScreenHelper screenHelper; - //General Controls private TextField txtPlayerName; - //Video Controls private ComboBox cboResolution; private ComboBox cboFrequency; @@ -83,7 +81,7 @@ public class OptionsGUI extends Panel implements Gui { float buttonWidth = screenHelper.calcX(153.6f); float buttonHeight = screenHelper.calcY(40f); - + float labelFontSize = screenHelper.calcX(20f); createGeneral(labelFontSize); @@ -123,10 +121,10 @@ public class OptionsGUI extends Panel implements Gui { Label lblPlayerName = new Label(screen, new Vector2f(startPointx, startPointy), new Vector2f(screenHelper.calcX(120f), screenHelper.calcY(40f))); lblPlayerName.setText("Player Name"); lblPlayerName.setFontSize(labelFontSize); - + txtPlayerName = new TextField(screen, new Vector2f(startPointx + marginLeftControls, startPointy + screenHelper.calcY(7f)), new Vector2f(screenHelper.calcX(200f), screenHelper.calcY(30f))); txtPlayerName.setFontSize(labelFontSize); - + this.addChild(lblPlayerName); this.addChild(txtPlayerName); } @@ -138,13 +136,13 @@ public class OptionsGUI extends Panel implements Gui { float marginLeftControls = screenHelper.calcX(115.8f); float labelWitdh = screenHelper.calcX(120f); float labelHeight = screenHelper.calcY(40f); - + float comboBoxWidth = screenHelper.calcX(200f); float comboBoxHeight = screenHelper.calcY(30f); - + float checkBoxWitdh = screenHelper.calcX(20f); float checkBoxHeight = screenHelper.calcX(20f); - + float sliderWitdh = screenHelper.calcX(200f); float sliderHeight = screenHelper.calcY(30f); @@ -165,7 +163,7 @@ public class OptionsGUI extends Panel implements Gui { lblPostProcessing.setFontSize(labelFontSize); chkShowWeapon = new CheckBox(screen, new Vector2f(startPointx + marginLeftControls + screenHelper.calcX(800f), startPointy + screenHelper.calcY(12f)), new Vector2f(checkBoxWitdh, checkBoxHeight)); - + Label lblResolution = new Label(screen, "lblResolution", new Vector2f(startPointx, startPointy + screenHelper.calcY(50f)), new Vector2f(labelWitdh, labelHeight)); lblResolution.setText("Resolution"); lblResolution.setFontSize(labelFontSize); @@ -192,9 +190,9 @@ public class OptionsGUI extends Panel implements Gui { cboFrequency.setFontSize(labelFontSize); for (String s : DisplayHelper.getFrequencys()) { cboFrequency.addListItem(s, s); - } + } - Label lblParticleDensity = new Label(screen, "lblParticleDensity", new Vector2f(startPointx + screenHelper.calcX(800f), startPointy +screenHelper.calcY(50f)), new Vector2f(labelWitdh, labelHeight)); + Label lblParticleDensity = new Label(screen, "lblParticleDensity", new Vector2f(startPointx + screenHelper.calcX(800f), startPointy + screenHelper.calcY(50f)), new Vector2f(labelWitdh, labelHeight)); lblParticleDensity.setText("Particle Density"); lblParticleDensity.setFontSize(labelFontSize); @@ -205,7 +203,7 @@ public class OptionsGUI extends Panel implements Gui { }; sldParticleDensity.setStepIntegerRange(0, 3, 1); - + this.addChild(lblVSync); this.addChild(chkVSync); this.addChild(lblFullscreen); @@ -224,10 +222,10 @@ public class OptionsGUI extends Panel implements Gui { float startPointx = screenHelper.calcX(64f); float startPointy = screenHelper.calcY(290f); float marginLeftControls = screenHelper.calcX(115.8f); - + float labelWitdh = screenHelper.calcX(120f); float labelHeight = screenHelper.calcY(40f); - + float sliderWitdh = screenHelper.calcX(200f); float sliderHeight = screenHelper.calcY(30f); @@ -245,7 +243,7 @@ public class OptionsGUI extends Panel implements Gui { Label lblFXVolume = new Label(screen, "lblFXVolume", new Vector2f(startPointx + screenHelper.calcX(400f), startPointy), new Vector2f(labelWitdh, labelHeight)); lblFXVolume.setText("Menu Volume"); lblFXVolume.setFontSize(labelFontSize); - + sldMenuVolume = new Slider(screen, new Vector2f(startPointx + marginLeftControls + screenHelper.calcX(400f), startPointy + screenHelper.calcY(7f)), new Vector2f(sliderWitdh, sliderHeight), Slider.Orientation.HORIZONTAL, false) { @Override public void onChange(int selectedIndex, Object value) { @@ -277,7 +275,7 @@ public class OptionsGUI extends Panel implements Gui { //General txtPlayerName.setText(settings.getUsername()); - + //Video setComboBoxValue(cboResolution, resolution); setComboBoxValue(cboFrequency, String.valueOf(settings.getFrequency())); @@ -303,7 +301,7 @@ public class OptionsGUI extends Panel implements Gui { private void saveControlValues() { //General settings.setUsername(txtPlayerName.getText()); - + //Video String resolution[] = cboResolution.getSelectedListItem().getValue().toString().split(" x "); settings.setWidth(Integer.parseInt(resolution[0])); @@ -321,4 +319,7 @@ public class OptionsGUI extends Panel implements Gui { settings.save(); } + + public void refresh() { + } } diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/SelectTrackGUI.java b/ShootingStars/src/org/wyrez/shootingstars/gui/SelectTrackGUI.java index 7b0aead..0e83341 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/SelectTrackGUI.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/SelectTrackGUI.java @@ -30,11 +30,11 @@ import tonegod.gui.core.Screen; * * @author Snowsun */ -public class SelectTrackGUI extends Panel implements Gui{ +public class SelectTrackGUI extends Panel implements Gui { private SelectFileListener listener; private ScreenHelper screenHelper; - + public SelectTrackGUI(Screen screen, SelectFileListener listener, ScreenHelper screenHelper) { super(screen, new Vector2f(0f, 0f), new Vector2f(1280f, 720f)); //create for full hd this.listener = listener; @@ -43,7 +43,7 @@ public class SelectTrackGUI extends Panel implements Gui{ this.setIsVisible(false); create(); } - + private void create() { float startPointx = screenHelper.calcX(576f); float startPointy = screenHelper.calcY(260f); @@ -56,7 +56,7 @@ public class SelectTrackGUI extends Panel implements Gui{ float labelWitdh = screenHelper.calcX(100f); float labelHeight = screenHelper.calcY(40f); float buttonFontSize = screenHelper.calcX(20f); - + Button btnSelectFile = new ButtonBase(screen, new Vector2f(startPointx, startPointy), new Vector2f(buttonWidth, buttonHeight)) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -65,11 +65,11 @@ public class SelectTrackGUI extends Panel implements Gui{ }; btnSelectFile.setText("Select File"); btnSelectFile.setFontSize(buttonFontSize); - + Label lblOr = new Label(screen, new Vector2f(startPointx + marginLabelOrLeft, startPointy + marginLabelOrTop), new Vector2f(labelWitdh, labelHeight)); lblOr.setFontSize(labelFontSize); lblOr.setText("Or"); - + Button btnYTDownload = new ButtonBase(screen, new Vector2f(startPointx, startPointy + marginButtonYTDownloadTop), new Vector2f(buttonWidth, buttonHeight)) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -78,7 +78,7 @@ public class SelectTrackGUI extends Panel implements Gui{ }; btnYTDownload.setText("YT Download"); btnYTDownload.setFontSize(buttonFontSize); - + Button btnCancel = new ButtonBase(screen, new Vector2f(startPointx, startPointy + marginButtonYTDownloadTop + screenHelper.calcY(114f)), new Vector2f(buttonWidth, buttonHeight)) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -87,13 +87,16 @@ public class SelectTrackGUI extends Panel implements Gui{ }; btnCancel.setText("Cancel"); btnCancel.setFontSize(buttonFontSize); - + this.addChild(btnSelectFile); this.addChild(lblOr); this.addChild(btnYTDownload); this.addChild(btnCancel); } - + + public void refresh() { + } + public void attach() { screen.addElement(this); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/gui/YTDownloadGUI.java b/ShootingStars/src/org/wyrez/shootingstars/gui/YTDownloadGUI.java index 5af5340..9537af7 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/gui/YTDownloadGUI.java +++ b/ShootingStars/src/org/wyrez/shootingstars/gui/YTDownloadGUI.java @@ -31,11 +31,11 @@ import tonegod.gui.core.Screen; * * @author Snowsun */ -public class YTDownloadGUI extends Panel implements Gui{ +public class YTDownloadGUI extends Panel implements Gui { private YTDownloadListener listener; private ScreenHelper screenHelper; - + public YTDownloadGUI(Screen screen, YTDownloadListener listener, ScreenHelper screenHelper) { super(screen, new Vector2f(0f, 0f), new Vector2f(1280f, 720f)); //create for full hd this.listener = listener; @@ -44,7 +44,7 @@ public class YTDownloadGUI extends Panel implements Gui{ this.setIsVisible(false); create(); } - + private void create() { float startPointx = screenHelper.calcX(384f); float startPointy = screenHelper.calcY(324f); @@ -58,20 +58,20 @@ public class YTDownloadGUI extends Panel implements Gui{ float marginYTButtonTop = screenHelper.calcY(72f); float labelWitdh = screenHelper.calcX(160f); float labelHeight = screenHelper.calcY(40f); - + float buttonFontSize = screenHelper.calcX(20f); float buttonHeight = screenHelper.calcY(40f); float textFieldHeight = screenHelper.calcY(40f); - - + + Label lblYTLink = new Label(screen, new Vector2f(startPointx, startPointy), new Vector2f(labelWitdh, labelHeight)); lblYTLink.setFontSize(labelFontSize); lblYTLink.setText("YT Link"); - - final TextField txtYTLink = new TextField(screen,"txtYTLink", new Vector2f(startPointx + marginTextFieldLeft, startPointy + marginTextFieldTop), new Vector2f(textFieldWitdh, textFieldHeight)); + + final TextField txtYTLink = new TextField(screen, "txtYTLink", new Vector2f(startPointx + marginTextFieldLeft, startPointy + marginTextFieldTop), new Vector2f(textFieldWitdh, textFieldHeight)); txtYTLink.setType(TextField.Type.DEFAULT); txtYTLink.setFontSize(buttonFontSize); - + Button btnYTDownload = new ButtonBase(screen, new Vector2f(startPointx + marginYTButtonLeft, startPointy + marginYTButtonTop), new Vector2f(buttonWidth, buttonHeight)) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -80,7 +80,7 @@ public class YTDownloadGUI extends Panel implements Gui{ }; btnYTDownload.setText("Download"); btnYTDownload.setFontSize(buttonFontSize); - + Button btnCancel = new ButtonBase(screen, new Vector2f(startPointx + marginCancelButtonLeft, startPointy + marginYTButtonTop), new Vector2f(buttonWidth, buttonHeight)) { @Override public void onButtonMouseLeftUp(MouseButtonEvent evt, boolean toggled) { @@ -89,13 +89,16 @@ public class YTDownloadGUI extends Panel implements Gui{ }; btnCancel.setText("Cancel"); btnCancel.setFontSize(buttonFontSize); - + this.addChild(lblYTLink); this.addChild(txtYTLink); this.addChild(btnYTDownload); this.addChild(btnCancel); } - + + public void refresh() { + } + public void attach() { screen.addElement(this); } @@ -103,5 +106,4 @@ public class YTDownloadGUI extends Panel implements Gui{ public void detach() { screen.removeElement(this); } - } diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/FileMetaInfoState.java b/ShootingStars/src/org/wyrez/shootingstars/states/FileMetaInfoState.java index a122e37..dec2dcb 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/FileMetaInfoState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/FileMetaInfoState.java @@ -32,12 +32,10 @@ import tonegod.gui.core.Screen; public class FileMetaInfoState extends AbstractAppState implements FileMetaInfoListener { private StateManager stateManager; - private GameSettings settings; private Gui gui; public FileMetaInfoState(Screen screen, StateManager stateManager, GameSettings settings, ScreenHelper screenHelper) { this.stateManager = stateManager; - this.settings = settings; this.gui = new FileMetaInfoGUI(screen, this, settings, screenHelper); } @@ -51,6 +49,7 @@ public class FileMetaInfoState extends AbstractAppState implements FileMetaInfoL @Override public void stateAttached(AppStateManager stateManager) { + gui.refresh(); gui.attach(); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/GameState.java b/ShootingStars/src/org/wyrez/shootingstars/states/GameState.java index b7edbe0..741c2a7 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/GameState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/GameState.java @@ -95,7 +95,12 @@ public class GameState extends AbstractAppState implements GameListener, ActionL this.optionSettings = optionSettings; this.highscoreManager = highscoreManager; - mediaPlayerFactory = new MediaPlayerFactory("--no-video-title-show", "--quiet"); + if (settings.useVideo()) { + mediaPlayerFactory = new MediaPlayerFactory("--no-video-title-show", "--quiet"); + } else { + mediaPlayerFactory = new MediaPlayerFactory("--no-video-title-show", "--quiet", + "--audio-visual=visual", "--effect-list=scope"); + } this.settings = settings; @@ -113,6 +118,7 @@ public class GameState extends AbstractAppState implements GameListener, ActionL mediaPlayer = mediaPlayerFactory.newDirectMediaPlayer(settings.getVideoFormat(), settings.getVideoWidth(), settings.getVideoHeight(), settings.getVideoWidth() * settings.getVideoDepth(), cinema); + mediaPlayer.addMediaPlayerEventListener(new MediaPlayerEventListenerBase() { @Override public void finished(MediaPlayer mp) { @@ -130,7 +136,7 @@ public class GameState extends AbstractAppState implements GameListener, ActionL public void loadPlayer() { starNode = new Node(); player = new Player(rootNode, stateManager, assetManager, viewPort, gui, - inputManager, camera, audioDataManager, starNode); + inputManager, camera, audioDataManager, starNode, optionSettings); gui.setPlayer(player); @@ -146,8 +152,8 @@ public class GameState extends AbstractAppState implements GameListener, ActionL public void start() { gui.setStart(); inputManager.setCursorVisible(false); - mediaPlayer.setVolume(optionSettings.getMusicVolume() * - Math.round((float)optionSettings.getMasterVolume() / 100f)); + mediaPlayer.setVolume(optionSettings.getMusicVolume() + * Math.round((float) optionSettings.getMasterVolume() / 100f)); mediaPlayer.play(); setRunning(true); } @@ -238,13 +244,13 @@ public class GameState extends AbstractAppState implements GameListener, ActionL public void finished() { String songName = settings.getTrackArtist() + " - " + settings.getTrackTitle(); - - if(settings.useVideo()) { + + if (settings.useVideo()) { highscoreManager.addScore(songName, optionSettings.getUsername(), Integer.valueOf(player.getUserData(UserDataKeys.POINTS).toString())); } else { highscoreManager.addScore(songName, optionSettings.getUsername(), Integer.valueOf(player.getUserData(UserDataKeys.POINTS).toString())); } - + stateManager.setState(State.HIGHSCORE); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/SelectTrackState.java b/ShootingStars/src/org/wyrez/shootingstars/states/SelectTrackState.java index 1849dda..fe7d3aa 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/SelectTrackState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/SelectTrackState.java @@ -18,6 +18,7 @@ package org.wyrez.shootingstars.states; import com.jme3.app.state.AbstractAppState; import com.jme3.app.state.AppStateManager; +import com.sun.jna.Memory; import java.io.File; import javax.swing.JFileChooser; import org.wyrez.shootingstars.game.GameSettings; @@ -25,6 +26,10 @@ import org.wyrez.shootingstars.gui.SelectTrackGUI; import org.wyrez.shootingstars.gui.listener.SelectFileListener; import org.wyrez.shootingstars.helper.ScreenHelper; import tonegod.gui.core.Screen; +import uk.co.caprica.vlcj.player.MediaPlayerFactory; +import uk.co.caprica.vlcj.player.direct.BufferFormat; +import uk.co.caprica.vlcj.player.direct.DirectMediaPlayer; +import uk.co.caprica.vlcj.player.direct.RenderCallback; /** * @@ -32,6 +37,8 @@ import tonegod.gui.core.Screen; */ public class SelectTrackState extends AbstractAppState implements SelectFileListener { + private static final int SLEEP = 1000; + /**/ private StateManager stateManager; private GameSettings settings; private SelectTrackGUI gui; @@ -39,7 +46,7 @@ public class SelectTrackState extends AbstractAppState implements SelectFileList public SelectTrackState(Screen screen, StateManager stateManager, GameSettings settings, ScreenHelper screenHelper) { this.stateManager = stateManager; this.settings = settings; - this.gui = new SelectTrackGUI(screen, this,screenHelper); + this.gui = new SelectTrackGUI(screen, this, screenHelper); } @Override @@ -59,10 +66,35 @@ public class SelectTrackState extends AbstractAppState implements SelectFileList if (returnVal == JFileChooser.APPROVE_OPTION) { File file = jFileChooser.getSelectedFile(); settings.setVideoFile(file.getPath()); + readMetadata(settings.getVideoFile()); + stateManager.setState(State.FILEMETAINFO); } } + private void readMetadata(String file) { + MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory("--no-video-title-show", "--quiet"); + DirectMediaPlayer mediaPlayer = mediaPlayerFactory.newDirectMediaPlayer(1, 1, new RenderCallback() { + public void display(DirectMediaPlayer dmp, Memory[] memorys, BufferFormat bf) { + } + }); + mediaPlayer.setVolume(0); + mediaPlayer.prepareMedia(file); + mediaPlayer.play(); + try { + Thread.sleep(SLEEP); + } catch (Exception ex) { + } + settings.useVideo(mediaPlayer.getVideoTrackCount() > 0); + settings.setTrackTitle(mediaPlayer.getMediaMeta().getTitle()); + settings.setTrackArtist(mediaPlayer.getMediaMeta().getArtist()); + settings.setTrackLength(Math.round((float) mediaPlayer.getLength() / 1000f)); + + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayerFactory.release(); + } + public void downloadYT() { stateManager.setState(State.YTDOWNLOAD); } diff --git a/ShootingStars/src/org/wyrez/shootingstars/states/YTDownloadState.java b/ShootingStars/src/org/wyrez/shootingstars/states/YTDownloadState.java index 9291f65..faee704 100644 --- a/ShootingStars/src/org/wyrez/shootingstars/states/YTDownloadState.java +++ b/ShootingStars/src/org/wyrez/shootingstars/states/YTDownloadState.java @@ -18,9 +18,11 @@ package org.wyrez.shootingstars.states; import com.jme3.app.state.AbstractAppState; import com.jme3.app.state.AppStateManager; +import com.sun.jna.Memory; import java.io.File; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.wyrez.baseio.config.FlatFileConfig; import org.wyrez.shootingstars.data.YTDownloader; import org.wyrez.shootingstars.game.GameSettings; import org.wyrez.shootingstars.gui.YTDownloadGUI; @@ -28,6 +30,10 @@ import org.wyrez.shootingstars.gui.listener.YTDownloadListener; import org.wyrez.shootingstars.helper.PathHelper; import org.wyrez.shootingstars.helper.ScreenHelper; import tonegod.gui.core.Screen; +import uk.co.caprica.vlcj.player.MediaPlayerFactory; +import uk.co.caprica.vlcj.player.direct.BufferFormat; +import uk.co.caprica.vlcj.player.direct.DirectMediaPlayer; +import uk.co.caprica.vlcj.player.direct.RenderCallback; /** * @@ -35,6 +41,10 @@ import tonegod.gui.core.Screen; */ public class YTDownloadState extends AbstractAppState implements YTDownloadListener { + private static final int SLEEP = 1000; + private static final String META_EXTENSION = ".meta"; + private static final String KEY_TITLE = "Title"; + private static final String KEY_ARTIST = "Artist"; private static final Pattern YT_LINK_PATTERN = Pattern.compile("\\?v=[^\\&]*\\&??"); /**/ private StateManager stateManager; @@ -77,8 +87,10 @@ public class YTDownloadState extends AbstractAppState implements YTDownloadListe path = PathHelper.getCacheFolder() + identifier + targetPath.substring(targetPath.lastIndexOf("."), targetPath.length()); new File(targetPath).renameTo(new File(path)); + createMetadataFile(path); } settings.setVideoFile(path); + readMetadata(); stateManager.setState(State.FILEMETAINFO); } catch (Exception ex) { stateManager.setState(State.MENU); @@ -95,6 +107,38 @@ public class YTDownloadState extends AbstractAppState implements YTDownloadListe return null; } + private void createMetadataFile(String file) { + FlatFileConfig config = new FlatFileConfig(file + META_EXTENSION); + config.putString(KEY_TITLE, downloader.getLastTitle()); + config.putString(KEY_ARTIST, "Youtube download"); + config.save(); + } + + private void readMetadata() { + MediaPlayerFactory mediaPlayerFactory = new MediaPlayerFactory("--no-video-title-show", "--quiet"); + DirectMediaPlayer mediaPlayer = mediaPlayerFactory.newDirectMediaPlayer(1, 1, new RenderCallback() { + public void display(DirectMediaPlayer dmp, Memory[] memorys, BufferFormat bf) { + } + }); + mediaPlayer.setVolume(0); + mediaPlayer.prepareMedia(settings.getVideoFile()); + mediaPlayer.play(); + try { + Thread.sleep(SLEEP); + } catch (Exception ex) { + } + FlatFileConfig config = new FlatFileConfig(settings.getVideoFile() + META_EXTENSION); + settings.setTrackTitle(config.getString(KEY_TITLE)); + settings.setTrackArtist(config.getString(KEY_ARTIST)); + + settings.useVideo(mediaPlayer.getVideoTrackCount() > 0); + settings.setTrackLength(Math.round((float) mediaPlayer.getLength() / 1000f)); + + mediaPlayer.stop(); + mediaPlayer.release(); + mediaPlayerFactory.release(); + } + public void cancel() { stateManager.setState(State.MENU); }