/// <summary>Interpolates the bones for this animation.</summary>
 /// <remarks>Interpolates the bones for this animation.</remarks>
 /// <param name="currentFrame">first keyframe</param>
 /// <param name="nextFrame">second keyframe</param>
 /// <param name="currentAnimationTime"></param>
 /// <param name="key2StartTime"></param>
 /// <returns>interpolated SpriterBone array</returns>
 protected internal virtual void transformBones(SpriterKeyFrame
                                                currentFrame, SpriterKeyFrame nextFrame, float
                                                xOffset, float yOffset)
 {
     if (this.rootParent.getParent() != null)
     {
         this.translateRoot();
     }
     else
     {
         this.tempParent.setX(xOffset);
         this.tempParent.setY(yOffset);
         this.tempParent.setAngle(this.angle);
         this.tempParent.setScaleX(this.flippedX);
         this.tempParent.setScaleY(this.flippedY);
     }
     this.setScale(this.scale);
     if (!this.updateBones)
     {
         return;
     }
     this.updateTransformedTempObjects(nextFrame.getBones(), this.tempBones2);
     this.updateTempObjects(currentFrame.getBones(), this.nonTransformedTempBones);
     for (int i = 0; i < this.nonTransformedTempBones.Length; i++)
     {
         if (this.tempBones[i].active)
         {
             this.tweenBone(this.nonTransformedTempBones[i], nextFrame.getBoneFor(this.nonTransformedTempBones
                                                                                  [i]), i, currentFrame.getTime(), nextFrame.getTime());
         }
     }
 }
示例#2
0
 public virtual void tweenObjects(SpriterAnimation animation)
 {
     foreach (SpriterObject key in objectsToTween.Keys)
     {
         SpriterObject   toTween      = key;
         SpriterKeyFrame frame        = animation.frames[objectsToTween[key]];
         long            time         = frame.getTime();
         SpriterKeyFrame currentFrame = animation.getPreviousFrameForObject
                                            (toTween, time);
         SpriterKeyFrame nextFrame = animation.getNextFrameFor
                                         (toTween, currentFrame, 1);
         if (nextFrame != currentFrame)
         {
             SpriterObject object1 = currentFrame.getObjectFor
                                         (toTween);
             SpriterObject object2 = nextFrame.getObjectFor(toTween
                                                            );
             this.interpolateSpriterObject(toTween, object1, object2, currentFrame.getTime(),
                                           nextFrame.getTime(), time);
         }
         SpriterObject[] objects = new 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);
     }
 }
示例#3
0
 public virtual void tweenBones(SpriterAnimation animation)
 {
     foreach (SpriterBone key in bonesToTween.Keys)
     {
         SpriterBone     toTween      = key;
         SpriterKeyFrame frame        = animation.frames[bonesToTween[key]];
         long            time         = frame.getTime();
         SpriterKeyFrame currentFrame = animation.getPreviousFrameForBone
                                            (toTween, time);
         SpriterKeyFrame nextFrame = animation.getNextFrameFor
                                         (toTween, currentFrame, 1);
         if (nextFrame != currentFrame)
         {
             SpriterBone bone1 = currentFrame.getBoneFor(toTween
                                                         );
             SpriterBone bone2 = nextFrame.getBoneFor(toTween);
             this.interpolateAbstractObject(toTween, bone1, bone2, currentFrame.getTime(), nextFrame
                                            .getTime(), time);
         }
         SpriterBone[] bones = new 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);
     }
 }
 /// <summary>Constructs a new SpriterAbstractPlayer object which is able to animate SpriterBone instances and SpriterObject instances.
 ///     </summary>
 /// <remarks>Constructs a new SpriterAbstractPlayer object which is able to animate SpriterBone instances and SpriterObject instances.
 ///     </remarks>
 /// <param name="loader">
 ///
 /// <see cref="FileLoader{I}">FileLoader&lt;I&gt;
 ///     </see>
 /// which you have to implement on your own.
 /// </param>
 /// <param name="keyframes">
 /// A list of SpriterKeyFrame arrays. See
 /// <see cref="SpriterKeyFrameProvider.generateKeyFramePool(com.discobeard.spriter.dom.SpriterData, com.discobeard.spriter.dom.Entity)
 ///     ">SpriterKeyFrameProvider.generateKeyFramePool(com.discobeard.spriter.dom.SpriterData, com.discobeard.spriter.dom.Entity)
 ///     </see>
 /// to get the list.
 /// Generate these keyframes once to save memory.
 /// </param>
 public SpriterAbstractPlayer(FileLoader loader, IList <SpriterAnimation> animations)
 {
     this.loader     = loader;
     this.animations = animations;
     this.rootParent = new SpriterBone();
     this.tempParent = new SpriterBone();
     this.rootParent.setName("playerRoot");
     this.tempParent.setName("playerRoot");
     this.lastFrame     = new SpriterKeyFrame();
     this.lastTempFrame = new SpriterKeyFrame();
     this.interpolator  = SpriterLinearInterpolator
                          .interpolator;
     this.players = new List <SpriterAbstractPlayer>();
     rect         = new SpriterRectangle(0, 0, 0, 0);
 }
 /// <summary>Interpolates the objects of firstFrame and secondFrame.</summary>
 /// <remarks>Interpolates the objects of firstFrame and secondFrame.</remarks>
 /// <param name="currentFrame"></param>
 /// <param name="nextFrame"></param>
 /// <param name="xOffset"></param>
 /// <param name="yOffset"></param>
 protected internal virtual void transformObjects(SpriterKeyFrame
                                                  currentFrame, SpriterKeyFrame nextFrame, float
                                                  xOffset, float yOffset)
 {
     this.rect.set(xOffset, yOffset, xOffset, yOffset);
     if (!this.updateObjects)
     {
         return;
     }
     this.updateTransformedTempObjects(nextFrame.getObjects(), this.tempObjects2);
     this.updateTempObjects(currentFrame.getObjects(), this.nonTransformedTempObjects);
     for (int i = 0; i < this.currenObjectsToDraw; i++)
     {
         if (this.tempObjects[i].active)
         {
             this.tweenObject(this.nonTransformedTempObjects[i], nextFrame.getObjectFor(this.nonTransformedTempObjects
                                                                                        [i]), i, currentFrame.getTime(), nextFrame.getTime());
         }
     }
 }
示例#6
0
        //import Com.Brashmonkey.Spriter.converters.SpriterObjectConverter;
        //import AnimationObject;
        //final private SpriterObjectConverter objectConverter = new SpriterObjectConverter();
        public virtual SpriterAnimation buildAnimation(
            Animation animation)
        {
            MainLine         mainline  = animation.getMainline();
            IList <TimeLine> timeLines =
                animation.getTimeline();
            IList <Key> keyFrames = mainline
                                    .getKey();

            bonesToTween = new Dictionary <SpriterBone
                                           , int>();
            objectsToTween = new Dictionary <SpriterObject
                                             , int>();
            SpriterAnimation spriterAnimation = new SpriterAnimation(animation.getId(), animation.getName(), animation.getLength());

            for (int k = 0; k < keyFrames.Count; k++)
            {
                Key mainlineKey = keyFrames[k];
                IList <SpriterObject> tempObjects
                    = new List <SpriterObject
                                >();
                IList <SpriterBone> tempBones
                    = new List <SpriterBone
                                >();
                SpriterKeyFrame frame = new SpriterKeyFrame
                                            ();
                frame.setTime(mainlineKey.getTime());
                frame.setId(mainlineKey.getId());
                foreach (BoneRef boneRef in mainlineKey.getBoneRef())
                {
                    TimeLine    timeline    = timeLines[boneRef.getTimeline()];
                    Key         timelineKey = timeline.getKey()[boneRef.getKey()];
                    SpriterBone bone        = boneMerger.merge(boneRef, timelineKey
                                                               );
                    bone.setName(timeline.getName());
                    if (mainlineKey.getTime() != timelineKey.getTime())
                    {
                        bonesToTween.Add(bone, k);
                    }
                    else
                    {
                        tempBones.Add(bone);
                    }
                }
                //}
                foreach (AnimationObjectRef objectRef in mainlineKey.getObjectRef
                             ())
                {
                    TimeLine timeline    = timeLines[objectRef.getTimeline()];
                    Key      timelineKey = timeline.getKey()[objectRef.getKey()
                                           ];
                    SpriterObject @object = objectMerger.merge(objectRef
                                                               , timelineKey);
                    @object.setName(timeline.getName());
                    if (mainlineKey.getTime() != timelineKey.getTime())
                    {
                        objectsToTween.Add(@object, k);
                    }
                    else
                    {
                        tempObjects.Add(@object);
                    }
                }
                //}
                SpriterObject[] objArray = new SpriterObject[tempObjects.Count];
                tempObjects.CopyTo(objArray, 0);
                frame.setObjects(objArray);
                SpriterBone[] boneArray = new SpriterBone[tempBones.Count];
                tempBones.CopyTo(boneArray, 0);
                frame.setBones(boneArray);
                spriterAnimation.frames.Add(frame);
            }
            this.tweenBones(spriterAnimation);
            this.tweenObjects(spriterAnimation);
            return(spriterAnimation);
        }