mirror of
https://github.com/ppy/osu.git
synced 2025-01-09 03:02:56 +08:00
Merge branch 'master' into results-screen
This commit is contained in:
commit
2d6dcb3ba9
@ -52,6 +52,6 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.315.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.315.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework.Android" Version="2020.314.0" />
|
<PackageReference Include="ppy.osu.Framework.Android" Version="2020.317.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
@ -417,7 +417,7 @@ namespace osu.Game.Tests.Beatmaps.IO
|
|||||||
[Test]
|
[Test]
|
||||||
public async Task TestImportWithDuplicateHashes()
|
public async Task TestImportWithDuplicateHashes()
|
||||||
{
|
{
|
||||||
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(TestImportNestedStructure)))
|
using (HeadlessGameHost host = new CleanRunHeadlessGameHost(nameof(TestImportWithDuplicateHashes)))
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
32
osu.Game.Tests/Visual/Ranking/TestSceneStarRatingDisplay.cs
Normal file
32
osu.Game.Tests/Visual/Ranking/TestSceneStarRatingDisplay.cs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Game.Beatmaps;
|
||||||
|
using osu.Game.Screens.Ranking.Expanded;
|
||||||
|
|
||||||
|
namespace osu.Game.Tests.Visual.Ranking
|
||||||
|
{
|
||||||
|
public class TestSceneStarRatingDisplay : OsuTestScene
|
||||||
|
{
|
||||||
|
public TestSceneStarRatingDisplay()
|
||||||
|
{
|
||||||
|
Child = new FillFlowContainer
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 1.23 }),
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 2.34 }),
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 3.45 }),
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 4.56 }),
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 5.67 }),
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 6.78 }),
|
||||||
|
new StarRatingDisplay(new BeatmapInfo { StarDifficulty = 10.11 }),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
|
||||||
|
// See the LICENCE file in the repository root for full licence text.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Game.Tournament.Components;
|
||||||
|
using osu.Game.Tournament.Models;
|
||||||
|
|
||||||
|
namespace osu.Game.Tournament.Tests.Components
|
||||||
|
{
|
||||||
|
public class TestSceneRoundDisplay : TournamentTestScene
|
||||||
|
{
|
||||||
|
public override IReadOnlyList<Type> RequiredTypes => new[]
|
||||||
|
{
|
||||||
|
typeof(DrawableTournamentHeaderText),
|
||||||
|
typeof(DrawableTournamentHeaderLogo),
|
||||||
|
};
|
||||||
|
|
||||||
|
public TestSceneRoundDisplay()
|
||||||
|
{
|
||||||
|
Children = new Drawable[]
|
||||||
|
{
|
||||||
|
new RoundDisplay(new TournamentMatch
|
||||||
|
{
|
||||||
|
Round =
|
||||||
|
{
|
||||||
|
Value = new TournamentRound
|
||||||
|
{
|
||||||
|
Name = { Value = "Test Round" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
{
|
||||||
|
Margin = new MarginPadding(20)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,9 +11,13 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
public class DrawableTournamentHeaderText : CompositeDrawable
|
public class DrawableTournamentHeaderText : CompositeDrawable
|
||||||
{
|
{
|
||||||
public DrawableTournamentHeaderText()
|
public DrawableTournamentHeaderText(bool center = true)
|
||||||
{
|
{
|
||||||
InternalChild = new TextSprite();
|
InternalChild = new TextSprite
|
||||||
|
{
|
||||||
|
Anchor = center ? Anchor.Centre : Anchor.TopLeft,
|
||||||
|
Origin = center ? Anchor.Centre : Anchor.TopLeft,
|
||||||
|
};
|
||||||
|
|
||||||
Height = 22;
|
Height = 22;
|
||||||
RelativeSizeAxes = Axes.X;
|
RelativeSizeAxes = Axes.X;
|
||||||
@ -27,9 +31,6 @@ namespace osu.Game.Tournament.Components
|
|||||||
RelativeSizeAxes = Axes.Both;
|
RelativeSizeAxes = Axes.Both;
|
||||||
FillMode = FillMode.Fit;
|
FillMode = FillMode.Fit;
|
||||||
|
|
||||||
Anchor = Anchor.Centre;
|
|
||||||
Origin = Anchor.Centre;
|
|
||||||
|
|
||||||
Texture = textures.Get("header-text");
|
Texture = textures.Get("header-text");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,19 +12,27 @@ namespace osu.Game.Tournament.Components
|
|||||||
{
|
{
|
||||||
public RoundDisplay(TournamentMatch match)
|
public RoundDisplay(TournamentMatch match)
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both;
|
AutoSizeAxes = Axes.Y;
|
||||||
|
RelativeSizeAxes = Axes.X;
|
||||||
|
|
||||||
InternalChildren = new Drawable[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
new FillFlowContainer
|
new FillFlowContainer
|
||||||
{
|
{
|
||||||
AutoSizeAxes = Axes.Both,
|
AutoSizeAxes = Axes.Y,
|
||||||
|
RelativeSizeAxes = Axes.X,
|
||||||
Direction = FillDirection.Vertical,
|
Direction = FillDirection.Vertical,
|
||||||
Children = new Drawable[]
|
Children = new Drawable[]
|
||||||
{
|
{
|
||||||
new DrawableTournamentHeaderText(),
|
new DrawableTournamentHeaderText(false)
|
||||||
|
{
|
||||||
|
Anchor = Anchor.TopLeft,
|
||||||
|
Origin = Anchor.TopLeft,
|
||||||
|
},
|
||||||
new TournamentSpriteText
|
new TournamentSpriteText
|
||||||
{
|
{
|
||||||
|
Anchor = Anchor.TopLeft,
|
||||||
|
Origin = Anchor.TopLeft,
|
||||||
Text = match.Round.Value?.Name.Value ?? "Unknown Round",
|
Text = match.Round.Value?.Name.Value ?? "Unknown Round",
|
||||||
Font = OsuFont.Torus.With(size: 26, weight: FontWeight.SemiBold)
|
Font = OsuFont.Torus.With(size: 26, weight: FontWeight.SemiBold)
|
||||||
},
|
},
|
||||||
|
@ -35,7 +35,9 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
private void load(LadderInfo ladder)
|
private void load(LadderInfo ladder)
|
||||||
{
|
{
|
||||||
currentMatch.BindTo(ladder.CurrentMatch);
|
currentMatch.BindTo(ladder.CurrentMatch);
|
||||||
currentMatch.BindValueChanged(matchChanged, true);
|
currentMatch.BindValueChanged(matchChanged);
|
||||||
|
|
||||||
|
updateMatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void matchChanged(ValueChangedEvent<TournamentMatch> match)
|
private void matchChanged(ValueChangedEvent<TournamentMatch> match)
|
||||||
@ -43,10 +45,19 @@ namespace osu.Game.Tournament.Screens.Gameplay.Components
|
|||||||
currentTeamScore.UnbindBindings();
|
currentTeamScore.UnbindBindings();
|
||||||
currentTeam.UnbindBindings();
|
currentTeam.UnbindBindings();
|
||||||
|
|
||||||
if (match.NewValue != null)
|
Scheduler.AddOnce(updateMatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateMatch()
|
||||||
|
{
|
||||||
|
var match = currentMatch.Value;
|
||||||
|
|
||||||
|
if (match != null)
|
||||||
{
|
{
|
||||||
currentTeamScore.BindTo(teamColour == TeamColour.Red ? match.NewValue.Team1Score : match.NewValue.Team2Score);
|
match.StartMatch();
|
||||||
currentTeam.BindTo(teamColour == TeamColour.Red ? match.NewValue.Team1 : match.NewValue.Team2);
|
|
||||||
|
currentTeamScore.BindTo(teamColour == TeamColour.Red ? match.Team1Score : match.Team2Score);
|
||||||
|
currentTeam.BindTo(teamColour == TeamColour.Red ? match.Team1 : match.Team2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// team may change to same team, which means score is not in a good state.
|
// team may change to same team, which means score is not in a good state.
|
||||||
|
@ -222,7 +222,7 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
if (badge.Accuracy > score.Accuracy)
|
if (badge.Accuracy > score.Accuracy)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
using (BeginDelayedSequence(inverseEasing(ACCURACY_TRANSFORM_EASING, badge.Accuracy / targetAccuracy) * ACCURACY_TRANSFORM_DURATION, true))
|
using (BeginDelayedSequence(inverseEasing(ACCURACY_TRANSFORM_EASING, Math.Min(1 - virtual_ss_percentage, badge.Accuracy) / targetAccuracy) * ACCURACY_TRANSFORM_DURATION, true))
|
||||||
badge.Appear();
|
badge.Appear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,11 +4,13 @@
|
|||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Graphics.Sprites;
|
using osu.Game.Graphics.Sprites;
|
||||||
using osu.Game.Online.Leaderboards;
|
using osu.Game.Online.Leaderboards;
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
using osuTK.Graphics;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
||||||
{
|
{
|
||||||
@ -19,7 +21,9 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
{
|
{
|
||||||
private readonly ScoreRank rank;
|
private readonly ScoreRank rank;
|
||||||
|
|
||||||
private Drawable flash;
|
private BufferedContainer flash;
|
||||||
|
private BufferedContainer superFlash;
|
||||||
|
private GlowingSpriteText rankText;
|
||||||
|
|
||||||
public RankText(ScoreRank rank)
|
public RankText(ScoreRank rank)
|
||||||
{
|
{
|
||||||
@ -35,17 +39,38 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
private void load()
|
private void load()
|
||||||
{
|
{
|
||||||
InternalChildren = new[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
new GlowingSpriteText
|
rankText = new GlowingSpriteText
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
|
GlowColour = OsuColour.ForRank(rank),
|
||||||
Spacing = new Vector2(-15, 0),
|
Spacing = new Vector2(-15, 0),
|
||||||
Text = DrawableRank.GetRankName(rank),
|
Text = DrawableRank.GetRankName(rank),
|
||||||
Font = OsuFont.Numeric.With(size: 76),
|
Font = OsuFont.Numeric.With(size: 76),
|
||||||
UseFullGlyphHeight = false
|
UseFullGlyphHeight = false
|
||||||
},
|
},
|
||||||
|
superFlash = new BufferedContainer
|
||||||
|
{
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
BlurSigma = new Vector2(85),
|
||||||
|
Size = new Vector2(600),
|
||||||
|
CacheDrawnFrameBuffer = true,
|
||||||
|
Blending = BlendingParameters.Additive,
|
||||||
|
Alpha = 0,
|
||||||
|
Children = new[]
|
||||||
|
{
|
||||||
|
new Box
|
||||||
|
{
|
||||||
|
Colour = Color4.White,
|
||||||
|
Size = new Vector2(150),
|
||||||
|
Anchor = Anchor.Centre,
|
||||||
|
Origin = Anchor.Centre,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
flash = new BufferedContainer
|
flash = new BufferedContainer
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
@ -53,8 +78,10 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
BlurSigma = new Vector2(35),
|
BlurSigma = new Vector2(35),
|
||||||
BypassAutoSizeAxes = Axes.Both,
|
BypassAutoSizeAxes = Axes.Both,
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
|
CacheDrawnFrameBuffer = true,
|
||||||
Blending = BlendingParameters.Additive,
|
Blending = BlendingParameters.Additive,
|
||||||
Size = new Vector2(2f),
|
Alpha = 0,
|
||||||
|
Size = new Vector2(2f), // increase buffer size to allow for scale
|
||||||
Scale = new Vector2(1.8f),
|
Scale = new Vector2(1.8f),
|
||||||
Children = new[]
|
Children = new[]
|
||||||
{
|
{
|
||||||
@ -75,9 +102,36 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
|
|
||||||
public void Appear()
|
public void Appear()
|
||||||
{
|
{
|
||||||
this.FadeIn(0, Easing.In);
|
this.FadeIn();
|
||||||
|
|
||||||
flash.FadeIn(0, Easing.In).Then().FadeOut(800, Easing.OutQuint);
|
if (rank < ScoreRank.A)
|
||||||
|
{
|
||||||
|
this
|
||||||
|
.MoveToOffset(new Vector2(0, -20))
|
||||||
|
.MoveToOffset(new Vector2(0, 20), 200, Easing.OutBounce);
|
||||||
|
|
||||||
|
if (rank <= ScoreRank.D)
|
||||||
|
{
|
||||||
|
this.Delay(700)
|
||||||
|
.RotateTo(5, 150, Easing.In)
|
||||||
|
.MoveToOffset(new Vector2(0, 3), 150, Easing.In);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.FadeInFromZero(200, Easing.OutQuint);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
flash.Colour = OsuColour.ForRank(rank);
|
||||||
|
flash.FadeIn().Then().FadeOut(1200, Easing.OutQuint);
|
||||||
|
|
||||||
|
if (rank >= ScoreRank.S)
|
||||||
|
rankText.ScaleTo(1.05f).ScaleTo(1, 3000, Easing.OutQuint);
|
||||||
|
|
||||||
|
if (rank >= ScoreRank.X)
|
||||||
|
{
|
||||||
|
flash.FadeIn().Then().FadeOut(3000);
|
||||||
|
superFlash.FadeIn().Then().FadeOut(800, Easing.OutQuint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using osu.Framework.Allocation;
|
using osu.Framework.Allocation;
|
||||||
|
using osu.Framework.Extensions.Color4Extensions;
|
||||||
using osu.Framework.Graphics;
|
using osu.Framework.Graphics;
|
||||||
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Graphics.Sprites;
|
using osu.Framework.Graphics.Sprites;
|
||||||
@ -40,6 +42,10 @@ namespace osu.Game.Screens.Ranking.Expanded
|
|||||||
string fractionPart = starRatingParts[1];
|
string fractionPart = starRatingParts[1];
|
||||||
string separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
|
string separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
|
||||||
|
|
||||||
|
ColourInfo backgroundColour = beatmap.DifficultyRating == DifficultyRating.ExpertPlus
|
||||||
|
? ColourInfo.GradientVertical(Color4Extensions.FromHex("#C1C1C1"), Color4Extensions.FromHex("#595959"))
|
||||||
|
: (ColourInfo)colours.ForDifficultyRating(beatmap.DifficultyRating);
|
||||||
|
|
||||||
InternalChildren = new Drawable[]
|
InternalChildren = new Drawable[]
|
||||||
{
|
{
|
||||||
new CircularContainer
|
new CircularContainer
|
||||||
@ -51,7 +57,7 @@ namespace osu.Game.Screens.Ranking.Expanded
|
|||||||
new Box
|
new Box
|
||||||
{
|
{
|
||||||
RelativeSizeAxes = Axes.Both,
|
RelativeSizeAxes = Axes.Both,
|
||||||
Colour = colours.ForDifficultyRating(beatmap.DifficultyRating)
|
Colour = backgroundColour
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.315.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.315.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2020.314.0" />
|
<PackageReference Include="ppy.osu.Framework" Version="2020.317.0" />
|
||||||
<PackageReference Include="Sentry" Version="2.1.0" />
|
<PackageReference Include="Sentry" Version="2.1.0" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.24.0" />
|
<PackageReference Include="SharpCompress" Version="0.24.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.12.0" />
|
<PackageReference Include="NUnit" Version="3.12.0" />
|
||||||
|
@ -71,7 +71,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup Label="Package References">
|
<ItemGroup Label="Package References">
|
||||||
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.315.0" />
|
<PackageReference Include="ppy.osu.Game.Resources" Version="2020.315.0" />
|
||||||
<PackageReference Include="ppy.osu.Framework.iOS" Version="2020.314.0" />
|
<PackageReference Include="ppy.osu.Framework.iOS" Version="2020.317.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<!-- Xamarin.iOS does not automatically handle transitive dependencies from NuGet packages. -->
|
<!-- Xamarin.iOS does not automatically handle transitive dependencies from NuGet packages. -->
|
||||||
<ItemGroup Label="Transitive Dependencies">
|
<ItemGroup Label="Transitive Dependencies">
|
||||||
@ -79,7 +79,7 @@
|
|||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.2.6" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.2.6" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
|
||||||
<PackageReference Include="ppy.osu.Framework" Version="2020.314.0" />
|
<PackageReference Include="ppy.osu.Framework" Version="2020.317.0" />
|
||||||
<PackageReference Include="SharpCompress" Version="0.24.0" />
|
<PackageReference Include="SharpCompress" Version="0.24.0" />
|
||||||
<PackageReference Include="NUnit" Version="3.12.0" />
|
<PackageReference Include="NUnit" Version="3.12.0" />
|
||||||
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
<PackageReference Include="SharpRaven" Version="2.4.0" />
|
||||||
|
Loading…
Reference in New Issue
Block a user