/// <summary>Sets the animationIndex for this to the given animationIndex.</summary> /// <remarks> /// Sets the animationIndex for this to the given animationIndex. /// This method can make sure that the switching between to animations is smooth. /// By setting transitionSpeed and transitionSteps to appropriate values, you can have nice transitions between two animations. /// Setting transitionSpeed to 1 and transitionSteps to 20 means, that this player will need 20 steps to translate the current animation to the given one. /// </remarks> /// <param name="animationIndex"> /// Index of animation to set. Get the index with /// <see cref="getAnimationIndexByName(string)">getAnimationIndexByName(string)</see> /// . /// </param> /// <param name="transitionSpeed">Speed for the switch between the current animation and the one which has been set. /// </param> /// <param name="transitionSteps">Steps needed for the transition</param> /// <exception cref="System.Exception"></exception> public virtual void setAnimatioIndex(int animationIndex, int transitionSpeed, int transitionSteps) { if (animationIndex >= this.entity.getAnimation().Count || animationIndex < 0) { throw new System.Exception("The given animation index does not exist: " + animationIndex + "\n" + "Index range goes from 0 to " + (this.entity.getAnimation().Count - 1) ); } if (this.animationIndex != animationIndex) { if (this.transitionFixed) { this.lastRealFrame = this.lastFrame; this.transitionFixed = false; this.transitionTempFixed = true; } else { this.lastRealFrame = this.lastTempFrame; this.transitionTempFixed = false; this.transitionFixed = true; } this.transitionSpeed = transitionSpeed; this.fixMaxSteps = transitionSteps; this.lastRealFrame.setTime(this.frame + 1); this.animation = this.animations[animationIndex]; this.animation.frames[0].setTime(this.frame + 1 + this.fixMaxSteps); this.currentKey = 0; this.fixCounter = 0; this.animationIndex = animationIndex; } }
public virtual void tweenObjects(com.brashmonkey.spriter.animation.SpriterAnimation animation) { foreach (System.Collections.Generic.KeyValuePair <com.brashmonkey.spriter.objects.SpriterObject , int> entry in objectsToTween.EntrySet()) { com.brashmonkey.spriter.objects.SpriterObject toTween = entry.Key; com.brashmonkey.spriter.animation.SpriterKeyFrame frame = animation.frames[entry. Value]; long time = frame.getTime(); com.brashmonkey.spriter.animation.SpriterKeyFrame currentFrame = animation.getPreviousFrameForObject (toTween, time); com.brashmonkey.spriter.animation.SpriterKeyFrame nextFrame = animation.getNextFrameFor (toTween, currentFrame, 1); if (nextFrame != currentFrame) { com.brashmonkey.spriter.objects.SpriterObject object1 = currentFrame.getObjectFor (toTween); com.brashmonkey.spriter.objects.SpriterObject object2 = nextFrame.getObjectFor(toTween ); this.interpolateSpriterObject(toTween, object1, object2, currentFrame.getTime(), nextFrame.getTime(), time); } com.brashmonkey.spriter.objects.SpriterObject[] objects = new com.brashmonkey.spriter.objects.SpriterObject [frame.getObjects().Length + 1]; for (int i = 0; i < objects.Length - 1; i++) { objects[i] = frame.getObjects()[i]; } objects[objects.Length - 1] = toTween; frame.setObjects(objects); } }
public virtual void tweenBones(com.brashmonkey.spriter.animation.SpriterAnimation animation) { foreach (System.Collections.Generic.KeyValuePair <com.brashmonkey.spriter.objects.SpriterBone , int> entry in bonesToTween.EntrySet()) { com.brashmonkey.spriter.objects.SpriterBone toTween = entry.Key; com.brashmonkey.spriter.animation.SpriterKeyFrame frame = animation.frames[entry. Value]; long time = frame.getTime(); com.brashmonkey.spriter.animation.SpriterKeyFrame currentFrame = animation.getPreviousFrameForBone (toTween, time); com.brashmonkey.spriter.animation.SpriterKeyFrame nextFrame = animation.getNextFrameFor (toTween, currentFrame, 1); if (nextFrame != currentFrame) { com.brashmonkey.spriter.objects.SpriterBone bone1 = currentFrame.getBoneFor(toTween ); com.brashmonkey.spriter.objects.SpriterBone bone2 = nextFrame.getBoneFor(toTween); this.interpolateAbstractObject(toTween, bone1, bone2, currentFrame.getTime(), nextFrame .getTime(), time); } com.brashmonkey.spriter.objects.SpriterBone[] bones = new com.brashmonkey.spriter.objects.SpriterBone [frame.getBones().Length + 1]; for (int i = 0; i < bones.Length - 1; i++) { bones[i] = frame.getBones()[i]; } bones[bones.Length - 1] = toTween; frame.setBones(bones); } }
> generateKeyFramePool(com.discobeard.spriter.dom.SpriterData data, com.discobeard.spriter.dom.Entity entity) { System.Collections.Generic.IList <com.brashmonkey.spriter.animation.SpriterAnimation > spriterAnimations = new System.Collections.Generic.List <com.brashmonkey.spriter.animation.SpriterAnimation >(); System.Collections.Generic.IList <com.discobeard.spriter.dom.Animation> animations = entity.getAnimation(); com.brashmonkey.spriter.mergers.SpriterAnimationBuilder frameBuilder = new com.brashmonkey.spriter.mergers.SpriterAnimationBuilder (); foreach (com.discobeard.spriter.dom.Animation anim in animations) { com.brashmonkey.spriter.animation.SpriterAnimation spriterAnimation = frameBuilder .buildAnimation(anim); bool found = false; foreach (com.brashmonkey.spriter.animation.SpriterKeyFrame key in spriterAnimation .frames) { if (!found) { found = key.getTime() == anim.getLength(); } sort(key.getObjects()); foreach (com.brashmonkey.spriter.objects.SpriterBone bone in key.getBones()) { foreach (com.brashmonkey.spriter.objects.SpriterBone bone2 in key.getBones()) { if (bone2.hasParent()) { if (!bone2.equals(bone) && bone2.getParentId() == bone.getId()) { bone.addChildBone(bone2); } } } foreach (com.brashmonkey.spriter.objects.SpriterObject @object in key.getObjects( )) { com.brashmonkey.spriter.file.Reference @ref = @object.getRef(); com.discobeard.spriter.dom.File f = data.getFolder()[@ref.folder].getFile()[@ref. file]; @ref.dimensions = new com.brashmonkey.spriter.SpriterRectangle(0, f.getHeight(), f.getWidth(), 0f); if (bone.getId() == @object.getParentId()) { bone.addChildObject(@object); } } } } spriterAnimations.Add(spriterAnimation); } return(spriterAnimations); }
/// <summary>Constructs a new SpriterPlayer object which animates the given Spriter entity. /// </summary> /// <remarks>Constructs a new SpriterPlayer object which animates the given Spriter entity. /// </remarks> /// <param name="data"> /// /// <see cref="com.discobeard.spriter.dom.SpriterData">com.discobeard.spriter.dom.SpriterData /// </see> /// which provides a method to load all needed data to animate. See /// <see cref="Spriter#getSpriter(String,com.spriter.file.FileLoader)">Spriter#getSpriter(String,com.spriter.file.FileLoader) /// </see> /// for mor information. /// </param> /// <param name="entityIndex">The entity which should be handled by this player.</param> /// <param name="loader">The loader which has loaded all necessary sprites for the scml file. /// </param> public SpriterPlayer(com.discobeard.spriter.dom.SpriterData data, com.discobeard.spriter.dom.Entity entity, com.brashmonkey.spriter.file.FileLoader loader) : base(loader, null) { this.entity = entity; this.frame = 0; if (!alreadyLoaded(entity)) { this.animations = com.brashmonkey.spriter.SpriterKeyFrameProvider.generateKeyFramePool (data, entity); loaded.Add(entity, this); } else { this.animations = loaded[entity].animations; } this.generateData(); this.animation = this.animations[0]; this.firstKeyFrame = this.animation.frames[0]; this.update(0, 0); }
//import com.brashmonkey.spriter.converters.SpriterObjectConverter; //import com.discobeard.spriter.dom.AnimationObject; //final private SpriterObjectConverter objectConverter = new SpriterObjectConverter(); public virtual com.brashmonkey.spriter.animation.SpriterAnimation buildAnimation( com.discobeard.spriter.dom.Animation animation) { com.discobeard.spriter.dom.MainLine mainline = animation.getMainline(); System.Collections.Generic.IList<com.discobeard.spriter.dom.TimeLine> timeLines = animation.getTimeline(); System.Collections.Generic.IList<com.discobeard.spriter.dom.Key> keyFrames = mainline .getKey(); bonesToTween = new System.Collections.Generic.Dictionary<com.brashmonkey.spriter.objects.SpriterBone , int>(); objectsToTween = new System.Collections.Generic.Dictionary<com.brashmonkey.spriter.objects.SpriterObject , int>(); com.brashmonkey.spriter.animation.SpriterAnimation spriterAnimation = new com.brashmonkey.spriter.animation.SpriterAnimation (animation.getId(), animation.getName(), animation.getLength()); for (int k = 0; k < keyFrames.Count; k++) { com.discobeard.spriter.dom.Key mainlineKey = keyFrames[k]; System.Collections.Generic.IList<com.brashmonkey.spriter.objects.SpriterObject> tempObjects = new System.Collections.Generic.List<com.brashmonkey.spriter.objects.SpriterObject >(); System.Collections.Generic.IList<com.brashmonkey.spriter.objects.SpriterBone> tempBones = new System.Collections.Generic.List<com.brashmonkey.spriter.objects.SpriterBone >(); com.brashmonkey.spriter.animation.SpriterKeyFrame frame = new com.brashmonkey.spriter.animation.SpriterKeyFrame (); frame.setTime(mainlineKey.getTime()); frame.setId(mainlineKey.getId()); foreach (com.discobeard.spriter.dom.BoneRef boneRef in mainlineKey.getBoneRef()) { com.discobeard.spriter.dom.TimeLine timeline = timeLines[boneRef.getTimeline()]; com.discobeard.spriter.dom.Key timelineKey = timeline.getKey()[boneRef.getKey()]; com.brashmonkey.spriter.objects.SpriterBone bone = boneMerger.merge(boneRef, timelineKey ); bone.setName(timeline.getName()); if (mainlineKey.getTime() != timelineKey.getTime()) { bonesToTween.Add(bone, k); } else { tempBones.Add(bone); } } //} foreach (com.discobeard.spriter.dom.AnimationObjectRef objectRef in mainlineKey.getObjectRef ()) { com.discobeard.spriter.dom.TimeLine timeline = timeLines[objectRef.getTimeline()]; com.discobeard.spriter.dom.Key timelineKey = timeline.getKey()[objectRef.getKey() ]; com.brashmonkey.spriter.objects.SpriterObject @object = objectMerger.merge(objectRef , timelineKey); @object.setName(timeline.getName()); if (mainlineKey.getTime() != timelineKey.getTime()) { objectsToTween.Add(@object, k); } else { tempObjects.Add(@object); } } //} frame.setObjects(Sharpen.Collections.ToArray(tempObjects, new com.brashmonkey.spriter.objects.SpriterObject [tempObjects.Count])); frame.setBones(Sharpen.Collections.ToArray(tempBones, new com.brashmonkey.spriter.objects.SpriterBone [tempBones.Count])); spriterAnimation.frames.Add(frame); } this.tweenBones(spriterAnimation); this.tweenObjects(spriterAnimation); return spriterAnimation; }
//import com.brashmonkey.spriter.converters.SpriterObjectConverter; //import com.discobeard.spriter.dom.AnimationObject; //final private SpriterObjectConverter objectConverter = new SpriterObjectConverter(); public virtual com.brashmonkey.spriter.animation.SpriterAnimation buildAnimation( com.discobeard.spriter.dom.Animation animation) { com.discobeard.spriter.dom.MainLine mainline = animation.getMainline(); System.Collections.Generic.IList <com.discobeard.spriter.dom.TimeLine> timeLines = animation.getTimeline(); System.Collections.Generic.IList <com.discobeard.spriter.dom.Key> keyFrames = mainline .getKey(); bonesToTween = new System.Collections.Generic.Dictionary <com.brashmonkey.spriter.objects.SpriterBone , int>(); objectsToTween = new System.Collections.Generic.Dictionary <com.brashmonkey.spriter.objects.SpriterObject , int>(); com.brashmonkey.spriter.animation.SpriterAnimation spriterAnimation = new com.brashmonkey.spriter.animation.SpriterAnimation (animation.getId(), animation.getName(), animation.getLength()); for (int k = 0; k < keyFrames.Count; k++) { com.discobeard.spriter.dom.Key mainlineKey = keyFrames[k]; System.Collections.Generic.IList <com.brashmonkey.spriter.objects.SpriterObject> tempObjects = new System.Collections.Generic.List <com.brashmonkey.spriter.objects.SpriterObject >(); System.Collections.Generic.IList <com.brashmonkey.spriter.objects.SpriterBone> tempBones = new System.Collections.Generic.List <com.brashmonkey.spriter.objects.SpriterBone >(); com.brashmonkey.spriter.animation.SpriterKeyFrame frame = new com.brashmonkey.spriter.animation.SpriterKeyFrame (); frame.setTime(mainlineKey.getTime()); frame.setId(mainlineKey.getId()); foreach (com.discobeard.spriter.dom.BoneRef boneRef in mainlineKey.getBoneRef()) { com.discobeard.spriter.dom.TimeLine timeline = timeLines[boneRef.getTimeline()]; com.discobeard.spriter.dom.Key timelineKey = timeline.getKey()[boneRef.getKey()]; com.brashmonkey.spriter.objects.SpriterBone bone = boneMerger.merge(boneRef, timelineKey ); bone.setName(timeline.getName()); if (mainlineKey.getTime() != timelineKey.getTime()) { bonesToTween.Add(bone, k); } else { tempBones.Add(bone); } } //} foreach (com.discobeard.spriter.dom.AnimationObjectRef objectRef in mainlineKey.getObjectRef ()) { com.discobeard.spriter.dom.TimeLine timeline = timeLines[objectRef.getTimeline()]; com.discobeard.spriter.dom.Key timelineKey = timeline.getKey()[objectRef.getKey() ]; com.brashmonkey.spriter.objects.SpriterObject @object = objectMerger.merge(objectRef , timelineKey); @object.setName(timeline.getName()); if (mainlineKey.getTime() != timelineKey.getTime()) { objectsToTween.Add(@object, k); } else { tempObjects.Add(@object); } } //} frame.setObjects(Sharpen.Collections.ToArray(tempObjects, new com.brashmonkey.spriter.objects.SpriterObject [tempObjects.Count])); frame.setBones(Sharpen.Collections.ToArray(tempBones, new com.brashmonkey.spriter.objects.SpriterBone [tempBones.Count])); spriterAnimation.frames.Add(frame); } this.tweenBones(spriterAnimation); this.tweenObjects(spriterAnimation); return(spriterAnimation); }