mirror of
https://github.com/osukey/osukey.git
synced 2025-08-04 15:16:38 +09:00
Move shake logic into extension method
This commit is contained in:
@ -38,6 +38,33 @@ namespace osu.Game.Extensions
|
||||
return repeatDelegate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Shake the contents of this container.
|
||||
/// </summary>
|
||||
/// <param name="target">The target to shake.</param>
|
||||
/// <param name="shakeDuration">The length of a single shake.</param>
|
||||
/// <param name="shakeMagnitude">Pixels of displacement per shake.</param>
|
||||
/// <param name="maximumLength">The maximum length the shake should last.</param>
|
||||
public static void Shake(this Drawable target, double shakeDuration = 80, float shakeMagnitude = 8, double? maximumLength = null)
|
||||
{
|
||||
// if we don't have enough time, don't bother shaking.
|
||||
if (maximumLength < shakeDuration * 2)
|
||||
return;
|
||||
|
||||
var sequence = target.MoveToX(shakeMagnitude, shakeDuration / 2, Easing.OutSine).Then()
|
||||
.MoveToX(-shakeMagnitude, shakeDuration, Easing.InOutSine).Then();
|
||||
|
||||
// if we don't have enough time for the second shake, skip it.
|
||||
if (!maximumLength.HasValue || maximumLength >= shakeDuration * 4)
|
||||
{
|
||||
sequence = sequence
|
||||
.MoveToX(shakeMagnitude, shakeDuration, Easing.InOutSine).Then()
|
||||
.MoveToX(-shakeMagnitude, shakeDuration, Easing.InOutSine).Then();
|
||||
}
|
||||
|
||||
sequence.MoveToX(0, shakeDuration / 2, Easing.InSine);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Accepts a delta vector in screen-space coordinates and converts it to one which can be applied to this drawable's position.
|
||||
/// </summary>
|
||||
|
Reference in New Issue
Block a user