Ejemplo n.º 1
0
        protected internal override void step(float xOffset, float yOffset)
        {
            //Fetch information
            IList <Com.Brashmonkey.Spriter.animation.SpriterKeyFrame
                   > frameList = this.animation.frames;

            if (this.transitionFixed && this.transitionTempFixed)
            {
                firstKeyFrame  = frameList[this.currentKey];
                secondKeyFrame = frameList[(this.currentKey + 1) % frameList.Count];
                //Update
                this.frame += this.frameSpeed;
                if (this.frame >= this.animation.length)
                {
                    this.frame      = 0;
                    this.currentKey = 0;
                    firstKeyFrame   = frameList[this.currentKey];
                    secondKeyFrame  = frameList[(this.currentKey + 1) % frameList.Count];
                }
                if (this.frame > secondKeyFrame.getTime() && this.frameSpeed >= 0)
                {
                    this.currentKey = (this.currentKey + 1) % frameList.Count;
                }
                else
                {
                    if (this.frame < firstKeyFrame.getTime())
                    {
                        if (this.frame < 0)
                        {
                            this.frame      = this.animation.length;
                            this.currentKey = frameList.Count - 1;
                            firstKeyFrame   = frameList[frameList.Count - 1];
                            secondKeyFrame  = frameList[0];
                        }
                        else
                        {
                            this.currentKey = ((this.currentKey - 1) + frameList.Count) % frameList.Count;
                        }
                    }
                }
            }
            else
            {
                firstKeyFrame  = frameList[0];
                secondKeyFrame = this.lastRealFrame;
                float temp = (float)(this.fixCounter) / (float)this.fixMaxSteps;
                this.frame      = this.lastRealFrame.getTime() + (long)(this.fixMaxSteps * temp);
                this.fixCounter = System.Math.Min(this.fixCounter + this.transitionSpeed, this.fixMaxSteps
                                                  );
                //Update
                if (this.fixCounter == this.fixMaxSteps)
                {
                    this.frame      = 0;
                    this.fixCounter = 0;
                    if (this.lastRealFrame.Equals(this.lastFrame))
                    {
                        this.transitionFixed = true;
                    }
                    else
                    {
                        this.transitionTempFixed = true;
                    }
                    firstKeyFrame.setTime(0);
                }
            }
            //Interpolate
            this.currenObjectsToDraw   = firstKeyFrame.getObjects().Length;
            this.currentBonesToAnimate = firstKeyFrame.getBones().Length;
            this.transformBones(firstKeyFrame, secondKeyFrame, xOffset, yOffset);
            this.transformObjects(firstKeyFrame, secondKeyFrame, xOffset, yOffset);
        }