Refactoring: SpatialConstraint now derives from Constraint and not BoneConstraint.
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10404 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
4de3be91a9
commit
31e327bbac
@ -1,6 +1,5 @@
|
|||||||
package com.jme3.scene.plugins.blender.constraints;
|
package com.jme3.scene.plugins.blender.constraints;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@ -8,9 +7,7 @@ import com.jme3.animation.Animation;
|
|||||||
import com.jme3.animation.Bone;
|
import com.jme3.animation.Bone;
|
||||||
import com.jme3.animation.BoneTrack;
|
import com.jme3.animation.BoneTrack;
|
||||||
import com.jme3.animation.Track;
|
import com.jme3.animation.Track;
|
||||||
import com.jme3.math.Quaternion;
|
|
||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
|
||||||
import com.jme3.scene.Spatial;
|
import com.jme3.scene.Spatial;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext.LoadedFeatureDataType;
|
import com.jme3.scene.plugins.blender.BlenderContext.LoadedFeatureDataType;
|
||||||
@ -181,38 +178,4 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The method applies bone's current position to all of the traces of the
|
|
||||||
* given animations.
|
|
||||||
*
|
|
||||||
* @param boneContext
|
|
||||||
* the bone context
|
|
||||||
* @param space
|
|
||||||
* the bone's evaluation space
|
|
||||||
* @param referenceAnimData
|
|
||||||
* the object containing the animations
|
|
||||||
*/
|
|
||||||
protected void applyAnimData(BoneContext boneContext, Space space, AnimData referenceAnimData) {
|
|
||||||
ConstraintHelper constraintHelper = blenderContext.getHelper(ConstraintHelper.class);
|
|
||||||
Transform transform = constraintHelper.getBoneTransform(space, boneContext.getBone());
|
|
||||||
|
|
||||||
AnimData animData = blenderContext.getAnimData(boneContext.getBoneOma());
|
|
||||||
|
|
||||||
for (Animation animation : referenceAnimData.anims) {
|
|
||||||
BoneTrack parentTrack = (BoneTrack) animation.getTracks()[0];
|
|
||||||
|
|
||||||
float[] times = parentTrack.getTimes();
|
|
||||||
Vector3f[] translations = new Vector3f[times.length];
|
|
||||||
Quaternion[] rotations = new Quaternion[times.length];
|
|
||||||
Vector3f[] scales = new Vector3f[times.length];
|
|
||||||
Arrays.fill(translations, transform.getTranslation());
|
|
||||||
Arrays.fill(rotations, transform.getRotation());
|
|
||||||
Arrays.fill(scales, transform.getScale());
|
|
||||||
for (Animation anim : animData.anims) {
|
|
||||||
anim.addTrack(new BoneTrack(animData.skeleton.getBoneIndex(boneContext.getBone()), times, translations, rotations, scales));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
blenderContext.setAnimData(boneContext.getBoneOma(), animData);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,17 @@
|
|||||||
package com.jme3.scene.plugins.blender.constraints;
|
package com.jme3.scene.plugins.blender.constraints;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import com.jme3.animation.Animation;
|
||||||
|
import com.jme3.animation.BoneTrack;
|
||||||
|
import com.jme3.math.Quaternion;
|
||||||
|
import com.jme3.math.Transform;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
|
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.Ipo;
|
import com.jme3.scene.plugins.blender.animations.Ipo;
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.constraints.definitions.ConstraintDefinition;
|
import com.jme3.scene.plugins.blender.constraints.definitions.ConstraintDefinition;
|
||||||
@ -12,6 +19,7 @@ import com.jme3.scene.plugins.blender.constraints.definitions.ConstraintDefiniti
|
|||||||
import com.jme3.scene.plugins.blender.exceptions.BlenderFileException;
|
import com.jme3.scene.plugins.blender.exceptions.BlenderFileException;
|
||||||
import com.jme3.scene.plugins.blender.file.Pointer;
|
import com.jme3.scene.plugins.blender.file.Pointer;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
import com.jme3.scene.plugins.ogre.AnimData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The implementation of a constraint.
|
* The implementation of a constraint.
|
||||||
@ -124,4 +132,38 @@ public abstract class Constraint {
|
|||||||
* that will have non modifying values for translation, rotation and scale and will have the same amount of frames as its parent has.
|
* that will have non modifying values for translation, rotation and scale and will have the same amount of frames as its parent has.
|
||||||
*/
|
*/
|
||||||
protected abstract void prepareTracksForApplyingConstraints();
|
protected abstract void prepareTracksForApplyingConstraints();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method applies bone's current position to all of the traces of the
|
||||||
|
* given animations.
|
||||||
|
*
|
||||||
|
* @param boneContext
|
||||||
|
* the bone context
|
||||||
|
* @param space
|
||||||
|
* the bone's evaluation space
|
||||||
|
* @param referenceAnimData
|
||||||
|
* the object containing the animations
|
||||||
|
*/
|
||||||
|
protected void applyAnimData(BoneContext boneContext, Space space, AnimData referenceAnimData) {
|
||||||
|
ConstraintHelper constraintHelper = blenderContext.getHelper(ConstraintHelper.class);
|
||||||
|
Transform transform = constraintHelper.getBoneTransform(space, boneContext.getBone());
|
||||||
|
|
||||||
|
AnimData animData = blenderContext.getAnimData(boneContext.getBoneOma());
|
||||||
|
|
||||||
|
for (Animation animation : referenceAnimData.anims) {
|
||||||
|
BoneTrack parentTrack = (BoneTrack) animation.getTracks()[0];
|
||||||
|
|
||||||
|
float[] times = parentTrack.getTimes();
|
||||||
|
Vector3f[] translations = new Vector3f[times.length];
|
||||||
|
Quaternion[] rotations = new Quaternion[times.length];
|
||||||
|
Vector3f[] scales = new Vector3f[times.length];
|
||||||
|
Arrays.fill(translations, transform.getTranslation());
|
||||||
|
Arrays.fill(rotations, transform.getRotation());
|
||||||
|
Arrays.fill(scales, transform.getScale());
|
||||||
|
for (Animation anim : animData.anims) {
|
||||||
|
anim.addTrack(new BoneTrack(animData.skeleton.getBoneIndex(boneContext.getBone()), times, translations, rotations, scales));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
blenderContext.setAnimData(boneContext.getBoneOma(), animData);
|
||||||
|
}
|
||||||
}
|
}
|
@ -8,7 +8,9 @@ import java.util.logging.Logger;
|
|||||||
import com.jme3.animation.AnimControl;
|
import com.jme3.animation.AnimControl;
|
||||||
import com.jme3.animation.Animation;
|
import com.jme3.animation.Animation;
|
||||||
import com.jme3.animation.Bone;
|
import com.jme3.animation.Bone;
|
||||||
|
import com.jme3.animation.BoneTrack;
|
||||||
import com.jme3.animation.SpatialTrack;
|
import com.jme3.animation.SpatialTrack;
|
||||||
|
import com.jme3.animation.Track;
|
||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
@ -28,7 +30,7 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
|||||||
* This includes: nodes, cameras nodes and light nodes.
|
* This includes: nodes, cameras nodes and light nodes.
|
||||||
* @author Marcin Roguski (Kaelthas)
|
* @author Marcin Roguski (Kaelthas)
|
||||||
*/
|
*/
|
||||||
/* package */class SpatialConstraint extends BoneConstraint {
|
/* package */class SpatialConstraint extends Constraint {
|
||||||
private static final Logger LOGGER = Logger.getLogger(SpatialConstraint.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(SpatialConstraint.class.getName());
|
||||||
|
|
||||||
/** The owner of the constraint. */
|
/** The owner of the constraint. */
|
||||||
@ -40,6 +42,14 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
|||||||
super(constraintStructure, ownerOMA, influenceIpo, blenderContext);
|
super(constraintStructure, ownerOMA, influenceIpo, blenderContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean validate() {
|
||||||
|
if (targetOMA != null) {
|
||||||
|
return blenderContext.getLoadedFeature(targetOMA, LoadedFeatureDataType.LOADED_FEATURE) != null;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void performBakingOperation() {
|
public void performBakingOperation() {
|
||||||
this.owner = (Spatial) blenderContext.getLoadedFeature(ownerOMA, LoadedFeatureDataType.LOADED_FEATURE);
|
this.owner = (Spatial) blenderContext.getLoadedFeature(ownerOMA, LoadedFeatureDataType.LOADED_FEATURE);
|
||||||
@ -130,6 +140,29 @@ import com.jme3.scene.plugins.ogre.AnimData;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method determines if the bone has animations.
|
||||||
|
*
|
||||||
|
* @param boneOMA
|
||||||
|
* OMA of the animation's owner
|
||||||
|
* @return <b>true</b> if the target has animations and <b>false</b> otherwise
|
||||||
|
*/
|
||||||
|
protected boolean hasAnimation(Long boneOMA) {
|
||||||
|
AnimData animData = blenderContext.getAnimData(boneOMA);
|
||||||
|
if (animData != null) {
|
||||||
|
Bone bone = blenderContext.getBoneContext(boneOMA).getBone();
|
||||||
|
int boneIndex = animData.skeleton.getBoneIndex(bone);
|
||||||
|
for (Animation animation : animData.anims) {
|
||||||
|
for (Track track : animation.getTracks()) {
|
||||||
|
if (track instanceof BoneTrack && ((BoneTrack) track).getTargetBoneIndex() == boneIndex) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method applies spatial transform on each frame of the given
|
* This method applies spatial transform on each frame of the given
|
||||||
* animations.
|
* animations.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user