using System.Collections; using System.Collections.Generic; using UnityEngine; public class NPCManager : MonoBehaviour { public static NPCManager Instance { get; private set; } [SerializeField] private List<EnemyNPCContoller> npcList; private List<IObserver> observers = new List<IObserver>(); private void Awake() { if (Instance == null) { Instance = this; } else { Destroy(gameObject); } } // Called by NPCs when they spawn public void RegisterNPC(EnemyNPCContoller npc) { npcList.Add(npc); foreach (IObserver observer in observers) { npc.AddObserver(observer); } } // Called by NPCs when they are destroyed public void UnregisterNPC(EnemyNPCContoller npc) { npcList.Remove(npc); foreach (IObserver observer in observers) { npc.RemoveObserver(observer); } } public void RegisterObservers(IObserver observer) { observers.Add(observer); //Register observer from foreach (EnemyNPCContoller npc in npcList) { npc.AddObserver(observer); } } public void UnregisterObserver(IObserver observer) { observers.Remove(observer); // Unregister the observer from all NPCs foreach (EnemyNPCContoller npc in npcList) { npc.RemoveObserver(observer); } } // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { } }