diff --git a/osu.Game/Configuration/SessionStatics.cs b/osu.Game/Configuration/SessionStatics.cs
index 1548b781a704..225f20938039 100644
--- a/osu.Game/Configuration/SessionStatics.cs
+++ b/osu.Game/Configuration/SessionStatics.cs
@@ -80,5 +80,11 @@ public enum Static
/// Stores the local user's last score (can be completed or aborted).
///
LastLocalUserScore,
+
+ ///
+ /// Whether the intro animation for the daily challenge screen has been played once.
+ /// This is reset when a new challenge is up.
+ ///
+ DailyChallengeIntroPlayed,
}
}
diff --git a/osu.Game/Screens/Menu/DailyChallengeButton.cs b/osu.Game/Screens/Menu/DailyChallengeButton.cs
index e6593c9b0d5f..d47866ef7334 100644
--- a/osu.Game/Screens/Menu/DailyChallengeButton.cs
+++ b/osu.Game/Screens/Menu/DailyChallengeButton.cs
@@ -13,6 +13,7 @@
using osu.Framework.Threading;
using osu.Framework.Utils;
using osu.Game.Beatmaps.Drawables;
+using osu.Game.Configuration;
using osu.Game.Graphics;
using osu.Game.Graphics.Sprites;
using osu.Game.Localisation;
@@ -46,6 +47,9 @@ public partial class DailyChallengeButton : MainMenuButton
[Resolved]
private INotificationOverlay? notificationOverlay { get; set; }
+ [Resolved]
+ private SessionStatics statics { get; set; } = null!;
+
public DailyChallengeButton(string sampleName, Color4 colour, Action? clickAction = null, params Key[] triggerKeys)
: base(ButtonSystemStrings.DailyChallenge, sampleName, OsuIcon.DailyChallenge, colour, clickAction, triggerKeys)
{
@@ -148,6 +152,9 @@ private void dailyChallengeChanged(ValueChangedEvent _)
roomRequest.Success += room =>
{
+ // force showing intro on the first time when a new daily challenge is up.
+ statics.SetValue(Static.DailyChallengeIntroPlayed, false);
+
Room = room;
cover.OnlineInfo = TooltipContent = room.Playlist.FirstOrDefault()?.Beatmap.BeatmapSet as APIBeatmapSet;
diff --git a/osu.Game/Screens/Menu/MainMenu.cs b/osu.Game/Screens/Menu/MainMenu.cs
index dfe5460aee96..64a173e08854 100644
--- a/osu.Game/Screens/Menu/MainMenu.cs
+++ b/osu.Game/Screens/Menu/MainMenu.cs
@@ -150,7 +150,10 @@ private void load(BeatmapListingOverlay beatmapListing, SettingsOverlay settings
OnPlaylists = () => this.Push(new Playlists()),
OnDailyChallenge = room =>
{
- this.Push(new DailyChallengeIntro(room));
+ if (statics.Get(Static.DailyChallengeIntroPlayed))
+ this.Push(new DailyChallenge(room));
+ else
+ this.Push(new DailyChallengeIntro(room));
},
OnExit = () =>
{
diff --git a/osu.Game/Screens/OnlinePlay/DailyChallenge/DailyChallengeIntro.cs b/osu.Game/Screens/OnlinePlay/DailyChallenge/DailyChallengeIntro.cs
index e59031f66355..619e7c1e4224 100644
--- a/osu.Game/Screens/OnlinePlay/DailyChallenge/DailyChallengeIntro.cs
+++ b/osu.Game/Screens/OnlinePlay/DailyChallenge/DailyChallengeIntro.cs
@@ -70,6 +70,9 @@ public partial class DailyChallengeIntro : OsuScreen
[Resolved]
private MusicController musicController { get; set; } = null!;
+ [Resolved]
+ private SessionStatics statics { get; set; } = null!;
+
private Sample? dateWindupSample;
private Sample? dateImpactSample;
private Sample? beatmapWindupSample;
@@ -461,6 +464,8 @@ private void beginAnimation()
{
Schedule(() =>
{
+ statics.SetValue(Static.DailyChallengeIntroPlayed, true);
+
if (this.IsCurrentScreen())
this.Push(new DailyChallenge(room));
});