mirror of
https://github.com/ppy/osu.git
synced 2025-02-14 03:22:54 +08:00
Merge pull request #12851 from vininew921/applause-stops-on-score-switch
Fix applause sound stopping after switching scores
This commit is contained in:
commit
f335337e5d
@ -22,82 +22,17 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
{
|
{
|
||||||
public class TestSceneAccuracyCircle : OsuTestScene
|
public class TestSceneAccuracyCircle : OsuTestScene
|
||||||
{
|
{
|
||||||
[Test]
|
[TestCase(0.2, ScoreRank.D)]
|
||||||
public void TestLowDRank()
|
[TestCase(0.5, ScoreRank.D)]
|
||||||
|
[TestCase(0.75, ScoreRank.C)]
|
||||||
|
[TestCase(0.85, ScoreRank.B)]
|
||||||
|
[TestCase(0.925, ScoreRank.A)]
|
||||||
|
[TestCase(0.975, ScoreRank.S)]
|
||||||
|
[TestCase(0.9999, ScoreRank.S)]
|
||||||
|
[TestCase(1, ScoreRank.X)]
|
||||||
|
public void TestRank(double accuracy, ScoreRank rank)
|
||||||
{
|
{
|
||||||
var score = createScore();
|
var score = createScore(accuracy, rank);
|
||||||
score.Accuracy = 0.2;
|
|
||||||
score.Rank = ScoreRank.D;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestDRank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 0.5;
|
|
||||||
score.Rank = ScoreRank.D;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestCRank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 0.75;
|
|
||||||
score.Rank = ScoreRank.C;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestBRank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 0.85;
|
|
||||||
score.Rank = ScoreRank.B;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestARank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 0.925;
|
|
||||||
score.Rank = ScoreRank.A;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestSRank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 0.975;
|
|
||||||
score.Rank = ScoreRank.S;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestAlmostSSRank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 0.9999;
|
|
||||||
score.Rank = ScoreRank.S;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void TestSSRank()
|
|
||||||
{
|
|
||||||
var score = createScore();
|
|
||||||
score.Accuracy = 1;
|
|
||||||
score.Rank = ScoreRank.X;
|
|
||||||
|
|
||||||
addCircleStep(score);
|
addCircleStep(score);
|
||||||
}
|
}
|
||||||
@ -120,7 +55,7 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
new AccuracyCircle(score, true)
|
new AccuracyCircle(score)
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
@ -129,7 +64,7 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
private ScoreInfo createScore() => new ScoreInfo
|
private ScoreInfo createScore(double accuracy, ScoreRank rank) => new ScoreInfo
|
||||||
{
|
{
|
||||||
User = new User
|
User = new User
|
||||||
{
|
{
|
||||||
@ -139,9 +74,9 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
Beatmap = new TestBeatmap(new OsuRuleset().RulesetInfo).BeatmapInfo,
|
Beatmap = new TestBeatmap(new OsuRuleset().RulesetInfo).BeatmapInfo,
|
||||||
Mods = new Mod[] { new OsuModHardRock(), new OsuModDoubleTime() },
|
Mods = new Mod[] { new OsuModHardRock(), new OsuModDoubleTime() },
|
||||||
TotalScore = 2845370,
|
TotalScore = 2845370,
|
||||||
Accuracy = 0.95,
|
Accuracy = accuracy,
|
||||||
MaxCombo = 999,
|
MaxCombo = 999,
|
||||||
Rank = ScoreRank.S,
|
Rank = rank,
|
||||||
Date = DateTimeOffset.Now,
|
Date = DateTimeOffset.Now,
|
||||||
Statistics =
|
Statistics =
|
||||||
{
|
{
|
||||||
|
@ -29,13 +29,8 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
[TestFixture]
|
[TestFixture]
|
||||||
public class TestSceneResultsScreen : OsuManualInputManagerTestScene
|
public class TestSceneResultsScreen : OsuManualInputManagerTestScene
|
||||||
{
|
{
|
||||||
private BeatmapManager beatmaps;
|
[Resolved]
|
||||||
|
private BeatmapManager beatmaps { get; set; }
|
||||||
[BackgroundDependencyLoader]
|
|
||||||
private void load(BeatmapManager beatmaps)
|
|
||||||
{
|
|
||||||
this.beatmaps = beatmaps;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void LoadComplete()
|
protected override void LoadComplete()
|
||||||
{
|
{
|
||||||
@ -46,10 +41,6 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmapInfo);
|
Beatmap.Value = beatmaps.GetWorkingBeatmap(beatmapInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private TestResultsScreen createResultsScreen() => new TestResultsScreen(new TestScoreInfo(new OsuRuleset().RulesetInfo));
|
|
||||||
|
|
||||||
private UnrankedSoloResultsScreen createUnrankedSoloResultsScreen() => new UnrankedSoloResultsScreen(new TestScoreInfo(new OsuRuleset().RulesetInfo));
|
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestResultsWithoutPlayer()
|
public void TestResultsWithoutPlayer()
|
||||||
{
|
{
|
||||||
@ -69,12 +60,25 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
AddAssert("retry overlay not present", () => screen.RetryOverlay == null);
|
AddAssert("retry overlay not present", () => screen.RetryOverlay == null);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[TestCase(0.2, ScoreRank.D)]
|
||||||
public void TestResultsWithPlayer()
|
[TestCase(0.5, ScoreRank.D)]
|
||||||
|
[TestCase(0.75, ScoreRank.C)]
|
||||||
|
[TestCase(0.85, ScoreRank.B)]
|
||||||
|
[TestCase(0.925, ScoreRank.A)]
|
||||||
|
[TestCase(0.975, ScoreRank.S)]
|
||||||
|
[TestCase(0.9999, ScoreRank.S)]
|
||||||
|
[TestCase(1, ScoreRank.X)]
|
||||||
|
public void TestResultsWithPlayer(double accuracy, ScoreRank rank)
|
||||||
{
|
{
|
||||||
TestResultsScreen screen = null;
|
TestResultsScreen screen = null;
|
||||||
|
|
||||||
AddStep("load results", () => Child = new TestResultsContainer(screen = createResultsScreen()));
|
var score = new TestScoreInfo(new OsuRuleset().RulesetInfo)
|
||||||
|
{
|
||||||
|
Accuracy = accuracy,
|
||||||
|
Rank = rank
|
||||||
|
};
|
||||||
|
|
||||||
|
AddStep("load results", () => Child = new TestResultsContainer(screen = createResultsScreen(score)));
|
||||||
AddUntilStep("wait for loaded", () => screen.IsLoaded);
|
AddUntilStep("wait for loaded", () => screen.IsLoaded);
|
||||||
AddAssert("retry overlay present", () => screen.RetryOverlay != null);
|
AddAssert("retry overlay present", () => screen.RetryOverlay != null);
|
||||||
}
|
}
|
||||||
@ -232,6 +236,10 @@ namespace osu.Game.Tests.Visual.Ranking
|
|||||||
AddAssert("download button is enabled", () => screen.ChildrenOfType<DownloadButton>().Last().Enabled.Value);
|
AddAssert("download button is enabled", () => screen.ChildrenOfType<DownloadButton>().Last().Enabled.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TestResultsScreen createResultsScreen(ScoreInfo score = null) => new TestResultsScreen(score ?? new TestScoreInfo(new OsuRuleset().RulesetInfo));
|
||||||
|
|
||||||
|
private UnrankedSoloResultsScreen createUnrankedSoloResultsScreen() => new UnrankedSoloResultsScreen(new TestScoreInfo(new OsuRuleset().RulesetInfo));
|
||||||
|
|
||||||
private class TestResultsContainer : Container
|
private class TestResultsContainer : Container
|
||||||
{
|
{
|
||||||
[Cached(typeof(Player))]
|
[Cached(typeof(Player))]
|
||||||
|
@ -10,11 +10,9 @@ using osu.Framework.Graphics;
|
|||||||
using osu.Framework.Graphics.Colour;
|
using osu.Framework.Graphics.Colour;
|
||||||
using osu.Framework.Graphics.Containers;
|
using osu.Framework.Graphics.Containers;
|
||||||
using osu.Framework.Utils;
|
using osu.Framework.Utils;
|
||||||
using osu.Game.Audio;
|
|
||||||
using osu.Game.Graphics;
|
using osu.Game.Graphics;
|
||||||
using osu.Game.Rulesets.Mods;
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Skinning;
|
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
||||||
@ -76,19 +74,14 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
|
|
||||||
private readonly ScoreInfo score;
|
private readonly ScoreInfo score;
|
||||||
|
|
||||||
private readonly bool withFlair;
|
|
||||||
|
|
||||||
private SmoothCircularProgress accuracyCircle;
|
private SmoothCircularProgress accuracyCircle;
|
||||||
private SmoothCircularProgress innerMask;
|
private SmoothCircularProgress innerMask;
|
||||||
private Container<RankBadge> badges;
|
private Container<RankBadge> badges;
|
||||||
private RankText rankText;
|
private RankText rankText;
|
||||||
|
|
||||||
private SkinnableSound applauseSound;
|
public AccuracyCircle(ScoreInfo score)
|
||||||
|
|
||||||
public AccuracyCircle(ScoreInfo score, bool withFlair)
|
|
||||||
{
|
{
|
||||||
this.score = score;
|
this.score = score;
|
||||||
this.withFlair = withFlair;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[BackgroundDependencyLoader]
|
[BackgroundDependencyLoader]
|
||||||
@ -211,13 +204,6 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
},
|
},
|
||||||
rankText = new RankText(score.Rank)
|
rankText = new RankText(score.Rank)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (withFlair)
|
|
||||||
{
|
|
||||||
AddInternal(applauseSound = score.Rank >= ScoreRank.A
|
|
||||||
? new SkinnableSound(new SampleInfo("Results/rankpass", "applause"))
|
|
||||||
: new SkinnableSound(new SampleInfo("Results/rankfail")));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private ScoreRank getRank(ScoreRank rank)
|
private ScoreRank getRank(ScoreRank rank)
|
||||||
@ -256,7 +242,6 @@ namespace osu.Game.Screens.Ranking.Expanded.Accuracy
|
|||||||
|
|
||||||
using (BeginDelayedSequence(TEXT_APPEAR_DELAY, true))
|
using (BeginDelayedSequence(TEXT_APPEAR_DELAY, true))
|
||||||
{
|
{
|
||||||
this.Delay(-1440).Schedule(() => applauseSound?.Play());
|
|
||||||
rankText.Appear();
|
rankText.Appear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ namespace osu.Game.Screens.Ranking.Expanded
|
|||||||
Margin = new MarginPadding { Top = 40 },
|
Margin = new MarginPadding { Top = 40 },
|
||||||
RelativeSizeAxes = Axes.X,
|
RelativeSizeAxes = Axes.X,
|
||||||
Height = 230,
|
Height = 230,
|
||||||
Child = new AccuracyCircle(score, withFlair)
|
Child = new AccuracyCircle(score)
|
||||||
{
|
{
|
||||||
Anchor = Anchor.Centre,
|
Anchor = Anchor.Centre,
|
||||||
Origin = Anchor.Centre,
|
Origin = Anchor.Centre,
|
||||||
|
@ -12,6 +12,7 @@ using osu.Framework.Graphics.Containers;
|
|||||||
using osu.Framework.Graphics.Shapes;
|
using osu.Framework.Graphics.Shapes;
|
||||||
using osu.Framework.Input.Bindings;
|
using osu.Framework.Input.Bindings;
|
||||||
using osu.Framework.Screens;
|
using osu.Framework.Screens;
|
||||||
|
using osu.Game.Audio;
|
||||||
using osu.Game.Graphics.Containers;
|
using osu.Game.Graphics.Containers;
|
||||||
using osu.Game.Graphics.UserInterface;
|
using osu.Game.Graphics.UserInterface;
|
||||||
using osu.Game.Input.Bindings;
|
using osu.Game.Input.Bindings;
|
||||||
@ -19,13 +20,20 @@ using osu.Game.Online.API;
|
|||||||
using osu.Game.Rulesets.Mods;
|
using osu.Game.Rulesets.Mods;
|
||||||
using osu.Game.Scoring;
|
using osu.Game.Scoring;
|
||||||
using osu.Game.Screens.Play;
|
using osu.Game.Screens.Play;
|
||||||
|
using osu.Game.Screens.Ranking.Expanded.Accuracy;
|
||||||
using osu.Game.Screens.Ranking.Statistics;
|
using osu.Game.Screens.Ranking.Statistics;
|
||||||
|
using osu.Game.Skinning;
|
||||||
using osuTK;
|
using osuTK;
|
||||||
|
|
||||||
namespace osu.Game.Screens.Ranking
|
namespace osu.Game.Screens.Ranking
|
||||||
{
|
{
|
||||||
public abstract class ResultsScreen : ScreenWithBeatmapBackground, IKeyBindingHandler<GlobalAction>
|
public abstract class ResultsScreen : ScreenWithBeatmapBackground, IKeyBindingHandler<GlobalAction>
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Delay before the default applause sound should be played, in order to match the grade display timing in <see cref="AccuracyCircle"/>.
|
||||||
|
/// </summary>
|
||||||
|
public const double APPLAUSE_DELAY = AccuracyCircle.ACCURACY_TRANSFORM_DELAY + AccuracyCircle.TEXT_APPEAR_DELAY + ScorePanel.RESIZE_DURATION + ScorePanel.TOP_LAYER_EXPAND_DELAY - 1440;
|
||||||
|
|
||||||
protected const float BACKGROUND_BLUR = 20;
|
protected const float BACKGROUND_BLUR = 20;
|
||||||
private static readonly float screen_height = 768 - TwoLayerButton.SIZE_EXTENDED.Y;
|
private static readonly float screen_height = 768 - TwoLayerButton.SIZE_EXTENDED.Y;
|
||||||
|
|
||||||
@ -56,6 +64,8 @@ namespace osu.Game.Screens.Ranking
|
|||||||
private readonly bool allowRetry;
|
private readonly bool allowRetry;
|
||||||
private readonly bool allowWatchingReplay;
|
private readonly bool allowWatchingReplay;
|
||||||
|
|
||||||
|
private SkinnableSound applauseSound;
|
||||||
|
|
||||||
protected ResultsScreen(ScoreInfo score, bool allowRetry, bool allowWatchingReplay = true)
|
protected ResultsScreen(ScoreInfo score, bool allowRetry, bool allowWatchingReplay = true)
|
||||||
{
|
{
|
||||||
Score = score;
|
Score = score;
|
||||||
@ -146,6 +156,13 @@ namespace osu.Game.Screens.Ranking
|
|||||||
bool shouldFlair = player != null && !Score.Mods.Any(m => m is ModAutoplay);
|
bool shouldFlair = player != null && !Score.Mods.Any(m => m is ModAutoplay);
|
||||||
|
|
||||||
ScorePanelList.AddScore(Score, shouldFlair);
|
ScorePanelList.AddScore(Score, shouldFlair);
|
||||||
|
|
||||||
|
if (shouldFlair)
|
||||||
|
{
|
||||||
|
AddInternal(applauseSound = Score.Rank >= ScoreRank.A
|
||||||
|
? new SkinnableSound(new SampleInfo("Results/rankpass", "applause"))
|
||||||
|
: new SkinnableSound(new SampleInfo("Results/rankfail")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allowWatchingReplay)
|
if (allowWatchingReplay)
|
||||||
@ -183,6 +200,9 @@ namespace osu.Game.Screens.Ranking
|
|||||||
api.Queue(req);
|
api.Queue(req);
|
||||||
|
|
||||||
statisticsPanel.State.BindValueChanged(onStatisticsStateChanged, true);
|
statisticsPanel.State.BindValueChanged(onStatisticsStateChanged, true);
|
||||||
|
|
||||||
|
using (BeginDelayedSequence(APPLAUSE_DELAY))
|
||||||
|
Schedule(() => applauseSound?.Play());
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void Update()
|
protected override void Update()
|
||||||
|
@ -54,12 +54,12 @@ namespace osu.Game.Screens.Ranking
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Duration for the panel to resize into its expanded/contracted size.
|
/// Duration for the panel to resize into its expanded/contracted size.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const double resize_duration = 200;
|
public const double RESIZE_DURATION = 200;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delay after <see cref="resize_duration"/> before the top layer is expanded.
|
/// Delay after <see cref="RESIZE_DURATION"/> before the top layer is expanded.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const double top_layer_expand_delay = 100;
|
public const double TOP_LAYER_EXPAND_DELAY = 100;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Duration for the top layer expansion.
|
/// Duration for the top layer expansion.
|
||||||
@ -208,8 +208,8 @@ namespace osu.Game.Screens.Ranking
|
|||||||
case PanelState.Expanded:
|
case PanelState.Expanded:
|
||||||
Size = new Vector2(EXPANDED_WIDTH, expanded_height);
|
Size = new Vector2(EXPANDED_WIDTH, expanded_height);
|
||||||
|
|
||||||
topLayerBackground.FadeColour(expanded_top_layer_colour, resize_duration, Easing.OutQuint);
|
topLayerBackground.FadeColour(expanded_top_layer_colour, RESIZE_DURATION, Easing.OutQuint);
|
||||||
middleLayerBackground.FadeColour(expanded_middle_layer_colour, resize_duration, Easing.OutQuint);
|
middleLayerBackground.FadeColour(expanded_middle_layer_colour, RESIZE_DURATION, Easing.OutQuint);
|
||||||
|
|
||||||
topLayerContentContainer.Add(topLayerContent = new ExpandedPanelTopContent(Score.User).With(d => d.Alpha = 0));
|
topLayerContentContainer.Add(topLayerContent = new ExpandedPanelTopContent(Score.User).With(d => d.Alpha = 0));
|
||||||
middleLayerContentContainer.Add(middleLayerContent = new ExpandedPanelMiddleContent(Score, displayWithFlair).With(d => d.Alpha = 0));
|
middleLayerContentContainer.Add(middleLayerContent = new ExpandedPanelMiddleContent(Score, displayWithFlair).With(d => d.Alpha = 0));
|
||||||
@ -221,20 +221,20 @@ namespace osu.Game.Screens.Ranking
|
|||||||
case PanelState.Contracted:
|
case PanelState.Contracted:
|
||||||
Size = new Vector2(CONTRACTED_WIDTH, contracted_height);
|
Size = new Vector2(CONTRACTED_WIDTH, contracted_height);
|
||||||
|
|
||||||
topLayerBackground.FadeColour(contracted_top_layer_colour, resize_duration, Easing.OutQuint);
|
topLayerBackground.FadeColour(contracted_top_layer_colour, RESIZE_DURATION, Easing.OutQuint);
|
||||||
middleLayerBackground.FadeColour(contracted_middle_layer_colour, resize_duration, Easing.OutQuint);
|
middleLayerBackground.FadeColour(contracted_middle_layer_colour, RESIZE_DURATION, Easing.OutQuint);
|
||||||
|
|
||||||
topLayerContentContainer.Add(topLayerContent = new ContractedPanelTopContent(Score).With(d => d.Alpha = 0));
|
topLayerContentContainer.Add(topLayerContent = new ContractedPanelTopContent(Score).With(d => d.Alpha = 0));
|
||||||
middleLayerContentContainer.Add(middleLayerContent = new ContractedPanelMiddleContent(Score).With(d => d.Alpha = 0));
|
middleLayerContentContainer.Add(middleLayerContent = new ContractedPanelMiddleContent(Score).With(d => d.Alpha = 0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
content.ResizeTo(Size, resize_duration, Easing.OutQuint);
|
content.ResizeTo(Size, RESIZE_DURATION, Easing.OutQuint);
|
||||||
|
|
||||||
bool topLayerExpanded = topLayerContainer.Y < 0;
|
bool topLayerExpanded = topLayerContainer.Y < 0;
|
||||||
|
|
||||||
// If the top layer was already expanded, then we don't need to wait for the resize and can instead transform immediately. This looks better when changing the panel state.
|
// If the top layer was already expanded, then we don't need to wait for the resize and can instead transform immediately. This looks better when changing the panel state.
|
||||||
using (BeginDelayedSequence(topLayerExpanded ? 0 : resize_duration + top_layer_expand_delay, true))
|
using (BeginDelayedSequence(topLayerExpanded ? 0 : RESIZE_DURATION + TOP_LAYER_EXPAND_DELAY, true))
|
||||||
{
|
{
|
||||||
topLayerContainer.FadeIn();
|
topLayerContainer.FadeIn();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user