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 = true; void Start() { if (autoSetupOnStart) { SetupPerceptionVisualization(); } } /// /// Sets up the perception visualization system /// [ContextMenu("Setup Perception Visualization")] public void SetupPerceptionVisualization() { if (!enablePerceptionVisualization) { Debug.Log("TeamPerceptionSetup: Perception visualization is disabled"); return; } // Check if TeamPerceptionVisualizer already exists TeamPerceptionVisualizer existingVisualizer = FindFirstObjectByType(); if (existingVisualizer != null) { Debug.Log("TeamPerceptionSetup: TeamPerceptionVisualizer already exists, updating settings..."); 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; Debug.Log("TeamPerceptionSetup: Adding TeamPerceptionVisualizer to existing SimpleTeamPlacement object"); } else { targetObject = new GameObject("TeamPerceptionSystem"); Debug.LogWarning("TeamPerceptionSetup: SimpleTeamPlacement not found, creating new GameObject for perception system"); } // Add the TeamPerceptionVisualizer component TeamPerceptionVisualizer visualizer = targetObject.GetComponent(); if (visualizer == null) { visualizer = targetObject.AddComponent(); } // Configure the visualizer with our settings UpdateVisualizerSettings(visualizer); if (showDebugInfo) { Debug.Log($"TeamPerceptionSetup: ✅ TeamPerceptionVisualizer created and configured! Color: {perceptionColor}, Multiplier: {perceptionMultiplier}"); } } /// /// 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); Debug.Log($"TeamPerceptionSetup: Perception visualization {(enabled ? "enabled" : "disabled")}"); } } /// /// 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); Debug.Log($"TeamPerceptionSetup: Perception color updated to {newColor}"); } } /// /// Updates the perception multiplier /// /// New multiplier value public void SetPerceptionMultiplier(float multiplier) { perceptionMultiplier = multiplier; TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { visualizer.SetPerceptionMultiplier(multiplier); Debug.Log($"TeamPerceptionSetup: Perception multiplier updated to {multiplier}"); } } /// /// Verifies that the perception system is working correctly /// [ContextMenu("Verify Perception System")] public void VerifyPerceptionSystem() { Debug.Log("=== TeamPerceptionSetup: System Verification ==="); // Check for SimpleTeamPlacement SimpleTeamPlacement teamPlacement = FindFirstObjectByType(); Debug.Log($"SimpleTeamPlacement found: {teamPlacement != null}"); if (teamPlacement != null && teamPlacement.TeamMarkerInstance != null) { Debug.Log($"Team marker position: {teamPlacement.TeamMarkerWorldPosition}"); } // Check for TeamPerceptionVisualizer TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); Debug.Log($"TeamPerceptionVisualizer found: {visualizer != null}"); if (visualizer != null) { // Trigger debug info visualizer.ShowPerceptionDebugInfo(); } // Check for GameStateManager GameStateManager gameStateManager = FindFirstObjectByType(); Debug.Log($"GameStateManager found: {gameStateManager != null}"); if (gameStateManager != null && gameStateManager.savedTeam != null) { int teamCount = 0; foreach (var member in gameStateManager.savedTeam) { if (member != null) teamCount++; } Debug.Log($"Saved team members: {teamCount}"); } Debug.Log("=== End Verification ==="); } /// /// Force refresh the perception visualization /// [ContextMenu("Force Refresh Perception")] public void ForceRefreshPerception() { TeamPerceptionVisualizer visualizer = FindFirstObjectByType(); if (visualizer != null) { visualizer.ForceUpdatePerception(); Debug.Log("TeamPerceptionSetup: Forced perception refresh"); } else { Debug.LogWarning("TeamPerceptionSetup: No TeamPerceptionVisualizer found to refresh"); } } }