osu/osu.Game/Screens/Play/PlayerLoader.cs

210 lines
7.5 KiB
C#
Raw Normal View History

2017-02-22 12:43:29 +00:00
// Copyright (c) 2007-2017 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Primitives;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Screens;
using osu.Game.Beatmaps;
2017-02-27 07:37:49 +00:00
using osu.Game.Database;
2017-02-22 12:43:29 +00:00
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Screens.Backgrounds;
using osu.Game.Screens.Menu;
using OpenTK;
namespace osu.Game.Screens.Play
{
public class PlayerLoader : OsuScreen
{
private readonly Player player;
private readonly OsuLogo logo;
2017-02-22 12:43:29 +00:00
private BeatmapMetadataDisplay info;
protected override BackgroundScreen CreateBackground() => new BackgroundScreenBeatmap(Beatmap);
public PlayerLoader(Player player)
{
ValidForResume = false;
this.player = player;
Children = new Drawable[]
{
logo = new OsuLogo
{
Scale = new Vector2(0.15f),
Interactive = false,
},
};
}
[BackgroundDependencyLoader]
private void load()
{
Add(info = new BeatmapMetadataDisplay(Beatmap)
{
Alpha = 0,
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
});
2017-04-02 06:56:12 +00:00
LoadComponentAsync(player);
2017-02-22 12:43:29 +00:00
}
protected override void OnEntering(Screen last)
{
base.OnEntering(last);
Background.FadeTo(0.4f, 250);
Content.ScaleTo(0.7f);
Content.ScaleTo(1, 750, EasingTypes.OutQuint);
Content.FadeInFromZero(500);
Delay(1000, true);
logo.MoveToOffset(new Vector2(0, -180), 500, EasingTypes.InOutExpo);
Delay(250, true);
info.FadeIn(500);
Delay(2000, true);
Content.ScaleTo(0.7f, 300, EasingTypes.InQuint);
Content.FadeOut(250);
Delay(250);
Schedule(() =>
{
if (!IsCurrentScreen) return;
2017-02-22 12:43:29 +00:00
if (!Push(player))
Exit();
});
}
protected override bool OnExiting(Screen next)
{
Content.ScaleTo(0.7f, 150, EasingTypes.InQuint);
FadeOut(150);
2017-02-22 12:43:29 +00:00
return base.OnExiting(next);
}
2017-03-07 01:59:19 +00:00
private class BeatmapMetadataDisplay : Container
2017-02-22 12:43:29 +00:00
{
2017-03-07 01:59:19 +00:00
private class MetadataLine : Container
2017-02-22 12:43:29 +00:00
{
public MetadataLine(string left, string right)
{
AutoSizeAxes = Axes.Both;
Children = new Drawable[]
{
new OsuSpriteText
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopRight,
Margin = new MarginPadding { Right = 5 },
Colour = OsuColour.Gray(0.5f),
Text = left,
},
new OsuSpriteText
{
Anchor = Anchor.TopCentre,
Origin = Anchor.TopLeft,
Margin = new MarginPadding { Left = 5 },
Text = string.IsNullOrEmpty(right) ? @"-" : right,
}
};
}
}
public BeatmapMetadataDisplay(WorkingBeatmap beatmap)
{
2017-02-27 07:37:49 +00:00
var metadata = beatmap?.BeatmapInfo?.Metadata ?? new BeatmapMetadata();
2017-02-22 12:43:29 +00:00
AutoSizeAxes = Axes.Both;
Children = new Drawable[]
{
2017-03-07 01:59:19 +00:00
new FillFlowContainer
2017-02-22 12:43:29 +00:00
{
AutoSizeAxes = Axes.Both,
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
2017-03-04 10:00:17 +00:00
Direction = FillDirection.Vertical,
2017-02-22 12:43:29 +00:00
Children = new Drawable[]
{
new OsuSpriteText
{
2017-02-27 07:37:49 +00:00
Text = metadata.Title,
2017-02-22 12:43:29 +00:00
TextSize = 36,
Font = @"Exo2.0-MediumItalic",
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
},
new OsuSpriteText
{
2017-02-27 07:37:49 +00:00
Text = metadata.Artist,
2017-02-22 12:43:29 +00:00
TextSize = 26,
Font = @"Exo2.0-MediumItalic",
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
},
new Container
{
Size = new Vector2(300, 60),
Margin = new MarginPadding(10),
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
CornerRadius = 10,
Masking = true,
Children = new[]
{
new Sprite
{
Texture = beatmap?.Background,
2017-02-22 12:43:29 +00:00
Origin = Anchor.Centre,
Anchor = Anchor.Centre,
FillMode = FillMode.Fill,
},
}
},
new OsuSpriteText
{
Text = beatmap?.BeatmapInfo?.Version,
2017-02-22 12:43:29 +00:00
TextSize = 26,
Font = @"Exo2.0-MediumItalic",
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
Margin = new MarginPadding
{
Bottom = 40
},
},
2017-02-27 07:37:49 +00:00
new MetadataLine("Source", metadata.Source)
2017-02-22 12:43:29 +00:00
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
},
new MetadataLine("Composer", string.Empty)
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
},
2017-02-27 07:37:49 +00:00
new MetadataLine("Mapper", metadata.Author)
2017-02-22 12:43:29 +00:00
{
Origin = Anchor.TopCentre,
Anchor = Anchor.TopCentre,
},
},
}
};
}
}
}
}