using UnityEngine; /// /// Setup script to automatically add the TeamPerceptionVisualizer to the MapScene2. /// This script can be added to any GameObject in the scene to automatically create /// and configure the perception visualization system. /// public class TeamPerceptionSetup : MonoBehaviour { [Header("Auto Setup")] [SerializeField] private bool autoSetupOnStart = true; [SerializeField] private bool enablePerceptionVisualization = true; [Header("Perception Circle Settings")] [SerializeField] private Color perceptionColor = new Color(0.5f, 0f, 1f, 0.5f); // 50% transparent purple [SerializeField] private float perceptionMultiplier = 1.0f; [SerializeField] private Material customMaterial; [Header("Debug")] [SerializeField] private bool showDebugInfo = false; void Start() { if (autoSetupOnStart) { SetupPerceptionVisualization(); } } /// /// Sets up the perception visualization system /// [ContextMenu("Setup Perception Visualization")] public void SetupPerceptionVisualization() { if (!enablePerceptionVisualization) { return; } // Check if TeamPerceptionVisualizer already exists TeamPerceptionVisualizer existingVisualizer = FindFirstObjectByType(); if (existingVisualizer != null) { UpdateExistingVisualizer(existingVisualizer); return; } // Create new visualizer CreatePerceptionVisualizer(); } /// /// Creates a new TeamPerceptionVisualizer component /// private void CreatePerceptionVisualizer() { // Find SimpleTeamPlacement to attach to the same GameObject, or create a new one SimpleTeamPlacement teamPlacement = FindFirstObjectByType(); GameObject targetObject; if (teamPlacement != null) { targetObject = teamPlacement.gameObject; } else { targetObject = new GameObject("TeamPerceptionSystem"); } // Add the TeamPerceptionVisualizer component TeamPerceptionVisualizer visualizer = targetObject.GetComponent(); if (visualizer == null) { visualizer = targetObject.AddComponent(); } // Configure the visualizer with our settings UpdateVisualizerSettings(visualizer); } /// /// Updates an existing visualizer with current settings /// /// The existing visualizer to update private void UpdateExistingVisualizer(TeamPerceptionVisualizer visualizer) { UpdateVisualizerSettings(visualizer); visualizer.ForceUpdatePerception(); Debug.Log("TeamPerceptionSetup: ✅ Existing TeamPerceptionVisualizer updated with new settings"); } /// /// Applies settings to a visualizer /// /// The visualizer to configure private void UpdateVisualizerSettings(TeamPerceptionVisualizer visualizer) { // Set color visualizer.SetPerceptionColor(perceptionColor); // Set multiplier visualizer.SetPerceptionMultiplier(perceptionMultiplier); // Enable visualization visualizer.SetPerceptionVisualizationEnabled(enablePerceptionVisualization); } /// /// Enables or disables the perception visualization /// /// Whether to enable the visualization public void SetPerceptionVisualizationEnabled(bool enabled) { enablePerceptionVisualization = enabled; TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { visualizer.SetPerceptionVisualizationEnabled(enabled); } } /// /// Updates the perception circle color /// /// New color for the perception circle public void SetPerceptionColor(Color newColor) { perceptionColor = newColor; TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { visualizer.SetPerceptionColor(newColor); } } /// /// Updates the perception multiplier /// /// New multiplier value public void SetPerceptionMultiplier(float multiplier) { perceptionMultiplier = multiplier; TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { visualizer.SetPerceptionMultiplier(multiplier); } } /// /// Verifies that the perception system is working correctly /// [ContextMenu("Verify Perception System")] public void VerifyPerceptionSystem() { // Check for SimpleTeamPlacement SimpleTeamPlacement teamPlacement = FindFirstObjectByType(); // Check for TeamPerceptionVisualizer TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { // Trigger debug info visualizer.ShowPerceptionDebugInfo(); } // Check for GameStateManager GameStateManager gameStateManager = FindFirstObjectByType(); if (gameStateManager != null && gameStateManager.savedTeam != null) { int teamCount = 0; foreach (var member in gameStateManager.savedTeam) { if (member != null) teamCount++; } } } /// /// Force refresh the perception visualization /// [ContextMenu("Force Refresh Perception")] public void ForceRefreshPerception() { TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { visualizer.ForceUpdatePerception(); } else { Debug.LogWarning("TeamPerceptionSetup: No TeamPerceptionVisualizer found to refresh"); } } }