Merge branch 'master' into move-cache-logic-to-base-impl

This commit is contained in:
Dan Balasescu
2020-11-06 21:37:16 +09:00
committed by GitHub
3 changed files with 95 additions and 41 deletions

View File

@ -42,8 +42,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
private readonly IBindable<Color4> accentColour = new Bindable<Color4>(); private readonly IBindable<Color4> accentColour = new Bindable<Color4>();
private readonly IBindable<int> indexInCurrentCombo = new Bindable<int>(); private readonly IBindable<int> indexInCurrentCombo = new Bindable<int>();
[Resolved]
private DrawableHitObject drawableObject { get; set; }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(DrawableHitObject drawableObject) private void load()
{ {
var drawableOsuObject = (DrawableOsuHitObject)drawableObject; var drawableOsuObject = (DrawableOsuHitObject)drawableObject;
@ -63,6 +66,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
} }
private void updateState(ValueChangedEvent<ArmedState> state) private void updateState(ValueChangedEvent<ArmedState> state)
{
using (BeginAbsoluteSequence(drawableObject.HitStateUpdateTime, true))
{ {
glow.FadeOut(400); glow.FadeOut(400);
@ -93,4 +98,5 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Pieces
} }
} }
} }
}
} }

View File

@ -42,11 +42,14 @@ namespace osu.Game.Rulesets.Osu.Skinning
private readonly Bindable<Color4> accentColour = new Bindable<Color4>(); private readonly Bindable<Color4> accentColour = new Bindable<Color4>();
private readonly IBindable<int> indexInCurrentCombo = new Bindable<int>(); private readonly IBindable<int> indexInCurrentCombo = new Bindable<int>();
[Resolved]
private DrawableHitObject drawableObject { get; set; }
[Resolved] [Resolved]
private ISkinSource skin { get; set; } private ISkinSource skin { get; set; }
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(DrawableHitObject drawableObject) private void load()
{ {
var drawableOsuObject = (DrawableOsuHitObject)drawableObject; var drawableOsuObject = (DrawableOsuHitObject)drawableObject;
@ -144,6 +147,8 @@ namespace osu.Game.Rulesets.Osu.Skinning
{ {
const double legacy_fade_duration = 240; const double legacy_fade_duration = 240;
using (BeginAbsoluteSequence(drawableObject.HitStateUpdateTime, true))
{
switch (state.NewValue) switch (state.NewValue)
{ {
case ArmedState.Hit: case ArmedState.Hit:
@ -169,4 +174,5 @@ namespace osu.Game.Rulesets.Osu.Skinning
} }
} }
} }
}
} }

View File

@ -3,6 +3,7 @@
using System; using System;
using osu.Framework.Allocation; using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics; using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers; using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Sprites; using osu.Framework.Graphics.Sprites;
@ -20,6 +21,7 @@ namespace osu.Game.Rulesets.Osu.Skinning
protected DrawableSpinner DrawableSpinner { get; private set; } protected DrawableSpinner DrawableSpinner { get; private set; }
private Sprite spin; private Sprite spin;
private Sprite clear;
[BackgroundDependencyLoader] [BackgroundDependencyLoader]
private void load(DrawableHitObject drawableHitObject, ISkinSource source) private void load(DrawableHitObject drawableHitObject, ISkinSource source)
@ -39,17 +41,58 @@ namespace osu.Game.Rulesets.Osu.Skinning
Scale = new Vector2(SPRITE_SCALE), Scale = new Vector2(SPRITE_SCALE),
Y = 120 - 45 // offset temporarily to avoid overlapping default spin counter Y = 120 - 45 // offset temporarily to avoid overlapping default spin counter
}, },
clear = new Sprite
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Depth = float.MinValue,
Alpha = 0,
Texture = source.GetTexture("spinner-clear"),
Scale = new Vector2(SPRITE_SCALE),
Y = -60
},
}); });
} }
private readonly Bindable<bool> completed = new Bindable<bool>();
protected override void LoadComplete() protected override void LoadComplete()
{ {
base.LoadComplete(); base.LoadComplete();
completed.BindTo(DrawableSpinner.RotationTracker.Complete);
completed.BindValueChanged(onCompletedChanged, true);
DrawableSpinner.ApplyCustomUpdateState += UpdateStateTransforms; DrawableSpinner.ApplyCustomUpdateState += UpdateStateTransforms;
UpdateStateTransforms(DrawableSpinner, DrawableSpinner.State.Value); UpdateStateTransforms(DrawableSpinner, DrawableSpinner.State.Value);
} }
private void onCompletedChanged(ValueChangedEvent<bool> completed)
{
if (completed.NewValue)
{
double startTime = Math.Min(Time.Current, DrawableSpinner.HitStateUpdateTime - 400);
using (BeginAbsoluteSequence(startTime, true))
{
clear.FadeInFromZero(400, Easing.Out);
clear.ScaleTo(SPRITE_SCALE * 2)
.Then().ScaleTo(SPRITE_SCALE * 0.8f, 240, Easing.Out)
.Then().ScaleTo(SPRITE_SCALE, 160);
}
const double fade_out_duration = 50;
using (BeginAbsoluteSequence(DrawableSpinner.HitStateUpdateTime - fade_out_duration, true))
clear.FadeOut(fade_out_duration);
}
else
{
clear.ClearTransforms();
clear.Alpha = 0;
}
}
protected virtual void UpdateStateTransforms(DrawableHitObject drawableHitObject, ArmedState state) protected virtual void UpdateStateTransforms(DrawableHitObject drawableHitObject, ArmedState state)
{ {
switch (drawableHitObject) switch (drawableHitObject)
@ -59,7 +102,6 @@ namespace osu.Game.Rulesets.Osu.Skinning
using (BeginAbsoluteSequence(drawableHitObject.HitStateUpdateTime - fadeOutLength, true)) using (BeginAbsoluteSequence(drawableHitObject.HitStateUpdateTime - fadeOutLength, true))
spin.FadeOutFromOne(fadeOutLength); spin.FadeOutFromOne(fadeOutLength);
break; break;
case DrawableSpinnerTick d: case DrawableSpinnerTick d: