diff --git a/RunningLateGame/Assets/Scenes/Playgrounds/Playground.unity b/RunningLateGame/Assets/Scenes/Playgrounds/Playground.unity index ed3852a..b74b511 100644 --- a/RunningLateGame/Assets/Scenes/Playgrounds/Playground.unity +++ b/RunningLateGame/Assets/Scenes/Playgrounds/Playground.unity @@ -130,6 +130,11 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 0} m_Modifications: + - target: {fileID: 974238578668270704, guid: c708a3b79cd542b42bbfedb17e213bc1, + type: 3} + propertyPath: m_Layer + value: 6 + objectReference: {fileID: 0} - target: {fileID: 2119775930974504096, guid: c708a3b79cd542b42bbfedb17e213bc1, type: 3} propertyPath: m_LocalPosition.x @@ -205,6 +210,11 @@ PrefabInstance: propertyPath: m_BackGroundColor.r value: 0 objectReference: {fileID: 0} + - target: {fileID: 5542111180780342642, guid: c708a3b79cd542b42bbfedb17e213bc1, + type: 3} + propertyPath: m_TagString + value: MainCamera + objectReference: {fileID: 0} - target: {fileID: 8047161636021232021, guid: c708a3b79cd542b42bbfedb17e213bc1, type: 3} propertyPath: m_Name @@ -6421,6 +6431,134 @@ Transform: m_Children: [] m_Father: {fileID: 596429548} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &438254293 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 438254297} + - component: {fileID: 438254296} + - component: {fileID: 438254294} + m_Layer: 0 + m_Name: Menu Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &438254294 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438254293} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!20 &438254296 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438254293} + m_Enabled: 0 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 41 + orthographic: 0 + orthographic size: 5 + m_Depth: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &438254297 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 438254293} + serializedVersion: 2 + m_LocalRotation: {x: 0.18497393, y: 0.31016016, z: -0.06165812, w: 0.93047494} + m_LocalPosition: {x: -29.02, y: 17.25, z: -50.76} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 22.487, y: 36.87, z: 0} --- !u!1 &465465103 GameObject: m_ObjectHideFlags: 0 @@ -7636,7 +7774,7 @@ GameObject: - component: {fileID: 618797800} - component: {fileID: 618797799} m_Layer: 5 - m_Name: Interaction Prompt Overlay + m_Name: Heads Up Display m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -7656,7 +7794,7 @@ MonoBehaviour: m_EditorClassIdentifier: m_PanelSettings: {fileID: 11400000, guid: 21896e34ffd76694aa03bd08a51762a9, type: 2} m_ParentUI: {fileID: 0} - sourceAsset: {fileID: 9197481963319205126, guid: 5ecae982f651ff6438bbaa95ba0362e1, + sourceAsset: {fileID: 9197481963319205126, guid: 61a631e3bab018249a7b4e91108bfde2, type: 3} m_SortingOrder: 0 --- !u!4 &618797800 @@ -7839,7 +7977,7 @@ Mesh: offset: 0 size: 0 path: ---- !u!1 &917153437 +--- !u!1 &785883830 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -7847,48 +7985,61 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 917153439} - - component: {fileID: 917153438} + - component: {fileID: 785883831} + - component: {fileID: 785883832} + - component: {fileID: 785883833} m_Layer: 0 - m_Name: Audio Manager + m_Name: Options Screen m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &917153438 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 917153437} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 723a7675db014cb3aca02f49d069e931, type: 3} - m_Name: - m_EditorClassIdentifier: - musicSource: {fileID: 0} - musicSourceDefaultVolume: 0.6 - sfxSource: {fileID: 0} - sfxSourceDefaultVolume: 0.6 - menuButtonClick: {fileID: 0} - menuButtonHover: {fileID: 0} ---- !u!4 &917153439 + m_IsActive: 0 +--- !u!4 &785883831 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 917153437} + m_GameObject: {fileID: 785883830} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -16.463919, y: 4.84284, z: -19.970129} + 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_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 1798850120} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &785883832 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785883830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PanelSettings: {fileID: 11400000, guid: 21896e34ffd76694aa03bd08a51762a9, type: 2} + m_ParentUI: {fileID: 0} + sourceAsset: {fileID: 9197481963319205126, guid: 5eba6600eb918b44abae54cd21582a4b, + type: 3} + m_SortingOrder: 0 +--- !u!114 &785883833 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 785883830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81b14085a75c30f4fb71c2f8c4429547, type: 3} + m_Name: + m_EditorClassIdentifier: + associatedState: 2 --- !u!1 &1006498776 GameObject: m_ObjectHideFlags: 0 @@ -9689,6 +9840,55 @@ Transform: m_Children: [] m_Father: {fileID: 1060921176} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1226619922 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1226619923} + - component: {fileID: 1226619924} + m_Layer: 5 + m_Name: Interaction Prompt Overlay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1226619923 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1226619922} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 16.463919, y: -4.84284, z: 19.970129} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1798850120} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1226619924 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1226619922} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PanelSettings: {fileID: 11400000, guid: 21896e34ffd76694aa03bd08a51762a9, type: 2} + m_ParentUI: {fileID: 0} + sourceAsset: {fileID: 9197481963319205126, guid: 5ecae982f651ff6438bbaa95ba0362e1, + type: 3} + m_SortingOrder: 0 --- !u!43 &1251389302 Mesh: m_ObjectHideFlags: 0 @@ -11177,6 +11377,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9f6e55d96ef14d65979aabb99a0d5f1a, type: 3} m_Name: m_EditorClassIdentifier: + headsUpDisplay: {fileID: 618797798} --- !u!4 &1766444915 Transform: m_ObjectHideFlags: 0 @@ -11569,6 +11770,7 @@ GameObject: m_Component: - component: {fileID: 1794617895} - component: {fileID: 1794617896} + - component: {fileID: 1794617897} m_Layer: 0 m_Name: Main Menu Screen m_TagString: Untagged @@ -11608,6 +11810,19 @@ MonoBehaviour: sourceAsset: {fileID: 9197481963319205126, guid: 2054bc5e9ca6dd940a012c27265f7d43, type: 3} m_SortingOrder: 0 +--- !u!114 &1794617897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1794617894} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f7d3d52857e7418c805c0237b4c86485, type: 3} + m_Name: + m_EditorClassIdentifier: + associatedState: 1 --- !u!1 &1798850119 GameObject: m_ObjectHideFlags: 0 @@ -11619,7 +11834,7 @@ GameObject: - component: {fileID: 1798850120} m_Layer: 0 m_Name: Interfaces - m_TagString: Untagged + m_TagString: Interfaces m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -11638,7 +11853,9 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 618797800} + - {fileID: 1226619923} - {fileID: 1794617895} + - {fileID: 785883831} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1805235905 @@ -12345,8 +12562,8 @@ SceneRoots: m_ObjectHideFlags: 0 m_Roots: - {fileID: 1766444915} - - {fileID: 917153439} - {fileID: 1798850120} + - {fileID: 438254297} - {fileID: 567431775} - {fileID: 1656492132} - {fileID: 1120089} diff --git a/RunningLateGame/Assets/Scripts/GameManager.cs b/RunningLateGame/Assets/Scripts/GameManager.cs index f586248..226d779 100644 --- a/RunningLateGame/Assets/Scripts/GameManager.cs +++ b/RunningLateGame/Assets/Scripts/GameManager.cs @@ -4,7 +4,9 @@ * description: game manager singleton for a single source of truth state management */ +using System; using UnityEngine; +using UnityEngine.InputSystem; /// /// singleton class for managing the game state as a single source of truth @@ -17,11 +19,11 @@ public class GameManager : MonoBehaviour public enum DisplayState { Game, - ScreenMainMenu, // done - ScreenOptionsMenu, // done - OverlayPauseMenu, // TODO - OverlayCompleteUnderTimeMenu, // TODO - OverlayFailedOverTimeMenu, // TODO + ScreenMainMenu, + ScreenOptionsMenu, + OverlayPauseMenu, + OverlayCompleteUnderTimeMenu, + OverlayFailedOverTimeMenu, UnassociatedState } @@ -30,6 +32,11 @@ public enum DisplayState /// public static GameManager Instance; + /// + /// property to store the heads-up display game object + /// + [SerializeField] private GameObject headsUpDisplay; + /// /// the current state of the game /// @@ -40,9 +47,11 @@ public enum DisplayState /// public bool Paused => _state != DisplayState.Game; + /// /// function to set doesn't destroy on load and checks for multiple instances /// + /// thrown if a Heads-Up Display game object isn't set in the properties private void Awake() { // check if instance hasn't been set yet @@ -63,6 +72,10 @@ private void Awake() // destroy the new instance if it's not the singleton instance Destroy(gameObject); } + + // check if the heads-up display is set + if (headsUpDisplay == null) + throw new NullReferenceException("GameManager: heads-up display is not set in game manager properties"); } /// @@ -71,7 +84,10 @@ private void Awake() // /// generic exception it couldn't verify a safe state when starting the game private void Start() { + // set to the main menu state SetDisplayState(DisplayState.ScreenMainMenu); + // pause the game + PauseGameHelper(DisplayState.ScreenMainMenu); } /// @@ -113,6 +129,15 @@ private void PauseGameHelper(DisplayState incomingState) Debug.Log("GameManager.PauseGameHelper: freeing cursor for main menu"); Cursor.lockState = CursorLockMode.None; Cursor.visible = true; + + Debug.Log(GameObject.FindGameObjectWithTag("Player")); + var playerInput = GameObject.Find("PlayerArmature")?.GetComponent(); + Debug.Log($"playerController={playerInput}"); + if (playerInput != null) + { + Debug.Log("GameManager.PauseGameHelper: sentencing player input/control to a ball and chain boowomp"); + playerInput.enabled = false; + } } // if the current and incoming states are the same, then we shouldn't do anything, @@ -126,9 +151,9 @@ private void PauseGameHelper(DisplayState incomingState) // hide any menu that is currently showing HideMenuHelper(); - // get all child menus in the "Menus" parent object - foreach (var menuParent in GameObject.FindGameObjectsWithTag("Interfaces")) - foreach (Transform menu in menuParent.transform) + // get all child interfaces in the "Interfaces" parent object + foreach (var interfaces in GameObject.FindGameObjectsWithTag("Interfaces")) + foreach (Transform menu in interfaces.transform) { // show the menu based on the incoming state // get the associated state of the menu @@ -166,13 +191,19 @@ private void ResumeGameHelper(DisplayState incomingState) } // else, we should resume the game + Debug.Log("GameManager.ResumeGameHelper: resuming game"); Time.timeScale = 1f; Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; - Debug.Log("GameManager.ResumeGameHelper: resuming game"); // hide any menu that is currently showing HideMenuHelper(); + + // free the character controller + var playerInput = GameObject.Find("PlayerArmature")?.GetComponent(); + if (playerInput == null) return; + Debug.Log("GameManager.ResumeGameHelper: enabling player input/control"); + playerInput.enabled = true; } /// @@ -203,11 +234,23 @@ public void SetDisplayState(DisplayState displayState) // if we're transitioning into gameplay or into the main menu, // we'll need a post-step to enable the correct camera if (displayState is not (DisplayState.Game or DisplayState.ScreenMainMenu)) + { + Debug.Log($"GameManager.SetDisplayState({displayState}): skipping post-step"); return; + } - // get all MainCamera-tagged objects and disable them + // disabling (1): disable the 'Menu Camera' camera + var menuCameraObject = GameObject.Find("Menu Camera")?.GetComponent(); + if (menuCameraObject != null) + { + Debug.Log("GameManager.SetDisplayState: disabling 'Menu Camera' camera"); + menuCameraObject.enabled = false; + } + + // disabling (2): get all MainCamera-tagged objects and disable them foreach (var mainCameraObject in GameObject.FindGameObjectsWithTag("MainCamera")) { + Debug.Log($"GameManager.SetDisplayState: disabling 'MainCamera' camera {mainCameraObject}"); // find the camera component var potentialCamera = mainCameraObject.GetComponent(); // if the object doesn't have a camera component, skip it @@ -224,7 +267,7 @@ public void SetDisplayState(DisplayState displayState) switch (displayState) { // if we're transitioning to the main menu state, - // change the camera to the main menu camera under the "Menus"-tagged parent object + // change the camera to the main menu camera named very specifically such case DisplayState.ScreenMainMenu: Debug.Log("GameManager.SetDisplayState: targeting 'Menu Camera' camera"); targetCameraObject = GameObject.Find("Menu Camera"); @@ -237,14 +280,11 @@ public void SetDisplayState(DisplayState displayState) break; } - // find the camera component - if (targetCameraObject == null) return; - var targetCamera = targetCameraObject.GetComponent(); + // find the camera component and enable it + var targetCamera = targetCameraObject?.GetComponent(); if (targetCamera == null) return; - - // enable the target camera - Debug.Log("GameManager.SetDisplayState: enabling target camera"); targetCamera.enabled = true; + Debug.Log("GameManager.SetDisplayState: enabled target camera"); } /// diff --git a/RunningLateGame/Assets/Scripts/ScreenMainMenu.cs b/RunningLateGame/Assets/Scripts/ScreenMainMenu.cs index 51e8c14..b6d46de 100644 --- a/RunningLateGame/Assets/Scripts/ScreenMainMenu.cs +++ b/RunningLateGame/Assets/Scripts/ScreenMainMenu.cs @@ -59,7 +59,7 @@ public override void OnEnable() /// private void OptionStartGame() { - // start game + Debug.Log("ScreenMainMenu.OptionStartGame: clicked, starting game"); Game.NewGame(); } @@ -69,7 +69,7 @@ private void OptionStartGame() /// private void OptionShowOptions() { - // show the option menu + Debug.Log("ScreenMainMenu.OptionShowOptions: clicked, showing options menu"); Game.SetDisplayState(GameManager.DisplayState.ScreenOptionsMenu); } @@ -79,8 +79,7 @@ private void OptionShowOptions() /// private void OptionQuitGame() { - // quit game - Debug.Log("MainMenu.OptionQuitGame: exiting"); + Debug.Log("ScreenMainMenu.OptionQuitGame: clicked, quitting game"); Game.Quit(); } } \ No newline at end of file diff --git a/RunningLateGame/Assets/UI Toolkit/Interfaces/Common.uss b/RunningLateGame/Assets/UI Toolkit/Interfaces/Common.uss index 056a28e..74ff0bc 100644 --- a/RunningLateGame/Assets/UI Toolkit/Interfaces/Common.uss +++ b/RunningLateGame/Assets/UI Toolkit/Interfaces/Common.uss @@ -5,7 +5,6 @@ #Root { Button { background-color: rgb(193, 39, 45); - width: 40%; height: 25%; color: rgb(255, 255, 255); font-size: 24px; @@ -19,4 +18,13 @@ Button { border-right-color: rgba(0, 0, 0, 0); border-top-color: rgba(0, 0, 0, 0); border-bottom-color: rgba(0, 0, 0, 0); + min-width: 40%; +} + +Slider { + color: rgb(193, 39, 45); + font-size: 24px; +} + +Slider > VisualElemement { } diff --git a/RunningLateGame/Assets/UI Toolkit/Interfaces/OverlayHUD.uxml b/RunningLateGame/Assets/UI Toolkit/Interfaces/OverlayHUD.uxml index e91ec59..e278e66 100644 --- a/RunningLateGame/Assets/UI Toolkit/Interfaces/OverlayHUD.uxml +++ b/RunningLateGame/Assets/UI Toolkit/Interfaces/OverlayHUD.uxml @@ -1,8 +1,9 @@ +