Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / Managers / GameStates / CombatState.cs
using MyCollections.Managers;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class CombatState : IDisposable
{
    private HashSet<NPCController> intervenients = new HashSet<NPCController>();
    private GameObject target;
    private NPCManager npcManager;

    //Adds an intervenient to the combat state
    public void AddIntervenient(NPCController controller)
    {
        if (intervenients.Contains(controller))
            return;

        intervenients.Add(controller);
        Debug.Log("Added Intervenient" + intervenients.Count);
        controller.OnNPCDied += RemoveIntervenient;
    }

    public void RemoveIntervenient(NPCController controller)
    {
        intervenients.Remove(controller);
        Debug.Log("Removed Intervenient" + intervenients.Count);
        controller.OnNPCDied -= RemoveIntervenient;
        HasEnded();
    }

    public void HasEnded()
    {
        if (intervenients.Count == 0 || target == null)
        {
            Debug.Log("Combat ENDEND");

            // Notify GameStateManager to remove this combat state
            GameStateManager.Instance.RemoveCombatState(this);

            Dispose();
        }
    }

    //Constructor
    public CombatState(GameObject target, NPCController intervenient)
    {
        //Sets the target (Player)
        this.target = target;

        //Add's the intervenients to the combat
        AddIntervenient(intervenient);

        //Adds the manager
        if (npcManager == null)
        {
            npcManager = intervenient.NPCManager;
        }
    }

    public void Dispose()
    {
        Debug.Log("Dispose Combat State: ");
        npcManager.CombatState = null;
        GC.SuppressFinalize(this);
    }
}