From c9dc933af0be8ddf2c6e3aae8a638bcb5b1bd502 Mon Sep 17 00:00:00 2001 From: Konrad Koller Date: Wed, 27 Nov 2024 16:24:01 +0100 Subject: [PATCH 1/2] feat(game-over): add despawn --- Assets/Interface Assets/GameOver.uxml | 3 ++ Assets/Interface Assets/GameOver.uxml.meta | 10 +++++ Assets/Scenes/Game.unity | 51 +++++++++++++++++++++- Assets/Src/LobbyManager.cs | 19 ++++++++ Assets/Src/PlayerController.cs | 8 +--- 5 files changed, 84 insertions(+), 7 deletions(-) create mode 100644 Assets/Interface Assets/GameOver.uxml create mode 100644 Assets/Interface Assets/GameOver.uxml.meta diff --git a/Assets/Interface Assets/GameOver.uxml b/Assets/Interface Assets/GameOver.uxml new file mode 100644 index 0000000..2d2eb8c --- /dev/null +++ b/Assets/Interface Assets/GameOver.uxml @@ -0,0 +1,3 @@ + + + diff --git a/Assets/Interface Assets/GameOver.uxml.meta b/Assets/Interface Assets/GameOver.uxml.meta new file mode 100644 index 0000000..e527fbe --- /dev/null +++ b/Assets/Interface Assets/GameOver.uxml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 027f1a2de6bbc4ecbafa99b6b0e54ead +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/Scenes/Game.unity b/Assets/Scenes/Game.unity index c2ae4de..6360d36 100644 --- a/Assets/Scenes/Game.unity +++ b/Assets/Scenes/Game.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0.18028326, g: 0.22571333, b: 0.30692202, a: 1} + m_IndirectSpecularColor: {r: 0.18028301, g: 0.22571309, b: 0.30692127, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -207,6 +207,54 @@ Transform: m_Father: {fileID: 1637532756} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: -135, z: 0} +--- !u!1 &575161927 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 575161928} + - component: {fileID: 575161929} + m_Layer: 5 + m_Name: YouAreDead + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &575161928 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 575161927} + 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: 1395018204} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &575161929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 575161927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PanelSettings: {fileID: 11400000, guid: 5de7ff8d9b1f3415195a2e4429eb502c, type: 2} + m_ParentUI: {fileID: 0} + sourceAsset: {fileID: 9197481963319205126, guid: 027f1a2de6bbc4ecbafa99b6b0e54ead, type: 3} + m_SortingOrder: 0 --- !u!1 &705507993 GameObject: m_ObjectHideFlags: 0 @@ -717,6 +765,7 @@ Transform: - {fileID: 1522746831} - {fileID: 1895071184} - {fileID: 874665408} + - {fileID: 575161928} m_Father: {fileID: 0} m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Src/LobbyManager.cs b/Assets/Src/LobbyManager.cs index 5093e51..2d3a15f 100644 --- a/Assets/Src/LobbyManager.cs +++ b/Assets/Src/LobbyManager.cs @@ -43,6 +43,7 @@ private Lobby ConnectedLobby } } private List players; + private List Players { set @@ -153,6 +154,24 @@ private void Update() { RefreshLobbyData(); } + + if (State == LobbyState.ClientInGame) { + // Load all players and figure our how many of them are alive + var players = gameObject.GetComponents(); + var aliveCount = 0; + foreach (var player in players) + { + if (!player.GetHealthSystem().IsDead()) { + aliveCount++; + } + } + + if (aliveCount <= 1) { + // Game over + Debug.Log("Game over"); + CloseGame(); + } + } } private void OnDestroy() diff --git a/Assets/Src/PlayerController.cs b/Assets/Src/PlayerController.cs index 30e8373..f5b1d2a 100644 --- a/Assets/Src/PlayerController.cs +++ b/Assets/Src/PlayerController.cs @@ -15,8 +15,6 @@ public class PlayerController : NetworkBehaviour, IGetHealthSystem readonly private NetworkVariable health = new NetworkVariable(); - private int deaths = 0; - [SerializeField] private Material[] playerSkins; private void Awake() { @@ -36,7 +34,6 @@ private void OnHealthChangeClient(float previousValue, float newValue) private void OnHealthChangeServer(object sender, EventArgs e) { - if (IsServer) { health.Value = hs.GetHealth(); @@ -124,9 +121,8 @@ public void OnHitServer(float damage, ulong sourcePlayer) hs.Damage(damage); if (hs.IsDead()) { - Debug.Log($"Thats it, Im dead :( killed by #{sourcePlayer}. I have died #{deaths} times."); - deaths++; - hs.SetHealth(maxHealth); + Debug.Log($"Thats it, Im dead :( killed by #{sourcePlayer}."); + networkObject.Despawn(true); } } } From 75042f0ae91d3a654051941ed8c86bb68a15f49f Mon Sep 17 00:00:00 2001 From: Konrad Koller Date: Wed, 27 Nov 2024 16:46:31 +0100 Subject: [PATCH 2/2] feat(game-over): add game over ui --- Assets/Interface Assets/GameOver.uxml | 2 +- Assets/Src/UI/LobbyUIController.cs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/Interface Assets/GameOver.uxml b/Assets/Interface Assets/GameOver.uxml index 2d2eb8c..b7bf54d 100644 --- a/Assets/Interface Assets/GameOver.uxml +++ b/Assets/Interface Assets/GameOver.uxml @@ -1,3 +1,3 @@ - + diff --git a/Assets/Src/UI/LobbyUIController.cs b/Assets/Src/UI/LobbyUIController.cs index 9d4819c..48d7df4 100644 --- a/Assets/Src/UI/LobbyUIController.cs +++ b/Assets/Src/UI/LobbyUIController.cs @@ -45,6 +45,7 @@ public class LobbyUIController : MonoBehaviour // in game view buttons private Button closeGameButton; private Button leaveGameButton; + private GameObject gameOverUI; // unity events private void Awake() @@ -105,6 +106,7 @@ private void SetupInGameViewReferences() // in game view buttons closeGameButton = inGameDocument.rootVisualElement.Q("close-game") as Button; leaveGameButton = inGameDocument.rootVisualElement.Q("leave-game") as Button; + gameOverUI = GameObject.Find("GameOver"); } // subscribe and unsubscribe listeners