refactor: Move pause and countdown logic into function, trigger on tab-out

This commit is contained in:
MoonDroid
2025-06-04 21:17:53 +07:00
parent 7689c7d2e4
commit ab00a126fa
+75 -66
View File
@@ -1017,68 +1017,7 @@ class PlayState extends MusicBeatSubState
#end
// Attempt to pause the game.
if ((controls.PAUSE || androidPause || pauseButtonCheck) && isInCountdown && mayPauseGame && !justUnpaused)
{
#if mobile
pauseButton.alpha = 0;
hitbox.visible = false;
#end
var event = new PauseScriptEvent(FlxG.random.bool((1 / 1000) * 100));
dispatchEvent(event);
if (!event.eventCanceled)
{
// Pause updates while the substate is open, preventing the game state from advancing.
persistentUpdate = false;
// Enable drawing while the substate is open, allowing the game state to be shown behind the pause menu.
persistentDraw = true;
// There is a 1/1000 change to use a special pause menu.
// This prevents the player from resuming, but that's the point.
// It's a reference to Gitaroo Man, which doesn't let you pause the game.
if (!isSubState && event.gitaroo)
{
this.remove(currentStage);
FlxG.switchState(() -> new GitarooPause(
{
targetSong: currentSong,
targetDifficulty: currentDifficulty,
targetVariation: currentVariation,
}));
}
else
{
var boyfriendPos:FlxPoint = new FlxPoint(0, 0);
// Prevent the game from crashing if Boyfriend isn't present.
if (currentStage != null && currentStage.getBoyfriend() != null)
{
boyfriendPos = currentStage.getBoyfriend().getScreenPosition();
}
var pauseSubState:FlxSubState = new PauseSubState({mode: isChartingMode ? Charting : Standard});
FlxTransitionableState.skipNextTransIn = true;
FlxTransitionableState.skipNextTransOut = true;
pauseSubState.camera = camCutscene;
openSubState(pauseSubState);
// boyfriendPos.put(); // TODO: Why is this here?
}
#if FEATURE_DISCORD_RPC
DiscordClient.instance.setPresence(
{
details: 'Paused - ${buildDiscordRPCDetails()}',
state: buildDiscordRPCState(),
largeImageKey: discordRPCAlbum,
smallImageKey: discordRPCIcon
});
#end
}
}
if ((controls.PAUSE || androidPause || pauseButtonCheck)) pause();
#if mobile
if (justUnpaused)
@@ -1209,6 +1148,74 @@ class PlayState extends MusicBeatSubState
justUnpaused = false;
}
function pause():Void
{
if (!isInCountdown || !mayPauseGame || justUnpaused || isInCutscene)
{
// If the game is already paused, or we just unpaused, do nothing.
return;
}
#if mobile
pauseButton.alpha = 0;
hitbox.visible = false;
#end
var event = new PauseScriptEvent(FlxG.random.bool((1 / 1000) * 100));
dispatchEvent(event);
if (!event.eventCanceled)
{
// Pause updates while the substate is open, preventing the game state from advancing.
persistentUpdate = false;
// Enable drawing while the substate is open, allowing the game state to be shown behind the pause menu.
persistentDraw = true;
// There is a 1/1000 change to use a special pause menu.
// This prevents the player from resuming, but that's the point.
// It's a reference to Gitaroo Man, which doesn't let you pause the game.
if (!isSubState && event.gitaroo)
{
this.remove(currentStage);
FlxG.switchState(() -> new GitarooPause(
{
targetSong: currentSong,
targetDifficulty: currentDifficulty,
targetVariation: currentVariation,
}));
}
else
{
var boyfriendPos:FlxPoint = new FlxPoint(0, 0);
// Prevent the game from crashing if Boyfriend isn't present.
if (currentStage != null && currentStage.getBoyfriend() != null)
{
boyfriendPos = currentStage.getBoyfriend().getScreenPosition();
}
var pauseSubState:FlxSubState = new PauseSubState({mode: isChartingMode ? Charting : Standard});
FlxTransitionableState.skipNextTransIn = true;
FlxTransitionableState.skipNextTransOut = true;
pauseSubState.camera = camCutscene;
openSubState(pauseSubState);
// boyfriendPos.put(); // TODO: Why is this here?
}
#if FEATURE_DISCORD_RPC
DiscordClient.instance.setPresence(
{
details: 'Paused - ${buildDiscordRPCDetails()}',
state: buildDiscordRPCState(),
largeImageKey: discordRPCAlbum,
smallImageKey: discordRPCIcon
});
#end
}
}
function moveToGameOver():Void
{
// Shows an interstital ad on mobile devices each 3 blueballs
@@ -1353,9 +1360,6 @@ class PlayState extends MusicBeatSubState
cameraTweensPausedBySubState.add(tween);
}
}
// Pause the countdown.
Countdown.pauseCountdown();
}
super.openSubState(subState);
@@ -1506,7 +1510,12 @@ class PlayState extends MusicBeatSubState
});
}
#end
if (subState == null)
{
// Pause the countdown.
Countdown.pauseCountdown();
pause();
}
super.onFocusLost();
}