From f9ae46b50483ad00899205d31cf741206b47c118 Mon Sep 17 00:00:00 2001 From: Jason Durand 01 Date: Sat, 2 Apr 2022 13:46:27 -0400 Subject: [PATCH] Basic play replay game loop --- Assets/GameFlowManager.cs | 24 +++++++---- Assets/Scenes/SampleScene.unity | 38 ++++++++++++++++- Assets/Scripts/AIEntity.cs | 7 ++-- Assets/Scripts/Gladiator.cs | 4 +- Assets/Scripts/Monster.cs | 4 +- Assets/Scripts/PlayerMovement.cs | 7 +--- Assets/Scripts/Utils.cs | 11 +++++ Assets/Scripts/Utils.cs.meta | 3 ++ .../Settings/ConjureLudumDare50.inputactions | 42 +++++++++++++++++++ 9 files changed, 120 insertions(+), 20 deletions(-) create mode 100644 Assets/Scripts/Utils.cs create mode 100644 Assets/Scripts/Utils.cs.meta diff --git a/Assets/GameFlowManager.cs b/Assets/GameFlowManager.cs index a65382d..a688d84 100644 --- a/Assets/GameFlowManager.cs +++ b/Assets/GameFlowManager.cs @@ -1,5 +1,6 @@ using UnityEngine; using UnityEngine.InputSystem; +using UnityEngine.SceneManagement; //Could be a singleton public class GameFlowManager : MonoBehaviour { @@ -11,6 +12,7 @@ public class GameFlowManager : MonoBehaviour { public bool Paused { get; private set; } = true; public BaseState CurrentState { get; private set; } = null!; bool lastStartButton; + bool lastAcceptButton; #region Unity Messages void Awake() => CurrentState = new StartFlowState(this); @@ -28,17 +30,20 @@ public class GameFlowManager : MonoBehaviour { #region Inputs public void OnStart(InputAction.CallbackContext ctx) { - //feels pretty redundant ^^' - bool newValue = ctx.ReadValueAsButton(); - bool wasJustPressed = !lastStartButton && newValue; - lastStartButton = newValue; - - if (!wasJustPressed) + if (!ctx.WasPressedThisFrame(ref lastStartButton)) return; if (CurrentState is StartFlowState) SwitchState(new GameplayFlowState(this)); } + + public void OnAccept(InputAction.CallbackContext ctx) { + if (!ctx.WasPressedThisFrame(ref lastAcceptButton)) + return; + + if (CurrentState is DeadFlowState deadState) + deadState.ReloadGame(); + } #endregion #region States @@ -92,9 +97,14 @@ public class GameFlowManager : MonoBehaviour { public override void EnterState() { base.EnterState(); - Debug.Log("You died!"); + Debug.Log("You died!\nPress Accept to restart!"); gameFlowManager.SetPause(true); } + + public void ReloadGame() { + Debug.Log("Reloading scene..."); + SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); + } } #endregion } \ No newline at end of file diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 15bc654..6667f23 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -408,7 +408,7 @@ PrefabInstance: m_Modifications: - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.size - value: 15 + value: 16 objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_ActionId @@ -418,6 +418,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_ActionId value: 01a06960-a379-49e3-9d58-9b7c8effcb3d objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_ActionId + value: 65aa4e67-f805-47b9-adc0-444ca0e0bec8 + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_ActionName value: Player/SwitchMinion[/Keyboard/q,/Keyboard/e,/XInputControllerWindows/leftShoulder,/XInputControllerWindows/rightShoulder] @@ -426,6 +430,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_ActionName value: Player/Start[/XInputControllerWindows/start,/Keyboard/enter] objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_ActionName + value: Player/Accept[/XInputControllerWindows/buttonSouth,/XInputControllerWindows/start,/Keyboard/enter] + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.size value: 1 @@ -434,6 +442,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.size value: 1 objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.data[0].m_Mode value: 0 @@ -442,6 +454,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.data[0].m_Mode value: 0 objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 0 + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.data[0].m_Target value: @@ -450,6 +466,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 1359990806} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1359990806} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.data[0].m_CallState value: 2 @@ -458,6 +478,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.data[0].m_CallState value: 2 objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: ChangeSelectedIcon @@ -466,6 +490,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: OnStart objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OnAccept + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName value: MinionBar, Assembly-CSharp @@ -474,6 +502,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName value: GameFlowManager, Assembly-CSharp objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: GameFlowManager, Assembly-CSharp + objectReference: {fileID: 0} - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: m_ActionEvents.Array.data[13].m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName value: UnityEngine.Object, UnityEngine @@ -482,6 +514,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[14].m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} + - target: {fileID: 1214567908930553477, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} + propertyPath: m_ActionEvents.Array.data[15].m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} - target: {fileID: 1214567908930553592, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: gameFlowManager value: diff --git a/Assets/Scripts/AIEntity.cs b/Assets/Scripts/AIEntity.cs index 81e0ab6..db0b678 100644 --- a/Assets/Scripts/AIEntity.cs +++ b/Assets/Scripts/AIEntity.cs @@ -2,11 +2,12 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Serialization; public class AIEntity : Entity { - [SerializeField] AIStats stats = null!; - public string ennemyName {get; protected set; } + [FormerlySerializedAs("stats")] [SerializeField] AIStats AIStats = null!; + public string? ennemyName {get; protected set; } abstract class BaseStateAI : BaseState{ protected AIEntity entity; @@ -59,7 +60,7 @@ public class AIEntity : Entity if(distance < lastDist){ lastDist = distance; chosenEntity = other; - if(lastDist <= entity.stats.closeEnough)break; + if(lastDist <= entity.AIStats.closeEnough)break; } } } diff --git a/Assets/Scripts/Gladiator.cs b/Assets/Scripts/Gladiator.cs index 628a1d7..e7097fd 100644 --- a/Assets/Scripts/Gladiator.cs +++ b/Assets/Scripts/Gladiator.cs @@ -13,8 +13,8 @@ public class Gladiator : AIEntity } // Update is called once per frame - void Update() + protected override void Update() { - + base.Update(); } } diff --git a/Assets/Scripts/Monster.cs b/Assets/Scripts/Monster.cs index 0e3bf00..b636acd 100644 --- a/Assets/Scripts/Monster.cs +++ b/Assets/Scripts/Monster.cs @@ -19,8 +19,10 @@ public class Monster : AIEntity } // Update is called once per frame - void Update() + protected override void Update() { + base.Update(); + if(IsInAttackRange()){ if(attackTimer >= attackCooldown){ Attack(); diff --git a/Assets/Scripts/PlayerMovement.cs b/Assets/Scripts/PlayerMovement.cs index 431f005..21dc09f 100644 --- a/Assets/Scripts/PlayerMovement.cs +++ b/Assets/Scripts/PlayerMovement.cs @@ -58,12 +58,7 @@ public class PlayerMovement : MonoBehaviour { } public void OnJump(InputAction.CallbackContext ctx) { - //feels pretty redundant ^^' - bool newValue = ctx.ReadValueAsButton(); - bool wasJustPressed = !lastJumpButton && newValue; - lastJumpButton = newValue; - - if (!wasJustPressed) + if (!ctx.WasPressedThisFrame(ref lastJumpButton)) return; if (gameFlowManager.Paused || safeZone == null) diff --git a/Assets/Scripts/Utils.cs b/Assets/Scripts/Utils.cs new file mode 100644 index 0000000..32f7c6b --- /dev/null +++ b/Assets/Scripts/Utils.cs @@ -0,0 +1,11 @@ +using UnityEngine.InputSystem; + +public static class Utils { + public static bool WasPressedThisFrame(this InputAction.CallbackContext ctx, ref bool lastValue) { + bool newValue = ctx.ReadValueAsButton(); + bool wasJustPressed = !lastValue && newValue; + lastValue = newValue; + + return wasJustPressed; + } +} \ No newline at end of file diff --git a/Assets/Scripts/Utils.cs.meta b/Assets/Scripts/Utils.cs.meta new file mode 100644 index 0000000..a11fcc2 --- /dev/null +++ b/Assets/Scripts/Utils.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1e5065f064a94fed9f3cc40edc9c60af +timeCreated: 1648920968 \ No newline at end of file diff --git a/Assets/Settings/ConjureLudumDare50.inputactions b/Assets/Settings/ConjureLudumDare50.inputactions index 1f0a6b1..7f85a73 100644 --- a/Assets/Settings/ConjureLudumDare50.inputactions +++ b/Assets/Settings/ConjureLudumDare50.inputactions @@ -49,6 +49,15 @@ "processors": "", "interactions": "", "initialStateCheck": false + }, + { + "name": "Accept", + "type": "Button", + "id": "65aa4e67-f805-47b9-adc0-444ca0e0bec8", + "expectedControlType": "Button", + "processors": "", + "interactions": "", + "initialStateCheck": false } ], "bindings": [ @@ -315,6 +324,39 @@ "action": "Start", "isComposite": false, "isPartOfComposite": false + }, + { + "name": "", + "id": "6264d8cf-a124-4ae2-a851-5ce21b5b0306", + "path": "/buttonSouth", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Accept", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "23fc3eaa-8abb-4c1a-b706-4dd2c2e2b760", + "path": "/start", + "interactions": "", + "processors": "", + "groups": "Gamepad", + "action": "Accept", + "isComposite": false, + "isPartOfComposite": false + }, + { + "name": "", + "id": "4ce4b7b9-060f-4582-ae33-ac536c61a411", + "path": "/enter", + "interactions": "", + "processors": "", + "groups": "Keyboard&Mouse", + "action": "Accept", + "isComposite": false, + "isPartOfComposite": false } ] },