Limit shake duration to ensure it doesn't overlap miss window

This commit is contained in:
Dean Herbert
2018-07-06 17:24:30 +09:00
parent 98410dbb6d
commit 79af5cb0a0
4 changed files with 20 additions and 10 deletions

View File

@ -14,16 +14,26 @@ namespace osu.Game.Graphics.Containers
/// <summary>
/// Shake the contents of this container.
/// </summary>
public void Shake()
/// <param name="maximumLength">The maximum length the shake should last.</param>
public void Shake(double maximumLength)
{
const float shake_amount = 8;
const float shake_duration = 30;
this.MoveToX(shake_amount, shake_duration / 2, Easing.OutSine).Then()
.MoveToX(-shake_amount, shake_duration, Easing.InOutSine).Then()
.MoveToX(shake_amount, shake_duration, Easing.InOutSine).Then()
.MoveToX(-shake_amount, shake_duration, Easing.InOutSine).Then()
.MoveToX(0, shake_duration / 2, Easing.InSine);
// if we don't have enough time, don't bother shaking.
if (maximumLength < shake_duration * 2)
return;
var sequence = this.MoveToX(shake_amount, shake_duration / 2, Easing.OutSine).Then()
.MoveToX(-shake_amount, shake_duration, Easing.InOutSine).Then();
// if we don't have enough time for the second shake, skip it.
if (maximumLength > shake_duration * 4)
sequence = sequence
.MoveToX(shake_amount, shake_duration, Easing.InOutSine).Then()
.MoveToX(-shake_amount, shake_duration, Easing.InOutSine).Then();
sequence.MoveToX(0, shake_duration / 2, Easing.InSine);
}
}
}