using System.Collections.Generic; using UnityEngine; [DisallowMultipleComponent] public sealed class MapRadarController : MonoBehaviour { [Header("Radar Settings")] [SerializeField, Min(0f)] private float cooldown = 5f; [Header("Radar State (Runtime)")] [SerializeField] private float cooldownRemaining; private readonly List radarMarks = new(); private MapCoordinateSystem coordinateSystem; private MapTarget radarMarkPrefab; public float Cooldown => Mathf.Max(0f, cooldown); public float CooldownRemaining => cooldownRemaining; public bool IsReady => cooldownRemaining <= 0f; private void OnValidate() => cooldown = Mathf.Max(0f, cooldown); public void Configure( MapCoordinateSystem newCoordinateSystem, MapTarget newRadarMarkPrefab) { coordinateSystem = newCoordinateSystem; radarMarkPrefab = newRadarMarkPrefab; } public void SetCooldownRemaining(float seconds) => cooldownRemaining = Mathf.Max(0f, seconds); public void ApplyRadarMarks(IReadOnlyList coordinates) { if (coordinateSystem == null || !coordinateSystem.HasValidCorners() || radarMarkPrefab == null) { return; } EnsureRadarMarkCount(coordinates.Count); for (int index = 0; index < radarMarks.Count; index++) { bool active = index < coordinates.Count; GameObject radarMark = radarMarks[index]; radarMark.SetActive(active); if (active) { radarMark.name = $"Radar Mark {index + 1}"; radarMark.transform.position = coordinateSystem.CoordinatesToWorldPosition(coordinates[index]); } } } private void EnsureRadarMarkCount(int requiredCount) { while (radarMarks.Count < requiredCount) { GameObject radarMark = Instantiate(radarMarkPrefab.gameObject, transform); PrepareRadarMark(radarMark); radarMarks.Add(radarMark); } } private static void PrepareRadarMark(GameObject radarMark) { MapTarget target = radarMark.GetComponent(); if (target != null) target.enabled = false; foreach (Collider targetCollider in radarMark.GetComponentsInChildren(true)) targetCollider.enabled = false; foreach (Renderer targetRenderer in radarMark.GetComponentsInChildren(true)) targetRenderer.enabled = true; } }