diff --git a/Assets/Scripts/Core/Game/GameStateController.cs b/Assets/Scripts/Core/Game/GameStateController.cs index b63e3fd103270c48956d045eeeae61ae4a1f8c8c..29bb07cbc7cf5a610b2eeb2fbe6934fa88392abc 100644 --- a/Assets/Scripts/Core/Game/GameStateController.cs +++ b/Assets/Scripts/Core/Game/GameStateController.cs @@ -6,15 +6,22 @@ using UnityEngine; public class GameStateController { // Attributes private readonly Stack<GameState> gameStateStack = new(); - event StackChangeEvent<GameState> OnGameStateChange; + event GameStateChangeEvent OnGameStateChange; event Action OnPaused; // Constructor public GameStateController(){ gameStateStack.Push(GameState.NULL); + gameStateStack.Push(GameState.RUNNING); + OnGameStateChange += LogGameStateStack; } // Functions + private void LogGameStateStack(StackChangeEventArgs<GameState> e){ + Debug.Log(e.EventType); + Debug.Log(gameStateStack); + } + public void PushState(GameState gameState){ switch(gameState){ case GameState.PAUSED: @@ -23,7 +30,7 @@ public class GameStateController { case GameState.RUNNING: Time.timeScale = 1; break; - //TODO: Review cutscenes behaviour + //TODO: Review cutscenes and menu behaviour case GameState.CUTSCENE: Time.timeScale = 0; break; @@ -34,7 +41,7 @@ public class GameStateController { throw new Exception("Invalid gameState pushed to GameStateController, please refer to enum GameState for valid states"); } gameStateStack.Push(gameState); - OnGameStateChange.Invoke(new StackChangeEventArgs<GameState>( + OnGameStateChange?.Invoke(new GameStateChangeArgs( StackChangeEventType.PUSH, gameStateStack.Count, gameState @@ -59,8 +66,8 @@ public class GameStateController { Time.timeScale = 0; break; } - OnGameStateChange.Invoke(new StackChangeEventArgs<GameState>( - StackChangeEventType.PUSH, + OnGameStateChange?.Invoke(new GameStateChangeArgs( + StackChangeEventType.POP, gameStateStack.Count, gameState )); @@ -70,7 +77,7 @@ public class GameStateController { switch (gameStateStack.Peek()){ case GameState.RUNNING: PushState(GameState.PAUSED); - OnPaused.Invoke(); + OnPaused?.Invoke(); return; case GameState.PAUSED: diff --git a/Assets/Scripts/Library/Enum/GameEventType.cs b/Assets/Scripts/Library/Enum/GameEventType.cs new file mode 100644 index 0000000000000000000000000000000000000000..0252b7bbb00221078e577a370aa9d7cd95f4907d --- /dev/null +++ b/Assets/Scripts/Library/Enum/GameEventType.cs @@ -0,0 +1,3 @@ +public enum GameEventType{ + CHEAT +} \ No newline at end of file diff --git a/Assets/Scripts/Library/Enum/GameEventType.cs.meta b/Assets/Scripts/Library/Enum/GameEventType.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..e4f0d1ae92793d9037b2422f4bcd9f095eb02f73 --- /dev/null +++ b/Assets/Scripts/Library/Enum/GameEventType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41b332ae7187a124789afd290f85cee9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Library/Events/GameEvent.cs b/Assets/Scripts/Library/Events/GameEvent.cs new file mode 100644 index 0000000000000000000000000000000000000000..10086a8312a185ea231372911cb5b2582a1cdae0 --- /dev/null +++ b/Assets/Scripts/Library/Events/GameEvent.cs @@ -0,0 +1,10 @@ +using System; + +public class GameEventArgs : EventArgs{ + public GameEventType EventType { get; } + public GameEventArgs(GameEventType eventType){ + EventType = eventType; + } +} + +public delegate void GameEvent(GameEventArgs e); \ No newline at end of file diff --git a/Assets/Scripts/Library/Events/GameEvent.cs.meta b/Assets/Scripts/Library/Events/GameEvent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..c3bb62b93609f49720ec85baa1ae079a6d25514f --- /dev/null +++ b/Assets/Scripts/Library/Events/GameEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5230c920e65b9b34ea68dd5e60ccf3e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Library/Events/GameStateChangeEvent.cs b/Assets/Scripts/Library/Events/GameStateChangeEvent.cs new file mode 100644 index 0000000000000000000000000000000000000000..ead0a904f4aea0bab54caa7cd432ee49e2d02182 --- /dev/null +++ b/Assets/Scripts/Library/Events/GameStateChangeEvent.cs @@ -0,0 +1,5 @@ + +public class GameStateChangeArgs : StackChangeEventArgs<GameState>{ + public GameStateChangeArgs(StackChangeEventType eventType, int index, GameState value) : base(eventType, index, value){} +} +public delegate void GameStateChangeEvent(GameStateChangeArgs e); \ No newline at end of file diff --git a/Assets/Scripts/Library/Events/GameStateChangeEvent.cs.meta b/Assets/Scripts/Library/Events/GameStateChangeEvent.cs.meta new file mode 100644 index 0000000000000000000000000000000000000000..54c950b93b0f5a4d6e386b192921802de3cc5746 --- /dev/null +++ b/Assets/Scripts/Library/Events/GameStateChangeEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 25f336313940bf846bb06897a34c073c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: