159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/* 259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Copyright (c) 2009-2010 jMonkeyEngine 359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * All rights reserved. 459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Redistribution and use in source and binary forms, with or without 659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * modification, are permitted provided that the following conditions are 759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * met: 859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions of source code must retain the above copyright 1059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer. 1159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Redistributions in binary form must reproduce the above copyright 1359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * notice, this list of conditions and the following disclaimer in the 1459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * documentation and/or other materials provided with the distribution. 1559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 1659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 1759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * may be used to endorse or promote products derived from this software 1859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * without specific prior written permission. 1959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 2059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 2259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 2359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 2459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 3059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 3259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapackage com.jme3.cinematic.events; 3359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 3459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.animation.LoopMode; 3559b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.app.Application; 3659b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.cinematic.Cinematic; 3759b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.cinematic.PlayState; 3859b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.InputCapsule; 3959b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.JmeExporter; 4059b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.JmeImporter; 4159b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport com.jme3.export.OutputCapsule; 4259b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.io.IOException; 4359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.ArrayList; 4459b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartaimport java.util.List; 4559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 4659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta/** 4759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * This calls contains basic behavior of a cinematic event 4859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * every cinematic event must extend this class 4959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * 5059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * A cinematic event must be given an inital duration in seconds (duration of the event at speed = 1) (default is 10) 5159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @author Nehon 5259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 5359b2e6871c65f58fdad78cd7229c292f6a177578Scott Bartapublic abstract class AbstractCinematicEvent implements CinematicEvent { 5459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 5559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected PlayState playState = PlayState.Stopped; 5659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected float speed = 1; 5759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected float initialDuration = 10; 5859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected LoopMode loopMode = LoopMode.DontLoop; 5959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected float time = 0; 6059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected boolean resuming = false; 6159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * the list of listeners 6459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 6559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected List<CinematicEventListener> listeners; 6659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 6759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 6859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * contruct a cinematic event 6959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public AbstractCinematicEvent() { 7159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 7259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 7359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 7459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * contruct a cinematic event wwith the given initial duration 7559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param initialDuration 7659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 7759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public AbstractCinematicEvent(float initialDuration) { 7859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.initialDuration = initialDuration; 7959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 8259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * contruct a cinematic event with the given loopMode 8359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param loopMode 8459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 8559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public AbstractCinematicEvent(LoopMode loopMode) { 8659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.loopMode = loopMode; 8759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 8859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 8959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 9059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * contruct a cinematic event with the given loopMode and the given initialDuration 9159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param initialDuration the duration of the event at speed = 1 9259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param loopMode the loop mode of the event 9359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 9459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public AbstractCinematicEvent(float initialDuration, LoopMode loopMode) { 9559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.initialDuration = initialDuration; 9659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.loopMode = loopMode; 9759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 9859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 9959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 10059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Play this event 10159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 10259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void play() { 10359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta onPlay(); 10459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta playState = PlayState.Playing; 10559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (listeners != null) { 10659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta for (int i = 0; i < listeners.size(); i++) { 10759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta CinematicEventListener cel = listeners.get(i); 10859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta cel.onPlay(this); 10959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 11259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Place here the code you want to execute when the event is started 11559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 11659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected abstract void onPlay(); 11759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 11859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 11959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * should be used internally only 12059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param tpf time per frame 12159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 12259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void internalUpdate(float tpf) { 12359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (playState == PlayState.Playing) { 12459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta time = time + (tpf * speed); 12559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta //time = elapsedTimePause + (timer.getTimeInSeconds() - start) * speed; 12659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 12759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta onUpdate(tpf); 12859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (time >= initialDuration && loopMode == loopMode.DontLoop) { 12959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta stop(); 13059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 13159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 13259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 13459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 13559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 13659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Place here the code you want to execute on update (only called when the event is playing) 13759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param tpf time per frame 13859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 13959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected abstract void onUpdate(float tpf); 14059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 14159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 14259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * stops the animation, next time play() is called the animation will start from the begining. 14359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 14459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void stop() { 14559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta onStop(); 14659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta time = 0; 14759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta playState = PlayState.Stopped; 14859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (listeners != null) { 14959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta for (int i = 0; i < listeners.size(); i++) { 15059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta CinematicEventListener cel = listeners.get(i); 15159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta cel.onStop(this); 15259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 15359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 15459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 15559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 15659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 15759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Place here the code you want to execute when the event is stoped. 15859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 15959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta protected abstract void onStop(); 16059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 16159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 16259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * pause this event 16359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 16459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void pause() { 16559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta onPause(); 16659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta playState = PlayState.Paused; 16759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (listeners != null) { 16859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta for (int i = 0; i < listeners.size(); i++) { 16959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta CinematicEventListener cel = listeners.get(i); 17059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta cel.onPause(this); 17159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 17259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 17359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 17459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 17559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 17659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * place here the code you want to execute when the event is paused 17759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 17859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public abstract void onPause(); 17959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the actual duration of the animtion (initialDuration/speed) 18259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return 18359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 18459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getDuration() { 18559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return initialDuration / speed; 18659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 18759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 18859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 18959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets the speed of the animation. 19059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * At speed = 1, the animation will last initialDuration seconds, 19159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * At speed = 2 the animation will last initialDuraiton/2... 19259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param speed 19359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 19459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setSpeed(float speed) { 19559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.speed = speed; 19659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 19759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 19859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 19959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the speed of the animation. 20059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return 20159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 20259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getSpeed() { 20359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return speed; 20459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 20559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 20659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 20759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Returns the current playstate of the animation 20859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return 20959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public PlayState getPlayState() { 21159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return playState; 21259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 21359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 21459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 21559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * returns the initial duration of the animation at speed = 1 in seconds. 21659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return 21759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 21859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getInitialDuration() { 21959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return initialDuration; 22059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 22259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 22359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets the duration of the antionamtion at speed = 1 in seconds 22459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param initialDuration 22559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 22659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setInitialDuration(float initialDuration) { 22759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.initialDuration = initialDuration; 22859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 22959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 23159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * retursthe loopMode of the animation 23259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see LoopMode 23359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return 23459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 23559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public LoopMode getLoopMode() { 23659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return loopMode; 23759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 23859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 23959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Sets the loopMode of the animation 24159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @see LoopMode 24259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param loopMode 24359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 24459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setLoopMode(LoopMode loopMode) { 24559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.loopMode = loopMode; 24659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 24759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 24859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 24959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * for serialization only 25059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param ex exporter 25159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @throws IOException 25259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 25359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void write(JmeExporter ex) throws IOException { 25459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta OutputCapsule oc = ex.getCapsule(this); 25559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta oc.write(playState, "playState", PlayState.Stopped); 25659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta oc.write(speed, "speed", 1); 25759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta oc.write(initialDuration, "initalDuration", 10); 25859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta oc.write(loopMode, "loopMode", LoopMode.DontLoop); 25959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 26059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 26159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 26259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * for serialization only 26359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param im importer 26459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @throws IOException 26559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 26659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void read(JmeImporter im) throws IOException { 26759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta InputCapsule ic = im.getCapsule(this); 26859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta playState = ic.readEnum("playState", PlayState.class, PlayState.Stopped); 26959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta speed = ic.readFloat("speed", 1); 27059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta initialDuration = ic.readFloat("initalDuration", 10); 27159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta loopMode = ic.readEnum("loopMode", LoopMode.class, LoopMode.DontLoop); 27259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 27359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 27459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 27559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * initialize this event (should be called internally only) 27659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param app 27759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param cinematic 27859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 27959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void initEvent(Application app, Cinematic cinematic) { 28059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 28159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 28259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 28359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * return a list of CinematicEventListener added on this event 28459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @return 28559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 28659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta private List<CinematicEventListener> getListeners() { 28759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta if (listeners == null) { 28859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta listeners = new ArrayList<CinematicEventListener>(); 28959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return listeners; 29159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 29259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 29359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 29459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * Add a CinematicEventListener to this event 29559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param listener CinematicEventListener 29659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 29759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void addListener(CinematicEventListener listener) { 29859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta getListeners().add(listener); 29959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 30259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * remove a CinematicEventListener from this event 30359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param listener CinematicEventListener 30459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 30559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void removeListener(CinematicEventListener listener) { 30659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta getListeners().remove(listener); 30759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 30859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 30959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta /** 31059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * When this method is invoked, the event should fast forward to the given time according tim 0 is the start of the event. 31159b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta * @param time the time to fast forward to 31259b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta */ 31359b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public void setTime(float time) { 31459b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta this.time = time / speed; 31559b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 31659b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta 31759b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta public float getTime() { 31859b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta return time; 31959b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta } 32059b2e6871c65f58fdad78cd7229c292f6a177578Scott Barta} 321