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");
}
}
}