1
0
mirror of https://github.com/ppy/osu.git synced 2025-03-15 15:27:20 +08:00

Added ModsContainer

This commit is contained in:
EVAST9919 2017-05-02 22:34:07 +03:00
parent 00a8dbbacf
commit 7e1efcc20b
5 changed files with 105 additions and 1 deletions

View File

@ -27,6 +27,7 @@ namespace osu.Game.Rulesets.UI
public readonly RollingCounter<double> AccuracyCounter;
public readonly HealthDisplay HealthDisplay;
public readonly SongProgress Progress;
public readonly ModsContainer ModsContainer;
private Bindable<bool> showKeyCounter;
private Bindable<bool> showHud;
@ -39,6 +40,7 @@ namespace osu.Game.Rulesets.UI
protected abstract ScoreCounter CreateScoreCounter();
protected abstract HealthDisplay CreateHealthDisplay();
protected abstract SongProgress CreateProgress();
protected abstract ModsContainer CreateModsContainer();
protected HudOverlay()
{
@ -56,6 +58,7 @@ namespace osu.Game.Rulesets.UI
AccuracyCounter = CreateAccuracyCounter(),
HealthDisplay = CreateHealthDisplay(),
Progress = CreateProgress(),
ModsContainer = CreateModsContainer(),
}
});
}

View File

@ -64,7 +64,15 @@ namespace osu.Game.Rulesets.UI
RelativeSizeAxes = Axes.X,
};
[BackgroundDependencyLoader]
protected override ModsContainer CreateModsContainer() => new ModsContainer
{
Anchor = Anchor.TopRight,
Origin = Anchor.TopRight,
AutoSizeAxes = Axes.Both,
Position = new Vector2(0, 30),
};
[BackgroundDependencyLoader]
private void load(OsuColour colours)
{
ComboCounter.AccentColour = colours.BlueLighter;

View File

@ -0,0 +1,88 @@
// 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.Graphics.Containers;
using osu.Game.Rulesets.Mods;
using osu.Game.Rulesets.UI;
using osu.Framework.Graphics;
using OpenTK.Graphics;
using osu.Game.Graphics;
using osu.Framework.Allocation;
using osu.Game.Graphics.Sprites;
namespace osu.Game.Screens.Play
{
public class ModsContainer : Container
{
private readonly FillFlowContainer<ModIcon> iconsContainer;
private bool showMods;
public bool ShowMods
{
get { return showMods; }
set
{
if (showMods == value) return;
showMods = value;
}
}
public ModsContainer()
{
Children = new Drawable[]
{
iconsContainer = new FillFlowContainer<ModIcon>
{
Anchor = Anchor.TopRight,
Origin = Anchor.TopRight,
AutoSizeAxes = Axes.Both,
Direction = FillDirection.Horizontal,
},
new OsuSpriteText
{
Anchor = Anchor.BottomCentre,
Origin = Anchor.TopCentre,
Text = @"/UNRANKED/",
Font = @"Venera",
TextSize = 15,
}
};
}
public void Add(Mod mod)
{
iconsContainer.Add(new ModIcon
{
AutoSizeAxes = Axes.Both,
Icon = mod.Icon,
Colour = selectColour(mod),
IconSize = 60,
});
}
private Color4 selectColour(Mod mod)
{
switch (mod.Type)
{
case ModType.DifficultyIncrease:
return OsuColour.FromHex(@"ffcc22");
case ModType.DifficultyReduction:
return OsuColour.FromHex(@"88b300");
case ModType.Special:
return OsuColour.FromHex(@"66ccff");
default: return Color4.White;
}
}
[BackgroundDependencyLoader]
private void load()
{
if (ShowMods)
Show();
else
Hide();
}
}
}

View File

@ -169,6 +169,10 @@ namespace osu.Game.Screens.Play
hudOverlay.Progress.AllowSeeking = HitRenderer.HasReplayLoaded;
hudOverlay.Progress.OnSeek = pos => decoupledClock.Seek(pos);
hudOverlay.ModsContainer.ShowMods = HitRenderer.HasReplayLoaded;
foreach (var mod in Beatmap.Mods.Value)
hudOverlay.ModsContainer.Add(mod);
//bind HitRenderer to ScoreProcessor and ourselves (for a pass situation)
HitRenderer.OnAllJudged += onCompletion;

View File

@ -227,6 +227,7 @@
<Compile Include="Screens\Charts\ChartInfo.cs" />
<Compile Include="Screens\Edit\Editor.cs" />
<Compile Include="Screens\Play\HotkeyRetryOverlay.cs" />
<Compile Include="Screens\Play\ModsContainer.cs" />
<Compile Include="Screens\Play\SquareGraph.cs" />
<Compile Include="Screens\Ranking\ResultsPage.cs" />
<Compile Include="Screens\Ranking\ResultsPageRanking.cs" />