diff --git a/.github/workflows/run-demo.yml b/.github/workflows/run-demo.yml index f346ddc9..51e82e8d 100644 --- a/.github/workflows/run-demo.yml +++ b/.github/workflows/run-demo.yml @@ -53,7 +53,7 @@ jobs: Write-Output "Found executable: $($exePath.FullName)" $startTime = Get-Date - Start-Process -FilePath $exePath -Wait -PassThru -NoNewWindow + Start-Process -FilePath $exePath -ArgumentList "-demo" -Wait -PassThru -NoNewWindow $endTime = Get-Date $duration = $endTime - $startTime diff --git a/Assets/Resources/DemoConfig.asset b/Assets/Resources/DemoConfig.asset index aacd07fd..845694c1 100644 --- a/Assets/Resources/DemoConfig.asset +++ b/Assets/Resources/DemoConfig.asset @@ -12,12 +12,12 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: dd9ba42fbcfea443dae0540ef0f44176, type: 3} m_Name: DemoConfig m_EditorClassIdentifier: - _enabled: 1 - _apiUrl: https://sentaur-leaderboard-f7z2cjcdzq-uc.a.run.app + _enabled: 0 + _apiUrl: _user: - Username: - Password: - _autoPlay: 1 - _notHotDogParticleEffect: 1 - _fetchUpgradeFromServer: 1 - _crashOnGameOver: 1 + Username: + Password: + _autoPlay: 0 + _notHotDogParticleEffect: 0 + _fetchUpgradeFromServer: 0 + _crashOnGameOver: 0 diff --git a/Assets/Scripts/Characters/Arrow.cs b/Assets/Scripts/Characters/Arrow.cs index ecae455e..8c58edce 100644 --- a/Assets/Scripts/Characters/Arrow.cs +++ b/Assets/Scripts/Characters/Arrow.cs @@ -1,19 +1,22 @@ using UnityEngine; +using UnityEngine.InputSystem; public class Arrow : MonoBehaviour { [SerializeField] private bool _forceEnable; + private void Awake() { if (_forceEnable) { return; } - - if (Application.platform != RuntimePlatform.Android && - Application.platform != RuntimePlatform.IPhonePlayer) - { - gameObject.SetActive(false); - } + + // Show arrow on mobile platforms or when a gamepad is connected + bool shouldShowArrow = Application.platform == RuntimePlatform.Android || + Application.platform == RuntimePlatform.IPhonePlayer || + Gamepad.current != null; + + gameObject.SetActive(shouldShowArrow); } } diff --git a/Assets/Scripts/Characters/DemoPlayerController.cs b/Assets/Scripts/Characters/DemoPlayerController.cs index a016b8fe..b71c976a 100644 --- a/Assets/Scripts/Characters/DemoPlayerController.cs +++ b/Assets/Scripts/Characters/DemoPlayerController.cs @@ -15,7 +15,7 @@ public class DemoPlayerController : MonoBehaviour private void Awake() { - _demoConfig = Resources.Load("DemoConfig") as DemoConfiguration; + _demoConfig = DemoConfiguration.Load(); } private void OnEnable() diff --git a/Assets/Scripts/Config/ArgumentReader.cs b/Assets/Scripts/Config/ArgumentReader.cs index 92e734b4..1e35df7a 100644 --- a/Assets/Scripts/Config/ArgumentReader.cs +++ b/Assets/Scripts/Config/ArgumentReader.cs @@ -14,4 +14,15 @@ public static string GetCommandLineArg(string name) } return null; } + + public static bool HasCommandLineFlag(string name) + { + var args = Environment.GetCommandLineArgs(); + for (var i = 0; i < args.Length; i++) + { + if (args[i] == "-" + name) + return true; + } + return false; + } } \ No newline at end of file diff --git a/Assets/Scripts/Config/DemoConfiguration.cs b/Assets/Scripts/Config/DemoConfiguration.cs index 3984c3cc..27e152c0 100644 --- a/Assets/Scripts/Config/DemoConfiguration.cs +++ b/Assets/Scripts/Config/DemoConfiguration.cs @@ -16,15 +16,45 @@ public class DemoConfiguration : ScriptableObject [SerializeField] private bool _notHotDogParticleEffect; [SerializeField] private bool _fetchUpgradeFromServer; [SerializeField] private bool _crashOnGameOver; - + + private bool _overridesApplied; + public bool Enabled => _enabled; public string ApiUrl => _apiUrl; public User User => _user; - + public bool AutoPlay => _enabled && _autoPlay; public bool NotHotDogParticleEffect => _enabled && _notHotDogParticleEffect; public bool FetchUpgradeFromServer => _enabled && _fetchUpgradeFromServer; public bool CrashOnGameOver => _enabled && _crashOnGameOver; + + public void ApplyRuntimeOverrides() + { + if (_overridesApplied) + return; + _overridesApplied = true; + + if (ArgumentReader.HasCommandLineFlag("demo")) + { + _enabled = true; + _autoPlay = true; + _crashOnGameOver = true; + _notHotDogParticleEffect = true; + _fetchUpgradeFromServer = true; + } + } + + private static DemoConfiguration _instance; + + public static DemoConfiguration Load() + { + if (_instance == null) + { + _instance = Resources.Load("DemoConfig") as DemoConfiguration; + _instance?.ApplyRuntimeOverrides(); + } + return _instance; + } } [Serializable] diff --git a/Assets/Scripts/Pickups/NotHotDogPickup.cs b/Assets/Scripts/Pickups/NotHotDogPickup.cs index 2ee73a5d..68882953 100644 --- a/Assets/Scripts/Pickups/NotHotDogPickup.cs +++ b/Assets/Scripts/Pickups/NotHotDogPickup.cs @@ -9,7 +9,7 @@ public class NotHotDogPickup : PickupBase private void Awake() { - _demoConfig = Resources.Load("DemoConfig") as DemoConfiguration; + _demoConfig = DemoConfiguration.Load(); } protected override void OnCollect(Player player) diff --git a/Assets/Scripts/SceneManagers/BattleSceneManager.cs b/Assets/Scripts/SceneManagers/BattleSceneManager.cs index 15b6628b..0bd6093e 100644 --- a/Assets/Scripts/SceneManagers/BattleSceneManager.cs +++ b/Assets/Scripts/SceneManagers/BattleSceneManager.cs @@ -215,7 +215,7 @@ private enum GameState private void Awake() { - _demoConfig = Resources.Load("DemoConfig") as DemoConfiguration; + _demoConfig = DemoConfiguration.Load(); InputSystem.actions.FindActionMap("Player").Enable(); InputSystem.actions.FindActionMap("UI").Disable(); @@ -463,6 +463,12 @@ private void SetCurrentLevel(int level) public void OnPause() { + // Don't allow pausing if the level up UI is active (it already pauses the game) + if (_levelUpUI.activeSelf) + { + return; + } + if (_gameState == GameState.Playing) { PauseGame(); diff --git a/Assets/Scripts/SceneManagers/HUDManager.cs b/Assets/Scripts/SceneManagers/HUDManager.cs index dfb01aef..f8f09cfc 100644 --- a/Assets/Scripts/SceneManagers/HUDManager.cs +++ b/Assets/Scripts/SceneManagers/HUDManager.cs @@ -23,12 +23,20 @@ private void Awake() _navigateAction = InputSystem.actions.FindAction("Navigate"); _submitAction = InputSystem.actions.FindAction("Submit"); - // Subscribe to the performed callback only + // Subscribe to input events + _navigateAction.performed += OnNavigatePerformed; _submitAction.performed += OnSubmitPerformed; _tryAgainHighlighter = tryAgainButton.GetComponent(); _quitHighlighter = quitButton.GetComponent(); } + + private void OnDestroy() + { + // Unsubscribe from input events + _navigateAction.performed -= OnNavigatePerformed; + _submitAction.performed -= OnSubmitPerformed; + } private void OnSubmitPerformed(InputAction.CallbackContext context) { @@ -37,10 +45,14 @@ private void OnSubmitPerformed(InputAction.CallbackContext context) return; } - _highlightedButton?.GetComponent