mirror of
https://github.com/ppy/osu.git
synced 2025-01-28 06:03:08 +08:00
Merge pull request #3165 from peppy/add-loading-animation
Add loading animation to player loader
This commit is contained in:
commit
cd4265bb33
@ -1,25 +1,61 @@
|
|||||||
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
|
||||||
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
|
||||||
|
|
||||||
|
using System.Threading;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Screens.Play;
|
using osu.Game.Screens.Play;
|
||||||
|
|
||||||
namespace osu.Game.Tests.Visual
|
namespace osu.Game.Tests.Visual
|
||||||
{
|
{
|
||||||
public class TestCasePlayerLoader : OsuTestCase
|
public class TestCasePlayerLoader : ManualInputManagerTestCase
|
||||||
{
|
{
|
||||||
|
private PlayerLoader loader;
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load(OsuGameBase game)
|
private void load(OsuGameBase game)
|
||||||
{
|
{
|
||||||
Beatmap.Value = new DummyWorkingBeatmap(game);
|
Beatmap.Value = new DummyWorkingBeatmap(game);
|
||||||
|
|
||||||
AddStep("load dummy beatmap", () => Add(new PlayerLoader(new Player
|
AddStep("load dummy beatmap", () => Add(loader = new PlayerLoader(new Player
|
||||||
{
|
{
|
||||||
AllowPause = false,
|
AllowPause = false,
|
||||||
AllowLeadIn = false,
|
AllowLeadIn = false,
|
||||||
AllowResults = false,
|
AllowResults = false,
|
||||||
})));
|
})));
|
||||||
|
|
||||||
|
AddStep("mouse in centre", () => InputManager.MoveMouseTo(loader.ScreenSpaceDrawQuad.Centre));
|
||||||
|
|
||||||
|
AddUntilStep(() => !loader.IsCurrentScreen, "wait for no longer current");
|
||||||
|
|
||||||
|
AddStep("load slow dummy beatmap", () =>
|
||||||
|
{
|
||||||
|
SlowLoadPlayer slow;
|
||||||
|
|
||||||
|
Add(loader = new PlayerLoader(slow = new SlowLoadPlayer
|
||||||
|
{
|
||||||
|
AllowPause = false,
|
||||||
|
AllowLeadIn = false,
|
||||||
|
AllowResults = false,
|
||||||
|
}));
|
||||||
|
|
||||||
|
Scheduler.AddDelayed(() => slow.Ready = true, 5000);
|
||||||
|
});
|
||||||
|
|
||||||
|
AddUntilStep(() => !loader.IsCurrentScreen, "wait for no longer current");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected class SlowLoadPlayer : Player
|
||||||
|
{
|
||||||
|
public bool Ready;
|
||||||
|
|
||||||
|
[BackgroundDependencyLoader]
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
while (!Ready)
|
||||||
|
Thread.Sleep(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,9 +14,11 @@ using osu.Framework.Threading;
|
|||||||
using osu.Game.Beatmaps;
|
using osu.Game.Beatmaps;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Screens.Menu;
|
using osu.Game.Screens.Menu;
|
||||||
using osu.Game.Screens.Play.PlayerSettings;
|
using osu.Game.Screens.Play.PlayerSettings;
|
||||||
using OpenTK;
|
using OpenTK;
|
||||||
|
using OpenTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Play
|
namespace osu.Game.Screens.Play
|
||||||
{
|
{
|
||||||
@ -69,21 +71,25 @@ namespace osu.Game.Screens.Play
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
loadTask = LoadComponentAsync(player);
|
loadTask = LoadComponentAsync(player, playerLoaded);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void playerLoaded(Player player) => info.Loading = false;
|
||||||
|
|
||||||
protected override void OnResuming(Screen last)
|
protected override void OnResuming(Screen last)
|
||||||
{
|
{
|
||||||
base.OnResuming(last);
|
base.OnResuming(last);
|
||||||
|
|
||||||
contentIn();
|
contentIn();
|
||||||
|
|
||||||
|
info.Loading = true;
|
||||||
|
|
||||||
//we will only be resumed if the player has requested a re-run (see ValidForResume setting above)
|
//we will only be resumed if the player has requested a re-run (see ValidForResume setting above)
|
||||||
loadTask = LoadComponentAsync(player = new Player
|
loadTask = LoadComponentAsync(player = new Player
|
||||||
{
|
{
|
||||||
RestartCount = player.RestartCount + 1,
|
RestartCount = player.RestartCount + 1,
|
||||||
RestartRequested = player.RestartRequested,
|
RestartRequested = player.RestartRequested,
|
||||||
});
|
}, playerLoaded);
|
||||||
|
|
||||||
this.Delay(400).Schedule(pushWhenLoaded);
|
this.Delay(400).Schedule(pushWhenLoaded);
|
||||||
}
|
}
|
||||||
@ -258,6 +264,25 @@ namespace osu.Game.Screens.Play
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly WorkingBeatmap beatmap;
|
private readonly WorkingBeatmap beatmap;
|
||||||
|
private LoadingAnimation loading;
|
||||||
|
private Sprite backgroundSprite;
|
||||||
|
|
||||||
|
public bool Loading
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value)
|
||||||
|
{
|
||||||
|
loading.Show();
|
||||||
|
backgroundSprite.FadeColour(OsuColour.Gray(0.5f), 400, Easing.OutQuint);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
loading.Hide();
|
||||||
|
backgroundSprite.FadeColour(Color4.White, 400, Easing.OutQuint);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BeatmapMetadataDisplay(WorkingBeatmap beatmap)
|
public BeatmapMetadataDisplay(WorkingBeatmap beatmap)
|
||||||
{
|
{
|
||||||
@ -304,9 +329,9 @@ namespace osu.Game.Screens.Play
|
|||||||
Anchor = Anchor.TopCentre,
|
Anchor = Anchor.TopCentre,
|
||||||
CornerRadius = 10,
|
CornerRadius = 10,
|
||||||
Masking = true,
|
Masking = true,
|
||||||
Children = new[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new Sprite
|
backgroundSprite = new Sprite
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Texture = beatmap?.Background,
|
Texture = beatmap?.Background,
|
||||||
@ -314,6 +339,7 @@ namespace osu.Game.Screens.Play
|
|||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
FillMode = FillMode.Fill,
|
FillMode = FillMode.Fill,
|
||||||
},
|
},
|
||||||
|
loading = new LoadingAnimation { Scale = new Vector2(1.3f) }
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new OsuSpriteText
|
new OsuSpriteText
|
||||||
@ -341,6 +367,8 @@ namespace osu.Game.Screens.Play
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user