Move the Shake logic to a new ShakeContainer

This commit is contained in:
tgi74000
2018-07-05 15:48:54 +02:00
parent f35ea18755
commit 558b2622a7
4 changed files with 43 additions and 12 deletions

View File

@ -8,6 +8,7 @@ using System.Linq;
using osu.Game.Rulesets.Objects.Types;
using osu.Game.Skinning;
using OpenTK.Graphics;
using osu.Game.Graphics.Containers;
namespace osu.Game.Rulesets.Osu.Objects.Drawables
{
@ -15,12 +16,24 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
{
public override bool IsPresent => base.IsPresent || State.Value == ArmedState.Idle && Time.Current >= HitObject.StartTime - HitObject.TimePreempt;
private readonly ShakeContainer shakeContainer;
protected DrawableOsuHitObject(OsuHitObject hitObject)
: base(hitObject)
{
shakeContainer = new ShakeContainer
{
RelativeSizeAxes = Axes.Both,
};
base.AddInternal(shakeContainer);
Alpha = 0;
}
// Forward all internal management to shakeContainer
protected override void AddInternal(Drawable drawable) => shakeContainer.Add(drawable);
protected override void ClearInternal(bool disposeChildren = true) => shakeContainer.Clear(disposeChildren);
protected override bool RemoveInternal(Drawable drawable) => shakeContainer.Remove(drawable);
protected sealed override void UpdateState(ArmedState state)
{
double transformTime = HitObject.StartTime - HitObject.TimePreempt;
@ -61,15 +74,7 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
protected void Shake()
{
const int shake_amount = 8;
const int shake_duration = 20;
this.MoveToX(Position.X + shake_amount, shake_duration).Then()
.MoveToX(Position.X - shake_amount, shake_duration).Then()
.MoveToX(Position.X + shake_amount, shake_duration).Then()
.MoveToX(Position.X - shake_amount, shake_duration).Then()
.MoveToX(Position.X + shake_amount, shake_duration).Then()
.MoveToX(Position.X, shake_duration);
shakeContainer.Shake();
}
}