using System.Collections; using System.Collections.Generic; using UnityEngine; public class Level1 : Level { [Header("Enemy Setup")] [Tooltip("Optional: parent whose children have EnemyBase components")] public Transform enemiesParent; [Tooltip("Or manually assign enemies here")] public List enemies = new List(); [Header("Monitoring")] [Tooltip("How often to check alive enemies")] public float checkInterval = 0.25f; private bool _running; private Coroutine _monitorCo; public override void OnLevelStart() { base.OnLevelStart(); // Collect enemies if using a parent if (enemiesParent != null) { enemies.Clear(); foreach (Transform child in enemiesParent) { var eb = child.GetComponent(); if (eb != null) enemies.Add(eb); } } // Turn enemies on & let their own Start() find the player foreach (var e in enemies) { if (e == null) continue; e.gameObject.SetActive(true); } // Edge case: no enemies -> complete immediately if (CountAlive() == 0) { CompleteLevel(); return; } _running = true; _monitorCo = StartCoroutine(MonitorEnemies()); Debug.Log("Level1: Started, monitoring enemies..."); } public override void OnLevelEnd() { base.OnLevelEnd(); _running = false; if (_monitorCo != null) { StopCoroutine(_monitorCo); _monitorCo = null; } } private IEnumerator MonitorEnemies() { var wait = new WaitForSeconds(checkInterval); while (_running) { if (CountAlive() == 0) { CompleteLevel(); yield break; } yield return wait; } } private int CountAlive() { int alive = 0; for (int i = 0; i < enemies.Count; i++) { var e = enemies[i]; if (e != null && e.gameObject.activeInHierarchy && !e.IsDead()) alive++; } return alive; } private void CompleteLevel() { Debug.Log("Level1: All enemies defeated. Completing level."); _running = false; // Tell GameplayManager if available if (GameplayManager.Instance != null) { GameplayManager.Instance.CompleteCurrentLevel(); } else { // Fallback: just disable this level object gameObject.SetActive(false); } } }