Exemplo n.º 1
0
        public bool Update(short timeStep = GameUtil.TimeStep)
        {
            var frameData = Frame;

            _opacity.Set(_opacity + frameData.OpcStep(timeStep));
            if (_opacity.Last() < 0f)
            {
                _opacity.Set(0f);
            }
            else if (_opacity.Last() > 255f)
            {
                _opacity.Set(255f);
            }
            _xyScale.Set(_xyScale + frameData.ScaleStep(timeStep));
            if (_xyScale.Last() < 0f)
            {
                _opacity.Set(0f);
            }
            if (timeStep >= _delay)
            {
                var   lastFrame = (short)(_frames.Count - 1);
                short nextFrame;
                bool  endEd;
                if (_zigzag && lastFrame > 0)
                {
                    if (_frameStep == 1 && _frame.Get() == lastFrame)
                    {
                        _frameStep = (short)-_frameStep;
                        endEd      = false;
                    }
                    else if (_frameStep == -1 && _frame.Get() == 0)
                    {
                        _frameStep = (short)-_frameStep;
                        endEd      = true;
                    }
                    else
                    {
                        endEd = false;
                    }

                    nextFrame = (short)(_frame.Get() + _frameStep);
                }
                else
                {
                    if (_frame.Get() == lastFrame)
                    {
                        nextFrame = 0;
                        endEd     = true;
                    }
                    else
                    {
                        nextFrame = (short)(_frame.Get() + 1);
                        endEd     = false;
                    }
                }

                var delta     = (short)(timeStep - _delay);
                var threshold = (float)delta / timeStep;
                _frame.Next(nextFrame, threshold);

                _delay = _frames[nextFrame].Delay;
                if (_delay >= delta)
                {
                    _delay -= delta;
                }
                _opacity.Set(_frames[nextFrame].StartOpacity);
                _xyScale.Set(_frames[nextFrame].StartScale);
                return(endEd);
            }
            else
            {
                _frame.Normalize();
                _delay -= timeStep;
                return(false);
            }
        }