From 24e478dd7a953e066cf093ec99587039330e0af2 Mon Sep 17 00:00:00 2001 From: MuhamadAjiW <16521119@mahasiswa.itb.ac.id> Date: Thu, 18 Apr 2024 19:30:05 +0700 Subject: [PATCH] fix: game state controller --- .../Scripts/Core/Game/GameStateController.cs | 19 +++++++++++++------ Assets/Scripts/Library/Enum/GameEventType.cs | 3 +++ .../Library/Enum/GameEventType.cs.meta | 11 +++++++++++ Assets/Scripts/Library/Events/GameEvent.cs | 10 ++++++++++ .../Scripts/Library/Events/GameEvent.cs.meta | 11 +++++++++++ .../Library/Events/GameStateChangeEvent.cs | 5 +++++ .../Events/GameStateChangeEvent.cs.meta | 11 +++++++++++ 7 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 Assets/Scripts/Library/Enum/GameEventType.cs create mode 100644 Assets/Scripts/Library/Enum/GameEventType.cs.meta create mode 100644 Assets/Scripts/Library/Events/GameEvent.cs create mode 100644 Assets/Scripts/Library/Events/GameEvent.cs.meta create mode 100644 Assets/Scripts/Library/Events/GameStateChangeEvent.cs create mode 100644 Assets/Scripts/Library/Events/GameStateChangeEvent.cs.meta diff --git a/Assets/Scripts/Core/Game/GameStateController.cs b/Assets/Scripts/Core/Game/GameStateController.cs index b63e3fd1..29bb07cb 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 00000000..0252b7bb --- /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 00000000..e4f0d1ae --- /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 00000000..10086a83 --- /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 00000000..c3bb62b9 --- /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 00000000..ead0a904 --- /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 00000000..54c950b9 --- /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: -- GitLab