コード例 #1
0
        public virtual SpriterKeyFrame getNextFrameFor(
            SpriterAbstractObject @object, SpriterKeyFrame
            currentFrame, int direction)
        {
            SpriterKeyFrame nextFrame = null;
            int             cnt       = 0;
            bool            isBone    = @object is SpriterBone;

            for (int j = (currentFrame.getId() + direction + this.keyframes()) % this.keyframes();
                 nextFrame == null && cnt < this.keyframes(); j = (j + direction + this.keyframes()) %
                                                                  this.keyframes(), cnt++)
            {
                SpriterKeyFrame frame    = this.frames[j];
                bool            contains = (isBone) ? frame.containsBone((SpriterBone
                                                                          )@object) : frame.containsObject((SpriterObject)
                                                                                                           @object);
                if (contains)
                {
                    SpriterAbstractObject objectInFrame;
                    if (isBone)
                    {
                        objectInFrame = frame.getBoneFor((SpriterBone)@object);
                    }
                    else
                    {
                        objectInFrame = frame.getObjectFor((SpriterObject)@object);
                    }
                    if (@object.equals(objectInFrame))
                    {
                        nextFrame = frame;
                    }
                }
            }
            return(nextFrame);
        }
コード例 #2
0
 /// <summary>Changes the state of each effector to unactive.</summary>
 /// <remarks>Changes the state of each effector to unactive. The effect results in non animated bodyparts.
 ///     </remarks>
 /// <param name="parents">indicates whether parents of the effectors have to be deactivated or not.
 ///     </param>
 public virtual void deactivateEffectors(SpriterAbstractPlayer player, bool parents)
 {
     foreach (SpriterIKObject key in this.ikMap.Keys)
     {
         SpriterAbstractObject obj = this.ikMap[key];
         if (obj is SpriterBone)
         {
             obj = player.getRuntimeBones()[obj.getId()];
         }
         else
         {
             obj = player.getRuntimeObjects()[obj.getId()];
         }
         obj.active = false;
         if (!parents)
         {
             continue;
         }
         SpriterBone par = (SpriterBone)obj.getParent();
         for (int j = 0; j < key.chainLength && par != null; j++)
         {
             player.getRuntimeBones()[par.getId()].active = false;
             par = (SpriterBone)par.getParent();
         }
     }
 }
コード例 #3
0
 /// <param name="object">to compare with</param>
 /// <returns>true if both objects have the same id.</returns>
 public virtual bool equals(SpriterAbstractObject
                            @object)
 {
     if (@object == null)
     {
         return(false);
     }
     return(this.timeline == @object.getTimeline());
 }
コード例 #4
0
 private void translateRelative(SpriterAbstractObject
                                @object, SpriterAbstractObject parent)
 {
     @object.setAngle(@object.getAngle() * this.flippedX * this.flippedY + parent.getAngle()
                      );
     @object.setScaleX(@object.getScaleX() * parent.getScaleX());
     @object.setScaleY(@object.getScaleY() * parent.getScaleY());
     SpriterCalculator.translateRelative(parent, @object);
 }
コード例 #5
0
 public virtual void updateAbstractObject(SpriterAbstractObject @object)
 {
     if (@object.hasParent())
     {
         SpriterAbstractObject obj = (@object is SpriterBone
                                      ) ? (SpriterAbstractObject)this.lastFrame.getBones()[@object.getId()] : this.lastFrame.getObjects()[@object
                                                                                                                                          .getId()];
         SpriterCalculator.translateRelative(this.tempBones[@object
                                                            .getParentId()], obj.getX(), obj.getY(), @object);
     }
 }
コード例 #6
0
        private void tweenBone(SpriterBone currentBone, SpriterBone
                               nextBone, int i, long startTime, long endTime)
        {
            currentBone.copyValuesTo(this.tempBones[i]);
            this.tempBones[i].setTimeline((nextBone != null) ? currentBone.getTimeline() : -1
                                          );
            SpriterAbstractObject parent = (this.tempBones[i]
                                            .hasParent()) ? this.tempBones[this.tempBones[i].getParentId()] : this.tempParent;

            if (nextBone != null)
            {
                if (parent != this.tempParent)
                {
                    if (!currentBone.getParent().equals(nextBone.getParent()))
                    {
                        nextBone = (SpriterBone)this.getTimelineObject(currentBone
                                                                       , this.tempBones2);
                        SpriterCalculator.reTranslateRelative(parent, nextBone);
                        nextBone.setAngle(nextBone.getAngle() * this.flippedX * this.flippedY);
                    }
                }
                else
                {
                    if (nextBone.hasParent())
                    {
                        nextBone = (SpriterBone)this.getTimelineObject(currentBone
                                                                       , this.tempBones2);
                        SpriterCalculator.reTranslateRelative(parent, nextBone);
                        nextBone.setAngle(nextBone.getAngle() * this.flippedX * this.flippedY);
                    }
                }
                if (this.tempBones[i].active)
                {
                    this.interpolateAbstractObject(this.tempBones[i], currentBone, nextBone, startTime
                                                   , endTime);
                }
            }
            this.moddedBones[currentBone.getId()].modSpriterBone(this.tempBones[i]);
            if (this.transitionFixed)
            {
                this.tempBones[i].copyValuesTo(this.lastFrame.getBones()[i]);
            }
            else
            {
                this.tempBones[i].copyValuesTo(this.lastTempFrame.getBones()[i]);
            }
            if (!this.tempBones[i].hasParent() || !this.moddedBones[currentBone.getId()].isActive
                    ())
            {
                this.tempBones[i].setX(this.tempBones[i].getX() + this.pivotX);
                this.tempBones[i].setY(this.tempBones[i].getY() + this.pivotY);
            }
            this.translateRelative(this.tempBones[i], parent);
        }
コード例 #7
0
 public SpriterAbstractObject()
 {
     this.x        = 0;
     this.y        = 0;
     this.angle    = 0f;
     this.scaleX   = 1f;
     this.scaleY   = 1f;
     this.id       = -1;
     this.parentId = -1;
     this.name     = string.Empty;
     this.parent   = null;
 }
コード例 #8
0
 public SpriterAbstractObject()
 {
     this.x = 0;
     this.y = 0;
     this.angle = 0f;
     this.scaleX = 1f;
     this.scaleY = 1f;
     this.id = -1;
     this.parentId = -1;
     this.name = string.Empty;
     this.parent = null;
 }
コード例 #9
0
 private void updateTransformedTempObject(SpriterAbstractObject
                                          source, SpriterAbstractObject target)
 {
     source.copyValuesTo(target);
     if (!target.hasParent())
     {
         target.setX(target.getX() + this.pivotX);
         target.setY(target.getY() + this.pivotY);
     }
     this.translateRelative(target, (target.hasParent()) ? this.tempBones2[target.getParentId
                                                                               ()] : this.tempParent);
 }
コード例 #10
0
 getTimelineObject(SpriterAbstractObject @object,
                   SpriterAbstractObject[] objects)
 {
     for (int i = 0; i < objects.Length; i++)
     {
         if (objects[i].getTimeline().Equals(@object.getTimeline()))
         {
             return(objects[i]);
         }
     }
     return(null);
 }
コード例 #11
0
        private void updateTempObject(SpriterAbstractObject
                                      source, SpriterAbstractObject[] target)
        {
            bool found = false;

            for (int j = 0; j < target.Length && !found; j++)
            {
                if (source.getId() == target[j].getId())
                {
                    source.copyValuesTo(target[j]);
                    found = true;
                }
            }
        }
コード例 #12
0
 /// <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);
 }
コード例 #13
0
 /// <summary>Sets the values of this instance to the given one.</summary>
 /// <remarks>Sets the values of this instance to the given one.</remarks>
 /// <param name="object">which has to be manipulated.</param>
 public virtual void copyValuesTo(SpriterAbstractObject
                                  @object)
 {
     @object.setAngle(angle);
     @object.setScaleX(scaleX);
     @object.setScaleY(scaleY);
     @object.setX(x);
     @object.setY(y);
     @object.setId(id);
     @object.setParentId(parentId);
     @object.setParent(parent);
     @object.setTimeline(timeline);
     @object.setSpin(spin);
     @object.setName(name);
 }
コード例 #14
0
        /// <summary>Sets the values of this instance to the given one.</summary>
        /// <remarks>Sets the values of this instance to the given one.</remarks>
        /// <param name="object">which has to be manipulated.</param>
        public virtual void copyValuesTo(SpriterAbstractObject
			 @object)
        {
            @object.setAngle(angle);
            @object.setScaleX(scaleX);
            @object.setScaleY(scaleY);
            @object.setX(x);
            @object.setY(y);
            @object.setId(id);
            @object.setParentId(parentId);
            @object.setParent(parent);
            @object.setTimeline(timeline);
            @object.setSpin(spin);
            @object.setName(name);
        }
コード例 #15
0
 protected internal virtual void updateRecursively(SpriterAbstractPlayer
                                                   player, SpriterAbstractObject @object)
 {
     this.updateObject(player, @object);
     if (@object is SpriterBone)
     {
         foreach (SpriterBone child in ((SpriterBone
                                         )@object).getChildBones())
         {
             this.updateRecursively(player, player.getRuntimeBones()[child.getId()]);
         }
         foreach (SpriterObject child_1 in ((SpriterBone
                                             )@object).getChildObjects())
         {
             this.updateRecursively(player, player.getRuntimeObjects()[child_1.getId()]);
         }
     }
 }
コード例 #16
0
        public override void copyValuesTo(SpriterAbstractObject
			 @object)
        {
            base.copyValuesTo(@object);
            if (!(@object is SpriterObject))
            {
                return;
            }
            ((SpriterObject)@object).setAlpha(alpha);
            ((SpriterObject)@object).setRef(@ref);
            ((SpriterObject)@object).setPivotX(pivotX);
            ((SpriterObject)@object).setPivotY(pivotY);
            ((SpriterObject)@object).setTransientObject(transientObject
                );
            ((SpriterObject)@object).setZIndex(zIndex);
            ((SpriterObject)@object).setLoader(loader);
            ((SpriterObject)@object).setVisible(visible);
            ((SpriterObject)@object).rect.set(this.rect);
        }
コード例 #17
0
 private void interpolateAbstractObject(SpriterAbstractObject
                                        target, SpriterAbstractObject obj1, SpriterAbstractObject
                                        obj2, float startTime, float endTime)
 {
     if (obj2 == null)
     {
         return;
     }
     target.setX(this.interpolate(obj1.getX(), obj2.getX(), startTime, endTime, this.frame
                                  ));
     target.setY(this.interpolate(obj1.getY(), obj2.getY(), startTime, endTime, this.frame
                                  ));
     target.setScaleX(this.interpolate(obj1.getScaleX(), obj2.getScaleX(), startTime,
                                       endTime, this.frame));
     target.setScaleY(this.interpolate(obj1.getScaleY(), obj2.getScaleY(), startTime,
                                       endTime, this.frame));
     target.setAngle(this.interpolateAngle(obj1.getAngle(), obj2.getAngle(), startTime
                                           , endTime, this.frame));
 }
コード例 #18
0
 public override void copyValuesTo(SpriterAbstractObject
                                   @object)
 {
     base.copyValuesTo(@object);
     if (!(@object is SpriterObject))
     {
         return;
     }
     ((SpriterObject)@object).setAlpha(alpha);
     ((SpriterObject)@object).setRef(@ref);
     ((SpriterObject)@object).setPivotX(pivotX);
     ((SpriterObject)@object).setPivotY(pivotY);
     ((SpriterObject)@object).setTransientObject(transientObject
                                                 );
     ((SpriterObject)@object).setZIndex(zIndex);
     ((SpriterObject)@object).setLoader(loader);
     ((SpriterObject)@object).setVisible(visible);
     ((SpriterObject)@object).rect.set(this.rect);
 }
コード例 #19
0
 /// <summary>
 /// Resolves the inverse kinematics constraints with the implemented algorithm in
 /// <see cref="resolve(float, float, int, SpriterAbstractObject, SpriterAbstractPlayer)
 ///     ">resolve(float, float, int, SpriterAbstractObject, SpriterAbstractPlayer)
 ///     </see>
 /// .
 /// </summary>
 /// <param name="player">player to apply the resolving.</param>
 public virtual void resolve(SpriterAbstractPlayer player)
 {
     foreach (SpriterIKObject key in this.ikMap.Keys)
     {
         for (int j = 0; j < key.iterations; j++)
         {
             SpriterAbstractObject obj = this.ikMap[key];
             if (obj is Com.Brashmonkey.Spriter.objects.SpriterBone)
             {
                 obj = player.getRuntimeBones()[obj.getId()];
             }
             else
             {
                 obj = player.getRuntimeObjects()[obj.getId()];
             }
             this.resolve(obj.getX(), obj.getY(), key.chainLength, obj, player);
         }
     }
 }
コード例 #20
0
        /// <param name="object">to compare with</param>
        /// <returns>true if both objects have the same id.</returns>
        public virtual bool equals(SpriterAbstractObject 
			@object)
        {
            if (@object == null)
            {
                return false;
            }
            return this.timeline == @object.getTimeline();
        }
コード例 #21
0
        //else this.tweenBone(this.nonTransformedTempBones[i], this.animations.get(0).frames.get(0).getBoneFor(this.nonTransformedTempBones[i]), i, currentFrame.getTime(), nextFrame.getTime());
        private void tweenObject(SpriterObject currentObject
                                 , SpriterObject nextObject, int i, long startTime
                                 , long endTime)
        {
            DrawInstruction dI = this.instructions[i];

            currentObject.copyValuesTo(this.tempObjects[i]);
            SpriterAbstractObject parent = null;

            if (!currentObject.isTransientObject())
            {
                this.tempObjects[i].setTimeline((nextObject != null) ? currentObject.getTimeline(
                                                    ) : -1);
                parent = (currentObject.hasParent()) ? this.tempBones[currentObject.getParentId()
                         ] : this.tempParent;
                if (nextObject != null)
                {
                    if (parent != this.tempParent)
                    {
                        if (!currentObject.getParent().equals(nextObject.getParent()))
                        {
                            nextObject = (SpriterObject)this.getTimelineObject
                                             (currentObject, this.tempObjects2);
                            SpriterCalculator.reTranslateRelative(parent, nextObject);
                            nextObject.setAngle(nextObject.getAngle() * this.flippedX * this.flippedY);
                        }
                    }
                    else
                    {
                        if (nextObject.hasParent())
                        {
                            nextObject = (SpriterObject)this.getTimelineObject
                                             (currentObject, this.tempObjects2);
                            SpriterCalculator.reTranslateRelative(parent, nextObject);
                            nextObject.setAngle(nextObject.getAngle() * this.flippedX * this.flippedY);
                        }
                    }
                    if (this.tempObjects[i].active)
                    {
                        this.interpolateSpriterObject(this.tempObjects[i], currentObject, nextObject, startTime
                                                      , endTime);
                    }
                }
                this.moddedObjects[currentObject.getId()].modSpriterObject(this.tempObjects[i]);
                if (this.transitionFixed)
                {
                    this.tempObjects[i].copyValuesTo(this.lastFrame.getObjects()[i]);
                }
                else
                {
                    this.tempObjects[i].copyValuesTo(this.lastTempFrame.getObjects()[i]);
                }
            }
            else
            {
                parent = this.tempParent;
            }
            if (!this.tempObjects[i].hasParent())
            {
                this.tempObjects[i].setX(this.tempObjects[i].getX() + this.pivotX);
                this.tempObjects[i].setY(this.tempObjects[i].getY() + this.pivotY);
            }
            this.translateRelative(this.tempObjects[i], parent);
            if (this.moddedObjects[currentObject.getId()].getRef() != null)
            {
                this.tempObjects[i].setRef(this.moddedObjects[currentObject.getId()].getRef());
            }
            if (this.moddedObjects[currentObject.getId()].getLoader() != null)
            {
                this.tempObjects[i].setLoader(this.moddedObjects[currentObject.getId()].getLoader
                                                  ());
            }
            this.tempObjects[i].copyValuesTo(dI);
            this.setInstructionRef(dI, this.tempObjects[i], nextObject);
        }
コード例 #22
0
        protected override void resolve(float x, float y, int chainLength, SpriterAbstractObject effector, SpriterAbstractPlayer player)
        {
            base.updateRecursively(player, effector);
            float xx = effector.getX() + (float)System.Math.Cos(SpriterCalculator.DegreeToRadian(effector
                                                                                                 .getAngle())) * Com.Brashmonkey.Spriter.draw.AbstractDrawer.BONE_LENGTH * effector
                       .getScaleX();
            float yy = effector.getY() + (float)System.Math.Sin(SpriterCalculator.DegreeToRadian(effector
                                                                                                 .getAngle())) * Com.Brashmonkey.Spriter.draw.AbstractDrawer.BONE_LENGTH * effector
                       .getScaleX();

            effector.setAngle(Com.Brashmonkey.Spriter.SpriterCalculator.angleBetween(effector
                                                                                     .getX(), effector.getY(), x, y));
            if (player.getFlipX() == -1)
            {
                effector.setAngle(effector.getAngle() + 180f);
            }
            SpriterBone parent = null;

            if (effector.hasParent())
            {
                parent = player.getRuntimeBones()[effector.getParentId()];
            }
            //effector.copyValuesTo(temp);
            //SpriterCalculator.reTranslateRelative(parent, temp);
            //if(effector instanceof SpriterBone)	temp.copyValuesTo(player.lastFrame.getBones()[effector.getId()]);
            //else temp.copyValuesTo(player.lastFrame.getObjects()[effector.getId()]);
            for (int i = 0; i < chainLength && parent != null; i++)
            {
                if (Com.Brashmonkey.Spriter.SpriterCalculator.distanceBetween(xx, yy, x, y) <= this
                    .tolerance)
                {
                    SpriterBone p = null;
                    if (parent.hasParent())
                    {
                        p = player.getRuntimeBones()[parent.getParentId()];
                    }
                    int j = 0;
                    while (p != null && j < chainLength)
                    {
                        base.updateRecursively(player, p);
                        if (p.hasParent())
                        {
                            p = player.getRuntimeBones()[p.getParentId()];
                        }
                        else
                        {
                            p = null;
                        }
                        j++;
                    }
                    return;
                }
                parent.setAngle(parent.getAngle() + Com.Brashmonkey.Spriter.SpriterCalculator.angleDifference
                                    (Com.Brashmonkey.Spriter.SpriterCalculator.angleBetween(parent.getX(), parent.getY
                                                                                                (), x, y), Com.Brashmonkey.Spriter.SpriterCalculator.angleBetween(parent.getX(),
                                                                                                                                                                  parent.getY(), xx, yy)));
                base.updateRecursively(player, parent);
                if (parent.hasParent())
                {
                    parent = player.getRuntimeBones()[parent.getParent().getId()];
                }
                else
                {
                    parent = null;
                }
                xx = effector.getX() + (float)System.Math.Cos(SpriterCalculator.DegreeToRadian(effector.getAngle
                                                                                                   ())) * Com.Brashmonkey.Spriter.draw.AbstractDrawer.BONE_LENGTH * effector.getScaleX
                         ();
                yy = effector.getY() + (float)System.Math.Sin(SpriterCalculator.DegreeToRadian(effector.getAngle
                                                                                                   ())) * Com.Brashmonkey.Spriter.draw.AbstractDrawer.BONE_LENGTH * effector.getScaleX
                         ();
            }
        }
コード例 #23
0
 /// <summary>Attaches a given player to this.</summary>
 /// <remarks>Attaches a given player to this.</remarks>
 /// <param name="player">indicates the player which has to be attached.</param>
 /// <param name="root">
 /// indicates the object the attached player has to follow.
 /// Set to
 /// <see cref="getRootParent()">getRootParent()</see>
 /// to attach the player to the same position as this player.
 /// </param>
 public virtual void attachPlayer(SpriterAbstractPlayer
                                  player, SpriterAbstractObject root)
 {
     this.players.Add(player);
     player.changeRootParent(root);
 }
コード例 #24
0
        /// <param name="parent">the parent to set</param>
        public virtual void setParent(SpriterAbstractObject
			 parent)
        {
            this.parent = parent;
        }
コード例 #25
0
 /// <summary>Adds the given object to the internal SpriterIKObject - SpriterBone map, which works like a HashMap.
 ///     </summary>
 /// <remarks>
 /// Adds the given object to the internal SpriterIKObject - SpriterBone map, which works like a HashMap.
 /// This means, the values of the given object affect the mapped bone.
 /// </remarks>
 /// <param name="object"></param>
 /// <param name="bone"></param>
 public virtual void mapIKObject(SpriterIKObject @object
                                 , SpriterAbstractObject abstractObject)
 {
     this.ikMap.Add(@object, abstractObject);
 }
コード例 #26
0
 /// <summary>Resolves the inverse kinematics constraint with a specific algtorithm</summary>
 /// <param name="x">the target x value</param>
 /// <param name="y">the target y value</param>
 /// <param name="chainLength">number of parents which are affected</param>
 /// <param name="effector">the actual effector where the resolved information has to be stored in.
 ///     </param>
 protected abstract void resolve(float x, float y, int chainLength, SpriterAbstractObject effector, SpriterAbstractPlayer player);
コード例 #27
0
 /// <param name="rootParent">the rootParent to set</param>
 internal virtual void setRootParent(SpriterAbstractObject
                                     rootParent)
 {
     this.rootParent = rootParent;
 }
コード例 #28
0
 /// <param name="rootParent">the rootParent to set</param>
 internal virtual void changeRootParent(SpriterAbstractObject
                                        rootParent)
 {
     this.rootParent.setParent(rootParent);
 }
コード例 #29
0
 /// <param name="parent">the parent to set</param>
 public virtual void setParent(SpriterAbstractObject
                               parent)
 {
     this.parent = parent;
 }
コード例 #30
0
 protected internal virtual void updateObject(SpriterAbstractPlayer
                                              player, SpriterAbstractObject @object)
 {
     player.updateAbstractObject(@object);
 }