Fixed an issue in animControl where the onanimCycleDone was called too early.
see http://hub.jmonkeyengine.org/forum/topic/onanimcycledone-called-before-animation-completes/#post-257008 git-svn-id: https://jmonkeyengine.googlecode.com/svn/branches/gradle-restructure@10996 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
bace22528f
commit
75e82e47f2
@ -31,6 +31,9 @@
|
|||||||
*/
|
*/
|
||||||
package com.jme3.animation;
|
package com.jme3.animation;
|
||||||
|
|
||||||
|
import static com.jme3.animation.LoopMode.Cycle;
|
||||||
|
import static com.jme3.animation.LoopMode.DontLoop;
|
||||||
|
import static com.jme3.animation.LoopMode.Loop;
|
||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.util.TempVars;
|
import com.jme3.util.TempVars;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
@ -59,6 +62,7 @@ public final class AnimChannel {
|
|||||||
private float time;
|
private float time;
|
||||||
private float speed;
|
private float speed;
|
||||||
private float timeBlendFrom;
|
private float timeBlendFrom;
|
||||||
|
private float blendTime;
|
||||||
private float speedBlendFrom;
|
private float speedBlendFrom;
|
||||||
private boolean notified=false;
|
private boolean notified=false;
|
||||||
|
|
||||||
@ -192,6 +196,11 @@ public final class AnimChannel {
|
|||||||
*/
|
*/
|
||||||
public void setSpeed(float speed) {
|
public void setSpeed(float speed) {
|
||||||
this.speed = speed;
|
this.speed = speed;
|
||||||
|
if(blendTime>0){
|
||||||
|
this.speedBlendFrom = speed;
|
||||||
|
blendTime = Math.min(blendTime, animation.getLength() / speed);
|
||||||
|
blendRate = 1/ blendTime;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -248,7 +257,9 @@ public final class AnimChannel {
|
|||||||
control.notifyAnimChange(this, name);
|
control.notifyAnimChange(this, name);
|
||||||
|
|
||||||
if (animation != null && blendTime > 0f){
|
if (animation != null && blendTime > 0f){
|
||||||
|
this.blendTime = blendTime;
|
||||||
// activate blending
|
// activate blending
|
||||||
|
blendTime = Math.min(blendTime, anim.getLength() / speed);
|
||||||
blendFrom = animation;
|
blendFrom = animation;
|
||||||
timeBlendFrom = time;
|
timeBlendFrom = time;
|
||||||
speedBlendFrom = speed;
|
speedBlendFrom = speed;
|
||||||
@ -393,7 +404,6 @@ public final class AnimChannel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
animation.setTime(time, blendAmount, control, this, vars);
|
animation.setTime(time, blendAmount, control, this, vars);
|
||||||
time += tpf * speed;
|
|
||||||
|
|
||||||
if (animation.getLength() > 0){
|
if (animation.getLength() > 0){
|
||||||
if (!notified && (time >= animation.getLength() || time < 0)) {
|
if (!notified && (time >= animation.getLength() || time < 0)) {
|
||||||
@ -406,7 +416,7 @@ public final class AnimChannel {
|
|||||||
control.notifyAnimCycleDone(this, animation.getName());
|
control.notifyAnimCycleDone(this, animation.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
time += tpf * speed;
|
||||||
time = clampWrapTime(time, animation.getLength(), loopMode);
|
time = clampWrapTime(time, animation.getLength(), loopMode);
|
||||||
if (time < 0){
|
if (time < 0){
|
||||||
// Negative time indicates that speed should be inverted
|
// Negative time indicates that speed should be inverted
|
||||||
|
Loading…
x
Reference in New Issue
Block a user