Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / NPC / NPCManager.cs
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()
    {
        
    }
}