TeamPerceptionSetup.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using UnityEngine;
  2. /// <summary>
  3. /// Setup script to automatically add the TeamPerceptionVisualizer to the MapScene2.
  4. /// This script can be added to any GameObject in the scene to automatically create
  5. /// and configure the perception visualization system.
  6. /// </summary>
  7. public class TeamPerceptionSetup : MonoBehaviour
  8. {
  9. [Header("Auto Setup")]
  10. [SerializeField] private bool autoSetupOnStart = true;
  11. [SerializeField] private bool enablePerceptionVisualization = true;
  12. [Header("Perception Circle Settings")]
  13. [SerializeField] private Color perceptionColor = new Color(0.5f, 0f, 1f, 0.5f); // 50% transparent purple
  14. [SerializeField] private float perceptionMultiplier = 1.0f;
  15. [SerializeField] private Material customMaterial;
  16. [Header("Debug")]
  17. [SerializeField] private bool showDebugInfo = false;
  18. void Start()
  19. {
  20. if (autoSetupOnStart)
  21. {
  22. SetupPerceptionVisualization();
  23. }
  24. }
  25. /// <summary>
  26. /// Sets up the perception visualization system
  27. /// </summary>
  28. [ContextMenu("Setup Perception Visualization")]
  29. public void SetupPerceptionVisualization()
  30. {
  31. if (!enablePerceptionVisualization)
  32. {
  33. return;
  34. }
  35. // Check if TeamPerceptionVisualizer already exists
  36. TeamPerceptionVisualizer existingVisualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  37. if (existingVisualizer != null)
  38. {
  39. UpdateExistingVisualizer(existingVisualizer);
  40. return;
  41. }
  42. // Create new visualizer
  43. CreatePerceptionVisualizer();
  44. }
  45. /// <summary>
  46. /// Creates a new TeamPerceptionVisualizer component
  47. /// </summary>
  48. private void CreatePerceptionVisualizer()
  49. {
  50. // Find SimpleTeamPlacement to attach to the same GameObject, or create a new one
  51. SimpleTeamPlacement teamPlacement = FindFirstObjectByType<SimpleTeamPlacement>();
  52. GameObject targetObject;
  53. if (teamPlacement != null)
  54. {
  55. targetObject = teamPlacement.gameObject;
  56. }
  57. else
  58. {
  59. targetObject = new GameObject("TeamPerceptionSystem");
  60. }
  61. // Add the TeamPerceptionVisualizer component
  62. TeamPerceptionVisualizer visualizer = targetObject.GetComponent<TeamPerceptionVisualizer>();
  63. if (visualizer == null)
  64. {
  65. visualizer = targetObject.AddComponent<TeamPerceptionVisualizer>();
  66. }
  67. // Configure the visualizer with our settings
  68. UpdateVisualizerSettings(visualizer);
  69. }
  70. /// <summary>
  71. /// Updates an existing visualizer with current settings
  72. /// </summary>
  73. /// <param name="visualizer">The existing visualizer to update</param>
  74. private void UpdateExistingVisualizer(TeamPerceptionVisualizer visualizer)
  75. {
  76. UpdateVisualizerSettings(visualizer);
  77. visualizer.ForceUpdatePerception();
  78. Debug.Log("TeamPerceptionSetup: ✅ Existing TeamPerceptionVisualizer updated with new settings");
  79. }
  80. /// <summary>
  81. /// Applies settings to a visualizer
  82. /// </summary>
  83. /// <param name="visualizer">The visualizer to configure</param>
  84. private void UpdateVisualizerSettings(TeamPerceptionVisualizer visualizer)
  85. {
  86. // Set color
  87. visualizer.SetPerceptionColor(perceptionColor);
  88. // Set multiplier
  89. visualizer.SetPerceptionMultiplier(perceptionMultiplier);
  90. // Enable visualization
  91. visualizer.SetPerceptionVisualizationEnabled(enablePerceptionVisualization);
  92. }
  93. /// <summary>
  94. /// Enables or disables the perception visualization
  95. /// </summary>
  96. /// <param name="enabled">Whether to enable the visualization</param>
  97. public void SetPerceptionVisualizationEnabled(bool enabled)
  98. {
  99. enablePerceptionVisualization = enabled;
  100. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  101. if (visualizer != null)
  102. {
  103. visualizer.SetPerceptionVisualizationEnabled(enabled);
  104. }
  105. }
  106. /// <summary>
  107. /// Updates the perception circle color
  108. /// </summary>
  109. /// <param name="newColor">New color for the perception circle</param>
  110. public void SetPerceptionColor(Color newColor)
  111. {
  112. perceptionColor = newColor;
  113. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  114. if (visualizer != null)
  115. {
  116. visualizer.SetPerceptionColor(newColor);
  117. }
  118. }
  119. /// <summary>
  120. /// Updates the perception multiplier
  121. /// </summary>
  122. /// <param name="multiplier">New multiplier value</param>
  123. public void SetPerceptionMultiplier(float multiplier)
  124. {
  125. perceptionMultiplier = multiplier;
  126. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  127. if (visualizer != null)
  128. {
  129. visualizer.SetPerceptionMultiplier(multiplier);
  130. }
  131. }
  132. /// <summary>
  133. /// Verifies that the perception system is working correctly
  134. /// </summary>
  135. [ContextMenu("Verify Perception System")]
  136. public void VerifyPerceptionSystem()
  137. {
  138. // Check for SimpleTeamPlacement
  139. SimpleTeamPlacement teamPlacement = FindFirstObjectByType<SimpleTeamPlacement>();
  140. // Check for TeamPerceptionVisualizer
  141. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  142. if (visualizer != null)
  143. {
  144. // Trigger debug info
  145. visualizer.ShowPerceptionDebugInfo();
  146. }
  147. // Check for GameStateManager
  148. GameStateManager gameStateManager = FindFirstObjectByType<GameStateManager>();
  149. if (gameStateManager != null && gameStateManager.savedTeam != null)
  150. {
  151. int teamCount = 0;
  152. foreach (var member in gameStateManager.savedTeam)
  153. {
  154. if (member != null) teamCount++;
  155. }
  156. }
  157. }
  158. /// <summary>
  159. /// Force refresh the perception visualization
  160. /// </summary>
  161. [ContextMenu("Force Refresh Perception")]
  162. public void ForceRefreshPerception()
  163. {
  164. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  165. if (visualizer != null)
  166. {
  167. visualizer.ForceUpdatePerception();
  168. }
  169. else
  170. {
  171. Debug.LogWarning("TeamPerceptionSetup: No TeamPerceptionVisualizer found to refresh");
  172. }
  173. }
  174. }