Merge pull request #681 from peppy/clocks-and-stuff

Clock fixes
This commit is contained in:
Dan Balasescu 2017-04-28 13:48:44 +09:00 committed by GitHub
commit 0439a5d857
13 changed files with 73 additions and 79 deletions

@ -1 +1 @@
Subproject commit dcbd7a0b6f536f6aadf13a720db40a1d76bf52e2 Subproject commit fc93e11439b8b391d9e01e208368d96ba85bfa26

View File

@ -12,16 +12,11 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Connections
{ {
public class FollowPoint : Container public class FollowPoint : Container
{ {
public double StartTime;
public double EndTime;
public Vector2 EndPosition;
private const float width = 8; private const float width = 8;
public FollowPoint() public FollowPoint()
{ {
Origin = Anchor.Centre; Origin = Anchor.Centre;
Alpha = 0;
Masking = true; Masking = true;
AutoSizeAxes = Axes.Both; AutoSizeAxes = Axes.Both;
@ -45,22 +40,5 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Connections
}, },
}; };
} }
protected override void LoadComplete()
{
base.LoadComplete();
Delay(StartTime);
FadeIn(DrawableOsuHitObject.TIME_FADEIN);
ScaleTo(1.5f);
ScaleTo(1, DrawableOsuHitObject.TIME_FADEIN, EasingTypes.Out);
MoveTo(EndPosition, DrawableOsuHitObject.TIME_FADEIN, EasingTypes.Out);
Delay(EndTime - StartTime);
FadeOut(DrawableOsuHitObject.TIME_FADEIN);
Delay(DrawableOsuHitObject.TIME_FADEIN);
Expire(true);
}
} }
} }

View File

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using OpenTK; using OpenTK;
using osu.Framework.Graphics;
using osu.Game.Rulesets.Objects.Types; using osu.Game.Rulesets.Objects.Types;
namespace osu.Game.Rulesets.Osu.Objects.Drawables.Connections namespace osu.Game.Rulesets.Osu.Objects.Drawables.Connections
@ -80,14 +81,28 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables.Connections
double fadeOutTime = startTime + fraction * duration; double fadeOutTime = startTime + fraction * duration;
double fadeInTime = fadeOutTime - PreEmpt; double fadeInTime = fadeOutTime - PreEmpt;
Add(new FollowPoint FollowPoint fp;
Add(fp = new FollowPoint
{ {
StartTime = fadeInTime,
EndTime = fadeOutTime,
Position = pointStartPosition, Position = pointStartPosition,
EndPosition = pointEndPosition,
Rotation = rotation, Rotation = rotation,
Alpha = 0,
Scale = new Vector2(1.5f),
}); });
using (fp.BeginAbsoluteSequence(fadeInTime))
{
fp.FadeIn(DrawableOsuHitObject.TIME_FADEIN);
fp.ScaleTo(1, DrawableOsuHitObject.TIME_FADEIN, EasingTypes.Out);
fp.MoveTo(pointEndPosition, DrawableOsuHitObject.TIME_FADEIN, EasingTypes.Out);
fp.Delay(fadeOutTime - fadeInTime);
fp.FadeOut(DrawableOsuHitObject.TIME_FADEIN);
}
fp.Expire(true);
} }
} }
prevHitObject = currHitObject; prevHitObject = currHitObject;

View File

@ -104,10 +104,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
ApproachCircle.ScaleTo(1.1f, TIME_PREEMPT); ApproachCircle.ScaleTo(1.1f, TIME_PREEMPT);
} }
protected override void UpdateState(ArmedState state) protected override void UpdateCurrentState(ArmedState state)
{ {
base.UpdateState(state);
ApproachCircle.FadeOut(); ApproachCircle.FadeOut();
double endTime = (HitObject as IHasEndTime)?.EndTime ?? HitObject.StartTime; double endTime = (HitObject as IHasEndTime)?.EndTime ?? HitObject.StartTime;

View File

@ -21,17 +21,23 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
protected override OsuJudgement CreateJudgement() => new OsuJudgement { MaxScore = OsuScoreResult.Hit300 }; protected override OsuJudgement CreateJudgement() => new OsuJudgement { MaxScore = OsuScoreResult.Hit300 };
protected override void UpdateState(ArmedState state) protected sealed override void UpdateState(ArmedState state)
{ {
Flush(); Flush();
UpdateInitialState(); UpdateInitialState();
Delay(HitObject.StartTime - Time.Current - TIME_PREEMPT + Judgement.TimeOffset, true); using (BeginAbsoluteSequence(HitObject.StartTime - TIME_PREEMPT, true))
{
UpdatePreemptState(); UpdatePreemptState();
Delay(TIME_PREEMPT, true); using (BeginDelayedSequence(TIME_PREEMPT + Judgement.TimeOffset, true))
UpdateCurrentState(state);
}
}
protected virtual void UpdateCurrentState(ArmedState state)
{
} }
protected virtual void UpdatePreemptState() protected virtual void UpdatePreemptState()

View File

@ -158,10 +158,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
ball.Alpha = 0; ball.Alpha = 0;
} }
protected override void UpdateState(ArmedState state) protected override void UpdateCurrentState(ArmedState state)
{ {
base.UpdateState(state);
ball.FadeIn(); ball.FadeIn();
Delay(slider.Duration, true); Delay(slider.Duration, true);

View File

@ -72,10 +72,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
Delay(-animIn); Delay(-animIn);
} }
protected override void UpdateState(ArmedState state) protected override void UpdateCurrentState(ArmedState state)
{ {
base.UpdateState(state);
switch (state) switch (state)
{ {
case ArmedState.Idle: case ArmedState.Idle:

View File

@ -132,10 +132,8 @@ namespace osu.Game.Rulesets.Osu.Objects.Drawables
disc.FadeIn(200); disc.FadeIn(200);
} }
protected override void UpdateState(ArmedState state) protected override void UpdateCurrentState(ArmedState state)
{ {
base.UpdateState(state);
Delay(spinner.Duration, true); Delay(spinner.Duration, true);
FadeOut(160); FadeOut(160);

View File

@ -148,9 +148,8 @@ namespace osu.Game.Rulesets.Taiko.Objects.Drawables
var completion = (float)userHits / HitObject.RequiredHits; var completion = (float)userHits / HitObject.RequiredHits;
expandingRing.FadeTo(expandingRing.Alpha + MathHelper.Clamp(completion / 16, 0.1f, 0.6f), 50); expandingRing.FadeTo(expandingRing.Alpha + MathHelper.Clamp(completion / 16, 0.1f, 0.6f), 50);
expandingRing.Delay(50); using (expandingRing.BeginDelayedSequence(50))
expandingRing.FadeTo(completion / 8, 2000, EasingTypes.OutQuint); expandingRing.FadeTo(completion / 8, 2000, EasingTypes.OutQuint);
expandingRing.DelayReset();
symbol.RotateTo((float)(completion * HitObject.Duration / 8), 4000, EasingTypes.OutQuint); symbol.RotateTo((float)(completion * HitObject.Duration / 8), 4000, EasingTypes.OutQuint);

View File

@ -131,14 +131,14 @@ namespace osu.Game.Graphics.UserInterface
foreach (var star in stars.Children) foreach (var star in stars.Children)
{ {
star.ClearTransforms(true); star.ClearTransforms(true);
if (count <= newValue)
star.Delay(Math.Max(i - count, 0) * animationDelay, true);
else
star.Delay(Math.Max(count - 1 - i, 0) * animationDelay, true);
var delay = (count <= newValue ? Math.Max(i - count, 0) : Math.Max(count - 1 - i, 0)) * animationDelay;
using (BeginDelayedSequence(delay, true))
{
star.FadeTo(i < newValue ? 1.0f : minStarAlpha, fadingDuration); star.FadeTo(i < newValue ? 1.0f : minStarAlpha, fadingDuration);
star.Icon.ScaleTo(getStarScale(i, newValue), scalingDuration, scalingEasing); star.Icon.ScaleTo(getStarScale(i, newValue), scalingDuration, scalingEasing);
star.DelayReset(); }
i++; i++;
} }

View File

@ -13,7 +13,7 @@ namespace osu.Game.Screens.Play
{ {
public class PlayerInputManager : PassThroughInputManager public class PlayerInputManager : PassThroughInputManager
{ {
private readonly ManualClock clock = new ManualClock(); private ManualClock clock;
private IFrameBasedClock parentClock; private IFrameBasedClock parentClock;
private ReplayInputHandler replayInputHandler; private ReplayInputHandler replayInputHandler;
@ -47,8 +47,14 @@ namespace osu.Game.Screens.Play
{ {
base.LoadComplete(); base.LoadComplete();
//our clock will now be our parent's clock, but we want to replace this to allow manual control.
parentClock = Clock; parentClock = Clock;
Clock = new FramedClock(clock);
Clock = new FramedClock(clock = new ManualClock
{
CurrentTime = parentClock.CurrentTime,
Rate = parentClock.Rate,
});
} }
/// <summary> /// <summary>

View File

@ -70,24 +70,26 @@ namespace osu.Game.Screens.Ranking
circleOuterBackground.ScaleTo(1, transition_time, EasingTypes.OutQuint); circleOuterBackground.ScaleTo(1, transition_time, EasingTypes.OutQuint);
circleOuterBackground.FadeTo(1, transition_time, EasingTypes.OutQuint); circleOuterBackground.FadeTo(1, transition_time, EasingTypes.OutQuint);
Content.Delay(transition_time * 0.25f, true); using (BeginDelayedSequence(transition_time * 0.25f, true))
{
circleOuter.ScaleTo(1, transition_time, EasingTypes.OutQuint); circleOuter.ScaleTo(1, transition_time, EasingTypes.OutQuint);
circleOuter.FadeTo(1, transition_time, EasingTypes.OutQuint); circleOuter.FadeTo(1, transition_time, EasingTypes.OutQuint);
Content.Delay(transition_time * 0.3f, true); using (BeginDelayedSequence(transition_time * 0.3f, true))
{
backgroundParallax.FadeIn(transition_time, EasingTypes.OutQuint); backgroundParallax.FadeIn(transition_time, EasingTypes.OutQuint);
circleInner.ScaleTo(1, transition_time, EasingTypes.OutQuint); circleInner.ScaleTo(1, transition_time, EasingTypes.OutQuint);
circleInner.FadeTo(1, transition_time, EasingTypes.OutQuint); circleInner.FadeTo(1, transition_time, EasingTypes.OutQuint);
Content.Delay(transition_time * 0.4f, true); using (BeginDelayedSequence(transition_time * 0.4f, true))
{
modeChangeButtons.FadeIn(transition_time, EasingTypes.OutQuint); modeChangeButtons.FadeIn(transition_time, EasingTypes.OutQuint);
currentPage.FadeIn(transition_time, EasingTypes.OutQuint); currentPage.FadeIn(transition_time, EasingTypes.OutQuint);
}
Content.DelayReset(); }
}
} }
protected override bool OnExiting(Screen next) protected override bool OnExiting(Screen next)

View File

@ -106,7 +106,7 @@ namespace osu.Game.Screens.Tournament
speedTo(0f, 2000); speedTo(0f, 2000);
tracker.FadeIn(200); tracker.FadeIn(200);
delayedStateChangeDelegate = Delay(2300).Schedule(() => scrollState = ScrollState.Stopped); delayedStateChangeDelegate = Scheduler.AddDelayed(() => scrollState = ScrollState.Stopped, 2300);
break; break;
case ScrollState.Stopped: case ScrollState.Stopped:
// Find closest to center // Find closest to center
@ -144,7 +144,7 @@ namespace osu.Game.Screens.Tournament
st.Selected = true; st.Selected = true;
OnSelected?.Invoke(st.Team); OnSelected?.Invoke(st.Team);
delayedStateChangeDelegate = Delay(10000).Schedule(() => scrollState = ScrollState.Idle); delayedStateChangeDelegate = Scheduler.AddDelayed(() => scrollState = ScrollState.Idle, 10000);
break; break;
case ScrollState.Idle: case ScrollState.Idle:
resetSelected(); resetSelected();
@ -295,11 +295,7 @@ namespace osu.Game.Screens.Tournament
} }
} }
private void speedTo(float value, double duration = 0, EasingTypes easing = EasingTypes.None) private void speedTo(float value, double duration = 0, EasingTypes easing = EasingTypes.None) => TransformTo(() => speed, value, duration, easing, new TransformScrollSpeed());
{
DelayReset();
TransformTo(() => speed, value, duration, easing, new TransformScrollSpeed());
}
private enum ScrollState private enum ScrollState
{ {