diff --git a/Assets/Prefabs/_managers/Level Starter.prefab b/Assets/Prefabs/_managers/Level Starter.prefab index bf38325..5bd00ad 100644 --- a/Assets/Prefabs/_managers/Level Starter.prefab +++ b/Assets/Prefabs/_managers/Level Starter.prefab @@ -46,6 +46,9 @@ GameObject: - component: {fileID: 2612591450176041130} - component: {fileID: 4672400234462731894} - component: {fileID: 6533670772227153969} + - component: {fileID: 3046974034367050405} + - component: {fileID: 6375254645066771992} + - component: {fileID: 5970190748483002724} m_Layer: 0 m_Name: LevelManager m_TagString: Untagged @@ -149,6 +152,56 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: ec26d0a421514f7494efe4820aef7735, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &3046974034367050405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004064948157000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 72e89b8df56b4c02b59e00e1b023513f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &6375254645066771992 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004064948157000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c20b7c34e38a4f8a80265819c3c771cb, type: 3} + m_Name: + m_EditorClassIdentifier: + hurryUp: 0 + playerSize: 0 + lives: 0 + coins: 0 + scores: 0 + timeLeft: 0 + coinBonus: 200 + powerupBonus: 1000 + starmanBonus: 1000 + oneupBonus: 0 + breakBlockBonus: 50 + gamePaused: 0 + timerPaused: 0 + musicPaused: 0 +--- !u!114 &5970190748483002724 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004064948157000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 95e054ffb3e0449f8cd96f28a89a06cd, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1006136692691096 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Abilities/Pickups/CollectibleBlock.cs b/Assets/Scripts/Abilities/Pickups/CollectibleBlock.cs index 9f35b4d..c6c39d3 100644 --- a/Assets/Scripts/Abilities/Pickups/CollectibleBlock.cs +++ b/Assets/Scripts/Abilities/Pickups/CollectibleBlock.cs @@ -49,7 +49,7 @@ void OnTriggerEnter2D(Collider2D other) { if (timesToSpawn > 0) { if (isPowerupBlock) { // spawn mushroom or fireflower depending on Mario's size - if (_levelManager.GetGameStateManager.PlayerSize == 0) { + if (_levelManager.GetGameStateData.PlayerSize == 0) { objectToSpawn = bigMushroom; } else { objectToSpawn = fireFlower; diff --git a/Assets/Scripts/Abilities/Pickups/PlayerPickUpAbilities.cs b/Assets/Scripts/Abilities/Pickups/PlayerPickUpAbilities.cs index 0d3f8ee..a6c3fc2 100644 --- a/Assets/Scripts/Abilities/Pickups/PlayerPickUpAbilities.cs +++ b/Assets/Scripts/Abilities/Pickups/PlayerPickUpAbilities.cs @@ -1,4 +1,4 @@ -using Interfaces.Abilities.Pickups; +using Interfaces.Abilities.PickUps; using Interfaces.Core.Managers; using UnityEngine; @@ -15,13 +15,13 @@ private void Awake() public void AddLife() { - _levelManager.GetGameStateManager.Lives++; + _levelManager.GetGameStateData.Lives++; _levelManager.GetSoundManager.SoundSource.PlayOneShot(_levelManager.GetSoundManager.OneUpSound); } public void AddLife(Vector3 spawnPos) { - _levelManager.GetGameStateManager.Lives++; + _levelManager.GetGameStateData.Lives++; _levelManager.GetSoundManager.SoundSource.PlayOneShot(_levelManager.GetSoundManager.OneUpSound); _levelManager.GetHUD.CreateFloatingText("1UP", spawnPos); } @@ -36,7 +36,7 @@ public void AddCoin() } _levelManager.GetHUD.SetHudCoin(); - AddScore(_levelManager.GetGameStateManager.CoinBonus); + AddScore(_levelManager.GetGameStateData.CoinBonus); } public void AddCoin(Vector3 spawnPos) @@ -49,7 +49,7 @@ public void AddCoin(Vector3 spawnPos) } _levelManager.GetHUD.SetHudCoin(); - AddScore(_levelManager.GetGameStateManager.CoinBonus, spawnPos); + AddScore(_levelManager.GetGameStateData.CoinBonus, spawnPos); } public void AddScore(int bonus) diff --git a/Assets/Scripts/Abilities/Player/PlayerAbilities.cs b/Assets/Scripts/Abilities/Player/PlayerAbilities.cs index 99a2d21..e555cad 100644 --- a/Assets/Scripts/Abilities/Player/PlayerAbilities.cs +++ b/Assets/Scripts/Abilities/Player/PlayerAbilities.cs @@ -61,7 +61,7 @@ public bool IsInvincible() public void MarioInvincibleStarman() { StartCoroutine(MarioInvincibleStarmanCo()); - _levelManager.GetPlayerPickUpAbilities.AddScore(_levelManager.GetGameStateManager.StarmanBonus, + _levelManager.GetPlayerPickUpAbilities.AddScore(_levelManager.GetGameStateData.StarmanBonus, _levelManager.GetPlayerController.transform.position); } @@ -70,7 +70,7 @@ private IEnumerator MarioInvincibleStarmanCo() IsInvincibleStarman = true; PlayerAnimator.PlayerAnimatorComponent.SetBool(PlayerAnimator.IsInvincibleStarmanAnim, true); _levelManager.GetPlayerController.gameObject.layer = LayerMask.NameToLayer("Mario After Starman"); - _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic(_levelManager.GetGameStateManager.HurryUp + _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic(_levelManager.GetGameStateData.HurryUp ? _levelManager.GetSoundManager.StarmanMusicHurry : _levelManager.GetSoundManager.StarmanMusic); @@ -78,7 +78,7 @@ private IEnumerator MarioInvincibleStarmanCo() IsInvincibleStarman = false; PlayerAnimator.PlayerAnimatorComponent.SetBool(PlayerAnimator.IsInvincibleStarmanAnim, false); _levelManager.GetPlayerController.gameObject.layer = LayerMask.NameToLayer("Mario"); - _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic(_levelManager.GetGameStateManager.HurryUp + _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic(_levelManager.GetGameStateData.HurryUp ? _levelManager.GetSoundManager.LevelMusicHurry : _levelManager.GetSoundManager.LevelMusic); } @@ -103,11 +103,11 @@ public void MarioPowerUp() { _levelManager.GetSoundManager.SoundSource.PlayOneShot(_levelManager.GetSoundManager .PowerupSound); // should play sound regardless of size - if (_levelManager.GetGameStateManager.PlayerSize < 2) { + if (_levelManager.GetGameStateData.PlayerSize < 2) { StartCoroutine(MarioPowerUpCo()); } - _levelManager.GetPlayerPickUpAbilities.AddScore(_levelManager.GetGameStateManager.PowerupBonus, + _levelManager.GetPlayerPickUpAbilities.AddScore(_levelManager.GetGameStateData.PowerupBonus, _levelManager.GetPlayerController.transform.position); } @@ -118,12 +118,12 @@ private IEnumerator MarioPowerUpCo() PlayerAnimator.PlayerAnimatorComponent.updateMode = AnimatorUpdateMode.UnscaledTime; yield return new WaitForSecondsRealtime(TransformDuration); - yield return new WaitWhile(() => _levelManager.GetGameStateManager.GamePaused); + yield return new WaitWhile(() => _levelManager.GetGameStateData.GamePaused); Time.timeScale = 1; PlayerAnimator.PlayerAnimatorComponent.updateMode = AnimatorUpdateMode.Normal; - _levelManager.GetGameStateManager.PlayerSize++; + _levelManager.GetGameStateData.PlayerSize++; _levelManager.GetPlayerController.UpdateSize(); PlayerAnimator.PlayerAnimatorComponent.SetBool(PlayerAnimator.IsPoweringUpAnim, false); } @@ -134,7 +134,7 @@ public void MarioPowerDown() Debug.Log(this.name + " MarioPowerDown: called and executed"); IsPoweringDown = true; - if (_levelManager.GetGameStateManager.PlayerSize > 0) { + if (_levelManager.GetGameStateData.PlayerSize > 0) { StartCoroutine(MarioPowerDownCo()); _levelManager.GetSoundManager.SoundSource.PlayOneShot(_levelManager.GetSoundManager .PipePowerdownSound); @@ -155,13 +155,13 @@ private IEnumerator MarioPowerDownCo() PlayerAnimator.PlayerAnimatorComponent.updateMode = AnimatorUpdateMode.UnscaledTime; yield return new WaitForSecondsRealtime(TransformDuration); - yield return new WaitWhile(() => _levelManager.GetGameStateManager.GamePaused); + yield return new WaitWhile(() => _levelManager.GetGameStateData.GamePaused); Time.timeScale = 1; PlayerAnimator.PlayerAnimatorComponent.updateMode = AnimatorUpdateMode.Normal; MarioInvinciblePowerdown(); - _levelManager.GetGameStateManager.PlayerSize = 0; + _levelManager.GetGameStateData.PlayerSize = 0; _levelManager.GetPlayerController.UpdateSize(); PlayerAnimator.PlayerAnimatorComponent.SetBool(PlayerAnimator.IsPoweringDownAnim, false); IsPoweringDown = false; @@ -172,12 +172,12 @@ public void MarioRespawn(bool timeUp = false) if (_levelManager.GetPlayerAbilities.IsRespawning) return; _levelManager.GetPlayerAbilities.IsRespawning = true; - _levelManager.GetGameStateManager.PlayerSize = 0; - _levelManager.GetGameStateManager.Lives--; + _levelManager.GetGameStateData.PlayerSize = 0; + _levelManager.GetGameStateData.Lives--; _levelManager.GetSoundManager.SoundSource.Stop(); _levelManager.GetSoundManager.MusicSource.Stop(); - _levelManager.GetGameStateManager.MusicPaused = true; + _levelManager.GetGameStateData.MusicPaused = true; _levelManager.GetSoundManager.SoundSource.PlayOneShot(_levelManager.GetSoundManager.DeadSound); Time.timeScale = 0f; @@ -187,9 +187,9 @@ public void MarioRespawn(bool timeUp = false) Debug.Log(this.name + " MarioRespawn: called due to timeup"); } - Debug.Log(this.name + " MarioRespawn: lives left=" + _levelManager.GetGameStateManager.Lives.ToString()); + Debug.Log(this.name + " MarioRespawn: lives left=" + _levelManager.GetGameStateData.Lives.ToString()); - if (_levelManager.GetGameStateManager.Lives > 0) { + if (_levelManager.GetGameStateData.Lives > 0) { _levelManager.GetLoadLevelSceneHandler.ReloadCurrentLevel( _levelManager.GetSoundManager.DeadSound.length, timeUp); } else { diff --git a/Assets/Scripts/Core/Managers/GameStateData.cs b/Assets/Scripts/Core/Managers/GameStateData.cs new file mode 100644 index 0000000..f144a62 --- /dev/null +++ b/Assets/Scripts/Core/Managers/GameStateData.cs @@ -0,0 +1,127 @@ +using System.Collections.Generic; +using Interfaces.Core.Managers; +using UnityEngine; + +namespace Core.Managers +{ + public class GameStateData : GameStateDataBase, IGameStateData + { + + #region GettersAndSetters + + public int PlayerSize + { + get => playerSize; + set => playerSize = value; + } + + public int Lives + { + get => lives; + set => lives = value; + } + + public int Coins + { + get => coins; + set => coins = value; + } + + public int Scores + { + get => scores; + set => scores = value; + } + + public float TimeLeft + { + get => timeLeft; + set => timeLeft = value; + } + + public bool HurryUp + { + get => hurryUp; + set => hurryUp = value; + } + + public int CoinBonus + { + get => coinBonus; + set => coinBonus = value; + } + + public int PowerupBonus + { + get => powerupBonus; + set => powerupBonus = value; + } + + public int StarmanBonus + { + get => starmanBonus; + set => starmanBonus = value; + } + + public int OneupBonus + { + get => oneupBonus; + set => oneupBonus = value; + } + + public int BreakBlockBonus + { + get => breakBlockBonus; + set => breakBlockBonus = value; + } + + public bool GamePaused + { + get => gamePaused; + set => gamePaused = value; + } + + public bool MusicPaused + { + get => musicPaused; + + set => musicPaused = value; + } + + public bool TimerPaused + { + get => timerPaused; + + set => timerPaused = value; + } + + public List UnScaledAnimators + { + get => base.UnScaledAnimators; + set => base.UnScaledAnimators = value; + } + + public float PauseGamePrevTimeScale + { + get => base.PauseGamePrevTimeScale; + set => base.PauseGamePrevTimeScale = value; + } + + public bool PausePrevMusicPaused + { + get => base.PausePrevMusicPaused; + set => base.PausePrevMusicPaused = value; + } + + public IPauseUnPauseGame GetPauseUnPauseGame => _pauseUnPauseGame; + + #endregion + + private IPauseUnPauseGame _pauseUnPauseGame; + + private void Awake() + { + _pauseUnPauseGame = GetComponent(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Managers/GameStateData.cs.meta b/Assets/Scripts/Core/Managers/GameStateData.cs.meta new file mode 100644 index 0000000..de878eb --- /dev/null +++ b/Assets/Scripts/Core/Managers/GameStateData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c20b7c34e38a4f8a80265819c3c771cb +timeCreated: 1659433742 \ No newline at end of file diff --git a/Assets/Scripts/Core/Managers/GameStateManager.cs b/Assets/Scripts/Core/Managers/GameStateManager.cs index 5cb6681..4efe1fb 100644 --- a/Assets/Scripts/Core/Managers/GameStateManager.cs +++ b/Assets/Scripts/Core/Managers/GameStateManager.cs @@ -1,5 +1,4 @@ -using System.Collections; -using Interfaces.Core.Managers; +using Interfaces.Core.Managers; using JetBrains.Annotations; using UnityEngine; @@ -28,6 +27,18 @@ public int SpawnPipeIdx set => spawnPipeIdx = value; } + public string SceneToLoad + { + get => sceneToLoad; + set => sceneToLoad = value; + } + + public bool TimeUp + { + get => timeUp; + set => timeUp = value; + } + public int PlayerSize { get => playerSize; @@ -46,8 +57,6 @@ public int Coins set => coins = value; } - public int BreakBlockBonus { get; set; } - public int Scores { get => scores; @@ -59,136 +68,18 @@ public float TimeLeft get => timeLeft; set => timeLeft = value; } - - public int TimeLeftInt - { - get => timeLeftInt; - set => timeLeftInt = value; - } - + public bool HurryUp { get => hurryUp; set => hurryUp = value; } - public string SceneToLoad - { - get => sceneToLoad; - set => sceneToLoad = value; - } - - public bool TimeUp - { - get => timeUp; - set => timeUp = value; - } - - // public bool GamePaused - // { - // get => gamePaused; - // set => gamePaused = value; - // } - - public bool GamePaused - { - get => _levelManager is { GamePaused: true }; - // get - // { - // _levelManager ??= FindObjectOfType(); - // if (_levelManager != null) { - // return _levelManager.GamePaused; - // } - // return false; - // } - set - { - LevelManager _levelManager = FindObjectOfType(); - //_levelManager ??= FindObjectOfType(); - if (_levelManager == null) return; - _levelManager.GamePaused = value; - } - } - - public bool MusicPaused - { - get => _levelManager is { MusicPaused: false }; - // get - // { - // _levelManager ??= FindObjectOfType(); - // if (_levelManager != null) { - // return _levelManager.MusicPaused; - // } - // return false; - // } - set - { - LevelManager _levelManager = FindObjectOfType(); - //_levelManager ??= FindObjectOfType(); - if (_levelManager==null) return; - _levelManager.MusicPaused = value; - } - } - - public bool TimerPaused - { - //get => _levelManager is { TimerPaused: false }; - get - { - LevelManager _levelManager = FindObjectOfType(); - //_levelManager ??= FindObjectOfType(); - return _levelManager != null && _levelManager.TimerPaused; - } - set - { - LevelManager _levelManager = FindObjectOfType(); - //_levelManager ??= FindObjectOfType(); - if (_levelManager==null) return; - _levelManager.TimerPaused = value; - } - } - // public bool TimerPaused - // { - // get => timerPaused; - // set => timerPaused = value; - // } - - // public bool MusicPaused - // { - // get => _levelManager.MusicPaused; - // set => musicPaused = value; - // } - - public int CoinBonus - { - get => coinBonus; - set => coinBonus = value; - } - - public int PowerupBonus - { - get => powerupBonus; - set => powerupBonus = value; - } - - public int StarmanBonus - { - get => starmanBonus; - set => starmanBonus = value; - } - - public int OneupBonus - { - get => oneupBonus; - set => oneupBonus = value; - } - #endregion private ISaveGameState _saveGameStateOnMemory; [CanBeNull] private ILevelManager _levelManager; - //[CanBeNull] private IPlayerPickUpAbilities _playerPickUpAbilities; private void Awake() { @@ -211,34 +102,34 @@ public void RetainGameStateManagerPerLoad() public void ResetSpawnPosition() { - SpawnFromPoint = true; - SpawnPointIdx = 0; - SpawnPipeIdx = 0; + spawnFromPoint = true; + spawnPointIdx = 0; + spawnPipeIdx = 0; } public void SetSpawnPipe(int idx) { - SpawnFromPoint = false; - SpawnPipeIdx = idx; + spawnFromPoint = false; + spawnPipeIdx = idx; } public void ConfigNewGame() { - PlayerSize = 0; - Lives = 3; - Coins = 0; - Scores = 0; - TimeLeft = 400.5f; - HurryUp = false; + playerSize = 0; + lives = 3; + coins = 0; + scores = 0; + timeLeft = 400.5f; + hurryUp = false; ResetSpawnPosition(); - SceneToLoad = null; - TimeUp = false; + sceneToLoad = null; + timeUp = false; } public void ConfigNewLevel() { - TimeLeft = 400.5f; - HurryUp = false; + timeLeft = 400.5f; + hurryUp = false; ResetSpawnPosition(); //TimerPaused = false; } @@ -246,99 +137,13 @@ public void ConfigNewLevel() public void ConfigReplayedLevel() { // e.g. Mario respawns - TimeLeft = 400.5f; - HurryUp = false; + timeLeft = 400.5f; + hurryUp = false; } public void GetSaveGameState() { _saveGameStateOnMemory.SaveGameState(this); } - - public void PauseUnPauseState() - { - _levelManager = FindObjectOfType(); - StartCoroutine(!GamePaused ? PauseGameCo() : UnpauseGameCo()); - } - - private IEnumerator PauseGameCo() - { - if (_levelManager == null) { - yield break; - } - - Debug.Log("PauseGameCo!!!!!!!!!!"); - GamePaused = true; - PauseGamePrevTimeScale = Time.timeScale; - - Time.timeScale = 0; - PausePrevMusicPaused = MusicPaused; - _levelManager.GetSoundManager.MusicSource.Pause(); - MusicPaused = true; - _levelManager.GetSoundManager.SoundSource.Pause(); - - // Set any active animators that use unscaled time mode to normal - UnScaledAnimators.Clear(); - foreach (Animator animator in FindObjectsOfType()) { - if (animator.updateMode != AnimatorUpdateMode.UnscaledTime) continue; - UnScaledAnimators.Add(animator); - animator.updateMode = AnimatorUpdateMode.Normal; - } - - _levelManager.GetSoundManager.PauseSoundSource.Play(); - yield return new WaitForSecondsRealtime(_levelManager.GetSoundManager.PauseSoundSource.clip.length); - Debug.Log(this.name + " PauseGameCo stops: records prevTimeScale=" + PauseGamePrevTimeScale.ToString()); - } - - private IEnumerator UnpauseGameCo() - { - if (_levelManager == null) { - yield break; - } - - _levelManager.GetSoundManager.PauseSoundSource.Play(); - yield return new WaitForSecondsRealtime(_levelManager.GetSoundManager.PauseSoundSource.clip.length); - - MusicPaused = PausePrevMusicPaused; - if (!MusicPaused) { - _levelManager.GetSoundManager.MusicSource.UnPause(); - } - - _levelManager.GetSoundManager.SoundSource.UnPause(); - - // Reset animators - foreach (Animator animator in UnScaledAnimators) { - animator.updateMode = AnimatorUpdateMode.UnscaledTime; - } - - UnScaledAnimators.Clear(); - - Time.timeScale = PauseGamePrevTimeScale; - GamePaused = false; - Debug.Log(this.name + " UnpauseGameCo stops: resume prevTimeScale=" + PauseGamePrevTimeScale.ToString()); - } - - public void TimerHUD() - { - // _levelManager = FindObjectOfType(); - // if (_levelManager.GetGameStateManager.TimerPaused) return; - // _levelManager.GetHUD.TimeLeft -= Time.deltaTime; // / .4f; // 1 game sec ~ 0.4 real time sec - // _levelManager.GetHUD.SetHudTime(); - } - - public void GamePauseCheck() - { - // _levelManager = FindObjectOfType(); - // if (!Input.GetButtonDown("Pause")) return; - // _levelManager.GetGameStateManager.PauseUnPauseState(); - } - - public void TimeUpCounter() - { - // _levelManager = FindObjectOfType(); - // if (_levelManager.GetHUD.TimeLeftInt <= 0) { - // _levelManager.GetPlayerAbilities.MarioRespawn(true); - // } - } } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Managers/LevelManager.cs b/Assets/Scripts/Core/Managers/LevelManager.cs index 4a629d6..1424e34 100644 --- a/Assets/Scripts/Core/Managers/LevelManager.cs +++ b/Assets/Scripts/Core/Managers/LevelManager.cs @@ -1,6 +1,7 @@ -using Abilities.Pickups; +using System; +using Abilities.Pickups; using Core.Player; -using Interfaces.Abilities.Pickups; +using Interfaces.Abilities.PickUps; using Interfaces.Abilities.Player; using Interfaces.Core.Managers; using Interfaces.Level; @@ -10,8 +11,6 @@ namespace Core.Managers { - //[RequireComponent(typeof(ISoundManagerExtras))] - //[RequireComponent(typeof(ISoundLevelHandle))] [RequireComponent(typeof(IGameStateManager))] [RequireComponent(typeof(ILoadLevelSceneHandle))] [RequireComponent(typeof(IHUD))] @@ -28,55 +27,35 @@ public class LevelManager : LevelManagerBase, ILevelManager public IHUD GetHUD => _hud; public IPlayerPickUpAbilities GetPlayerPickUpAbilities => _playerPickUpAbilities; public IPlayerAbilities GetPlayerAbilities => _playerAbilities; - public PlayerController GetPlayerController => _playerController; - - //public ISoundLevelHandle GetSoundLevelHandle => _soundLevelHandler; public ILevelServices GetLevelServices => _levelServices; - - public bool TimerPaused - { - get => timerPaused; - set => timerPaused = value; - } - - public bool GamePaused - { - get => gamePaused; - set => gamePaused = value; - } - - public bool MusicPaused - { - get => musicPaused; - set => musicPaused = value; - } + public IGameStateData GetGameStateData => _gameStateData; + public ISetTimerHUD GetSetTimerHUD => _setTimerHUD; #endregion private IGameStateManager _gameStateManager; - private ISoundManagerExtras _soundManager; - - //private ISoundLevelHandle _soundLevelHandler; private PlayerController _playerController; //TODO IPlayerController private ILoadLevelSceneHandle _loadLevelSceneHandler; private IHUD _hud; private IPlayerPickUpAbilities _playerPickUpAbilities; private IPlayerAbilities _playerAbilities; private ILevelServices _levelServices; + private IGameStateData _gameStateData; + private ISetTimerHUD _setTimerHUD; private void Awake() { _soundManager = FindObjectOfType(); - //_soundManager = GetComponent(); - //_soundLevelHandler = GetComponent(); _loadLevelSceneHandler = GetComponent(); _gameStateManager = FindObjectOfType(); _hud = GetComponent(); _playerPickUpAbilities = GetComponent(); _playerAbilities = GetComponent(); _levelServices = GetComponent(); + _gameStateData = GetComponent(); + _setTimerHUD = GetComponent(); Time.timeScale = 1; } @@ -106,12 +85,12 @@ private void OnDisable() public void RetrieveGameState() { - // Lives = _gameStateManager.Lives; + _gameStateData.Lives = _gameStateManager.Lives; + _gameStateData.PlayerSize = _gameStateManager.PlayerSize; + _gameStateData.HurryUp = _gameStateManager.HurryUp; _hud.Coins = _gameStateManager.Coins; _hud.Scores = _gameStateManager.Scores; - _hud.TimeLeft = _gameStateManager.TimeLeft; - // marioSize = _gameStateManager.PlayerSize; - // HurryUp = _gameStateManager.HurryUp; + _gameStateData.TimeLeft = _gameStateManager.TimeLeft; _playerController = FindObjectOfType(); PlayerAnimator.PlayerAnimatorComponent = _playerController.gameObject.GetComponent(); @@ -121,55 +100,20 @@ public void RetrieveGameState() GetSoundManager.GetSoundVolume(); _hud.SetHUD(); - _soundManager.GetSoundLevelHandle.ChangeMusic(_gameStateManager.HurryUp + _soundManager.GetSoundLevelHandle.ChangeMusic(_gameStateData.HurryUp ? GetSoundManager.LevelMusicHurry : GetSoundManager.LevelMusic); } private void Update() { - // _gameStateManager.TimerHUD(); - // - // _soundManager.GetSoundLevelHandle.TimerHUDMusic(); - // - // _gameStateManager.TimeUpCounter(); - // - // _gameStateManager.GamePauseCheck(); - TimerHUD(); + _setTimerHUD.TimerHUD(); - TimerHUDMusic(); + _setTimerHUD.TimerHUDMusic(); - TimeUpCounter(); + _setTimerHUD.TimeUpCounter(); - GamePauseCheck(); - } - public void TimerHUD() - { - if (_gameStateManager.TimerPaused) return; - _hud.TimeLeft -= Time.deltaTime; // / .4f; // 1 game sec ~ 0.4 real time sec - _hud.SetHudTime(); - } - public void GamePauseCheck() - { - if (!Input.GetButtonDown("Pause")) return; - _gameStateManager.PauseUnPauseState(); - } - public void TimeUpCounter() - { - if (_hud.TimeLeftInt <= 0) { - _playerAbilities.MarioRespawn(true); - } - } - public void TimerHUDMusic() - { - if (_hud.TimeLeftInt >= 100 || _gameStateManager.HurryUp) return; - _gameStateManager.HurryUp = true; - _soundManager.GetSoundLevelHandle.PauseMusicPlaySound(_soundManager.WarningSound, true); - _soundManager.GetSoundLevelHandle.ChangeMusic( - _playerAbilities.IsInvincibleStarman - ? _soundManager.StarmanMusicHurry - : _soundManager.LevelMusicHurry, - _soundManager.WarningSound.length); + _gameStateData.GetPauseUnPauseGame.GamePauseCheck(); } } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Managers/PauseUnPauseGame.cs b/Assets/Scripts/Core/Managers/PauseUnPauseGame.cs new file mode 100644 index 0000000..dd71664 --- /dev/null +++ b/Assets/Scripts/Core/Managers/PauseUnPauseGame.cs @@ -0,0 +1,76 @@ +using System.Collections; +using Interfaces.Core.Managers; +using UnityEngine; + +namespace Core.Managers +{ + public class PauseUnPauseGame : MonoBehaviour, IPauseUnPauseGame + { + private ILevelManager _levelManager; + + private void Awake() + { + _levelManager = GetComponent(); + } + + public void PauseUnPauseState() + { + _levelManager = FindObjectOfType(); + StartCoroutine(!_levelManager.GetGameStateData.GamePaused ? PauseGameCo() : UnpauseGameCo()); + } + + private IEnumerator PauseGameCo() + { + _levelManager.GetGameStateData.GamePaused = true; + _levelManager.GetGameStateData.PauseGamePrevTimeScale = Time.timeScale; + + Time.timeScale = 0; + _levelManager.GetGameStateData.PausePrevMusicPaused = _levelManager.GetGameStateData.MusicPaused; + _levelManager.GetSoundManager.MusicSource.Pause(); + _levelManager.GetGameStateData.MusicPaused = true; + _levelManager.GetSoundManager.SoundSource.Pause(); + + // Set any active animators that use unscaled time mode to normal + _levelManager.GetGameStateData.UnScaledAnimators.Clear(); + foreach (Animator animator in FindObjectsOfType()) { + if (animator.updateMode != AnimatorUpdateMode.UnscaledTime) continue; + _levelManager.GetGameStateData.UnScaledAnimators.Add(animator); + animator.updateMode = AnimatorUpdateMode.Normal; + } + + _levelManager.GetSoundManager.PauseSoundSource.Play(); + yield return new WaitForSecondsRealtime(_levelManager.GetSoundManager.PauseSoundSource.clip.length); + Debug.Log(this.name + " PauseGameCo stops: records prevTimeScale=" + _levelManager.GetGameStateData.PauseGamePrevTimeScale.ToString()); + } + + private IEnumerator UnpauseGameCo() + { + _levelManager.GetSoundManager.PauseSoundSource.Play(); + yield return new WaitForSecondsRealtime(_levelManager.GetSoundManager.PauseSoundSource.clip.length); + + _levelManager.GetGameStateData.MusicPaused = _levelManager.GetGameStateData.PausePrevMusicPaused; + if (!_levelManager.GetGameStateData.MusicPaused) { + _levelManager.GetSoundManager.MusicSource.UnPause(); + } + + _levelManager.GetSoundManager.SoundSource.UnPause(); + + // Reset animators + foreach (Animator animator in _levelManager.GetGameStateData.UnScaledAnimators) { + animator.updateMode = AnimatorUpdateMode.UnscaledTime; + } + + _levelManager.GetGameStateData.UnScaledAnimators.Clear(); + + Time.timeScale = _levelManager.GetGameStateData.PauseGamePrevTimeScale; + _levelManager.GetGameStateData.GamePaused = false; + Debug.Log(this.name + " UnpauseGameCo stops: resume prevTimeScale=" + _levelManager.GetGameStateData.PauseGamePrevTimeScale.ToString()); + } + + public void GamePauseCheck() + { + if (!Input.GetButtonDown("Pause")) return; + PauseUnPauseState(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Core/Managers/PauseUnPauseGame.cs.meta b/Assets/Scripts/Core/Managers/PauseUnPauseGame.cs.meta new file mode 100644 index 0000000..c3c08aa --- /dev/null +++ b/Assets/Scripts/Core/Managers/PauseUnPauseGame.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 72e89b8df56b4c02b59e00e1b023513f +timeCreated: 1659426399 \ No newline at end of file diff --git a/Assets/Scripts/Core/Managers/SaveGameStateOnMemory.cs b/Assets/Scripts/Core/Managers/SaveGameStateOnMemory.cs index c288554..831d19d 100644 --- a/Assets/Scripts/Core/Managers/SaveGameStateOnMemory.cs +++ b/Assets/Scripts/Core/Managers/SaveGameStateOnMemory.cs @@ -1,5 +1,4 @@ -using System; -using Interfaces.Core.Managers; +using Interfaces.Core.Managers; using UnityEngine; using Object = UnityEngine.Object; @@ -11,12 +10,12 @@ public void SaveGameState(IGameStateManager gameStateManager) { //if (gameStateManager == null) throw new NullReferenceException(); LevelManager levelManager = Object.FindObjectOfType(); - gameStateManager.PlayerSize = levelManager.GetGameStateManager.PlayerSize; - gameStateManager.Lives = levelManager.GetGameStateManager.Lives; + gameStateManager.PlayerSize = levelManager.GetGameStateData.PlayerSize; + gameStateManager.Lives = levelManager.GetGameStateData.Lives; gameStateManager.Coins = levelManager.GetHUD.Coins; gameStateManager.Scores = levelManager.GetHUD.Scores; - gameStateManager.TimeLeft = levelManager.GetHUD.TimeLeft; - gameStateManager.HurryUp = levelManager.GetGameStateManager.HurryUp; + gameStateManager.TimeLeft = levelManager.GetGameStateData.TimeLeft; + gameStateManager.HurryUp = levelManager.GetGameStateData.HurryUp; } } } \ No newline at end of file diff --git a/Assets/Scripts/Core/Player/PlayerController.cs b/Assets/Scripts/Core/Player/PlayerController.cs index c72b57e..cd38808 100644 --- a/Assets/Scripts/Core/Player/PlayerController.cs +++ b/Assets/Scripts/Core/Player/PlayerController.cs @@ -43,7 +43,7 @@ private void Update() IsFalling = MRigidbody2D.velocity.y < 0 && !base.IsGrounded; IsChangingDirection = CurrentSpeedX > 0 && FaceDirectionX * MoveDirectionX < 0; - if (!InputFreezed || LevelManager.GetGameStateManager.GamePaused) return; + if (!InputFreezed || LevelManager.GetGameStateData.GamePaused) return; if (_isDying) { _deadUpTimer -= Time.unscaledDeltaTime; if (_deadUpTimer > 0) { diff --git a/Assets/Scripts/Core/Player/PlayerController_Misc.cs b/Assets/Scripts/Core/Player/PlayerController_Misc.cs index 31c6b55..c0e1edf 100644 --- a/Assets/Scripts/Core/Player/PlayerController_Misc.cs +++ b/Assets/Scripts/Core/Player/PlayerController_Misc.cs @@ -230,7 +230,7 @@ public override void UpdateSize() { GetComponent().SetInteger(PlayerSizeAnimator, FindObjectOfType() - .GetGameStateManager.PlayerSize); + .GetGameStateData.PlayerSize); } /// diff --git a/Assets/Scripts/Core/Player/PlayerController_Movement.cs b/Assets/Scripts/Core/Player/PlayerController_Movement.cs index a186246..2404d4c 100644 --- a/Assets/Scripts/Core/Player/PlayerController_Movement.cs +++ b/Assets/Scripts/Core/Player/PlayerController_Movement.cs @@ -27,7 +27,7 @@ protected override void PlayerControlsSubscribe() { } private void Shooting(InputAction.CallbackContext obj) { - if (!IsShooting || LevelManager.GetGameStateManager.PlayerSize != 2) return; + if (!IsShooting || LevelManager.GetGameStateData.PlayerSize != 2) return; FireTime2 = Time.time; if (!(FireTime2 - FireTime1 >= WaitBetweenFire)) return; @@ -81,7 +81,7 @@ private void Jump_performed(InputAction.CallbackContext context) { IsJumping = true; SpeedXBeforeJump = CurrentSpeedX; WasDashingBeforeJump = IsDashing; - LevelManager.GetSoundManager.SoundSource.PlayOneShot(LevelManager.GetGameStateManager.PlayerSize == 0 + LevelManager.GetSoundManager.SoundSource.PlayOneShot(LevelManager.GetGameStateData.PlayerSize == 0 ? LevelManager.GetSoundManager.JumpSmallSound : LevelManager.GetSoundManager.JumpSuperSound); } diff --git a/Assets/Scripts/Interfaces/Abilities/PickUps/IPlayerPickUpAbilities.cs b/Assets/Scripts/Interfaces/Abilities/PickUps/IPlayerPickUpAbilities.cs index 3212f80..84a209e 100644 --- a/Assets/Scripts/Interfaces/Abilities/PickUps/IPlayerPickUpAbilities.cs +++ b/Assets/Scripts/Interfaces/Abilities/PickUps/IPlayerPickUpAbilities.cs @@ -1,6 +1,6 @@ using UnityEngine; -namespace Interfaces.Abilities.Pickups +namespace Interfaces.Abilities.PickUps { public interface IPlayerPickUpAbilities { diff --git a/Assets/Scripts/Interfaces/Core/Managers/GameStateDataBase.cs b/Assets/Scripts/Interfaces/Core/Managers/GameStateDataBase.cs new file mode 100644 index 0000000..fc3e0df --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/GameStateDataBase.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Interfaces.Core.Managers +{ + public abstract class GameStateDataBase : GameStateResetDataBase + { + [SerializeField] protected int coinBonus = 200; + [SerializeField] protected int powerupBonus = 1000; + [SerializeField] protected int starmanBonus = 1000; + [SerializeField] protected int oneupBonus; + [SerializeField] protected int breakBlockBonus = 50; + + [SerializeField] protected bool gamePaused; + [SerializeField] protected bool timerPaused; + [SerializeField] protected bool musicPaused; + + protected List UnScaledAnimators = new(); + protected float PauseGamePrevTimeScale; + protected bool PausePrevMusicPaused; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/GameStateDataBase.cs.meta b/Assets/Scripts/Interfaces/Core/Managers/GameStateDataBase.cs.meta new file mode 100644 index 0000000..b5ec770 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/GameStateDataBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dda09c581596422586bfb8fb95adac2e +timeCreated: 1659433753 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/GameStateManagerBase.cs b/Assets/Scripts/Interfaces/Core/Managers/GameStateManagerBase.cs index 78a087d..960871d 100644 --- a/Assets/Scripts/Interfaces/Core/Managers/GameStateManagerBase.cs +++ b/Assets/Scripts/Interfaces/Core/Managers/GameStateManagerBase.cs @@ -1,89 +1,14 @@ -using System.Collections.Generic; -using UnityEngine; +using UnityEngine; namespace Interfaces.Core.Managers { - public abstract class GameStateManagerBase : MonoBehaviour + public abstract class GameStateManagerBase : GameStateResetDataBase { [SerializeField] protected bool spawnFromPoint; [SerializeField] protected int spawnPointIdx; [SerializeField] protected int spawnPipeIdx; - [SerializeField] protected int playerSize; - [SerializeField] protected int lives; - [SerializeField] protected int coins; - [SerializeField] protected int scores; - [SerializeField] protected float timeLeft; - - [SerializeField] protected bool hurryUp; - [SerializeField] protected string sceneToLoad; // what scene to load after level start screen finishes? [SerializeField] protected bool timeUp; - - [SerializeField] protected int coinBonus = 200; - [SerializeField] protected int powerupBonus = 1000; - [SerializeField] protected int starmanBonus = 1000; - [SerializeField] protected int oneupBonus; - [SerializeField] protected int breakBlockBonus = 50; - [SerializeField] protected int timeLeftInt; - - [SerializeField] protected bool gamePaused; - [SerializeField] protected bool timerPaused; - [SerializeField] protected bool musicPaused; - - - protected readonly List UnScaledAnimators = new List(); - protected float PauseGamePrevTimeScale; - protected bool PausePrevMusicPaused; } - - // public class GameStateDataBase : MonoBehaviour - // { - // [SerializeField] protected int coinBonus = 200; - // [SerializeField] protected int powerupBonus = 1000; - // [SerializeField] protected int starmanBonus = 1000; - // [SerializeField] protected int oneupBonus; - // [SerializeField] protected int breakBlockBonus = 50; - // [SerializeField] protected int timeLeftInt; - // - // - // [SerializeField] protected bool gamePaused; - // [SerializeField] protected bool timerPaused; - // [SerializeField] protected bool musicPaused; - // - // - // protected readonly List UnScaledAnimators = new List(); - // protected float PauseGamePrevTimeScale; - // protected bool PausePrevMusicPaused; - // } - // - // public class GameStateData: GameStateDataBase, IGameStateData - // { - // public bool CoinBonus { get; set; } - // public int PowerupBonus { get; set; } - // public int StarmanBonus { get; set; } - // public int OneupBonus { get; set; } - // public int BreakBlockBonus { get; set; } - // public int TimeLeftInt { get; set; } - // public int GamePaused { get; set; } - // public float TimerPaused { get; set; } - // public bool MusicPaused { get; set; } - // public string UnScaledAnimators { get; set; } - // public bool TimeUp { get; set; } - // } - // - // public interface IGameStateData - // { - // public bool CoinBonus { get; set; } - // public int PowerupBonus { get; set; } - // public int StarmanBonus { get; set; } - // public int OneupBonus { get; set; } - // public int BreakBlockBonus { get; set; } - // public int TimeLeftInt { get; set; } - // public int GamePaused { get; set; } - // public float TimerPaused { get; set; } - // public bool MusicPaused { get; set; } - // public string UnScaledAnimators { get; set; } - // public bool TimeUp { get; set; } - // } } \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/GameStateResetDataBase.cs b/Assets/Scripts/Interfaces/Core/Managers/GameStateResetDataBase.cs new file mode 100644 index 0000000..406d1d4 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/GameStateResetDataBase.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace Interfaces.Core.Managers +{ + public abstract class GameStateResetDataBase : MonoBehaviour + { + [SerializeField] protected bool hurryUp; // within last 100 secs? + [SerializeField] protected int playerSize; // 0..2 + [SerializeField] protected int lives; + [SerializeField] protected int coins; + [SerializeField] protected int scores; + [SerializeField] protected float timeLeft; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/GameStateResetDataBase.cs.meta b/Assets/Scripts/Interfaces/Core/Managers/GameStateResetDataBase.cs.meta new file mode 100644 index 0000000..707d32f --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/GameStateResetDataBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: feb2fbe59789420dbac2261c199d7003 +timeCreated: 1659441993 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IGameStateData.cs b/Assets/Scripts/Interfaces/Core/Managers/IGameStateData.cs new file mode 100644 index 0000000..f89f99f --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/IGameStateData.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Interfaces.UI; +using UnityEngine; + +namespace Interfaces.Core.Managers +{ + public interface IGameStateData : IGameStateDataReset + { + public int CoinBonus { get; set; } + public int PowerupBonus { get; set; } + public int StarmanBonus { get; set; } + public int OneupBonus { get; set; } + public int BreakBlockBonus { get; set; } + public bool GamePaused { get; set; } + public bool TimerPaused { get; set; } + public bool MusicPaused { get; set; } + public List UnScaledAnimators { get; set; } + public float PauseGamePrevTimeScale { get; set; } + public bool PausePrevMusicPaused { get; set; } + public IPauseUnPauseGame GetPauseUnPauseGame { get; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IGameStateData.cs.meta b/Assets/Scripts/Interfaces/Core/Managers/IGameStateData.cs.meta new file mode 100644 index 0000000..c44b596 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/IGameStateData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: feb34e3f113d4ef9a537a0174b0d8330 +timeCreated: 1659433721 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IGameStateDataReset.cs b/Assets/Scripts/Interfaces/Core/Managers/IGameStateDataReset.cs new file mode 100644 index 0000000..8143da0 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/IGameStateDataReset.cs @@ -0,0 +1,13 @@ +using Interfaces.UI; + +namespace Interfaces.Core.Managers +{ + public interface IGameStateDataReset : ITimeLeft + { + public bool HurryUp { get; set; } // within last 100 secs? + public int PlayerSize { get; set; } // 0..2 + public int Lives { get; set; } + public int Coins { get; set; } + public int Scores { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IGameStateDataReset.cs.meta b/Assets/Scripts/Interfaces/Core/Managers/IGameStateDataReset.cs.meta new file mode 100644 index 0000000..f3eda08 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/IGameStateDataReset.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6ccb462486c44e0db83bcb9bf26ad60d +timeCreated: 1659441681 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IGameStateManager.cs b/Assets/Scripts/Interfaces/Core/Managers/IGameStateManager.cs index c403dd6..4bb3215 100644 --- a/Assets/Scripts/Interfaces/Core/Managers/IGameStateManager.cs +++ b/Assets/Scripts/Interfaces/Core/Managers/IGameStateManager.cs @@ -10,9 +10,5 @@ public interface IGameStateManager : IGameStateManagerEssentials public void ConfigNewLevel(); public void ConfigReplayedLevel(); public void GetSaveGameState(); - public void PauseUnPauseState(); - public void TimerHUD(); - public void GamePauseCheck(); - public void TimeUpCounter(); } } \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IGameStateManagerEssentials.cs b/Assets/Scripts/Interfaces/Core/Managers/IGameStateManagerEssentials.cs index 61f1bbc..e742485 100644 --- a/Assets/Scripts/Interfaces/Core/Managers/IGameStateManagerEssentials.cs +++ b/Assets/Scripts/Interfaces/Core/Managers/IGameStateManagerEssentials.cs @@ -1,26 +1,11 @@ namespace Interfaces.Core.Managers { - public interface IGameStateManagerEssentials + public interface IGameStateManagerEssentials : IGameStateDataReset { public bool SpawnFromPoint { get; set; } public int SpawnPointIdx { get; set; } public int SpawnPipeIdx { get; set; } - public int PlayerSize { get; set; } // 0..2 - public int Lives { get; set; } - public int Coins { get; set; } - public int CoinBonus { get; set; } - public int PowerupBonus { get; set; } - public int StarmanBonus { get; set; } - public int OneupBonus { get; set; } - public int BreakBlockBonus { get; set; } - public int Scores { get; set; } - public float TimeLeft { get; set; } - public int TimeLeftInt { get; set; } - public bool HurryUp { get; set; } // within last 100 secs? public string SceneToLoad { get; set; } public bool TimeUp { get; set; } - public bool GamePaused { get; set; } - public bool TimerPaused { get; set; } - public bool MusicPaused { get; set; } } } \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/ILevelManager.cs b/Assets/Scripts/Interfaces/Core/Managers/ILevelManager.cs index ebcfbfb..ccc68bb 100644 --- a/Assets/Scripts/Interfaces/Core/Managers/ILevelManager.cs +++ b/Assets/Scripts/Interfaces/Core/Managers/ILevelManager.cs @@ -1,7 +1,6 @@ -using Abilities.Pickups; +using Core.Managers; using Core.Player; -using Interfaces.Abilities; -using Interfaces.Abilities.Pickups; +using Interfaces.Abilities.PickUps; using Interfaces.Abilities.Player; using Interfaces.Level; using Interfaces.UI; @@ -22,10 +21,8 @@ public interface ILevelManagerEssentials public IPlayerPickUpAbilities GetPlayerPickUpAbilities { get; } public IPlayerAbilities GetPlayerAbilities { get; } public PlayerController GetPlayerController { get; } - // public ISoundLevelHandle GetSoundLevelHandle { get; } public ILevelServices GetLevelServices { get; } - public bool TimerPaused { get; set; } - public bool GamePaused { get; set; } - public bool MusicPaused { get; set; } + public IGameStateData GetGameStateData { get; } + public ISetTimerHUD GetSetTimerHUD { get; } } } \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IPauseUnPauseGame.cs b/Assets/Scripts/Interfaces/Core/Managers/IPauseUnPauseGame.cs new file mode 100644 index 0000000..8fff085 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/IPauseUnPauseGame.cs @@ -0,0 +1,8 @@ +namespace Interfaces.Core.Managers +{ + public interface IPauseUnPauseGame + { + public void PauseUnPauseState(); + public void GamePauseCheck(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/IPauseUnPauseGame.cs.meta b/Assets/Scripts/Interfaces/Core/Managers/IPauseUnPauseGame.cs.meta new file mode 100644 index 0000000..75e2f88 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/IPauseUnPauseGame.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1ab40867ea91455d9076b546b8ccd71d +timeCreated: 1659426382 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/ITimeLeft.cs b/Assets/Scripts/Interfaces/Core/Managers/ITimeLeft.cs new file mode 100644 index 0000000..b666fb2 --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/ITimeLeft.cs @@ -0,0 +1,7 @@ +namespace Interfaces.Core.Managers +{ + public interface ITimeLeft + { + public float TimeLeft { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/ITimeLeft.cs.meta b/Assets/Scripts/Interfaces/Core/Managers/ITimeLeft.cs.meta new file mode 100644 index 0000000..a6eb7ca --- /dev/null +++ b/Assets/Scripts/Interfaces/Core/Managers/ITimeLeft.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a71e16e94d34cb69dc91e3689fcacee +timeCreated: 1659448272 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/Core/Managers/LevelManagerBase.cs b/Assets/Scripts/Interfaces/Core/Managers/LevelManagerBase.cs index 20313b0..f1f0f46 100644 --- a/Assets/Scripts/Interfaces/Core/Managers/LevelManagerBase.cs +++ b/Assets/Scripts/Interfaces/Core/Managers/LevelManagerBase.cs @@ -1,13 +1,9 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; +using UnityEngine; namespace Interfaces.Core.Managers { public abstract class LevelManagerBase : MonoBehaviour { - [SerializeField] protected bool gamePaused; - [SerializeField] protected bool timerPaused; - [SerializeField] protected bool musicPaused; + } } \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/UI/IHUD.cs b/Assets/Scripts/Interfaces/UI/IHUD.cs index c8bfb8c..9c11eda 100644 --- a/Assets/Scripts/Interfaces/UI/IHUD.cs +++ b/Assets/Scripts/Interfaces/UI/IHUD.cs @@ -1,17 +1,16 @@ -using UnityEngine; +using Interfaces.Core.Managers; +using UnityEngine; using UnityEngine.UI; namespace Interfaces.UI { - public interface IHUD + public interface IHUD : ITimeLeftHUD { public Text ScoreText { get; } public Text CoinText { get; } public Text TimeText { get; } public int Coins { get; set; } public int Scores { get; set; } - public float TimeLeft { get; set; } - public int TimeLeftInt { get; set; } public void SetHUD(); public void SetHudCoin(); public void SetHudScore(); diff --git a/Assets/Scripts/Interfaces/UI/ISetTimerHUD.cs b/Assets/Scripts/Interfaces/UI/ISetTimerHUD.cs new file mode 100644 index 0000000..6a39e36 --- /dev/null +++ b/Assets/Scripts/Interfaces/UI/ISetTimerHUD.cs @@ -0,0 +1,9 @@ +namespace Interfaces.UI +{ + public interface ISetTimerHUD + { + public void TimerHUD(); + public void TimeUpCounter(); + public void TimerHUDMusic(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/UI/ISetTimerHUD.cs.meta b/Assets/Scripts/Interfaces/UI/ISetTimerHUD.cs.meta new file mode 100644 index 0000000..c6b7eac --- /dev/null +++ b/Assets/Scripts/Interfaces/UI/ISetTimerHUD.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d50ae253c70e44f69a07732afe6ee40c +timeCreated: 1659457261 \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/UI/ITimeLeftHUD.cs b/Assets/Scripts/Interfaces/UI/ITimeLeftHUD.cs new file mode 100644 index 0000000..f1d88c6 --- /dev/null +++ b/Assets/Scripts/Interfaces/UI/ITimeLeftHUD.cs @@ -0,0 +1,7 @@ +namespace Interfaces.UI +{ + public interface ITimeLeftHUD + { + public int TimeLeftIntHUD { get; set; } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Interfaces/UI/ITimeLeftHUD.cs.meta b/Assets/Scripts/Interfaces/UI/ITimeLeftHUD.cs.meta new file mode 100644 index 0000000..ef505c5 --- /dev/null +++ b/Assets/Scripts/Interfaces/UI/ITimeLeftHUD.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: db80e9c6ce36427fb5000762a32690d1 +timeCreated: 1659448878 \ No newline at end of file diff --git a/Assets/Scripts/Level/BridgeAxe.cs b/Assets/Scripts/Level/BridgeAxe.cs index 99c0950..903cfb2 100644 --- a/Assets/Scripts/Level/BridgeAxe.cs +++ b/Assets/Scripts/Level/BridgeAxe.cs @@ -3,58 +3,58 @@ using Core.Managers; using Core.NPC; using Core.Player; +using Interfaces.Core.Managers; using UnityEngine; namespace Level { public class BridgeAxe : MonoBehaviour { - private LevelManager t_LevelManager; - private PlayerController playerController; - private Bowser bowser; - private List bridgePieces = new List (); + private ILevelManager _levelManager; + private PlayerController _playerController; + private Bowser _bowser; + private List _bridgePieces = new List (); private float bridgePieceGravity = 8; private float waitBetweenCollapse = .2f; - private bool gotAxe; + private bool _gotAxe; - // Use this for initialization - void Start () { - t_LevelManager = FindObjectOfType (); - playerController = FindObjectOfType (); - bowser = FindObjectOfType (); + private void Start () { + _levelManager = FindObjectOfType (); + _playerController = FindObjectOfType (); + _bowser = FindObjectOfType (); foreach (Transform child in transform.parent.Find("Bridge Pieces")) { - bridgePieces.Add (child.gameObject); + _bridgePieces.Add (child.gameObject); } } - void OnTriggerEnter2D(Collider2D other) { - if (other.tag == "Player" && !gotAxe) { - gotAxe = true; - playerController.FreezeUserInput (); - t_LevelManager.GetGameStateManager.TimerPaused = true; + private void OnTriggerEnter2D(Collider2D other) + { + if (!other.CompareTag("Player") || _gotAxe) return; + _gotAxe = true; + _playerController.FreezeUserInput (); + _levelManager.GetGameStateData.TimerPaused = true; - if (bowser) { // bowser not yet defeated - bowser.active = false; - StartCoroutine (CollapseBridgeCo ()); - } else { - t_LevelManager.GetLevelServices.MarioCompleteCastle (); - } - gameObject.GetComponent ().enabled = false; + if (_bowser) { // bowser not yet defeated + _bowser.active = false; + StartCoroutine (CollapseBridgeCo ()); + } else { + _levelManager.GetLevelServices.MarioCompleteCastle (); } + gameObject.GetComponent ().enabled = false; } - IEnumerator CollapseBridgeCo() { - foreach (GameObject bridgePiece in bridgePieces) { + private IEnumerator CollapseBridgeCo() { + foreach (GameObject bridgePiece in _bridgePieces) { bridgePiece.layer = LayerMask.NameToLayer ("Falling to Kill Plane"); Rigidbody2D rgbd = bridgePiece.gameObject.GetComponent (); rgbd.bodyType = RigidbodyType2D.Dynamic; rgbd.gravityScale = bridgePieceGravity; - t_LevelManager.GetSoundManager.SoundSource.PlayOneShot (t_LevelManager.GetSoundManager.BreakBlockSound); + _levelManager.GetSoundManager.SoundSource.PlayOneShot (_levelManager.GetSoundManager.BreakBlockSound); yield return new WaitForSeconds (waitBetweenCollapse); } - t_LevelManager.GetLevelServices.MarioCompleteCastle (); + _levelManager.GetLevelServices.MarioCompleteCastle (); Destroy (gameObject); } } diff --git a/Assets/Scripts/Level/LevelHandleMusic.cs b/Assets/Scripts/Level/LevelHandleMusic.cs index 7433494..b3b9efc 100644 --- a/Assets/Scripts/Level/LevelHandleMusic.cs +++ b/Assets/Scripts/Level/LevelHandleMusic.cs @@ -13,8 +13,6 @@ public class LevelHandleMusic : MonoBehaviour, ISoundLevelHandle private void Awake() { - // _levelManager = GetComponent(); - // _soundManager = GetComponent(); _levelManager = FindObjectOfType(); _soundManager = GetComponent(); } @@ -28,11 +26,11 @@ private IEnumerator ChangeMusicCo(AudioClip clip, float delay) { Debug.Log(this.name + " ChangeMusicCo: starts changing music to " + clip.name); _soundManager.MusicSource.clip = clip; - yield return new WaitWhile(() => _levelManager.GetGameStateManager.GamePaused); + yield return new WaitWhile(() => _levelManager.GetGameStateData.GamePaused); yield return new WaitForSecondsRealtime(delay); // yield return new WaitWhile(() => false || false); yield return new WaitWhile(() => - _levelManager.GetGameStateManager.GamePaused || _levelManager.GetGameStateManager.MusicPaused); + _levelManager.GetGameStateData.GamePaused || _levelManager.GetGameStateData.MusicPaused); if (!_levelManager.GetPlayerAbilities.IsRespawning) { _soundManager.MusicSource.Play(); } @@ -55,7 +53,7 @@ private IEnumerator PauseMusicPlaySoundCo(AudioClip clip, bool resumeMusic) Debug.Log(this.name + " Pause musicPlaySoundCo: starts pausing music " + musicClipName + " to play sound " + clip.name); - _levelManager.GetGameStateManager.MusicPaused = true; + _levelManager.GetGameStateData.MusicPaused = true; _soundManager.MusicSource.Pause(); _soundManager.SoundSource.PlayOneShot(clip); yield return new WaitForSeconds(clip.length); @@ -70,15 +68,15 @@ private IEnumerator PauseMusicPlaySoundCo(AudioClip clip, bool resumeMusic) Debug.Log(this.name + " PausemusicPlaySoundCo: resume playing music " + musicClipName); } - _levelManager.GetGameStateManager.MusicPaused = false; + _levelManager.GetGameStateData.MusicPaused = false; Debug.Log(this.name + " PausemusicPlaySoundCo: done pausing music to play sound " + clip.name); } public void TimerHUDMusic() { - if (_levelManager.GetHUD.TimeLeftInt >= 100 || _levelManager.GetGameStateManager.HurryUp) return; - _levelManager.GetGameStateManager.HurryUp = true; + if (_levelManager.GetHUD.TimeLeftIntHUD >= 100 || _levelManager.GetGameStateData.HurryUp) return; + _levelManager.GetGameStateData.HurryUp = true; _soundManager.GetSoundLevelHandle.PauseMusicPlaySound(_levelManager.GetSoundManager.WarningSound, true); _soundManager.GetSoundLevelHandle.ChangeMusic( _levelManager.GetPlayerAbilities.IsInvincibleStarman diff --git a/Assets/Scripts/Level/LevelSceneHandle.cs b/Assets/Scripts/Level/LevelSceneHandle.cs index 1b07f78..fa2368d 100644 --- a/Assets/Scripts/Level/LevelSceneHandle.cs +++ b/Assets/Scripts/Level/LevelSceneHandle.cs @@ -11,18 +11,15 @@ public class LevelSceneHandle : MonoBehaviour, ILoadLevelSceneHandle private const float LoadSceneDelayTime = 1f; private ILevelManager _levelManager; - // private IGameStateManager _gameStateManager; - + private void Awake() { _levelManager = GetComponent(); - // _gameStateManager = GetComponent(); - // _gameStateManager = FindObjectOfType(); } public void LoadSceneDelay(string sceneName, float delay = LoadSceneDelayTime) { - _levelManager.GetGameStateManager.TimerPaused = true; + _levelManager.GetGameStateData.TimerPaused = true; StartCoroutine(LoadSceneDelayCo(sceneName, delay)); } @@ -32,7 +29,7 @@ private IEnumerator LoadSceneDelayCo(string sceneName, float delay) float waited = 0; while (waited < delay) { - if (!_levelManager.GetGameStateManager.GamePaused) { + if (!_levelManager.GetGameStateData.GamePaused) { // should not count delay while game paused waited += Time.unscaledDeltaTime; } @@ -40,7 +37,7 @@ private IEnumerator LoadSceneDelayCo(string sceneName, float delay) yield return null; } - yield return new WaitWhile(() => _levelManager.GetGameStateManager.GamePaused); + yield return new WaitWhile(() => _levelManager.GetGameStateData.GamePaused); Debug.Log(this.name + " LoadSceneDelayCo: done loading " + sceneName); diff --git a/Assets/Scripts/Level/LevelServices.cs b/Assets/Scripts/Level/LevelServices.cs index 15f5f3a..3abe7b8 100644 --- a/Assets/Scripts/Level/LevelServices.cs +++ b/Assets/Scripts/Level/LevelServices.cs @@ -48,7 +48,7 @@ public bool IsSceneInCurrentWorld(string sceneName) public void MarioCompleteCastle() { - _levelManager.GetGameStateManager.TimerPaused = true; + _levelManager.GetGameStateData.TimerPaused = true; _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic(_levelManager.GetSoundManager.CastleCompleteMusic); _levelManager.GetSoundManager.MusicSource.loop = false; _levelManager.GetPlayerController.AutomaticWalk(_levelManager.GetPlayerController.CastleWalkSpeedX); @@ -56,14 +56,14 @@ public void MarioCompleteCastle() public void MarioCompleteLevel() { - _levelManager.GetGameStateManager.TimerPaused = true; + _levelManager.GetGameStateData.TimerPaused = true; _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic(_levelManager.GetSoundManager.LevelCompleteMusic); _levelManager.GetSoundManager.MusicSource.loop = false; } public void MarioReachFlagPole() { - _levelManager.GetGameStateManager.TimerPaused = true; + _levelManager.GetGameStateData.TimerPaused = true; _levelManager.GetSoundManager.GetSoundLevelHandle.PauseMusicPlaySound(_levelManager.GetSoundManager.FlagpoleSound, false); _levelManager.GetPlayerController.ClimbFlagPole(); } diff --git a/Assets/Scripts/Level/PipeWarpDown.cs b/Assets/Scripts/Level/PipeWarpDown.cs index 1a949a6..bd17824 100644 --- a/Assets/Scripts/Level/PipeWarpDown.cs +++ b/Assets/Scripts/Level/PipeWarpDown.cs @@ -25,8 +25,8 @@ private void FixedUpdate() { if (!_isMoving) return; if (transform.position.y > _stop.position.y) { - if (!_levelManager.GetGameStateManager.TimerPaused) { - _levelManager.GetGameStateManager.TimerPaused = true; + if (!_levelManager.GetGameStateData.TimerPaused) { + _levelManager.GetGameStateData.TimerPaused = true; } Transform transformCached = transform; diff --git a/Assets/Scripts/Level/PipeWarpSide.cs b/Assets/Scripts/Level/PipeWarpSide.cs index c51ad96..d598c54 100644 --- a/Assets/Scripts/Level/PipeWarpSide.cs +++ b/Assets/Scripts/Level/PipeWarpSide.cs @@ -25,7 +25,7 @@ private void OnTriggerEnter2D(Collider2D other) if (!other.CompareTag("Player")) return; _playerController.AutomaticWalk(_playerController.LevelEntryWalkSpeedX); _reachedPortal = true; - _levelManager.GetGameStateManager.TimerPaused = true; + _levelManager.GetGameStateData.TimerPaused = true; Debug.Log(this.name + " OnTriggerEnter2D: " + transform.parent.gameObject.name + " recognizes player, should automatic walk"); } diff --git a/Assets/Scripts/Level/PipeWarpUp.cs b/Assets/Scripts/Level/PipeWarpUp.cs index a03dfae..8f4efd5 100644 --- a/Assets/Scripts/Level/PipeWarpUp.cs +++ b/Assets/Scripts/Level/PipeWarpUp.cs @@ -32,7 +32,7 @@ private void Start() _levelManager.GetGameStateManager.SpawnPipeIdx == transform.parent.GetSiblingIndex()) { isTakingMarioUp = true; _mario.FreezeUserInput(); - _levelManager.GetGameStateManager.TimerPaused = true; + _levelManager.GetGameStateData.TimerPaused = true; Debug.Log(this.name + " Start: " + transform.parent.gameObject.name + " taking Mario up"); } else { isTakingMarioUp = false; @@ -46,14 +46,14 @@ private void FixedUpdate() if (!isTakingMarioUp) return; if (transform.position.y < _stop.position.y) { transform.position = new Vector2(transform.position.x, transform.position.y + PlatformVelocityY); - } else if (_levelManager.GetGameStateManager.TimerPaused) { + } else if (_levelManager.GetGameStateData.TimerPaused) { _levelManager.GetGameStateManager.SpawnFromPoint = true; if (resetSpawnPoint) { _levelManager.GetGameStateManager.ResetSpawnPosition(); } _mario.UnfreezeUserInput(); - _levelManager.GetGameStateManager.TimerPaused = false; + _levelManager.GetGameStateData.TimerPaused = false; isTakingMarioUp = false; } } diff --git a/Assets/Scripts/Level/RegularBrickBlock.cs b/Assets/Scripts/Level/RegularBrickBlock.cs index 1fc8b54..c53b4c2 100644 --- a/Assets/Scripts/Level/RegularBrickBlock.cs +++ b/Assets/Scripts/Level/RegularBrickBlock.cs @@ -43,12 +43,12 @@ void OnTriggerEnter2D(Collider2D other) { } // Bounce or break depending on Mario's size - if (_levelManager.GetGameStateManager.PlayerSize == 0) { + if (_levelManager.GetGameStateData.PlayerSize == 0) { m_Animator.SetTrigger ("bounce"); _levelManager.GetSoundManager.SoundSource.PlayOneShot (_levelManager.GetSoundManager.BumpSound); } else { BreakIntoPieces (); - _levelManager.GetPlayerPickUpAbilities.AddScore(_levelManager.GetGameStateManager.BreakBlockBonus); + _levelManager.GetPlayerPickUpAbilities.AddScore(_levelManager.GetGameStateData.BreakBlockBonus); _levelManager.GetSoundManager.SoundSource.PlayOneShot (_levelManager.GetSoundManager.BreakBlockSound); } time1 = Time.time; diff --git a/Assets/Scripts/Level/SetLevelHUD.cs b/Assets/Scripts/Level/SetLevelHUD.cs index 2bf839d..17cc20c 100644 --- a/Assets/Scripts/Level/SetLevelHUD.cs +++ b/Assets/Scripts/Level/SetLevelHUD.cs @@ -12,6 +12,7 @@ public class SetLevelHUD : MonoBehaviour, IHUD [SerializeField] private Text timeText; [SerializeField] private GameObject floatingTextEffect; private const float FloatingTextOffsetY = 2f; + private int _timeLeftInt; public Text ScoreText => scoreText; @@ -27,26 +28,20 @@ private void Awake() public int Coins { - get => _levelManager.GetGameStateManager.Coins; - set => _levelManager.GetGameStateManager.Coins = value; + get => _levelManager.GetGameStateData.Coins; + set => _levelManager.GetGameStateData.Coins = value; } public int Scores { - get => _levelManager.GetGameStateManager.Scores; - set => _levelManager.GetGameStateManager.Scores = value; + get => _levelManager.GetGameStateData.Scores; + set => _levelManager.GetGameStateData.Scores = value; } - public float TimeLeft + public int TimeLeftIntHUD { - get => _levelManager.GetGameStateManager.TimeLeft; - set => _levelManager.GetGameStateManager.TimeLeft = value; - } - - public int TimeLeftInt - { - get => _levelManager.GetGameStateManager.TimeLeftInt; - set => _levelManager.GetGameStateManager.TimeLeftInt = value; + get => _timeLeftInt; + set => _timeLeftInt = value; } public void SetHUD() @@ -58,19 +53,18 @@ public void SetHUD() public void SetHudCoin() { - coinText.text = "x" + _levelManager.GetGameStateManager.Coins.ToString("D2"); + coinText.text = "x" + _levelManager.GetGameStateData.Coins.ToString("D2"); } public void SetHudScore() { - scoreText.text = _levelManager.GetGameStateManager.Scores.ToString("D6"); + scoreText.text = _levelManager.GetGameStateData.Scores.ToString("D6"); } public void SetHudTime() { - _levelManager.GetGameStateManager.TimeLeftInt = - Mathf.RoundToInt(_levelManager.GetGameStateManager.TimeLeft); - timeText.text = _levelManager.GetGameStateManager.TimeLeftInt.ToString("D3"); + _timeLeftInt = Mathf.RoundToInt(_levelManager.GetGameStateData.TimeLeft); + timeText.text = _timeLeftInt.ToString("D3"); } public void CreateFloatingText(string text, Vector3 spawnPos) diff --git a/Assets/Scripts/UI/GameOverScreen.cs b/Assets/Scripts/UI/GameOverScreen.cs index b85aea4..c344860 100644 --- a/Assets/Scripts/UI/GameOverScreen.cs +++ b/Assets/Scripts/UI/GameOverScreen.cs @@ -18,7 +18,7 @@ public class GameOverScreen : MonoBehaviour, ILevelScreenSetup [SerializeField] private Text coinTextHUD; [SerializeField] private Text messageText; [SerializeField] private AudioSource gameOverMusicSource; - + private IGameStateManagerEssentials _gameStateManager; private ILoadLevel _levelToLoad; @@ -66,7 +66,7 @@ public void SetUpLevelScreenAndWaitTillLevelLoad() gameOverMusicSource.Play(); // Start the game over music wait ... then Load the Next Level e.g., main menu - _levelToLoad.LoadLevel(loadLevelName: "Main Menu",gameOverMusicSource.clip.length); + _levelToLoad.LoadLevel(loadLevelName: "Main Menu", gameOverMusicSource.clip.length); Debug.Log(name + " Start: current scene is " + SceneManager.GetActiveScene().name); } diff --git a/Assets/Scripts/UI/SetTimerHUD.cs b/Assets/Scripts/UI/SetTimerHUD.cs new file mode 100644 index 0000000..0921c30 --- /dev/null +++ b/Assets/Scripts/UI/SetTimerHUD.cs @@ -0,0 +1,43 @@ +using Interfaces.Core.Managers; +using Interfaces.UI; +using UnityEngine; + +namespace UI +{ + public class SetTimerHUD : MonoBehaviour, ISetTimerHUD + { + private ILevelManager _levelManager; + + private void Awake() + { + _levelManager = GetComponent(); + } + + public void TimerHUD() + { + if (_levelManager.GetGameStateData.TimerPaused) return; + _levelManager.GetGameStateData.TimeLeft -= Time.deltaTime; // / .4f; // 1 game sec ~ 0.4 real time sec + _levelManager.GetHUD.SetHudTime(); + } + + public void TimeUpCounter() + { + if (_levelManager.GetHUD.TimeLeftIntHUD <= 0) { + _levelManager.GetPlayerAbilities.MarioRespawn(true); + } + } + + public void TimerHUDMusic() + { + if (_levelManager.GetHUD.TimeLeftIntHUD >= 100 || _levelManager.GetGameStateManager.HurryUp) return; + _levelManager.GetGameStateManager.HurryUp = true; + _levelManager.GetSoundManager.GetSoundLevelHandle.PauseMusicPlaySound( + _levelManager.GetSoundManager.WarningSound, true); + _levelManager.GetSoundManager.GetSoundLevelHandle.ChangeMusic( + _levelManager.GetPlayerAbilities.IsInvincibleStarman + ? _levelManager.GetSoundManager.StarmanMusicHurry + : _levelManager.GetSoundManager.LevelMusicHurry, + _levelManager.GetSoundManager.WarningSound.length); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/UI/SetTimerHUD.cs.meta b/Assets/Scripts/UI/SetTimerHUD.cs.meta new file mode 100644 index 0000000..40845af --- /dev/null +++ b/Assets/Scripts/UI/SetTimerHUD.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 95e054ffb3e0449f8cd96f28a89a06cd +timeCreated: 1659457248 \ No newline at end of file