1
0
mirror of https://github.com/ppy/osu.git synced 2024-09-22 04:47:24 +08:00
osu-lazer/osu.Game/Overlays/Changelog/ChangelogHeader.cs

211 lines
8.6 KiB
C#
Raw Normal View History

2018-07-17 05:50:22 +08:00
// Copyright (c) 2007-2018 ppy Pty Ltd <contact@ppy.sh>.
// Licensed under the MIT Licence - https://raw.githubusercontent.com/ppy/osu/master/LICENCE
2018-07-17 21:01:53 +08:00
using OpenTK;
2018-07-17 05:50:22 +08:00
using OpenTK.Graphics;
using osu.Framework.Allocation;
using osu.Framework.Graphics;
using osu.Framework.Graphics.Containers;
using osu.Framework.Graphics.Shapes;
using osu.Framework.Graphics.Sprites;
using osu.Framework.Graphics.Textures;
2018-07-17 21:01:53 +08:00
using osu.Game.Graphics;
2018-07-17 05:50:22 +08:00
using osu.Game.Graphics.Sprites;
2018-07-20 01:07:24 +08:00
using osu.Game.Online.API.Requests.Responses;
2018-07-17 05:50:22 +08:00
using osu.Game.Overlays.Changelog.Header;
2018-07-18 07:35:06 +08:00
using System;
2018-07-17 05:50:22 +08:00
namespace osu.Game.Overlays.Changelog
{
public class ChangelogHeader : Container
{
2018-07-19 01:32:15 +08:00
protected Color4 Purple = new Color4(191, 4, 255, 255);
2018-07-17 05:50:22 +08:00
private readonly Sprite coverImage;
2018-07-20 03:49:13 +08:00
private readonly Sprite headerBadge;
2018-07-19 01:32:15 +08:00
private readonly OsuSpriteText titleStream;
2018-07-17 05:50:22 +08:00
private readonly TextBadgePairListing listing;
private readonly TextBadgePairRelease releaseStream;
2018-07-18 07:35:06 +08:00
public Action OnListingActivated;
2018-07-20 01:07:24 +08:00
public APIChangelog ChangelogEntry;
2018-07-17 05:50:22 +08:00
private const float cover_height = 310;
private const float title_height = 50;
private const float icon_size = 50;
private const float icon_margin = 20;
private const float version_height = 40;
public ChangelogHeader()
{
2018-07-19 01:32:15 +08:00
SpriteIcon chevron; // AppVeyor told me this should be a local variable..?
2018-07-17 05:50:22 +08:00
RelativeSizeAxes = Axes.X;
2018-07-18 07:35:06 +08:00
Height = cover_height;
2018-07-17 05:50:22 +08:00
Children = new Drawable[]
{
2018-07-18 07:35:06 +08:00
coverImage = new Sprite
2018-07-17 05:50:22 +08:00
{
2018-07-18 07:35:06 +08:00
RelativeSizeAxes = Axes.Both,
FillMode = FillMode.Fill,
},
new Container // this is the line badge-Changelog-Stream
{
Height = title_height,
Anchor = Anchor.BottomLeft,
Origin = Anchor.BottomLeft,
Y = -version_height,
2018-07-17 05:50:22 +08:00
Children = new Drawable[]
{
2018-07-18 07:35:06 +08:00
new CircularContainer // a purple circle
2018-07-17 05:50:22 +08:00
{
2018-07-18 07:35:06 +08:00
X = icon_margin,
Masking = true,
2018-07-19 01:32:15 +08:00
BorderColour = Purple,
2018-07-18 07:35:06 +08:00
BorderThickness = 3,
MaskingSmoothness = 1,
2018-07-19 01:32:15 +08:00
Size = new Vector2(50),
2018-07-18 00:32:11 +08:00
Children = new Drawable[]
{
2018-07-18 07:35:06 +08:00
headerBadge = new Sprite
2018-07-17 05:50:22 +08:00
{
2018-07-18 07:35:06 +08:00
RelativeSizeAxes = Axes.Both,
2018-07-19 01:32:15 +08:00
Size = new Vector2(0.8f),
2018-07-18 07:35:06 +08:00
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
2018-07-17 05:50:22 +08:00
},
2018-07-18 07:35:06 +08:00
// this box has 2 functions:
// - ensures the circle doesn't disappear on the X and Y edges
2018-07-20 03:49:13 +08:00
// - gets rid of the white "contamination" on the circle (due to smoothing)
// (https://i.imgur.com/SMuvWBZ.png)
2018-07-18 07:35:06 +08:00
new Box
2018-07-17 05:50:22 +08:00
{
2018-07-18 07:35:06 +08:00
RelativeSizeAxes = Axes.Both,
Alpha = 0,
AlwaysPresent = true,
2018-07-19 01:32:15 +08:00
Colour = Purple,
2018-07-18 00:32:11 +08:00
}
}
},
2018-07-19 01:32:15 +08:00
new FillFlowContainer
2018-07-18 00:32:11 +08:00
{
2018-07-18 07:35:06 +08:00
AutoSizeAxes = Axes.Both,
2018-07-18 00:32:11 +08:00
Direction = FillDirection.Horizontal,
2018-07-18 07:35:06 +08:00
Anchor = Anchor.CentreLeft,
Origin = Anchor.CentreLeft,
X = icon_size + icon_margin * 2,
2018-07-18 00:32:11 +08:00
Children = new Drawable[]
{
2018-07-19 01:32:15 +08:00
new OsuSpriteText
2018-07-18 00:32:11 +08:00
{
2018-07-18 07:35:06 +08:00
Text = "Changelog ",
Font = @"Exo2.0-Light",
TextSize = 38, // web: 30
2018-07-17 05:50:22 +08:00
},
2018-07-18 07:35:06 +08:00
titleStream = new OsuSpriteText
{
Text = "Listing",
TextSize = 38, // web: 30
Font = @"Exo2.0-Light",
2018-07-19 01:32:15 +08:00
Colour = Purple,
2018-07-18 07:35:06 +08:00
},
}
}
}
},
2018-07-19 01:32:15 +08:00
new FillFlowContainer // Listing > Lazer 2018.713.1
2018-07-18 07:35:06 +08:00
{
X = 2 * icon_margin + icon_size - 8,
Height = version_height,
Anchor = Anchor.BottomLeft,
Origin = Anchor.BottomLeft,
Direction = FillDirection.Horizontal,
Children = new Drawable[]
{
2018-07-19 01:32:15 +08:00
listing = new TextBadgePairListing(Purple),
new Container // without a container, moving the chevron wont work
2018-07-18 00:32:11 +08:00
{
2018-07-18 07:35:06 +08:00
Anchor = Anchor.CentreLeft,
2018-07-18 00:32:11 +08:00
Origin = Anchor.CentreLeft,
2018-07-19 01:32:15 +08:00
Margin = new MarginPadding
2018-07-18 07:35:06 +08:00
{
Top = 10,
Left = 7,
2018-07-18 21:17:20 +08:00
// + chevron size, and account for gained space on left by
// listing's font draw width being smaller
Right = 18,
2018-07-18 07:35:06 +08:00
Bottom = 15,
},
Children = new Drawable[]
{
chevron = new SpriteIcon
{
Anchor = Anchor.Centre,
Origin = Anchor.Centre,
Size = new Vector2(7),
2018-07-19 01:32:15 +08:00
Colour = Purple,
2018-07-18 07:35:06 +08:00
Icon = FontAwesome.fa_chevron_right,
Alpha = 0,
X = -200,
},
},
2018-07-18 00:32:11 +08:00
},
2018-07-19 01:32:15 +08:00
releaseStream = new TextBadgePairRelease(Purple, "Lazer")
2018-07-18 07:35:06 +08:00
},
},
new Box // purple line
{
2018-07-19 01:32:15 +08:00
Colour = Purple,
2018-07-18 07:35:06 +08:00
RelativeSizeAxes = Axes.X,
Height = 3,
Anchor = Anchor.BottomLeft,
Origin = Anchor.CentreLeft,
},
2018-07-17 05:50:22 +08:00
};
2018-07-17 21:01:53 +08:00
// is this a bad way to do this?
OnLoadComplete = d =>
2018-07-17 05:50:22 +08:00
{
2018-07-18 00:32:11 +08:00
releaseStream.OnActivation = () =>
{
listing.Deactivate();
chevron.MoveToX(0, 100).FadeIn(100);
};
2018-07-17 21:01:53 +08:00
listing.OnActivation = () =>
{
releaseStream.Deactivate();
2018-07-18 00:32:11 +08:00
chevron.MoveToX(-20, 100).FadeOut(100);
2018-07-19 01:32:15 +08:00
changeHeaderText("Listing");
2018-07-18 07:35:06 +08:00
OnListingActivated?.Invoke();
2018-07-17 21:01:53 +08:00
};
2018-07-17 05:50:22 +08:00
};
}
2018-07-20 01:07:24 +08:00
public void ShowReleaseStream()
2018-07-17 05:50:22 +08:00
{
2018-07-20 01:07:24 +08:00
releaseStream.Activate(String.Join(" ",
ChangelogEntry.UpdateStream.DisplayName, ChangelogEntry.DisplayVersion));
changeHeaderText(ChangelogEntry.UpdateStream.DisplayName);
2018-07-17 05:50:22 +08:00
}
2018-07-19 01:32:15 +08:00
private void changeHeaderText(string headerText)
2018-07-17 05:50:22 +08:00
{
2018-07-17 21:01:53 +08:00
titleStream.Text = headerText;
titleStream.FlashColour(Color4.White, 500, Easing.OutQuad);
2018-07-17 05:50:22 +08:00
}
2018-07-17 21:01:53 +08:00
public void ActivateListing() => listing.Activate();
2018-07-18 07:35:06 +08:00
2018-07-19 01:32:15 +08:00
public bool IsListingActivated() => listing.IsActivated;
2018-07-17 05:50:22 +08:00
[BackgroundDependencyLoader]
private void load(TextureStore textures)
{
// should be added to osu-resources?
// headerBadge.Texture = textures.Get(@"https://osu.ppy.sh/images/icons/changelog.svg"); // this is not working
headerBadge.Texture = textures.Get(@"https://i.imgur.com/HQM3Vhp.png");
coverImage.Texture = textures.Get(@"https://osu.ppy.sh/images/headers/changelog.jpg");
}
}
}