using System.Collections.Generic; using UnityEngine; public class EdgeIndicatorManager : MonoBehaviour { public static EdgeIndicatorManager Instance; [Header("References")] public MinimapManager minimapManager; public RectTransform edgeContainer; public EdgeIndicator indicatorPrefab; [Header("Settings")] public float edgePadding = 18f; public float refreshInterval = 1f; private readonly Dictionary indicators = new Dictionary(); float timer; void Awake() { Instance = this; } void Start() { if (minimapManager == null) minimapManager = FindObjectOfType(); RefreshTargets(); } void Update() { timer += Time.deltaTime; if (timer >= refreshInterval) { timer = 0; RefreshTargets(); } } void RefreshTargets() { EdgeTarget[] targets = FindObjectsOfType(); HashSet currentTargets = new HashSet(targets); //------------------------------------- // Remove destroyed targets //------------------------------------- List remove = new List(); foreach (var pair in indicators) { if (pair.Key == null || !currentTargets.Contains(pair.Key)) { if (pair.Value != null) Destroy(pair.Value.gameObject); remove.Add(pair.Key); } } foreach (var t in remove) indicators.Remove(t); //------------------------------------- // Add new targets //------------------------------------- foreach (EdgeTarget target in targets) { if (indicators.ContainsKey(target)) continue; EdgeIndicator arrow = Instantiate(indicatorPrefab, edgeContainer); arrow.Initialize( target, edgeContainer, edgePadding); indicators.Add(target, arrow); } } }