diff --git a/jme3-examples/src/main/java/jme3test/model/anim/TestOgreComplexAnim.java b/jme3-examples/src/main/java/jme3test/model/anim/TestOgreComplexAnim.java index e83fa7a6b6..aac2c1f970 100644 --- a/jme3-examples/src/main/java/jme3test/model/anim/TestOgreComplexAnim.java +++ b/jme3-examples/src/main/java/jme3test/model/anim/TestOgreComplexAnim.java @@ -32,20 +32,26 @@ package jme3test.model.anim; -import com.jme3.animation.*; +import com.jme3.anim.AnimComposer; +import com.jme3.anim.ArmatureMask; +import com.jme3.anim.Joint; +import com.jme3.anim.SkinningControl; +import com.jme3.anim.tween.action.Action; import com.jme3.app.SimpleApplication; import com.jme3.light.DirectionalLight; import com.jme3.material.Material; -import com.jme3.math.*; +import com.jme3.math.ColorRGBA; +import com.jme3.math.FastMath; +import com.jme3.math.Quaternion; +import com.jme3.math.Vector3f; import com.jme3.scene.Node; -import com.jme3.scene.debug.SkeletonDebugger; +import com.jme3.scene.debug.custom.ArmatureDebugger; -//TODO rework this Test when the new animation system is done. public class TestOgreComplexAnim extends SimpleApplication { - private AnimControl control; + private SkinningControl skinningControl; + private float angle = 0; - private float scale = 1; private float rate = 1; public static void main(String[] args) { @@ -64,61 +70,57 @@ public void simpleInitApp() { dl.setColor(new ColorRGBA(1f, 1f, 1f, 1.0f)); rootNode.addLight(dl); - Node model = (Node) assetManager.loadModel("Models/Oto/OtoOldAnim.j3o"); - - control = model.getControl(AnimControl.class); + Node model = (Node) assetManager.loadModel("Models/Oto/Oto.mesh.xml"); - AnimChannel feet = control.createChannel(); - AnimChannel leftHand = control.createChannel(); - AnimChannel rightHand = control.createChannel(); + skinningControl = model.getControl(SkinningControl.class); + AnimComposer ac = model.getControl(AnimComposer.class); - // feet will dodge - feet.addFromRootBone("hip.right"); - feet.addFromRootBone("hip.left"); - feet.setAnim("Dodge"); - feet.setSpeed(2); - feet.setLoopMode(LoopMode.Cycle); + ArmatureMask feet = ArmatureMask.createMask(skinningControl.getArmature(), "hip.right", "hip.left"); + Action dodgeAction = ac.action("Dodge"); + dodgeAction.setMask(feet); + dodgeAction.setSpeed(2f); + Action walkAction = ac.action("Walk"); + walkAction.setMask(feet); + walkAction.setSpeed(0.25f); - // will blend over 15 seconds to stand - feet.setAnim("Walk", 15); - feet.setSpeed(0.25f); - feet.setLoopMode(LoopMode.Cycle); + ArmatureMask rightHand = ArmatureMask.createMask(skinningControl.getArmature(), "uparm.right"); + Action pullAction = ac.action("pull"); + pullAction.setMask(rightHand); + pullAction.setSpeed(0.5f); + Action standAction = ac.action("stand"); + standAction.setMask(rightHand); + standAction.setSpeed(0.5f); - // left hand will pull - leftHand.addFromRootBone("uparm.right"); - leftHand.setAnim("pull"); - leftHand.setSpeed(.5f); + ac.actionSequence("complexAction", + ac.actionSequence("feetAction", dodgeAction, walkAction), + ac.actionSequence("rightHandAction", pullAction, standAction)); - // will blend over 15 seconds to stand - leftHand.setAnim("stand", 15); + ac.setCurrentAction("complexAction"); - // right hand will push - rightHand.addBone("spinehigh"); - rightHand.addFromRootBone("uparm.left"); - rightHand.setAnim("push"); - - SkeletonDebugger skeletonDebug = new SkeletonDebugger("skeleton", control.getSkeleton()); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.getAdditionalRenderState().setWireframe(true); mat.setColor("Color", ColorRGBA.Green); - mat.setFloat("PointSize", 7f); + mat.setFloat("PointSize", 7f); // Bug ? do not change size of debug points ? mat.getAdditionalRenderState().setDepthTest(false); - skeletonDebug.setMaterial(mat); - model.attachChild(skeletonDebug); + ArmatureDebugger armatureDebug = new ArmatureDebugger("armature", skinningControl.getArmature(), + skinningControl.getArmature().getJointList()); + armatureDebug.setMaterial(mat); + model.attachChild(armatureDebug); + rootNode.attachChild(model); } @Override - public void simpleUpdate(float tpf){ - Bone b = control.getSkeleton().getBone("spinehigh"); - Bone b2 = control.getSkeleton().getBone("uparm.left"); + public void simpleUpdate(float tpf) { + Joint j = skinningControl.getArmature().getJoint("spinehigh"); + Joint j2 = skinningControl.getArmature().getJoint("uparm.left"); angle += tpf * rate; - if (angle > FastMath.HALF_PI / 2f){ + if (angle > FastMath.HALF_PI / 2f) { angle = FastMath.HALF_PI / 2f; rate = -1; - }else if (angle < -FastMath.HALF_PI / 2f){ + } else if (angle < -FastMath.HALF_PI / 2f) { angle = -FastMath.HALF_PI / 2f; rate = 1; } @@ -126,13 +128,8 @@ public void simpleUpdate(float tpf){ Quaternion q = new Quaternion(); q.fromAngles(0, angle, 0); - b.setUserControl(true); - b.setUserTransforms(Vector3f.ZERO, q, Vector3f.UNIT_XYZ); - - b2.setUserControl(true); - b2.setUserTransforms(Vector3f.ZERO, Quaternion.IDENTITY, new Vector3f(1+angle,1+ angle, 1+angle)); - - + j.setLocalRotation(j.getInitialTransform().getRotation().mult(q)); + j2.setLocalScale(j.getInitialTransform().getScale().mult(new Vector3f(1 + angle, 1 + angle, 1 + angle))); } }