using UnityEngine; [DisallowMultipleComponent] public sealed class MapController : MonoBehaviour { [Header("Main References")] [SerializeField] private MapCrosshairController crosshair = null; [SerializeField] private MapCoordinateSystem coordinateSystem = null; [Header("Target System")] [SerializeField] private MapTargetController targetController = null; [SerializeField] private MapTarget targetPrefab = null; [SerializeField] private Transform targetParent = null; [SerializeField] private bool createTargetsOnStart = true; [Header("Radar System")] [SerializeField] private MapRadarController radarController = null; [Header("Crosshair Objects")] [SerializeField] private Transform relayX = null; [SerializeField] private Transform relayY = null; [SerializeField] private Transform crosshairVisual = null; [Header("Input")] [SerializeField, Min(0f)] private float movementSpeed = 1f; [SerializeField] private bool useKeyboardInput = true; public MapCoordinateSystem CoordinateSystem => coordinateSystem; public Transform CrosshairVisual => crosshairVisual; private void Awake() { if (targetController != null) { targetController.Configure( coordinateSystem, targetPrefab, targetParent); if (createTargetsOnStart) targetController.CreateAndPlaceTargets(); } if (radarController != null) radarController.Configure(coordinateSystem, targetController, targetPrefab); if (crosshair == null) return; crosshair.Configure( coordinateSystem, relayX, relayY, crosshairVisual, movementSpeed, useKeyboardInput, targetController); } public void SetHorizontalAxis(float value) { if (crosshair != null) crosshair.SetHorizontalAxis(value); } public void SetVerticalAxis(float value) { if (crosshair != null) crosshair.SetVerticalAxis(value); } public Vector2 GetCrosshairCoordinates() { return crosshair != null ? crosshair.GetCrosshairCoordinates() : Vector2.zero; } public void CreateAndPlaceTargets() { if (targetController != null) targetController.CreateAndPlaceTargets(); } public bool TryGetNearestTarget(out MapTarget target, out float distance) { if (crosshair != null) return crosshair.TryGetNearestTarget(out target, out distance); target = null; distance = -1f; return false; } public bool ActivateRadar() { return radarController != null && radarController.ActivateRadar(); } }