From b7dd96905b70cedcfc89183c9c52e3ed9d371e09 Mon Sep 17 00:00:00 2001 From: Julia Butenhoff Date: Fri, 19 Nov 2021 14:06:59 -0600 Subject: [PATCH 1/4] Player Camera Enabled and Movement Restored - Players Gain Local Camera after cutscene - Players Movement is disabled until after cutscene --- .../Prefabs/Game/Managers/GameManager.prefab | 31 +++++++++++ Assets/Prefabs/King/KingPrefab.prefab | 2 +- Assets/Prefabs/Player/PlayerPrefab.prefab | 4 +- Assets/Scripts/Network/Game/GameHandler.cs | 52 ++++++++++++++++--- Assets/Scripts/Network/Game/SpawnManager.cs | 1 - .../Scripts/PlayerScripts/PlayerMovement.cs | 2 +- Assets/Scripts/UI/Lobby/LobbyUI.cs | 1 - ProjectSettings/EditorBuildSettings.asset | 6 --- UserSettings/EditorUserSettings.asset | 16 +++--- 9 files changed, 88 insertions(+), 27 deletions(-) diff --git a/Assets/Prefabs/Game/Managers/GameManager.prefab b/Assets/Prefabs/Game/Managers/GameManager.prefab index f59f180..30a757d 100644 --- a/Assets/Prefabs/Game/Managers/GameManager.prefab +++ b/Assets/Prefabs/Game/Managers/GameManager.prefab @@ -9,6 +9,8 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1043847408052489032} + - component: {fileID: 564767176013578446} + - component: {fileID: 292422149206273730} m_Layer: 0 m_Name: GameManager m_TagString: Untagged @@ -30,3 +32,32 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &564767176013578446 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043847408052489033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + NetworkInstanceId: 0 + PrefabHash: 13494567273885427380 + PrefabHashGenerator: GameManager + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 +--- !u!114 &292422149206273730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043847408052489033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 326af4e8fa7869240a41c45c889fa8f8, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Prefabs/King/KingPrefab.prefab b/Assets/Prefabs/King/KingPrefab.prefab index 9a02313..db27c1e 100644 --- a/Assets/Prefabs/King/KingPrefab.prefab +++ b/Assets/Prefabs/King/KingPrefab.prefab @@ -248,7 +248,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &6649144231394212727 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Player/PlayerPrefab.prefab b/Assets/Prefabs/Player/PlayerPrefab.prefab index e92302e..d4eb8c6 100644 --- a/Assets/Prefabs/Player/PlayerPrefab.prefab +++ b/Assets/Prefabs/Player/PlayerPrefab.prefab @@ -128,7 +128,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4814433541978696327} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 22ae0d31c49624d4fb9990f2f5f72fd9, type: 3} m_Name: @@ -267,7 +267,7 @@ CharacterController: m_GameObject: {fileID: 4814433541978696327} m_Material: {fileID: 0} m_IsTrigger: 0 - m_Enabled: 1 + m_Enabled: 0 serializedVersion: 2 m_Height: 2 m_Radius: 0.5 diff --git a/Assets/Scripts/Network/Game/GameHandler.cs b/Assets/Scripts/Network/Game/GameHandler.cs index d3ba523..4e61f87 100644 --- a/Assets/Scripts/Network/Game/GameHandler.cs +++ b/Assets/Scripts/Network/Game/GameHandler.cs @@ -1,18 +1,56 @@ using System.Collections; using System.Collections.Generic; +using MLAPI; using UnityEngine; -public class GameHandler : MonoBehaviour +public class GameHandler : NetworkBehaviour { // Start is called before the first frame update - void Start() - { - // Perform the intro cutscene camera movement + void Start() { + StartCoroutine(introCutscene()); + } - // Do a 3.2.1 countdown or ask team what we want to do here + IEnumerator introCutscene() { + // Get the time to complete the intro camera fly through + float cameraLerpTime = Camera.main.GetComponent().playOnAwakeTime; - // Re-enable the character controllers and disable the capsulecollider, and remove the main camera, and activate the local cameras + // Wait for that many seconds - allows for time to complete the "cutscene" + yield return new WaitForSecondsRealtime(cameraLerpTime); - // Start the game timer + // Remove the main camera and give camera to local players + Camera.main.gameObject.SetActive(false); + + // Get all players in the scene - runners and king + GameObject[] playableCharacters = GameObject.FindGameObjectsWithTag("Player"); + + // Iterate over them and if their network object equals the call to the rpc, enable that camera + GameObject localPlayer = null; + foreach (GameObject character in playableCharacters) { + if (character.GetComponent().OwnerClientId == NetworkManager.Singleton.LocalClientId) { + localPlayer = character; + FindGameObjectInChildWithTag(character, "PlayerCam").SetActive(true); + } + } + + //TODO: Do a 3.2.1 countdown + + // Re-enable the player movement + localPlayer.GetComponentInChildren().enabled = true; + + //TODO: Start the game timer + } + + // Only works for 1st generation children + private static GameObject FindGameObjectInChildWithTag(GameObject parent, string tag) { + Transform t = parent.transform; + + for (int i = 0; i < t.childCount; i++) { + if (t.GetChild(i).gameObject.tag == tag) { + return t.GetChild(i).gameObject; + } + } + + // Couldn't find child with tag + return null; } } diff --git a/Assets/Scripts/Network/Game/SpawnManager.cs b/Assets/Scripts/Network/Game/SpawnManager.cs index 3ab5df4..b80fe37 100644 --- a/Assets/Scripts/Network/Game/SpawnManager.cs +++ b/Assets/Scripts/Network/Game/SpawnManager.cs @@ -21,7 +21,6 @@ public class SpawnManager : NetworkBehaviour { InitSpawnPoints(); if (IsHost) { - Debug.Log("Host spawn"); // Get the player data for the host player if (ServerGameNetPortal.Instance.clientIdToGuid.TryGetValue(NetworkManager.Singleton.LocalClientId, out string clientGuid)) { if (ServerGameNetPortal.Instance.clientData.TryGetValue(clientGuid, out PlayerData playerData)) { diff --git a/Assets/Scripts/PlayerScripts/PlayerMovement.cs b/Assets/Scripts/PlayerScripts/PlayerMovement.cs index 80163da..f0d76d8 100644 --- a/Assets/Scripts/PlayerScripts/PlayerMovement.cs +++ b/Assets/Scripts/PlayerScripts/PlayerMovement.cs @@ -114,7 +114,7 @@ public class PlayerMovement : NetworkBehaviour { // Don't do movement unless this is the local player controlling it // Otherwise we let the server handle moving us - //if (!IsLocalPlayer) { return; } + if (!IsLocalPlayer) { return; } //Controls for camera diff --git a/Assets/Scripts/UI/Lobby/LobbyUI.cs b/Assets/Scripts/UI/Lobby/LobbyUI.cs index 891a660..d850cc0 100644 --- a/Assets/Scripts/UI/Lobby/LobbyUI.cs +++ b/Assets/Scripts/UI/Lobby/LobbyUI.cs @@ -291,7 +291,6 @@ public class LobbyUI : NetworkBehaviour { string[] a3 = a2.Split('<'); // Now split to the first HTML tag after the IP address. string a4 = a3[0]; // Get the substring before the tag. - Debug.Log("External IP Address = " + a4); hostIpAddress.Value = "Host IP: " + a4; } } diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index c1e8301..168f614 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -17,10 +17,4 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/Game-Mountain.unity guid: f6e50dc4cb4a9b2449937a34f68b7e26 - - enabled: 1 - path: Assets/Scenes/Demos/InventorySelection.unity - guid: 087e255255a646a4b895d4c7b60e2e3e - - enabled: 1 - path: Assets/Scenes/Demos/MovementScene.unity - guid: 4282c79fedd3def4fa3c93c0a77f914f m_configObjects: {} diff --git a/UserSettings/EditorUserSettings.asset b/UserSettings/EditorUserSettings.asset index 8f49ba9..70598d5 100644 --- a/UserSettings/EditorUserSettings.asset +++ b/UserSettings/EditorUserSettings.asset @@ -15,25 +15,25 @@ EditorUserSettings: value: 224247031146466f181a033019225303593b17282e3169032e2c1336f1af073be7e933d6ca3f31297717e1351027 flags: 0 RecentlyUsedScenePath-3: - value: 22424703114646680e0b0227036c6f02131b172b282d347e38271427fb + value: 22424703114646680e0b0227036c7b151b180b6505263035233d1221fbd33134e7e422e0e8347129370bfb25 flags: 0 RecentlyUsedScenePath-4: - value: 22424703114646680e0b0227036c7b151b180b6505263035233d1221fbd33134e7e422e0e8347129370bfb25 - flags: 0 - RecentlyUsedScenePath-5: value: 224247031146467c0c03096f3d2c4a1e02161124623d28393930 flags: 0 - RecentlyUsedScenePath-6: + RecentlyUsedScenePath-5: value: 22424703114646680e0b0227036c7b151b180b6505263035233d1221fbd33134e7e422e0e8347129370bfb25 flags: 0 - RecentlyUsedScenePath-7: + RecentlyUsedScenePath-6: value: 22424703114646680e0b0227036c7b151b180b650d262f3d192c0e27d1e33136e7a923e7ee2e26 flags: 0 + RecentlyUsedScenePath-7: + value: 22424703114646680e0b0227036c78111b125507233d28242c20137df7ee3d2cfb + flags: 0 RecentlyUsedScenePath-8: - value: 22424703114646680e0b0227036c6f02131b172b282d347e38271427fb + value: 22424703114646680e0b0227036c78111b125507233d28242c20137df7ee3d2cfb flags: 0 RecentlyUsedScenePath-9: - value: 22424703114646680e0b0227036c78111b125507233d28242c20137df7ee3d2cfb + value: 22424703114646680e0b0227036c6f02131b172b282d347e38271427fb flags: 0 UnityRemoteCompression: value: 337f73 From e6592cc305cbf95cacebee94d6abcbd542048277 Mon Sep 17 00:00:00 2001 From: Julia Butenhoff Date: Mon, 22 Nov 2021 13:28:41 -0600 Subject: [PATCH 2/4] Fixed Runner Collision - Re-enabled the Character Controller --- Assets/Prefabs/Player/PlayerPrefab.prefab | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/Prefabs/Player/PlayerPrefab.prefab b/Assets/Prefabs/Player/PlayerPrefab.prefab index d4eb8c6..bdb2b80 100644 --- a/Assets/Prefabs/Player/PlayerPrefab.prefab +++ b/Assets/Prefabs/Player/PlayerPrefab.prefab @@ -267,7 +267,7 @@ CharacterController: m_GameObject: {fileID: 4814433541978696327} m_Material: {fileID: 0} m_IsTrigger: 0 - m_Enabled: 0 + m_Enabled: 1 serializedVersion: 2 m_Height: 2 m_Radius: 0.5 From df5107a1bcccdce20398dcb50766d5e5a1b1a6d3 Mon Sep 17 00:00:00 2001 From: Julia Butenhoff Date: Mon, 22 Nov 2021 14:22:01 -0600 Subject: [PATCH 3/4] Implemented a 321 coundown --- Assets/Prefabs/Game/CountdownUI.prefab | 424 ++++++++++++++++++ Assets/Prefabs/Game/CountdownUI.prefab.meta | 7 + .../Prefabs/Game/Managers/GameManager.prefab | 1 + Assets/Scenes/Preloader.unity | 4 +- Assets/Scripts/Game/Countdown.cs | 26 ++ Assets/Scripts/Game/Countdown.cs.meta | 11 + Assets/Scripts/Network/Game/GameHandler.cs | 33 +- 7 files changed, 502 insertions(+), 4 deletions(-) create mode 100644 Assets/Prefabs/Game/CountdownUI.prefab create mode 100644 Assets/Prefabs/Game/CountdownUI.prefab.meta create mode 100644 Assets/Scripts/Game/Countdown.cs create mode 100644 Assets/Scripts/Game/Countdown.cs.meta diff --git a/Assets/Prefabs/Game/CountdownUI.prefab b/Assets/Prefabs/Game/CountdownUI.prefab new file mode 100644 index 0000000..6682deb --- /dev/null +++ b/Assets/Prefabs/Game/CountdownUI.prefab @@ -0,0 +1,424 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1867892282630666222 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6417009877132845026} + - component: {fileID: 8809238642654509385} + - component: {fileID: 5611296420692652334} + - component: {fileID: 3343606881463138474} + m_Layer: 0 + m_Name: CountdownUI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6417009877132845026 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867892282630666222} + 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: 1368350684811838438} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8809238642654509385 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867892282630666222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + NetworkInstanceId: 0 + PrefabHash: 5059432775536523144 + PrefabHashGenerator: CountdownUI + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 +--- !u!114 &5611296420692652334 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867892282630666222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ed0e05d6d14d83b45a34df5b51f7d1f0, type: 3} + m_Name: + m_EditorClassIdentifier: + countdown_text: {fileID: 4036068470678574806} +--- !u!114 &3343606881463138474 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1867892282630666222} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + FixedSendsPerSecond: 20 + AssumeSyncedSends: 1 + InterpolatePosition: 1 + SnapDistance: 10 + InterpolateServer: 1 + MinMeters: 0.15 + MinDegrees: 1.5 + ExtrapolatePosition: 0 + MaxSendsToExtrapolate: 5 + Channel: + EnableRange: 0 + EnableNonProvokedResendChecks: 0 + DistanceSendrate: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 500 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &4045458281992580776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1368350684811838438} + - component: {fileID: 3077934989084368704} + - component: {fileID: 6541021586186328247} + - component: {fileID: 163612532843953964} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1368350684811838438 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4045458281992580776} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 9115029077896897212} + m_Father: {fileID: 6417009877132845026} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &3077934989084368704 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4045458281992580776} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6541021586186328247 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4045458281992580776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &163612532843953964 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4045458281992580776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &5580774816364958289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9115029077896897212} + - component: {fileID: 8892102746502135538} + - component: {fileID: 7044762908863183692} + m_Layer: 5 + m_Name: Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9115029077896897212 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5580774816364958289} + 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: 4123995428666408328} + m_Father: {fileID: 1368350684811838438} + m_RootOrder: 0 + 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!222 &8892102746502135538 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5580774816364958289} + m_CullTransparentMesh: 1 +--- !u!114 &7044762908863183692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5580774816364958289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.54901963} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &7620979315548490086 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4123995428666408328} + - component: {fileID: 7246060938894614214} + - component: {fileID: 4036068470678574806} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4123995428666408328 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7620979315548490086} + 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: 9115029077896897212} + 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: 1100, y: 275} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7246060938894614214 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7620979315548490086} + m_CullTransparentMesh: 1 +--- !u!114 &4036068470678574806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7620979315548490086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: Ready? + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 256 + m_fontSizeBase: 256 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/Assets/Prefabs/Game/CountdownUI.prefab.meta b/Assets/Prefabs/Game/CountdownUI.prefab.meta new file mode 100644 index 0000000..bb8a86a --- /dev/null +++ b/Assets/Prefabs/Game/CountdownUI.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7c3682087ff9b234cb9abf6a8fa941b5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Game/Managers/GameManager.prefab b/Assets/Prefabs/Game/Managers/GameManager.prefab index 30a757d..af141f1 100644 --- a/Assets/Prefabs/Game/Managers/GameManager.prefab +++ b/Assets/Prefabs/Game/Managers/GameManager.prefab @@ -61,3 +61,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 326af4e8fa7869240a41c45c889fa8f8, type: 3} m_Name: m_EditorClassIdentifier: + coundownUI: {fileID: 6417009877132845026, guid: 7c3682087ff9b234cb9abf6a8fa941b5, type: 3} diff --git a/Assets/Scenes/Preloader.unity b/Assets/Scenes/Preloader.unity index cfe183a..984ee6a 100644 --- a/Assets/Scenes/Preloader.unity +++ b/Assets/Scenes/Preloader.unity @@ -285,6 +285,8 @@ MonoBehaviour: PlayerPrefab: 0 - Prefab: {fileID: 6649144231394212716, guid: 31aeb41a00441214ca42c9eb5647395e, type: 3} PlayerPrefab: 0 + - Prefab: {fileID: 1867892282630666222, guid: 7c3682087ff9b234cb9abf6a8fa941b5, type: 3} + PlayerPrefab: 0 PlayerPrefabHash: id: 0 CreatePlayerPrefab: 0 @@ -360,8 +362,6 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: maxPlayers: 3 - runnerPrefab: {fileID: 1292213096936070766, guid: a9840baa4cc526b44bfef27c6fea042a, type: 3} - kingPrefab: {fileID: 6649144231394212676, guid: 31aeb41a00441214ca42c9eb5647395e, type: 3} --- !u!114 &1566574284 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/Game/Countdown.cs b/Assets/Scripts/Game/Countdown.cs new file mode 100644 index 0000000..2907cfa --- /dev/null +++ b/Assets/Scripts/Game/Countdown.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; + +public class Countdown : MonoBehaviour { + + public TMP_Text countdown_text; + + void Start() { + countdown_text.text = "Ready?"; + StartCoroutine(BeginCoundown()); + } + + + IEnumerator BeginCoundown() { + yield return new WaitForSecondsRealtime(1f); + countdown_text.text = "3"; + yield return new WaitForSecondsRealtime(1f); + countdown_text.text = "2"; + yield return new WaitForSecondsRealtime(1f); + countdown_text.text = "1"; + yield return new WaitForSecondsRealtime(1f); + countdown_text.text = "Go!"; + } +} diff --git a/Assets/Scripts/Game/Countdown.cs.meta b/Assets/Scripts/Game/Countdown.cs.meta new file mode 100644 index 0000000..91f6c07 --- /dev/null +++ b/Assets/Scripts/Game/Countdown.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed0e05d6d14d83b45a34df5b51f7d1f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Network/Game/GameHandler.cs b/Assets/Scripts/Network/Game/GameHandler.cs index 4e61f87..135df40 100644 --- a/Assets/Scripts/Network/Game/GameHandler.cs +++ b/Assets/Scripts/Network/Game/GameHandler.cs @@ -1,10 +1,15 @@ using System.Collections; using System.Collections.Generic; using MLAPI; +using MLAPI.Messaging; using UnityEngine; public class GameHandler : NetworkBehaviour { + public Transform coundownUI; + + private static GameObject _countdownUI; + // Start is called before the first frame update void Start() { StartCoroutine(introCutscene()); @@ -32,10 +37,22 @@ public class GameHandler : NetworkBehaviour } } - //TODO: Do a 3.2.1 countdown + // Spawn the 3.2.1 coundown object + if (IsHost) { + SpawnCountdownServerRpc(); + } + + yield return new WaitForSecondsRealtime(5f); + + // Despawn the 3.2.1 coundown object + if (IsHost) { + DespawnCountdownServerRpc(); + } // Re-enable the player movement - localPlayer.GetComponentInChildren().enabled = true; + if (localPlayer.GetComponentInChildren() != null) { + localPlayer.GetComponentInChildren().enabled = true; + } //TODO: Start the game timer } @@ -53,4 +70,16 @@ public class GameHandler : NetworkBehaviour // Couldn't find child with tag return null; } + + [ServerRpc] + private void SpawnCountdownServerRpc(ServerRpcParams serverRpcParams = default) { + _countdownUI = Instantiate(coundownUI, Vector3.zero, Quaternion.identity).gameObject; + _countdownUI.GetComponent().Spawn(); + } + + [ServerRpc] + private void DespawnCountdownServerRpc(ServerRpcParams serverRpcParams = default) { + _countdownUI.GetComponent().Despawn(); + Destroy(_countdownUI); + } } From 6f948c0c48f505c7e789036332a522d121cb8fca Mon Sep 17 00:00:00 2001 From: Julia Butenhoff Date: Sun, 28 Nov 2021 11:31:17 -0600 Subject: [PATCH 4/4] Added Overall Race Timer and PlayerHUD template --- .../Prefabs/Game/Managers/GameManager.prefab | 1 + Assets/Prefabs/Game/PlayerHUD.prefab | 413 ++++++++++++++++++ Assets/Prefabs/Game/PlayerHUD.prefab.meta | 7 + Assets/Scenes/Preloader.unity | 2 + Assets/Scripts/Game/PlayerHUD.cs | 57 +++ Assets/Scripts/Game/PlayerHUD.cs.meta | 11 + Assets/Scripts/Network/Game/GameHandler.cs | 14 +- 7 files changed, 504 insertions(+), 1 deletion(-) create mode 100644 Assets/Prefabs/Game/PlayerHUD.prefab create mode 100644 Assets/Prefabs/Game/PlayerHUD.prefab.meta create mode 100644 Assets/Scripts/Game/PlayerHUD.cs create mode 100644 Assets/Scripts/Game/PlayerHUD.cs.meta diff --git a/Assets/Prefabs/Game/Managers/GameManager.prefab b/Assets/Prefabs/Game/Managers/GameManager.prefab index af141f1..7a01f0f 100644 --- a/Assets/Prefabs/Game/Managers/GameManager.prefab +++ b/Assets/Prefabs/Game/Managers/GameManager.prefab @@ -62,3 +62,4 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: coundownUI: {fileID: 6417009877132845026, guid: 7c3682087ff9b234cb9abf6a8fa941b5, type: 3} + playerHUD: {fileID: 1623539175747816640, guid: 19c3c5fda3dc2b54d9275bb39ace73ec, type: 3} diff --git a/Assets/Prefabs/Game/PlayerHUD.prefab b/Assets/Prefabs/Game/PlayerHUD.prefab new file mode 100644 index 0000000..125ea0a --- /dev/null +++ b/Assets/Prefabs/Game/PlayerHUD.prefab @@ -0,0 +1,413 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &243182602878718642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7128711314615986883} + - component: {fileID: 3600411886259146374} + - component: {fileID: 8450380190165699611} + m_Layer: 0 + m_Name: Timer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7128711314615986883 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 243182602878718642} + 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: 3977536925801158668} + 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: 740, y: 490} + m_SizeDelta: {x: 400, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3600411886259146374 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 243182602878718642} + m_CullTransparentMesh: 1 +--- !u!114 &8450380190165699611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 243182602878718642} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, 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_text: 'Time Remaining: 00:00' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2124558898386980576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1623539175747816640} + - component: {fileID: -7012690419608038994} + - component: {fileID: 4416354432616211232} + - component: {fileID: 4670258835641355805} + m_Layer: 0 + m_Name: PlayerHUD + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1623539175747816640 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124558898386980576} + 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: 3977536925801158668} + - {fileID: 4313498025161899914} + - {fileID: 236091843188763586} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &-7012690419608038994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124558898386980576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + NetworkInstanceId: 0 + PrefabHash: 3414969692227658161 + PrefabHashGenerator: PlayerHUD + AlwaysReplicateAsRoot: 0 + DontDestroyWithOwner: 0 +--- !u!114 &4416354432616211232 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124558898386980576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 540bda985e7e4b549a804ff06b069af1, type: 3} + m_Name: + m_EditorClassIdentifier: + raceTimer: 360 + countdown_text: {fileID: 8450380190165699611} + RunnerHUD: {fileID: 8140722858805320406} + KingHUD: {fileID: 3634947091672077549} +--- !u!114 &4670258835641355805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124558898386980576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + FixedSendsPerSecond: 20 + AssumeSyncedSends: 1 + InterpolatePosition: 1 + SnapDistance: 10 + InterpolateServer: 1 + MinMeters: 0.15 + MinDegrees: 1.5 + ExtrapolatePosition: 0 + MaxSendsToExtrapolate: 5 + Channel: + EnableRange: 0 + EnableNonProvokedResendChecks: 0 + DistanceSendrate: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 500 + value: 20 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &3634947091672077549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 236091843188763586} + m_Layer: 0 + m_Name: KingHUD + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &236091843188763586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3634947091672077549} + 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: 1623539175747816640} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4398773266343119393 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3977536925801158668} + - component: {fileID: 8551599427526865512} + - component: {fileID: 6077155605781751469} + - component: {fileID: 6505172091965461983} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3977536925801158668 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4398773266343119393} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 7128711314615986883} + m_Father: {fileID: 1623539175747816640} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &8551599427526865512 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4398773266343119393} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &6077155605781751469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4398773266343119393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &6505172091965461983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4398773266343119393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &8140722858805320406 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4313498025161899914} + m_Layer: 0 + m_Name: RunnerHUD + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &4313498025161899914 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8140722858805320406} + 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: 1623539175747816640} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Prefabs/Game/PlayerHUD.prefab.meta b/Assets/Prefabs/Game/PlayerHUD.prefab.meta new file mode 100644 index 0000000..4bc9403 --- /dev/null +++ b/Assets/Prefabs/Game/PlayerHUD.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 19c3c5fda3dc2b54d9275bb39ace73ec +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Preloader.unity b/Assets/Scenes/Preloader.unity index 984ee6a..c79ae93 100644 --- a/Assets/Scenes/Preloader.unity +++ b/Assets/Scenes/Preloader.unity @@ -287,6 +287,8 @@ MonoBehaviour: PlayerPrefab: 0 - Prefab: {fileID: 1867892282630666222, guid: 7c3682087ff9b234cb9abf6a8fa941b5, type: 3} PlayerPrefab: 0 + - Prefab: {fileID: 2124558898386980576, guid: 19c3c5fda3dc2b54d9275bb39ace73ec, type: 3} + PlayerPrefab: 0 PlayerPrefabHash: id: 0 CreatePlayerPrefab: 0 diff --git a/Assets/Scripts/Game/PlayerHUD.cs b/Assets/Scripts/Game/PlayerHUD.cs new file mode 100644 index 0000000..1e337f5 --- /dev/null +++ b/Assets/Scripts/Game/PlayerHUD.cs @@ -0,0 +1,57 @@ +using MLAPI; +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; + +public class PlayerHUD : NetworkBehaviour +{ + [SerializeField] private int raceTimer; + public TMP_Text countdown_text; + + public GameObject RunnerHUD; + public GameObject KingHUD; + + // Start is called before the first frame update + void Start() { + countdown_text.text = "Time Remaining: 00:00"; + StartCoroutine(RaceTimeCountdown()); + + // Get all players in the scene + GameObject[] playableCharacters = GameObject.FindGameObjectsWithTag("Player"); + + // Find our player and enable their hud respectively + foreach (GameObject character in playableCharacters) { + if (character.GetComponent().OwnerClientId == NetworkManager.Singleton.LocalClientId) { + if (ServerGameNetPortal.Instance.clientIdToGuid.TryGetValue(NetworkManager.Singleton.LocalClientId, out string clientGuid)) { + if (ServerGameNetPortal.Instance.clientData.TryGetValue(clientGuid, out PlayerData playerData)) { + if (playerData.IsKing) { + KingHUD.SetActive(true); + } else { + RunnerHUD.SetActive(true); + } + } + } + } + } + } + + IEnumerator RaceTimeCountdown() { + for (int i = raceTimer; i > 0; i--) { + int minutes = i / 60; + int seconds = i % 60; + + countdown_text.text = "Time Remaining: " + minutes.ToString("D2") + ":" + seconds.ToString("D2"); + + yield return new WaitForSeconds(1f); + } + + // Timer is over + + // Only have the host call the server RPC to it is only done once + if (IsHost) { + //TODO: WRITE WIN/LOSS CONDITIONAL + //TODO: Call server RPC for win loss stuff + } + } +} diff --git a/Assets/Scripts/Game/PlayerHUD.cs.meta b/Assets/Scripts/Game/PlayerHUD.cs.meta new file mode 100644 index 0000000..b9c6fc4 --- /dev/null +++ b/Assets/Scripts/Game/PlayerHUD.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 540bda985e7e4b549a804ff06b069af1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Network/Game/GameHandler.cs b/Assets/Scripts/Network/Game/GameHandler.cs index 135df40..821cbc1 100644 --- a/Assets/Scripts/Network/Game/GameHandler.cs +++ b/Assets/Scripts/Network/Game/GameHandler.cs @@ -7,8 +7,10 @@ using UnityEngine; public class GameHandler : NetworkBehaviour { public Transform coundownUI; + public Transform playerHUD; private static GameObject _countdownUI; + private static GameObject _playerHUD; // Start is called before the first frame update void Start() { @@ -54,7 +56,10 @@ public class GameHandler : NetworkBehaviour localPlayer.GetComponentInChildren().enabled = true; } - //TODO: Start the game timer + // Start the game timer and spawn HUDs + if (IsHost) { + SpawnPlayerHUDServerRpc(); + } } // Only works for 1st generation children @@ -82,4 +87,11 @@ public class GameHandler : NetworkBehaviour _countdownUI.GetComponent().Despawn(); Destroy(_countdownUI); } + + [ServerRpc] + private void SpawnPlayerHUDServerRpc(ServerRpcParams serverRpcParams = default) + { + _playerHUD = Instantiate(playerHUD, Vector3.zero, Quaternion.identity).gameObject; + _playerHUD.GetComponent().Spawn(); + } }