|
|
@ -49,87 +49,87 @@ import com.jme3.scene.debug.custom.ArmatureDebugger; |
|
|
|
|
|
|
|
|
|
|
|
public class TestOgreComplexAnim extends SimpleApplication { |
|
|
|
public class TestOgreComplexAnim extends SimpleApplication { |
|
|
|
|
|
|
|
|
|
|
|
private SkinningControl skinningControl; |
|
|
|
private SkinningControl skinningControl; |
|
|
|
|
|
|
|
|
|
|
|
private float angle = 0; |
|
|
|
private float angle = 0; |
|
|
|
private float rate = 1; |
|
|
|
private float rate = 1; |
|
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
public static void main(String[] args) { |
|
|
|
TestOgreComplexAnim app = new TestOgreComplexAnim(); |
|
|
|
TestOgreComplexAnim app = new TestOgreComplexAnim(); |
|
|
|
app.start(); |
|
|
|
app.start(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void simpleInitApp() { |
|
|
|
public void simpleInitApp() { |
|
|
|
flyCam.setMoveSpeed(10f); |
|
|
|
flyCam.setMoveSpeed(10f); |
|
|
|
cam.setLocation(new Vector3f(6.4013605f, 7.488437f, 12.843031f)); |
|
|
|
cam.setLocation(new Vector3f(6.4013605f, 7.488437f, 12.843031f)); |
|
|
|
cam.setRotation(new Quaternion(-0.060740203f, 0.93925786f, -0.2398315f, -0.2378785f)); |
|
|
|
cam.setRotation(new Quaternion(-0.060740203f, 0.93925786f, -0.2398315f, -0.2378785f)); |
|
|
|
|
|
|
|
|
|
|
|
DirectionalLight dl = new DirectionalLight(); |
|
|
|
DirectionalLight dl = new DirectionalLight(); |
|
|
|
dl.setDirection(new Vector3f(-0.1f, -0.7f, -1).normalizeLocal()); |
|
|
|
dl.setDirection(new Vector3f(-0.1f, -0.7f, -1).normalizeLocal()); |
|
|
|
dl.setColor(new ColorRGBA(1f, 1f, 1f, 1.0f)); |
|
|
|
dl.setColor(new ColorRGBA(1f, 1f, 1f, 1.0f)); |
|
|
|
rootNode.addLight(dl); |
|
|
|
rootNode.addLight(dl); |
|
|
|
|
|
|
|
|
|
|
|
Node model = (Node) assetManager.loadModel("Models/Oto/Oto.mesh.xml"); |
|
|
|
Node model = (Node) assetManager.loadModel("Models/Oto/Oto.mesh.xml"); |
|
|
|
|
|
|
|
|
|
|
|
skinningControl = model.getControl(SkinningControl.class); |
|
|
|
skinningControl = model.getControl(SkinningControl.class); |
|
|
|
AnimComposer ac = model.getControl(AnimComposer.class); |
|
|
|
AnimComposer ac = model.getControl(AnimComposer.class); |
|
|
|
|
|
|
|
|
|
|
|
ArmatureMask feet = ArmatureMask.createMask(skinningControl.getArmature(), "hip.right", "hip.left"); |
|
|
|
ArmatureMask feet = ArmatureMask.createMask(skinningControl.getArmature(), "hip.right", "hip.left"); |
|
|
|
Action dodgeAction = ac.action("Dodge"); |
|
|
|
Action dodgeAction = ac.action("Dodge"); |
|
|
|
dodgeAction.setMask(feet); |
|
|
|
dodgeAction.setMask(feet); |
|
|
|
dodgeAction.setSpeed(2f); |
|
|
|
dodgeAction.setSpeed(2f); |
|
|
|
Action walkAction = ac.action("Walk"); |
|
|
|
Action walkAction = ac.action("Walk"); |
|
|
|
walkAction.setMask(feet); |
|
|
|
walkAction.setMask(feet); |
|
|
|
walkAction.setSpeed(0.25f); |
|
|
|
walkAction.setSpeed(0.25f); |
|
|
|
|
|
|
|
|
|
|
|
ArmatureMask rightHand = ArmatureMask.createMask(skinningControl.getArmature(), "uparm.right"); |
|
|
|
ArmatureMask rightHand = ArmatureMask.createMask(skinningControl.getArmature(), "uparm.right"); |
|
|
|
Action pullAction = ac.action("pull"); |
|
|
|
Action pullAction = ac.action("pull"); |
|
|
|
pullAction.setMask(rightHand); |
|
|
|
pullAction.setMask(rightHand); |
|
|
|
pullAction.setSpeed(0.5f); |
|
|
|
pullAction.setSpeed(0.5f); |
|
|
|
Action standAction = ac.action("stand"); |
|
|
|
Action standAction = ac.action("stand"); |
|
|
|
standAction.setMask(rightHand); |
|
|
|
standAction.setMask(rightHand); |
|
|
|
standAction.setSpeed(0.5f); |
|
|
|
standAction.setSpeed(0.5f); |
|
|
|
|
|
|
|
|
|
|
|
ac.actionSequence("complexAction", |
|
|
|
ac.actionSequence("complexAction", |
|
|
|
ac.actionSequence("feetAction", dodgeAction, walkAction), |
|
|
|
ac.actionSequence("feetAction", dodgeAction, walkAction), |
|
|
|
ac.actionSequence("rightHandAction", pullAction, standAction)); |
|
|
|
ac.actionSequence("rightHandAction", pullAction, standAction)); |
|
|
|
|
|
|
|
|
|
|
|
ac.setCurrentAction("complexAction"); |
|
|
|
ac.setCurrentAction("complexAction"); |
|
|
|
|
|
|
|
|
|
|
|
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); |
|
|
|
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); |
|
|
|
mat.getAdditionalRenderState().setWireframe(true); |
|
|
|
mat.getAdditionalRenderState().setWireframe(true); |
|
|
|
mat.setColor("Color", ColorRGBA.Green); |
|
|
|
mat.setColor("Color", ColorRGBA.Green); |
|
|
|
mat.setFloat("PointSize", 7f); // Bug ? do not change size of debug points ?
|
|
|
|
mat.setFloat("PointSize", 7f); // Bug ? do not change size of debug points ?
|
|
|
|
mat.getAdditionalRenderState().setDepthTest(false); |
|
|
|
mat.getAdditionalRenderState().setDepthTest(false); |
|
|
|
|
|
|
|
|
|
|
|
ArmatureDebugger armatureDebug = new ArmatureDebugger("armature", skinningControl.getArmature(), |
|
|
|
ArmatureDebugger armatureDebug = new ArmatureDebugger("armature", skinningControl.getArmature(), |
|
|
|
skinningControl.getArmature().getJointList()); |
|
|
|
skinningControl.getArmature().getJointList()); |
|
|
|
armatureDebug.setMaterial(mat); |
|
|
|
armatureDebug.setMaterial(mat); |
|
|
|
model.attachChild(armatureDebug); |
|
|
|
model.attachChild(armatureDebug); |
|
|
|
|
|
|
|
|
|
|
|
rootNode.attachChild(model); |
|
|
|
rootNode.attachChild(model); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void simpleUpdate(float tpf) { |
|
|
|
public void simpleUpdate(float tpf) { |
|
|
|
Joint j = skinningControl.getArmature().getJoint("spinehigh"); |
|
|
|
Joint j = skinningControl.getArmature().getJoint("spinehigh"); |
|
|
|
Joint j2 = skinningControl.getArmature().getJoint("uparm.left"); |
|
|
|
Joint j2 = skinningControl.getArmature().getJoint("uparm.left"); |
|
|
|
|
|
|
|
|
|
|
|
angle += tpf * rate; |
|
|
|
angle += tpf * rate; |
|
|
|
if (angle > FastMath.HALF_PI / 2f) { |
|
|
|
if (angle > FastMath.HALF_PI / 2f) { |
|
|
|
angle = FastMath.HALF_PI / 2f; |
|
|
|
angle = FastMath.HALF_PI / 2f; |
|
|
|
rate = -1; |
|
|
|
rate = -1; |
|
|
|
} else if (angle < -FastMath.HALF_PI / 2f) { |
|
|
|
} else if (angle < -FastMath.HALF_PI / 2f) { |
|
|
|
angle = -FastMath.HALF_PI / 2f; |
|
|
|
angle = -FastMath.HALF_PI / 2f; |
|
|
|
rate = 1; |
|
|
|
rate = 1; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Quaternion q = new Quaternion(); |
|
|
|
Quaternion q = new Quaternion(); |
|
|
|
q.fromAngles(0, angle, 0); |
|
|
|
q.fromAngles(0, angle, 0); |
|
|
|
|
|
|
|
|
|
|
|
j.setLocalRotation(j.getInitialTransform().getRotation().mult(q)); |
|
|
|
j.setLocalRotation(j.getInitialTransform().getRotation().mult(q)); |
|
|
|
j2.setLocalScale(j.getInitialTransform().getScale().mult(new Vector3f(1 + angle, 1 + angle, 1 + angle))); |
|
|
|
j2.setLocalScale(j.getInitialTransform().getScale().mult(new Vector3f(1 + angle, 1 + angle, 1 + angle))); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|