Newer
Older
TheVengeance-Project-IADE-Unity2D / Assets / Scripts / Managers / GameStates / CombatState.cs
  1. using MyCollections.Managers;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using UnityEngine;
  7. public class CombatState : IDisposable
  8. {
  9. private HashSet<NPCController> intervenients = new HashSet<NPCController>();
  10. private GameObject target;
  11. private NPCManager npcManager;
  12. //Adds an intervenient to the combat state
  13. public void AddIntervenient(NPCController controller)
  14. {
  15. if (intervenients.Contains(controller))
  16. return;
  17. intervenients.Add(controller);
  18. Debug.Log("Added Intervenient" + intervenients.Count);
  19. controller.OnNPCDied += RemoveIntervenient;
  20. }
  21. public void RemoveIntervenient(NPCController controller)
  22. {
  23. intervenients.Remove(controller);
  24. Debug.Log("Removed Intervenient" + intervenients.Count);
  25. controller.OnNPCDied -= RemoveIntervenient;
  26. HasEnded();
  27. }
  28. public void HasEnded()
  29. {
  30. if (intervenients.Count == 0 || target == null)
  31. {
  32. Debug.Log("Combat ENDEND");
  33. // Notify GameStateManager to remove this combat state
  34. GameStateManager.Instance.RemoveCombatState(this);
  35. Dispose();
  36. }
  37. }
  38. //Constructor
  39. public CombatState(GameObject target, NPCController intervenient)
  40. {
  41. //Sets the target (Player)
  42. this.target = target;
  43. //Add's the intervenients to the combat
  44. AddIntervenient(intervenient);
  45. //Adds the manager
  46. if (npcManager == null)
  47. {
  48. npcManager = intervenient.NPCManager;
  49. }
  50. }
  51. public void Dispose()
  52. {
  53. Debug.Log("Dispose Combat State: ");
  54. npcManager.CombatState = null;
  55. GC.SuppressFinalize(this);
  56. }
  57. }