From eaaddb3f67002b0be5cbea05d9c15745df4a7637 Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Wed, 13 Oct 2021 15:03:16 +0200 Subject: [PATCH 1/9] Added Basic PlayerMaster --- Assets/Scenes/TestScene.unity | 13 +++++ Assets/Scripts/GameManager/PlayerMaster.cs | 51 +++++++++++++++++++ .../Scripts/GameManager/PlayerMaster.cs.meta | 11 ++++ 3 files changed, 75 insertions(+) create mode 100644 Assets/Scripts/GameManager/PlayerMaster.cs create mode 100644 Assets/Scripts/GameManager/PlayerMaster.cs.meta diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 4f35693..16dfa3e 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -959,6 +959,7 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1067101117} + - component: {fileID: 1067101118} m_Layer: 0 m_Name: GameManager m_TagString: GameController @@ -980,6 +981,18 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1067101118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1067101116} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cb5ee5f3d2923ee4faeaf50ed35ab2f5, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &1111479331 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2550463727306718371, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs new file mode 100644 index 0000000..83220bc --- /dev/null +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +/* +JOIN +1. Wenn ein Spieler joined wird sichergestellt, dass er nicht in der Liste ist (fürs error handling). +2. Dann wird er in die Liste "Players" eingetragen und ein Eintrag in der "health" liste wird mit dem selben index gemacht. + +LEAVE +1. Index von dem Spieler, in der Liste, wird gesucht +2. Spieler wird aus der Liste entfernt +3. health index vom spieler wird auch entfernt + +*/ +public class PlayerMaster : MonoBehaviour +{ + [SerializeField] private List Players = new List(); + [SerializeField] private List Health = new List(); + + private void Start() + { + Players.AddRange(GameObject.FindGameObjectsWithTag("Player")); + } + + public void OnPlayerJoin(GameObject player) + { + Debug.Log("Player joined"); + if (!Players.Contains(player)) + { + Players.Add(player); + Debug.Log("Player added to list"); + } + else + { + Debug.LogError("Player already exits in list"); + } + } + + public void OnPlayerLeave(GameObject player) + { + Debug.Log("Player left"); + if (Players.Contains(player)) + { + Players.Remove(player); + } + else + { + Debug.LogError("Player not found in Players-list"); + } + } +} diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs.meta b/Assets/Scripts/GameManager/PlayerMaster.cs.meta new file mode 100644 index 0000000..7d2a5b1 --- /dev/null +++ b/Assets/Scripts/GameManager/PlayerMaster.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb5ee5f3d2923ee4faeaf50ed35ab2f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 6c951b26da7dae5d276c44e3b247af366998057f Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Wed, 13 Oct 2021 15:04:25 +0200 Subject: [PATCH 2/9] Update TestScene.unity --- Assets/Scenes/TestScene.unity | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 16dfa3e..b7134b2 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -331,7 +331,7 @@ GameObject: - component: {fileID: 340159598} m_Layer: 0 m_Name: Player - m_TagString: Untagged + m_TagString: Player m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -993,6 +993,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: cb5ee5f3d2923ee4faeaf50ed35ab2f5, type: 3} m_Name: m_EditorClassIdentifier: + Players: [] + Health: --- !u!1 &1111479331 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2550463727306718371, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} From 7ba5aa69ebcc924e9397903ce273a73e62319f4a Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Wed, 13 Oct 2021 17:35:59 +0200 Subject: [PATCH 3/9] Added Documentation for Join/Leave List --- Assets/Scripts/GameManager/PlayerMaster.cs | 31 +++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs index 83220bc..53cba23 100644 --- a/Assets/Scripts/GameManager/PlayerMaster.cs +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -4,48 +4,49 @@ using UnityEngine; /* JOIN 1. Wenn ein Spieler joined wird sichergestellt, dass er nicht in der Liste ist (fürs error handling). -2. Dann wird er in die Liste "Players" eingetragen und ein Eintrag in der "health" liste wird mit dem selben index gemacht. +2. Dann wird er in die Liste "Players" eingetragen. LEAVE 1. Index von dem Spieler, in der Liste, wird gesucht 2. Spieler wird aus der Liste entfernt -3. health index vom spieler wird auch entfernt */ public class PlayerMaster : MonoBehaviour { - [SerializeField] private List Players = new List(); + [SerializeField] private List Players = new List(); //Contains All Players which are currently connected/in-game [SerializeField] private List Health = new List(); private void Start() { - Players.AddRange(GameObject.FindGameObjectsWithTag("Player")); + Players.AddRange(GameObject.FindGameObjectsWithTag("Player")); //Add All Player-GameObjects into a List } - public void OnPlayerJoin(GameObject player) + //Join + public void OnPlayerJoin(GameObject player) //When a Player joins { - Debug.Log("Player joined"); - if (!Players.Contains(player)) + Debug.Log("Player joined"); //Give Console Feedback + if (!Players.Contains(player)) //If the Player is NOT in the "Players-List" (For Error Handling) { - Players.Add(player); - Debug.Log("Player added to list"); + Players.Add(player); //Add New Player To List + Debug.Log("Player added to list"); //Feedback } else { - Debug.LogError("Player already exits in list"); + Debug.LogError("Player already exits in list"); //Error, because the "new" Player is already in the list -> !critical Anomaly! } } - public void OnPlayerLeave(GameObject player) + //Leave + public void OnPlayerLeave(GameObject player) //When a Player leaves { - Debug.Log("Player left"); - if (Players.Contains(player)) + Debug.Log("Player left");//Give Console Feedback + if (Players.Contains(player))//If the Player IS in the "Players-List" (For Error Handling) { - Players.Remove(player); + Players.Remove(player); //Remove the Player from List } else { - Debug.LogError("Player not found in Players-list"); + Debug.LogError("Player not found in Players-list"); //Error, because the Player is NOT in the list -> !critical Anomaly! } } } From 469fd047bd19b1c178b46eedc9f85a369348064f Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Wed, 13 Oct 2021 18:52:06 +0200 Subject: [PATCH 4/9] Add HealthSystem and Base Structure of DeadSystem HEALTH - Set Health of a player - Subtract Health from a player - Add Health to a player DEAD - Player Dies - Another Player gets a kill --- Assets/Scenes/TestScene.unity | 151 ++++++++++++++++++++- Assets/Scripts/GameManager/PlayerMaster.cs | 74 ++++++++++ 2 files changed, 224 insertions(+), 1 deletion(-) diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index b7134b2..9d75277 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0.44657826, g: 0.49641263, b: 0.57481676, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -714,6 +714,55 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} +--- !u!1 &808644082 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 808644085} + - component: {fileID: 808644084} + m_Layer: 0 + m_Name: Player4 + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!143 &808644084 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 808644082} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.1 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 1, z: 0} +--- !u!4 &808644085 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 808644082} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.57, y: 2.15, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &857589336 GameObject: m_ObjectHideFlags: 0 @@ -931,6 +980,55 @@ Transform: m_Father: {fileID: 340159600} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: -84.997, z: 0} +--- !u!1 &992344781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 992344784} + - component: {fileID: 992344783} + m_Layer: 0 + m_Name: Player2 + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!143 &992344783 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992344781} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.1 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 1, z: 0} +--- !u!4 &992344784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 992344781} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -6.27, y: 2.15, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1035340512 stripped GameObject: m_CorrespondingSourceObject: {fileID: -208595431880416365, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} @@ -995,6 +1093,8 @@ MonoBehaviour: m_EditorClassIdentifier: Players: [] Health: + defaultHp: 100 + TestPlayer: {fileID: 1187582346} --- !u!1 &1111479331 stripped GameObject: m_CorrespondingSourceObject: {fileID: 2550463727306718371, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} @@ -1014,6 +1114,55 @@ MeshCollider: m_Convex: 0 m_CookingOptions: 30 m_Mesh: {fileID: -629719859055844128, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} +--- !u!1 &1187582346 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1187582349} + - component: {fileID: 1187582348} + m_Layer: 0 + m_Name: Player3 + m_TagString: Player + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!143 &1187582348 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1187582346} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.1 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 1, z: 0} +--- !u!4 &1187582349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1187582346} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -11.01, y: 2.15, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1246681035 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs index 53cba23..1e1d4fe 100644 --- a/Assets/Scripts/GameManager/PlayerMaster.cs +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -5,20 +5,51 @@ using UnityEngine; JOIN 1. Wenn ein Spieler joined wird sichergestellt, dass er nicht in der Liste ist (fürs error handling). 2. Dann wird er in die Liste "Players" eingetragen. +3. Player bekommt einen Eintrag in die Health-Liste (Der Schlüssel ist hier, dass der Index bei beiden Listen für den gleichen Spieler stehen) LEAVE 1. Index von dem Spieler, in der Liste, wird gesucht 2. Spieler wird aus der Liste entfernt +3. Player wird aus der Health liste ausgetragen + + +HEALTH + - Set Health of a player + - Subtract Health from a player + - Add Health to a player + +DEAD + - Player Dies + - Another Player gets a kill */ public class PlayerMaster : MonoBehaviour { [SerializeField] private List Players = new List(); //Contains All Players which are currently connected/in-game [SerializeField] private List Health = new List(); + [SerializeField] private int defaultHp = 100; + + //JUST FOR DEBUG + [SerializeField] private GameObject TestPlayer; + + private void Update() + { + //JUST FOR DEBUG + /*Debug.Log(GetHealthOfPlayer(TestPlayer)); + SubstractHealthFromPlayer(TestPlayer, 1);*/ + } + private void Start() { Players.AddRange(GameObject.FindGameObjectsWithTag("Player")); //Add All Player-GameObjects into a List + + //Init Health List + foreach(GameObject player in Players) + { + Health.Add(defaultHp); + } + } //Join @@ -28,6 +59,7 @@ public class PlayerMaster : MonoBehaviour if (!Players.Contains(player)) //If the Player is NOT in the "Players-List" (For Error Handling) { Players.Add(player); //Add New Player To List + Health.Add(defaultHp); //Add New Health to the END of the list Debug.Log("Player added to list"); //Feedback } else @@ -43,10 +75,52 @@ public class PlayerMaster : MonoBehaviour if (Players.Contains(player))//If the Player IS in the "Players-List" (For Error Handling) { Players.Remove(player); //Remove the Player from List + Health.Remove(Players.IndexOf(player)); //Remove the specific Health of the Player } else { Debug.LogError("Player not found in Players-list"); //Error, because the Player is NOT in the list -> !critical Anomaly! } } + + //Health + private void CheckIfPlayerAlive(GameObject player)//Is a Player dead? + { + if (GetHealthOfPlayer(player) <= 0) + { + Death(player); + } + } + public int GetHealthOfPlayer(GameObject player) //Get The Health value of a player + { + return Health[Players.IndexOf(player)]; + } + public void SetHealthOfPlayer(GameObject player, int value) //z.B. wenn ein spieler getroffen wird und dmg bekommt + { + Health[Players.IndexOf(player)] = value; + CheckIfPlayerAlive(player); + } + + public void SubstractHealthFromPlayer(GameObject player, int value) //z.B. wenn ein spieler getroffen wird und dmg bekommt + { + Health[Players.IndexOf(player)] -= value; + CheckIfPlayerAlive(player); + } + + public void AddHealthToPlayer(GameObject player, int value) //z.B. wenn ein spieler geheilt wird + { + Health[Players.IndexOf(player)] += value; + } + + //Death + public void Death(GameObject deadPlayer, GameObject killerPlayer = null) //Player dies and and MAYBE another player gets a kill + { + if(killerPlayer != null) + { + //Add kill to killer + } + + //Add Death to deadPlayer + //Deactivate deadPlayer + } } From e057a569a567127a1c6b3091e0a3232d004e9034 Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Thu, 14 Oct 2021 14:56:29 +0200 Subject: [PATCH 5/9] Added Kills & Deaths Lists --- Assets/Scripts/GameManager/PlayerMaster.cs | 55 ++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs index 1e1d4fe..1248c42 100644 --- a/Assets/Scripts/GameManager/PlayerMaster.cs +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -27,6 +27,8 @@ public class PlayerMaster : MonoBehaviour { [SerializeField] private List Players = new List(); //Contains All Players which are currently connected/in-game [SerializeField] private List Health = new List(); + [SerializeField] private List Kills = new List(); + [SerializeField] private List Deaths = new List(); [SerializeField] private int defaultHp = 100; //JUST FOR DEBUG @@ -48,6 +50,8 @@ public class PlayerMaster : MonoBehaviour foreach(GameObject player in Players) { Health.Add(defaultHp); + Kills.Add(0); + Deaths.Add(0); } } @@ -60,6 +64,8 @@ public class PlayerMaster : MonoBehaviour { Players.Add(player); //Add New Player To List Health.Add(defaultHp); //Add New Health to the END of the list + Kills.Add(0); + Deaths.Add(0); Debug.Log("Player added to list"); //Feedback } else @@ -76,6 +82,8 @@ public class PlayerMaster : MonoBehaviour { Players.Remove(player); //Remove the Player from List Health.Remove(Players.IndexOf(player)); //Remove the specific Health of the Player + Kills.Remove(Players.IndexOf(player)); + Deaths.Remove(Players.IndexOf(player)); } else { @@ -112,15 +120,56 @@ public class PlayerMaster : MonoBehaviour Health[Players.IndexOf(player)] += value; } + //Kills + public int GetKillsOfPlayer(GameObject player) + { + return Kills[Players.IndexOf(player)]; + } + + public void AddKillsToPlayer(GameObject player, int value = 1) + { + Kills[Players.IndexOf(player)] += value; + } + + public void SubstractKillsFromPlayer(GameObject player, int value = 1) + { + Kills[Players.IndexOf(player)] -= value; + } + + public void SetKillsOfPlayer(GameObject player, int value = 1) + { + Kills[Players.IndexOf(player)] = value; + } + //Death - public void Death(GameObject deadPlayer, GameObject killerPlayer = null) //Player dies and and MAYBE another player gets a kill + private void Death(GameObject deadPlayer, GameObject killerPlayer = null) //Player dies and and MAYBE another player gets a kill { if(killerPlayer != null) { //Add kill to killer + Kills[Players.IndexOf(killerPlayer)] += 1; } - - //Add Death to deadPlayer + Deaths[Players.IndexOf(deadPlayer)] += 1; //Deactivate deadPlayer } + + public int GetDeathsOfPlayer(GameObject player) + { + return Deaths[Players.IndexOf(player)]; + } + + public void AddDeathsToPlayer(GameObject player, int value = 1) + { + Deaths[Players.IndexOf(player)] += value; + } + + public void SubstractDeathsFromPlayer(GameObject player, int value = 1) + { + Deaths[Players.IndexOf(player)] -= value; + } + + public void SetDeathsOfPlayer(GameObject player, int value = 1) + { + Deaths[Players.IndexOf(player)] = value; + } } From 666e4f479f9055c89fc2f4870278bd2beab31921 Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Thu, 14 Oct 2021 20:16:38 +0200 Subject: [PATCH 6/9] added PlayerClass with Sync --- Assets/Scenes/TestScene.unity | 17 +++++++++++ Assets/Scripts/GameManager/PlayerMaster.cs | 1 + Assets/Scripts/Player/Player.cs | 35 ++++++++++++++++++++++ Assets/Scripts/Player/Player.cs.meta | 11 +++++++ Assets/Scripts/Player/PlayerController.cs | 2 +- 5 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 Assets/Scripts/Player/Player.cs create mode 100644 Assets/Scripts/Player/Player.cs.meta diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 9d75277..5c04ccd 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -329,6 +329,7 @@ GameObject: - component: {fileID: 340159600} - component: {fileID: 340159599} - component: {fileID: 340159598} + - component: {fileID: 340159601} m_Layer: 0 m_Name: Player m_TagString: Player @@ -396,6 +397,20 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &340159601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 340159597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3317f24e780855847830f5662153b41d, type: 3} + m_Name: + m_EditorClassIdentifier: + health: 100 + SyncIntervalSeconds: 5 --- !u!1 &450235891 stripped GameObject: m_CorrespondingSourceObject: {fileID: -466329591000292508, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} @@ -1093,6 +1108,8 @@ MonoBehaviour: m_EditorClassIdentifier: Players: [] Health: + Kills: + Deaths: defaultHp: 100 TestPlayer: {fileID: 1187582346} --- !u!1 &1111479331 stripped diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs index 1248c42..5a7add9 100644 --- a/Assets/Scripts/GameManager/PlayerMaster.cs +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -25,6 +25,7 @@ DEAD */ public class PlayerMaster : MonoBehaviour { + [Header("PlayerMaster")] [SerializeField] private List Players = new List(); //Contains All Players which are currently connected/in-game [SerializeField] private List Health = new List(); [SerializeField] private List Kills = new List(); diff --git a/Assets/Scripts/Player/Player.cs b/Assets/Scripts/Player/Player.cs new file mode 100644 index 0000000..737b3a5 --- /dev/null +++ b/Assets/Scripts/Player/Player.cs @@ -0,0 +1,35 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Player : MonoBehaviour +{ + [SerializeField] int health; + [SerializeField] float SyncIntervalSeconds = 5.0f; + [SerializeField] GameObject GameManager; + + private PlayerMaster playerMaster; + + private void Start() + { + playerMaster = GameManager.GetComponent(); + InvokeRepeating("Sync", 3.0f, SyncIntervalSeconds); + } + + + private void Sync() + { + Debug.Log("Sync"); + health = playerMaster.GetHealthOfPlayer(gameObject); + } + + public void SubstractHealth(int value) + { + health -= value; + } + + public void AddHealth(int value) + { + health += value; + } +} diff --git a/Assets/Scripts/Player/Player.cs.meta b/Assets/Scripts/Player/Player.cs.meta new file mode 100644 index 0000000..4fdd7c2 --- /dev/null +++ b/Assets/Scripts/Player/Player.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3317f24e780855847830f5662153b41d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/PlayerController.cs b/Assets/Scripts/Player/PlayerController.cs index b4720ab..9a7023b 100644 --- a/Assets/Scripts/Player/PlayerController.cs +++ b/Assets/Scripts/Player/PlayerController.cs @@ -80,7 +80,7 @@ public class PlayerController : MonoBehaviour //Jump if (Input.GetButtonDown("Jump") && isGrounded) { - Debug.Log("Jump"); + //Debug.Log("Jump"); velocityY += Mathf.Sqrt(jumpHeight * -2f * gravity); } From 1deb6add0db607f25b9a9b0ebafb71ebf0a80689 Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Thu, 14 Oct 2021 20:19:01 +0200 Subject: [PATCH 7/9] Update TestScene.unity --- Assets/Scenes/TestScene.unity | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/Scenes/TestScene.unity b/Assets/Scenes/TestScene.unity index 5c04ccd..e766cea 100644 --- a/Assets/Scenes/TestScene.unity +++ b/Assets/Scenes/TestScene.unity @@ -411,6 +411,7 @@ MonoBehaviour: m_EditorClassIdentifier: health: 100 SyncIntervalSeconds: 5 + GameManager: {fileID: 1067101116} --- !u!1 &450235891 stripped GameObject: m_CorrespondingSourceObject: {fileID: -466329591000292508, guid: 823e8b39d52b71b4eb5a91dbc8d6d59e, type: 3} From add984e36c2847958e5f03697f5319d5697d100e Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Fri, 15 Oct 2021 14:18:45 +0200 Subject: [PATCH 8/9] adde ServerPlayer --- Assets/Scripts/GameManager/PlayerMaster.cs | 141 ++++-------------- Assets/Scripts/GameManager/ServerPlayer.cs | 114 ++++++++++++++ .../Scripts/GameManager/ServerPlayer.cs.meta | 11 ++ Assets/Scripts/Player/Player.cs | 2 +- 4 files changed, 155 insertions(+), 113 deletions(-) create mode 100644 Assets/Scripts/GameManager/ServerPlayer.cs create mode 100644 Assets/Scripts/GameManager/ServerPlayer.cs.meta diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs index 5a7add9..78ed536 100644 --- a/Assets/Scripts/GameManager/PlayerMaster.cs +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -26,11 +26,7 @@ DEAD public class PlayerMaster : MonoBehaviour { [Header("PlayerMaster")] - [SerializeField] private List Players = new List(); //Contains All Players which are currently connected/in-game - [SerializeField] private List Health = new List(); - [SerializeField] private List Kills = new List(); - [SerializeField] private List Deaths = new List(); - [SerializeField] private int defaultHp = 100; + [SerializeField] private List Players = new List(); //Contains All Players which are currently connected/in-game //JUST FOR DEBUG [SerializeField] private GameObject TestPlayer; @@ -38,139 +34,60 @@ public class PlayerMaster : MonoBehaviour private void Update() { //JUST FOR DEBUG - /*Debug.Log(GetHealthOfPlayer(TestPlayer)); - SubstractHealthFromPlayer(TestPlayer, 1);*/ + Players[0].AddKills(1); } private void Start() { - Players.AddRange(GameObject.FindGameObjectsWithTag("Player")); //Add All Player-GameObjects into a List - - //Init Health List - foreach(GameObject player in Players) + foreach(GameObject p in GameObject.FindGameObjectsWithTag("Player")) { - Health.Add(defaultHp); - Kills.Add(0); - Deaths.Add(0); + Players.Add(new ServerPlayer(p)); } + + InvokeRepeating("TestDamage", 3.0f, 3f); } + public void TestDamage() + { + Players[0].RemoveHealth(10); + } //Join public void OnPlayerJoin(GameObject player) //When a Player joins { - Debug.Log("Player joined"); //Give Console Feedback - if (!Players.Contains(player)) //If the Player is NOT in the "Players-List" (For Error Handling) + foreach (ServerPlayer p in Players) { - Players.Add(player); //Add New Player To List - Health.Add(defaultHp); //Add New Health to the END of the list - Kills.Add(0); - Deaths.Add(0); - Debug.Log("Player added to list"); //Feedback - } - else - { - Debug.LogError("Player already exits in list"); //Error, because the "new" Player is already in the list -> !critical Anomaly! + if (p.Player == player) + { + Debug.Log("Joined Player already exits"); + return; + } } + Players.Add(new ServerPlayer(player)); } //Leave public void OnPlayerLeave(GameObject player) //When a Player leaves { - Debug.Log("Player left");//Give Console Feedback - if (Players.Contains(player))//If the Player IS in the "Players-List" (For Error Handling) + foreach (ServerPlayer p in Players) { - Players.Remove(player); //Remove the Player from List - Health.Remove(Players.IndexOf(player)); //Remove the specific Health of the Player - Kills.Remove(Players.IndexOf(player)); - Deaths.Remove(Players.IndexOf(player)); - } - else - { - Debug.LogError("Player not found in Players-list"); //Error, because the Player is NOT in the list -> !critical Anomaly! + if (p.Player == player) + { + Players.Remove(p); + } } } - //Health - private void CheckIfPlayerAlive(GameObject player)//Is a Player dead? + public int SyncHealth(GameObject player) { - if (GetHealthOfPlayer(player) <= 0) + foreach (ServerPlayer p in Players) { - Death(player); + if (p.Player == player) + { + return p.GetHealth(); + } } - } - public int GetHealthOfPlayer(GameObject player) //Get The Health value of a player - { - return Health[Players.IndexOf(player)]; - } - public void SetHealthOfPlayer(GameObject player, int value) //z.B. wenn ein spieler getroffen wird und dmg bekommt - { - Health[Players.IndexOf(player)] = value; - CheckIfPlayerAlive(player); - } - - public void SubstractHealthFromPlayer(GameObject player, int value) //z.B. wenn ein spieler getroffen wird und dmg bekommt - { - Health[Players.IndexOf(player)] -= value; - CheckIfPlayerAlive(player); - } - - public void AddHealthToPlayer(GameObject player, int value) //z.B. wenn ein spieler geheilt wird - { - Health[Players.IndexOf(player)] += value; - } - - //Kills - public int GetKillsOfPlayer(GameObject player) - { - return Kills[Players.IndexOf(player)]; - } - - public void AddKillsToPlayer(GameObject player, int value = 1) - { - Kills[Players.IndexOf(player)] += value; - } - - public void SubstractKillsFromPlayer(GameObject player, int value = 1) - { - Kills[Players.IndexOf(player)] -= value; - } - - public void SetKillsOfPlayer(GameObject player, int value = 1) - { - Kills[Players.IndexOf(player)] = value; - } - - //Death - private void Death(GameObject deadPlayer, GameObject killerPlayer = null) //Player dies and and MAYBE another player gets a kill - { - if(killerPlayer != null) - { - //Add kill to killer - Kills[Players.IndexOf(killerPlayer)] += 1; - } - Deaths[Players.IndexOf(deadPlayer)] += 1; - //Deactivate deadPlayer - } - - public int GetDeathsOfPlayer(GameObject player) - { - return Deaths[Players.IndexOf(player)]; - } - - public void AddDeathsToPlayer(GameObject player, int value = 1) - { - Deaths[Players.IndexOf(player)] += value; - } - - public void SubstractDeathsFromPlayer(GameObject player, int value = 1) - { - Deaths[Players.IndexOf(player)] -= value; - } - - public void SetDeathsOfPlayer(GameObject player, int value = 1) - { - Deaths[Players.IndexOf(player)] = value; + return -1; } } diff --git a/Assets/Scripts/GameManager/ServerPlayer.cs b/Assets/Scripts/GameManager/ServerPlayer.cs new file mode 100644 index 0000000..4483851 --- /dev/null +++ b/Assets/Scripts/GameManager/ServerPlayer.cs @@ -0,0 +1,114 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ServerPlayer +{ + public GameObject Player; + public bool isAlive; + private int health; + private int kills; + private int deaths; + private const int defaultHp = 100; + + public ServerPlayer(GameObject _Player, bool _isAlive = true, int _health = defaultHp, int _kills = 0, int _deaths = 0) + { + Player = _Player; + isAlive = _isAlive; + health = _health; + kills = _kills; + deaths = _deaths; + } + + public void Respawn() + { + isAlive = true; + } + + public void Die() + { + isAlive = false; + AddDeaths(1); + } + + //Health + public void AddHealth(int value) + { + if (isAlive) + { + health += value; + } + + } + public void RemoveHealth(int value) + { + if (isAlive) + { + health -= value; + if (health <= 0) + { + AddDeaths(1); + health = 0; + Die(); + } + } + + } + public void SetHealth(int value) + { + if (isAlive) + { + health = value; + if (health <= 0) + { + AddDeaths(1); + health = 0; + Die(); + } + } + } + + public int GetHealth() + { + return health; + } + + //Kills + public void AddKills(int value) + { + kills += value; + } + public void RemoveKills(int value) + { + kills -= value; + } + public void SetKills(int value) + { + kills = value; + } + + public int GetKills() + { + return kills; + } + + //Deaths + public void AddDeaths(int value) + { + deaths += value; + } + public void RemoveDeaths(int value) + { + deaths -= value; + } + public void SetDeaths(int value) + { + deaths = value; + } + + public int GetDeaths() + { + return deaths; + } + +} diff --git a/Assets/Scripts/GameManager/ServerPlayer.cs.meta b/Assets/Scripts/GameManager/ServerPlayer.cs.meta new file mode 100644 index 0000000..a3ea80f --- /dev/null +++ b/Assets/Scripts/GameManager/ServerPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2e457ad00c1a044a924a5bc00776df9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Player/Player.cs b/Assets/Scripts/Player/Player.cs index 737b3a5..10600ac 100644 --- a/Assets/Scripts/Player/Player.cs +++ b/Assets/Scripts/Player/Player.cs @@ -20,7 +20,7 @@ public class Player : MonoBehaviour private void Sync() { Debug.Log("Sync"); - health = playerMaster.GetHealthOfPlayer(gameObject); + health = playerMaster.SyncHealth(gameObject); } public void SubstractHealth(int value) From 266f1a0acab1ec867a9f88fd45c38330dd4e5b37 Mon Sep 17 00:00:00 2001 From: DerTyp187 Date: Mon, 18 Oct 2021 08:57:32 +0200 Subject: [PATCH 9/9] Update PlayerMaster.cs --- Assets/Scripts/GameManager/PlayerMaster.cs | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/Assets/Scripts/GameManager/PlayerMaster.cs b/Assets/Scripts/GameManager/PlayerMaster.cs index 78ed536..38352d7 100644 --- a/Assets/Scripts/GameManager/PlayerMaster.cs +++ b/Assets/Scripts/GameManager/PlayerMaster.cs @@ -1,28 +1,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -/* -JOIN -1. Wenn ein Spieler joined wird sichergestellt, dass er nicht in der Liste ist (fürs error handling). -2. Dann wird er in die Liste "Players" eingetragen. -3. Player bekommt einen Eintrag in die Health-Liste (Der Schlüssel ist hier, dass der Index bei beiden Listen für den gleichen Spieler stehen) -LEAVE -1. Index von dem Spieler, in der Liste, wird gesucht -2. Spieler wird aus der Liste entfernt -3. Player wird aus der Health liste ausgetragen - - -HEALTH - - Set Health of a player - - Subtract Health from a player - - Add Health to a player - -DEAD - - Player Dies - - Another Player gets a kill - -*/ public class PlayerMaster : MonoBehaviour { [Header("PlayerMaster")]