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