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); } }