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); } }