using System; using System.Collections; using System.Collections.Generic; using Invector.vCharacterController.AI; using PixelCrushers; using Unity.Mathematics; using UnityEngine; using UnityEngine.Events; using Random = UnityEngine.Random; namespace Beyond { public class IdFightController : MonoBehaviour { [SerializeField] private int m_firstPhaseEnemyQuantity = 8; [SerializeField] private List m_startingEnemies = new List(); [SerializeField] private GameObject m_skeletonPrefab; [SerializeField] private List m_skeletonSpawnPoints = new List(); private FightPhase m_currentPhase; private FireTornadoController m_fireTornadoController; private int m_enemiesDefeatCounter = 0; public UnityAction m_OnEnemyDead; //Starting - flame tornado, skeletons //End - id and qte public enum FightPhase { StartingPhase, EndPhase } private void Update() { switch (m_currentPhase) { case FightPhase.StartingPhase: if (m_enemiesDefeatCounter >= m_firstPhaseEnemyQuantity) { MessageSystem.SendMessage(this, "Skeletons", "Defeated"); m_currentPhase = FightPhase.EndPhase; } break; case FightPhase.EndPhase: break; } } private void OnEnable() { m_enemiesDefeatCounter = 0; m_fireTornadoController = GetComponent(); InitStartingEnemies(); m_currentPhase = FightPhase.StartingPhase; } private void InitStartingEnemies() { foreach (GameObject enemy in m_startingEnemies) { var controller = enemy.GetComponent(); controller.onDead.AddListener(OnEnemyDead); } } public void OnEnemyDead(GameObject go) { m_OnEnemyDead?.Invoke(); SpawnEnemy(); m_enemiesDefeatCounter++; } public void SpawnEnemy() { vControlAIMelee ai = Instantiate(m_skeletonPrefab, m_skeletonSpawnPoints[Random.Range(0, m_skeletonSpawnPoints.Count)].position, quaternion.identity).GetComponent(); ai.onDead.AddListener(OnEnemyDead); } } }