From 7f493f682503f5186308de7b8f74b5b49233cfe4 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Thu, 2 Nov 2023 11:51:31 +0800 Subject: +init --- GameCode/PlayerManager.cs | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 GameCode/PlayerManager.cs (limited to 'GameCode/PlayerManager.cs') diff --git a/GameCode/PlayerManager.cs b/GameCode/PlayerManager.cs new file mode 100644 index 0000000..8fe94dd --- /dev/null +++ b/GameCode/PlayerManager.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using UnityEngine; + +public class PlayerManager : MonoBehaviour +{ + private static PlayerManager instance; + + protected List registeredPlayers = new List(); + + 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; + } +} -- cgit v1.1-26-g67d0