示例#1
0
 public void GenerateShake(int power, int flickCoint, int flickDuration)
 {
     if (shakeTask.Initialized && !shakeTask.Completed)
     {
         shakeTask = new ShakeParams(shakeTask.Power + power, flickCoint, flickDuration);
     }
     else
     {
         offsetChangeTask = new OffsetChangeParams(_internalOffset, GenerateOffset(power), flickDuration);
         shakeTask        = new ShakeParams(power, flickCoint, flickDuration);
     }
 }
示例#2
0
        private void UpdateOffset()
        {
            if (!offsetChangeTask.Completed)
            {
                _internalOffset += offsetChangeTask.Step;
                offsetChangeTask.FramesPassed++;
                if (offsetChangeTask.FramesPassed >= offsetChangeTask.FrameCount)
                {
                    offsetChangeTask.Completed = true;
                }
            }

            if (!shakeTask.Completed)
            {
                if (offsetChangeTask.Completed)
                {
                    shakeTask.StepsPassed++;
                }
                if (shakeTask.StepsPassed >= shakeTask.FlicksCount)
                {
                    shakeTask.Completed = true;
                    offsetChangeTask    = new OffsetChangeParams(_internalOffset, Vector2.Zero, shakeTask.FlickDuration);
                }
                if (offsetChangeTask.Completed && !shakeTask.Completed)
                {
                    Vector2 newOffset;

                    do
                    {
                        newOffset = GenerateOffset(shakeTask.Power);
                    } while ((newOffset - _internalOffset).Length() < shakeTask.Power);

                    offsetChangeTask = new OffsetChangeParams(
                        _internalOffset,
                        GenerateOffset(shakeTask.Power),
                        shakeTask.FlickDuration);
                }
            }
        }