diff --git a/Assets/GameFlowManager.cs b/Assets/GameFlowManager.cs index a688d84..6dbf118 100644 --- a/Assets/GameFlowManager.cs +++ b/Assets/GameFlowManager.cs @@ -4,107 +4,115 @@ using UnityEngine.SceneManagement; //Could be a singleton public class GameFlowManager : MonoBehaviour { - /// - /// True if time is frozen (Start, Pause Menu, Dead) - /// - /// Could be renamed appropriately - [field: SerializeField] - public bool Paused { get; private set; } = true; - public BaseState CurrentState { get; private set; } = null!; - bool lastStartButton; - bool lastAcceptButton; + /// + /// True if time is frozen (Start, Pause Menu, Dead) + /// + /// Could be renamed appropriately + [field: SerializeField] + public bool Paused { get; private set; } = true; + public BaseState CurrentState { get; private set; } = null!; + bool lastStartButton; + bool lastAcceptButton; + [SerializeField] GameObject startPrompt; - #region Unity Messages - void Awake() => CurrentState = new StartFlowState(this); + #region Unity Messages + void Awake() { + CurrentState = new StartFlowState(this); + if (startPrompt != null) { + startPrompt.SetActive(true); + } + } - void Start() => CurrentState.EnterState(); - #endregion + void Start() => CurrentState.EnterState(); + #endregion - void SetPause(bool value) { - Debug.Log($"Setting pause to {value}"); - Paused = value; - Time.timeScale = value ? 0f : 1f; - } + void SetPause(bool value) { + Debug.Log($"Setting pause to {value}"); + Paused = value; + Time.timeScale = value ? 0f : 1f; + } - public void GameOver() => SwitchState(new DeadFlowState(this)); + public void GameOver() => SwitchState(new DeadFlowState(this)); - #region Inputs - public void OnStart(InputAction.CallbackContext ctx) { - if (!ctx.WasPressedThisFrame(ref lastStartButton)) - return; + #region Inputs + public void OnStart(InputAction.CallbackContext ctx) { + 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 StartFlowState) { + startPrompt.SetActive(false); + SwitchState(new GameplayFlowState(this)); + } + } - if (CurrentState is DeadFlowState deadState) - deadState.ReloadGame(); - } - #endregion + public void OnAccept(InputAction.CallbackContext ctx) { + if (!ctx.WasPressedThisFrame(ref lastAcceptButton)) + return; - #region States - void SwitchState(BaseState newState) { - CurrentState.LeaveState(); - CurrentState = newState; - newState.EnterState(); - } - - abstract class GameFlowState : BaseState { - readonly protected GameFlowManager gameFlowManager; - - protected GameFlowState(GameFlowManager gameFlowManager) { - this.gameFlowManager = gameFlowManager; - } - } + if (CurrentState is DeadFlowState deadState) + deadState.ReloadGame(); + } + #endregion - class StartFlowState : GameFlowState { - public StartFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) {} - - public override void EnterState() { - base.EnterState(); - - Debug.Log("Press Start to start...!"); - gameFlowManager.SetPause(true); - } + #region States + void SwitchState(BaseState newState) { + CurrentState.LeaveState(); + CurrentState = newState; + newState.EnterState(); + } - public override void LeaveState() { - Debug.Log("Let the games begin!!"); - } - } - class GameplayFlowState : GameFlowState { - public GameplayFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) {} - - public override void EnterState() { - base.EnterState(); - gameFlowManager.SetPause(false); - } - } - class PauseMenuFlowState : GameFlowState { - public PauseMenuFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) {} - - public override void EnterState() { - base.EnterState(); - gameFlowManager.SetPause(true); - } - } - class DeadFlowState : GameFlowState { - public DeadFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) {} - - public override void EnterState() { - base.EnterState(); - - Debug.Log("You died!\nPress Accept to restart!"); - gameFlowManager.SetPause(true); - } + abstract class GameFlowState : BaseState { + readonly protected GameFlowManager gameFlowManager; - public void ReloadGame() { - Debug.Log("Reloading scene..."); - SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); - } - } - #endregion + protected GameFlowState(GameFlowManager gameFlowManager) { + this.gameFlowManager = gameFlowManager; + } + } + + class StartFlowState : GameFlowState { + public StartFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) { } + + public override void EnterState() { + base.EnterState(); + + Debug.Log("Press Start to start...!"); + gameFlowManager.SetPause(true); + } + + public override void LeaveState() { + Debug.Log("Let the games begin!!"); + } + } + class GameplayFlowState : GameFlowState { + public GameplayFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) { } + + public override void EnterState() { + base.EnterState(); + gameFlowManager.SetPause(false); + } + } + class PauseMenuFlowState : GameFlowState { + public PauseMenuFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) { } + + public override void EnterState() { + base.EnterState(); + gameFlowManager.SetPause(true); + } + } + class DeadFlowState : GameFlowState { + public DeadFlowState(GameFlowManager gameFlowManager) : base(gameFlowManager) { } + + public override void EnterState() { + base.EnterState(); + + 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/Prefabs/UI Canvas.prefab b/Assets/Prefabs/UI Canvas.prefab index d115d5f..e1ca528 100644 --- a/Assets/Prefabs/UI Canvas.prefab +++ b/Assets/Prefabs/UI Canvas.prefab @@ -1,5 +1,156 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &763564871199756608 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7304592252411488326} + m_Layer: 5 + m_Name: Safe Zone Prompt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7304592252411488326 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 763564871199756608} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 6820018694670671316} + m_Father: {fileID: 1878107874060227351} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &939250288673996249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6820018694670671316} + - component: {fileID: 2559709786450296225} + - component: {fileID: 6319861665145814892} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6820018694670671316 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 939250288673996249} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7304592252411488326} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 500, y: 100} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &2559709786450296225 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 939250288673996249} + m_CullTransparentMesh: 1 +--- !u!114 &6319861665145814892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 939250288673996249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 30 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 3 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'A : Safe zone' +--- !u!1 &1844274959428875625 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6917216836479509094} + m_Layer: 5 + m_Name: Start Prompt + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6917216836479509094 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844274959428875625} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 408737556976395859} + m_Father: {fileID: 1878107874060227351} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1878107873570787823 GameObject: m_ObjectHideFlags: 0 @@ -124,11 +275,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 81a29b049c6380f4abb3c18ed121efcd, type: 3} m_Name: m_EditorClassIdentifier: - minionTypes: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} minionIconPrefab: {fileID: 1979632678310270257, guid: 2fee1ea5c97c5a04bb2c5f1f685fc92e, type: 3} --- !u!114 &1878107873739935075 MonoBehaviour: @@ -188,6 +334,8 @@ RectTransform: m_Children: - {fileID: 1878107874314509258} - {fileID: 1878107873739935084} + - {fileID: 6917216836479509094} + - {fileID: 7304592252411488326} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -434,3 +582,82 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2910275079998420734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 408737556976395859} + - component: {fileID: 5431213429284538757} + - component: {fileID: 7753986740047806469} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &408737556976395859 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2910275079998420734} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6917216836479509094} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 500, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5431213429284538757 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2910275079998420734} + m_CullTransparentMesh: 1 +--- !u!114 &7753986740047806469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2910275079998420734} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 5 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: PRESS START TO START diff --git a/Assets/Scenes/YannTest.unity b/Assets/Scenes/YannTest.unity index fce3105..eb59be5 100644 --- a/Assets/Scenes/YannTest.unity +++ b/Assets/Scenes/YannTest.unity @@ -287,6 +287,12 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: k__BackingField: 1 + startPrompt: {fileID: 1551362088} +--- !u!1 &1408196689 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 763564871199756608, guid: e1dac4f28fe75a547b919b7aa8240fed, type: 3} + m_PrefabInstance: {fileID: 1551362086} + m_PrefabAsset: {fileID: 0} --- !u!114 &1464970062 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1878107874314509256, guid: e1dac4f28fe75a547b919b7aa8240fed, type: 3} @@ -414,6 +420,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 81a29b049c6380f4abb3c18ed121efcd, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1551362088 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1844274959428875625, guid: e1dac4f28fe75a547b919b7aa8240fed, type: 3} + m_PrefabInstance: {fileID: 1551362086} + m_PrefabAsset: {fileID: 0} --- !u!1 &1557338110 stripped GameObject: m_CorrespondingSourceObject: {fileID: 3328484984159178892, guid: f7f5d2b1228d13f4d9015073aced3e81, type: 3} @@ -574,6 +585,10 @@ PrefabInstance: propertyPath: m_ActionEvents.Array.data[16].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: safeZonePrompt + value: + objectReference: {fileID: 1408196689} - target: {fileID: 1214567908930553592, guid: 3e0aae8cda56aef44af9598dc5471020, type: 3} propertyPath: gameFlowManager value: diff --git a/Assets/Scripts/PlayerMovement.cs b/Assets/Scripts/PlayerMovement.cs index d59fef2..3a53baf 100644 --- a/Assets/Scripts/PlayerMovement.cs +++ b/Assets/Scripts/PlayerMovement.cs @@ -13,6 +13,7 @@ public class PlayerMovement : MonoBehaviour { [field: Required] Rigidbody2D rb = null!; + [SerializeField] GameObject safeZonePrompt; Vector2 moveDirection; BaseState currentState = null!; @@ -25,6 +26,7 @@ public class PlayerMovement : MonoBehaviour { void Awake() { rb = GetComponent(); currentState = new ImmobileMovementState(this); + safeZonePrompt.SetActive(false); } void Start() => currentState.EnterState(); @@ -41,6 +43,12 @@ public class PlayerMovement : MonoBehaviour { if (gameFlowManager.Paused) return; + if (safeZone != null && safeZone.IsInSafeZone) { + safeZonePrompt.SetActive(false); + } else { + safeZonePrompt.SetActive(true); + } + if (currentState.FixedUpdateState() is {} newState) SwitchState(newState); } diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 82ab0f5..13481ea 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -5,6 +5,9 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: + - enabled: 1 + path: Assets/Scenes/Main Menu.unity + guid: 68bb79cf26688ab46a0c4c582d1cb315 - enabled: 1 path: Assets/Scenes/SampleScene.unity guid: 2cda990e2423bbf4892e6590ba056729