UI/Foundation/OMRSceneFlow.cs
using Sandbox;
public enum OMRGameplayEntry
{
None,
FindMatch,
BotMatch,
SandboxSetup
}
public enum OMRMenuPreviewPage
{
Home,
Play,
Practice,
Settings
}
/// <summary>
/// Carries a one-shot local menu intent across the startup-menu to gameplay
/// scene transition. It never stores match state and never replaces the
/// authoritative RoundManager/GameFlowManager flow.
/// </summary>
public static class OMRSceneFlow
{
// Local explanation survives a clean scene reload after a lost session.
public static string SessionNotice { get; set; } = "";
private static OMRGameplayEntry _pendingEntry;
// Practice-vs-bot preference must survive the menu.scene -> main.scene handoff.
// This is local UI state only; RoundManager remains authoritative once gameplay starts.
public static OMRBotDifficulty BotMatchDifficulty { get; set; } = OMRBotDifficulty.Hard;
public static void CycleBotMatchDifficulty( int delta )
{
int count = System.Enum.GetValues<OMRBotDifficulty>().Length;
if ( count <= 0 ) return;
int next = ( (int)BotMatchDifficulty + delta ) % count;
if ( next < 0 ) next += count;
BotMatchDifficulty = (OMRBotDifficulty)next;
}
public static string GetBotMatchDifficultyName() =>
BotMatchDifficulty.ToString().ToUpperInvariant();
public static void RequestGameplayEntry( OMRGameplayEntry entry )
{
_pendingEntry = entry;
}
public static OMRGameplayEntry ConsumeGameplayEntry()
{
OMRGameplayEntry entry = _pendingEntry;
_pendingEntry = OMRGameplayEntry.None;
return entry;
}
}