Spatial spatial = trackSpatial; if (spatial == null) { spatial = control.getSpatial();
private void setupControls() { for (SkinData skinData : skinnedSpatials.keySet()) { List<Spatial> spatials = skinnedSpatials.get(skinData); Spatial spatial = skinData.parent; if (spatials.isEmpty()) { continue; } if (spatials.size() >= 1) { spatial = findCommonAncestor(spatials); } if (skinData.parent != null && spatial != skinData.parent) { skinData.rootBoneTransformOffset = spatial.getWorldTransform().invert(); skinData.rootBoneTransformOffset.combineWithParent(skinData.parent.getWorldTransform()); } if (skinData.animControl != null && skinData.animControl.getSpatial() == null) { spatial.addControl(skinData.animControl); } spatial.addControl(skinData.skeletonControl); } for (int i = 0; i < nodes.size(); i++) { BoneWrapper bw = fetchFromCache("nodes", i, BoneWrapper.class); if (bw == null || bw.attachedSpatial == null) { continue; } SkinData skinData = fetchFromCache("skins", bw.skinIndex, SkinData.class); skinData.skeletonControl.getAttachmentsNode(bw.bone.getName()).attachChild(bw.attachedSpatial); } }
@Override public void setTime(float time, float weight, AnimControl control, AnimChannel channel, TempVars vars) { Spatial spat = control.getSpatial(); Geometry geom = findGeom(spat); Mesh target = geom.getMesh(); VertexBuffer bindPos = target.getBuffer(Type.BindPosePosition); VertexBuffer pos = target.getBuffer(Type.Position); FloatBuffer pb = (FloatBuffer) pos.getData(); FloatBuffer bpb = (FloatBuffer) bindPos.getData(); pb.clear(); bpb.clear(); pb.put(bpb).clear(); if (time < times[0]) { applyFrame(target, 0); } else if (time > times[times.length - 1]) { applyFrame(target, times.length - 1); } else { int startFrame = 0; for (int i = 0; i < times.length; i++) { if (times[i] < time) { startFrame = i; } } int endFrame = startFrame + 1; applyFrame(target, endFrame); } }
@Override public void onAnimCycleDone(AnimControl control, AnimChannel channel, String animName) { // Start the real animation Spatial spat = root.getChild(resource.getName()); AnimControl animControl = spat.getControl(AnimControl.class); spat.setCullHint(Spatial.CullHint.Inherit); AnimChannel c = animControl.getChannel(0); LoopMode loopMode = c.getLoopMode(); c.setAnim(ANIM_NAME, 0); if (loopMode != null) { c.setLoopMode(loopMode); } animControl.setEnabled(true); // Hide us control.setEnabled(false); control.getSpatial().setCullHint(Spatial.CullHint.Always); }
@Override public void onAnimCycleDone(AnimControl control, AnimChannel channel, String animName) { cyclesCount++; // Signal that the main animation cycle is done animationControl.onAnimationCycleDone(); // See if we need to stop if (animationControl.isStopAnimation() || channel.getLoopMode() == LoopMode.DontLoop) { // Stop us control.setEnabled(false); // We need to stop if (resource.getFlags().contains(ArtResource.ArtResourceFlag.HAS_END_ANIMATION)) { // Hide us control.getSpatial().setCullHint(Spatial.CullHint.Always); Spatial spat = root.getChild(END_ANIMATION_NAME); AnimControl animControl = spat.getControl(AnimControl.class); spat.setCullHint(Spatial.CullHint.Inherit); AnimChannel c = animControl.getChannel(0); LoopMode loopMode = c.getLoopMode(); c.setAnim(ANIM_NAME, 0); if (loopMode != null) { c.setLoopMode(loopMode); } animControl.setEnabled(true); } else { // Signal stop animationControl.onAnimationStop(); } } }
Spatial spatial = trackSpatial; if (spatial == null) { spatial = control.getSpatial();
Spatial spatial = control.getSpatial();