diff options
author | ricardolpd <[email protected]> | 2012-11-28 22:12:31 +0000 |
---|---|---|
committer | ricardolpd <[email protected]> | 2012-11-28 22:12:31 +0000 |
commit | c896e51a67873939bec3e2c9d9a424b32241c56e (patch) | |
tree | a537b82b91589965584f9539f64e74a001043ac5 | |
parent | 362f97fc3e2b37393f678a5530624f439ea10c78 (diff) |
Changed AnimationManager to support automatic reset once the current state is stop.
-rw-r--r-- | trunk/ardor3d-animation/src/main/java/com/ardor3d/extension/animation/skeletal/AnimationManager.java | 51 |
1 files changed, 42 insertions, 9 deletions
diff --git a/trunk/ardor3d-animation/src/main/java/com/ardor3d/extension/animation/skeletal/AnimationManager.java b/trunk/ardor3d-animation/src/main/java/com/ardor3d/extension/animation/skeletal/AnimationManager.java index 01afa82..30e2e9b 100644 --- a/trunk/ardor3d-animation/src/main/java/com/ardor3d/extension/animation/skeletal/AnimationManager.java +++ b/trunk/ardor3d-animation/src/main/java/com/ardor3d/extension/animation/skeletal/AnimationManager.java @@ -85,9 +85,14 @@ public class AnimationManager { protected AnimationUpdateState _currentAnimationState = AnimationUpdateState.Play; /** - * boolean threshold to allow stop state to be updated one last time... + * boolean flag to allow stop state to be updated one last time. */ - private boolean _canSetStopState = false; + protected boolean _canSetStopState = false; + + /** + * boolean flag to reset Clips automatically once they are stopped. + */ + protected boolean _resetClipsOnStop = false; /** * Listeners for changes to this manager's AnimationUpdateState. @@ -157,6 +162,24 @@ public class AnimationManager { _globalTimer = timer; } + /** + * + * @return True if clips will reset if the currentUpdateState is Stop. + */ + public boolean isResetClipsOnStop() { + return _resetClipsOnStop; + } + + /** + * @param resetClipsOnStop + * True if clips are to be reset when currentUpdateState is Stop, false otherwise. + * + * + */ + public void setResetClipsOnStop(final boolean resetClipsOnStop) { + _resetClipsOnStop = resetClipsOnStop; + } + public void play() { setAnimationUpdateState(AnimationUpdateState.Play); } @@ -165,7 +188,8 @@ public class AnimationManager { setAnimationUpdateState(AnimationUpdateState.Pause); } - public void stop() { + public void stop(final boolean resetOnStop) { + setResetClipsOnStop(resetOnStop); setAnimationUpdateState(AnimationUpdateState.Stop); } @@ -205,12 +229,15 @@ public class AnimationManager { } } } else { - // must be resuming from stop, so restart clips - for (final AnimationClipInstance instance : _clipInstances.values()) { - if (instance.isActive()) { - instance.setStartTime(currentTime); + // if newState is check if we will restart clips. + if (_resetClipsOnStop) { + for (final AnimationClipInstance instance : _clipInstances.values()) { + if (instance.isActive()) { + instance.setStartTime(currentTime); + } } } + } } else { for (final AnimationClipInstance instance : _clipInstances.values()) { @@ -338,9 +365,15 @@ public class AnimationManager { public void update() { if (_currentAnimationState != AnimationUpdateState.Play) { - if (_currentAnimationState == AnimationUpdateState.Stop && !_canSetStopState) { - _canSetStopState = true; + if (_resetClipsOnStop) { + if (_currentAnimationState == AnimationUpdateState.Stop && !_canSetStopState) { + _canSetStopState = true; + } else { + // pause state or reset update has occurred + return; + } } else { + // stop update without reseting return; } } else { |