using UnityEngine; using System.Collections; /// /// TeamIndicatorManager - Automatically adds TeamIndicator components to all characters in Cash System mode. /// Attach to a manager object in the scene or it will be created by CashSystemManager. /// public class TeamIndicatorManager : MonoBehaviour { [Header("Settings")] [SerializeField] private bool autoSetupOnStart = true; [SerializeField] private float refreshInterval = 2f; // Check for new characters periodically private static TeamIndicatorManager instance; public static TeamIndicatorManager Instance => instance; private void Awake() { if (instance != null && instance != this) { Destroy(gameObject); return; } instance = this; } private void Start() { // Only activate in Cash System mode if (SelectionOptions.Instance == null || !SelectionOptions.Instance.isCashSystemSelected) { enabled = false; return; } if (autoSetupOnStart) { StartCoroutine(SetupIndicatorsDelayed()); } } private IEnumerator SetupIndicatorsDelayed() { // Wait for characters to spawn yield return new WaitForSeconds(1f); SetupAllIndicators(); // Periodic refresh for newly spawned characters while (enabled) { yield return new WaitForSeconds(refreshInterval); RefreshIndicators(); } } /// /// Add TeamIndicator to all characters that don't have one /// public void SetupAllIndicators() { // Find all player team members TeamMember[] allTeamMembers = FindObjectsOfType(); foreach (var member in allTeamMembers) { AddIndicatorIfMissing(member.gameObject); } // Find all characters with HealthNew (covers AI enemies too) HealthNew[] allCharacters = FindObjectsOfType(); foreach (var character in allCharacters) { AddIndicatorIfMissing(character.gameObject); } Debug.Log($"[TeamIndicatorManager] Setup indicators on {allTeamMembers.Length + allCharacters.Length} characters"); } /// /// Check for new characters and add indicators /// public void RefreshIndicators() { TeamMember[] allTeamMembers = FindObjectsOfType(); foreach (var member in allTeamMembers) { AddIndicatorIfMissing(member.gameObject); } HealthNew[] allCharacters = FindObjectsOfType(); foreach (var character in allCharacters) { AddIndicatorIfMissing(character.gameObject); } // Refresh colors on all indicators TeamIndicator.RefreshAllIndicators(); } private void AddIndicatorIfMissing(GameObject character) { if (character.GetComponent() == null) { character.AddComponent(); Debug.Log($"[TeamIndicatorManager] Added TeamIndicator to {character.name}"); } } /// /// Manually add indicator to a specific character /// public void AddIndicator(GameObject character) { AddIndicatorIfMissing(character); } }