Centralise common state setting for osu HitObjects.

This commit is contained in:
Dean Herbert
2016-11-28 18:40:54 +09:00
parent 15096c2f00
commit c376f8436c
3 changed files with 44 additions and 31 deletions

View File

@ -104,16 +104,9 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
Judgement.Result = HitResult.Miss;
}
protected override void UpdateState(ArmedState state)
protected override void UpdateInitialState()
{
if (!IsLoaded) return;
Flush(true); //move to DrawableHitObject
ApproachCircle.Flush(true);
double t = osuObject.EndTime + Judgement.TimeOffset;
Alpha = 0;
base.UpdateInitialState();
//sane defaults
ring.Alpha = circle.Alpha = number.Alpha = glow.Alpha = 1;
@ -121,29 +114,30 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
ApproachCircle.Scale = new Vector2(2);
explode.Alpha = 0;
Scale = new Vector2(0.5f); //this will probably need to be moved to DrawableHitObject at some point.
}
const float preempt = 600;
protected override void UpdatePreemptState()
{
base.UpdatePreemptState();
const float fadein = 400;
ApproachCircle.FadeIn(Math.Min(TIME_FADEIN * 2, TIME_PREEMPT));
ApproachCircle.ScaleTo(0.6f, TIME_PREEMPT);
}
Delay(t - Time.Current - preempt, true);
protected override void UpdateState(ArmedState state)
{
if (!IsLoaded) return;
FadeIn(fadein);
ApproachCircle.FadeIn(Math.Min(fadein * 2, preempt));
ApproachCircle.ScaleTo(0.6f, preempt);
Delay(preempt, true);
base.UpdateState(state);
ApproachCircle.FadeOut();
glow.FadeOut(400);
switch (state)
{
case ArmedState.Idle:
Delay(osuObject.Duration + 500);
FadeOut(500);
Delay(osuObject.Duration + TIME_PREEMPT);
FadeOut(TIME_FADEOUT);
explosion?.Expire();
explosion = null;

View File

@ -11,6 +11,10 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
{
public class DrawableOsuHitObject : DrawableHitObject
{
protected const float TIME_PREEMPT = 600;
protected const float TIME_FADEIN = 400;
protected const float TIME_FADEOUT = 500;
public DrawableOsuHitObject(OsuHitObject hitObject)
: base(hitObject)
{
@ -20,7 +24,29 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
protected override void UpdateState(ArmedState state)
{
throw new NotImplementedException();
if (!IsLoaded) return;
Flush(true);
double t = HitObject.EndTime + Judgement.TimeOffset;
UpdateInitialState();
Delay(t - Time.Current - TIME_PREEMPT, true);
UpdatePreemptState();
Delay(TIME_PREEMPT, true);
}
protected virtual void UpdatePreemptState()
{
FadeIn(TIME_FADEIN);
}
protected virtual void UpdateInitialState()
{
Alpha = 0;
}
}

View File

@ -83,16 +83,9 @@ namespace osu.Game.Modes.Osu.Objects.Drawables
protected override void UpdateState(ArmedState state)
{
if (!IsLoaded) return;
base.UpdateState(state);
Flush(true); //move to DrawableHitObject
Alpha = 0;
Delay(HitObject.StartTime - 450 - Time.Current, true);
FadeIn(300);
Delay(450 + HitObject.Duration);
Delay(HitObject.Duration);
FadeOut(100);
}