mirror of
https://github.com/osukey/osukey.git
synced 2025-05-23 14:37:39 +09:00
Refactor state updates to convert State into an IBindable
This commit is contained in:
parent
9b526ef61e
commit
74b09c72fa
@ -79,12 +79,12 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
public override bool RemoveCompletedTransforms => false;
|
public override bool RemoveCompletedTransforms => false;
|
||||||
protected override bool RequiresChildrenUpdate => true;
|
protected override bool RequiresChildrenUpdate => true;
|
||||||
|
|
||||||
public override bool IsPresent => base.IsPresent || (state.Value == ArmedState.Idle && Clock?.CurrentTime >= LifetimeStart);
|
public override bool IsPresent => base.IsPresent || (State.Value == ArmedState.Idle && Clock?.CurrentTime >= LifetimeStart);
|
||||||
|
|
||||||
public readonly Bindable<ArmedState> State = new Bindable<ArmedState>();
|
|
||||||
|
|
||||||
private readonly Bindable<ArmedState> state = new Bindable<ArmedState>();
|
private readonly Bindable<ArmedState> state = new Bindable<ArmedState>();
|
||||||
|
|
||||||
|
public IBindable<ArmedState> State => state;
|
||||||
|
|
||||||
protected DrawableHitObject(HitObject hitObject)
|
protected DrawableHitObject(HitObject hitObject)
|
||||||
{
|
{
|
||||||
HitObject = hitObject;
|
HitObject = hitObject;
|
||||||
@ -121,17 +121,7 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
base.LoadComplete();
|
base.LoadComplete();
|
||||||
|
updateState(ArmedState.Idle, true);
|
||||||
state.BindValueChanged(armed =>
|
|
||||||
{
|
|
||||||
updateState(armed.NewValue);
|
|
||||||
|
|
||||||
// apply any custom state overrides
|
|
||||||
ApplyCustomUpdateState?.Invoke(this, armed.NewValue);
|
|
||||||
|
|
||||||
if (armed.NewValue == ArmedState.Hit)
|
|
||||||
PlaySamples();
|
|
||||||
}, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region State / Transform Management
|
#region State / Transform Management
|
||||||
@ -152,8 +142,17 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
|
|
||||||
protected override void ClearInternal(bool disposeChildren = true) => throw new InvalidOperationException($"Should never clear a {nameof(DrawableHitObject)}");
|
protected override void ClearInternal(bool disposeChildren = true) => throw new InvalidOperationException($"Should never clear a {nameof(DrawableHitObject)}");
|
||||||
|
|
||||||
private void updateState(ArmedState state)
|
private void updateState(ArmedState newState, bool force = false)
|
||||||
{
|
{
|
||||||
|
if (State.Value == newState && !force)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// apply any custom state overrides
|
||||||
|
ApplyCustomUpdateState?.Invoke(this, newState);
|
||||||
|
|
||||||
|
if (newState == ArmedState.Hit)
|
||||||
|
PlaySamples();
|
||||||
|
|
||||||
if (UseTransformStateManagement)
|
if (UseTransformStateManagement)
|
||||||
{
|
{
|
||||||
double transformTime = HitObject.StartTime - InitialLifetimeOffset;
|
double transformTime = HitObject.StartTime - InitialLifetimeOffset;
|
||||||
@ -169,17 +168,15 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
|
|
||||||
using (BeginDelayedSequence(InitialLifetimeOffset + judgementOffset, true))
|
using (BeginDelayedSequence(InitialLifetimeOffset + judgementOffset, true))
|
||||||
{
|
{
|
||||||
UpdateStateTransforms(state);
|
UpdateStateTransforms(newState);
|
||||||
State.Value = state;
|
state.Value = newState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
state.Value = newState;
|
||||||
State.Value = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateState(state);
|
UpdateState(newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -255,7 +252,8 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
|
|
||||||
Result.TimeOffset = 0;
|
Result.TimeOffset = 0;
|
||||||
Result.Type = HitResult.None;
|
Result.Type = HitResult.None;
|
||||||
state.Value = ArmedState.Idle;
|
|
||||||
|
updateState(ArmedState.Idle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -336,11 +334,11 @@ namespace osu.Game.Rulesets.Objects.Drawables
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HitResult.Miss:
|
case HitResult.Miss:
|
||||||
state.Value = ArmedState.Miss;
|
updateState(ArmedState.Miss);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
state.Value = ArmedState.Hit;
|
updateState(ArmedState.Hit);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user