diff options
| author | chai <215380520@qq.com> | 2024-05-19 16:05:01 +0800 |
|---|---|---|
| committer | chai <215380520@qq.com> | 2024-05-19 16:05:01 +0800 |
| commit | c5f145786f4c6d2fe4bea831dfc16e52228920a5 (patch) | |
| tree | a6ead7ea8266c767d58ed0f816dcd7a1dd75bd65 /Thronefall_1_0/GameCode/PlayerManager.cs | |
| parent | 48b64e573a1709dc923cb9162b55be0246b3ff63 (diff) | |
* move
Diffstat (limited to 'Thronefall_1_0/GameCode/PlayerManager.cs')
| -rw-r--r-- | Thronefall_1_0/GameCode/PlayerManager.cs | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/Thronefall_1_0/GameCode/PlayerManager.cs b/Thronefall_1_0/GameCode/PlayerManager.cs new file mode 100644 index 0000000..8fe94dd --- /dev/null +++ b/Thronefall_1_0/GameCode/PlayerManager.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using UnityEngine; + +public class PlayerManager : MonoBehaviour +{ + private static PlayerManager instance; + + protected List<PlayerMovement> registeredPlayers = new List<PlayerMovement>(); + + public static PlayerManager Instance => instance; + + public PlayerMovement[] RegisteredPlayers => registeredPlayers.ToArray(); + + private void Awake() + { + if (instance != null) + { + Object.Destroy(instance); + Debug.LogWarning("Found more than one player manager in scene. Destroyed old one."); + } + instance = this; + } + + public static void RegisterPlayer(PlayerMovement player) + { + if (!instance) + { + Debug.Log("No PlayerManager exists in scene."); + } + else + { + instance.registeredPlayers.Add(player); + } + } + + public static void UnregisterPlayer(PlayerMovement player) + { + if (!instance) + { + Debug.Log("No PlayerManager exists in scene."); + } + else + { + instance.registeredPlayers.Remove(player); + } + } + + public static PlayerMovement GetClosestPlayer(Vector3 position) + { + if (!instance) + { + Debug.Log("No PlayerManager exists in scene."); + return null; + } + PlayerMovement result = null; + float num = float.PositiveInfinity; + foreach (PlayerMovement registeredPlayer in instance.registeredPlayers) + { + float num2 = Vector3.Distance(position, registeredPlayer.transform.position); + if (num2 < num) + { + num = num2; + result = registeredPlayer; + } + } + return result; + } +} |
