mirror of
https://github.com/ppy/osu
synced 2024-12-13 02:17:32 +00:00
Initial implementation
This commit is contained in:
parent
e93311fdc9
commit
6e98a8dd7c
@ -7,7 +7,9 @@ using osu.Framework.Graphics;
|
||||
using osu.Framework.Screens;
|
||||
using osu.Game.Beatmaps;
|
||||
using osu.Game.Screens;
|
||||
using osu.Game.Screens.Menu;
|
||||
using osu.Game.Screens.Play;
|
||||
using osuTK;
|
||||
|
||||
namespace osu.Game.Tests.Visual
|
||||
{
|
||||
@ -16,6 +18,9 @@ namespace osu.Game.Tests.Visual
|
||||
private PlayerLoader loader;
|
||||
private readonly ScreenStack stack;
|
||||
|
||||
[Cached]
|
||||
private OsuLogo logo;
|
||||
|
||||
[Cached]
|
||||
private BackgroundScreenStack backgroundStack;
|
||||
|
||||
@ -23,6 +28,7 @@ namespace osu.Game.Tests.Visual
|
||||
{
|
||||
InputManager.Add(backgroundStack = new BackgroundScreenStack { RelativeSizeAxes = Axes.Both });
|
||||
InputManager.Add(stack = new ScreenStack { RelativeSizeAxes = Axes.Both });
|
||||
InputManager.Add(logo = new OsuLogo());
|
||||
}
|
||||
|
||||
[BackgroundDependencyLoader]
|
||||
@ -30,6 +36,8 @@ namespace osu.Game.Tests.Visual
|
||||
{
|
||||
Beatmap.Value = new DummyWorkingBeatmap(game);
|
||||
|
||||
AddStep("Reset logo position", () => logo = new OsuLogo { Position = new Vector2(0, 0) });
|
||||
|
||||
AddStep("load dummy beatmap", () => stack.Push(loader = new PlayerLoader(() => new Player
|
||||
{
|
||||
AllowPause = false,
|
||||
@ -57,8 +65,6 @@ namespace osu.Game.Tests.Visual
|
||||
AllowLeadIn = false,
|
||||
AllowResults = false,
|
||||
}));
|
||||
|
||||
Scheduler.AddDelayed(() => slow.Ready = true, 5000);
|
||||
});
|
||||
|
||||
AddUntilStep("wait for no longer current", () => !loader.IsCurrentScreen());
|
||||
|
@ -2,6 +2,7 @@
|
||||
// See the LICENCE file in the repository root for full licence text.
|
||||
|
||||
using osu.Framework.Allocation;
|
||||
using osu.Framework.Graphics;
|
||||
using osu.Framework.Graphics.Containers;
|
||||
using osu.Game.Screens.Menu;
|
||||
using osuTK;
|
||||
@ -13,14 +14,62 @@ namespace osu.Game.Graphics.Containers
|
||||
[Cached]
|
||||
private Facade facade;
|
||||
|
||||
private OsuLogo logo;
|
||||
|
||||
private bool tracking;
|
||||
private bool smoothTransform;
|
||||
|
||||
public FacadeContainer()
|
||||
{
|
||||
facade = new Facade();
|
||||
}
|
||||
|
||||
public void SetLogo(OsuLogo logo)
|
||||
private Vector2 logoTrackingPosition => logo.Parent.ToLocalSpace(facade.ScreenSpaceDrawQuad.Centre);
|
||||
|
||||
public void SetLogo(OsuLogo logo, bool resuming, double transformDelay)
|
||||
{
|
||||
facade.Size = new Vector2(logo.SizeForFlow);
|
||||
if (logo != null)
|
||||
{
|
||||
facade.Size = new Vector2(logo.SizeForFlow * 0.3f);
|
||||
this.logo = logo;
|
||||
Scheduler.AddDelayed(() =>
|
||||
{
|
||||
tracking = true;
|
||||
smoothTransform = !resuming;
|
||||
}, transformDelay);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void UpdateAfterChildren()
|
||||
{
|
||||
base.UpdateAfterChildren();
|
||||
|
||||
facade.Size = new Vector2(logo.SizeForFlow * 0.3f);
|
||||
|
||||
if (!tracking)
|
||||
return;
|
||||
|
||||
logo.RelativePositionAxes = Axes.None;
|
||||
|
||||
bool childrenLoaded = true;
|
||||
|
||||
foreach (var d in Children)
|
||||
{
|
||||
if (!d.IsAlive)
|
||||
childrenLoaded = false;
|
||||
}
|
||||
|
||||
if (smoothTransform && childrenLoaded)
|
||||
{
|
||||
// Our initial movement to the tracking location should be smooth.
|
||||
Schedule(() => logo.MoveTo(logoTrackingPosition, 500, Easing.InOutExpo));
|
||||
smoothTransform = false;
|
||||
}
|
||||
else if (logo.Transforms.Count == 0)
|
||||
{
|
||||
// If all transforms have finished playing, the logo constantly track the position of the facade.
|
||||
logo.Position = logoTrackingPosition;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -149,13 +149,13 @@ namespace osu.Game.Screens.Play
|
||||
{
|
||||
base.LogoArriving(logo, resuming);
|
||||
|
||||
logo.ScaleTo(new Vector2(0.15f), 300, Easing.In);
|
||||
logo.MoveTo(new Vector2(0.5f), 300, Easing.In);
|
||||
const double duration = 300;
|
||||
|
||||
logo.ScaleTo(new Vector2(0.15f), duration, Easing.In);
|
||||
logo.MoveTo(new Vector2(0.5f), duration, Easing.In);
|
||||
logo.FadeIn(350);
|
||||
|
||||
logo.Delay(resuming ? 0 : 500).MoveToOffset(new Vector2(0, -0.24f), 500, Easing.InOutExpo);
|
||||
|
||||
content.SetLogo(logo);
|
||||
content.SetLogo(logo, resuming, duration);
|
||||
}
|
||||
|
||||
protected override void LoadComplete()
|
||||
@ -335,6 +335,9 @@ namespace osu.Game.Screens.Play
|
||||
{
|
||||
var metadata = beatmap.BeatmapInfo?.Metadata ?? new BeatmapMetadata();
|
||||
|
||||
facade.Anchor = Anchor.TopCentre;
|
||||
facade.Origin = Anchor.TopCentre;
|
||||
|
||||
AutoSizeAxes = Axes.Both;
|
||||
Children = new Drawable[]
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user