TeamPerceptionSetup.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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 = true;
  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. Debug.Log("TeamPerceptionSetup: Perception visualization is disabled");
  34. return;
  35. }
  36. // Check if TeamPerceptionVisualizer already exists
  37. TeamPerceptionVisualizer existingVisualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  38. if (existingVisualizer != null)
  39. {
  40. Debug.Log("TeamPerceptionSetup: TeamPerceptionVisualizer already exists, updating settings...");
  41. UpdateExistingVisualizer(existingVisualizer);
  42. return;
  43. }
  44. // Create new visualizer
  45. CreatePerceptionVisualizer();
  46. }
  47. /// <summary>
  48. /// Creates a new TeamPerceptionVisualizer component
  49. /// </summary>
  50. private void CreatePerceptionVisualizer()
  51. {
  52. // Find SimpleTeamPlacement to attach to the same GameObject, or create a new one
  53. SimpleTeamPlacement teamPlacement = FindFirstObjectByType<SimpleTeamPlacement>();
  54. GameObject targetObject;
  55. if (teamPlacement != null)
  56. {
  57. targetObject = teamPlacement.gameObject;
  58. Debug.Log("TeamPerceptionSetup: Adding TeamPerceptionVisualizer to existing SimpleTeamPlacement object");
  59. }
  60. else
  61. {
  62. targetObject = new GameObject("TeamPerceptionSystem");
  63. Debug.LogWarning("TeamPerceptionSetup: SimpleTeamPlacement not found, creating new GameObject for perception system");
  64. }
  65. // Add the TeamPerceptionVisualizer component
  66. TeamPerceptionVisualizer visualizer = targetObject.GetComponent<TeamPerceptionVisualizer>();
  67. if (visualizer == null)
  68. {
  69. visualizer = targetObject.AddComponent<TeamPerceptionVisualizer>();
  70. }
  71. // Configure the visualizer with our settings
  72. UpdateVisualizerSettings(visualizer);
  73. if (showDebugInfo)
  74. {
  75. Debug.Log($"TeamPerceptionSetup: ✅ TeamPerceptionVisualizer created and configured! Color: {perceptionColor}, Multiplier: {perceptionMultiplier}");
  76. }
  77. }
  78. /// <summary>
  79. /// Updates an existing visualizer with current settings
  80. /// </summary>
  81. /// <param name="visualizer">The existing visualizer to update</param>
  82. private void UpdateExistingVisualizer(TeamPerceptionVisualizer visualizer)
  83. {
  84. UpdateVisualizerSettings(visualizer);
  85. visualizer.ForceUpdatePerception();
  86. Debug.Log("TeamPerceptionSetup: ✅ Existing TeamPerceptionVisualizer updated with new settings");
  87. }
  88. /// <summary>
  89. /// Applies settings to a visualizer
  90. /// </summary>
  91. /// <param name="visualizer">The visualizer to configure</param>
  92. private void UpdateVisualizerSettings(TeamPerceptionVisualizer visualizer)
  93. {
  94. // Set color
  95. visualizer.SetPerceptionColor(perceptionColor);
  96. // Set multiplier
  97. visualizer.SetPerceptionMultiplier(perceptionMultiplier);
  98. // Enable visualization
  99. visualizer.SetPerceptionVisualizationEnabled(enablePerceptionVisualization);
  100. }
  101. /// <summary>
  102. /// Enables or disables the perception visualization
  103. /// </summary>
  104. /// <param name="enabled">Whether to enable the visualization</param>
  105. public void SetPerceptionVisualizationEnabled(bool enabled)
  106. {
  107. enablePerceptionVisualization = enabled;
  108. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  109. if (visualizer != null)
  110. {
  111. visualizer.SetPerceptionVisualizationEnabled(enabled);
  112. Debug.Log($"TeamPerceptionSetup: Perception visualization {(enabled ? "enabled" : "disabled")}");
  113. }
  114. }
  115. /// <summary>
  116. /// Updates the perception circle color
  117. /// </summary>
  118. /// <param name="newColor">New color for the perception circle</param>
  119. public void SetPerceptionColor(Color newColor)
  120. {
  121. perceptionColor = newColor;
  122. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  123. if (visualizer != null)
  124. {
  125. visualizer.SetPerceptionColor(newColor);
  126. Debug.Log($"TeamPerceptionSetup: Perception color updated to {newColor}");
  127. }
  128. }
  129. /// <summary>
  130. /// Updates the perception multiplier
  131. /// </summary>
  132. /// <param name="multiplier">New multiplier value</param>
  133. public void SetPerceptionMultiplier(float multiplier)
  134. {
  135. perceptionMultiplier = multiplier;
  136. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  137. if (visualizer != null)
  138. {
  139. visualizer.SetPerceptionMultiplier(multiplier);
  140. Debug.Log($"TeamPerceptionSetup: Perception multiplier updated to {multiplier}");
  141. }
  142. }
  143. /// <summary>
  144. /// Verifies that the perception system is working correctly
  145. /// </summary>
  146. [ContextMenu("Verify Perception System")]
  147. public void VerifyPerceptionSystem()
  148. {
  149. Debug.Log("=== TeamPerceptionSetup: System Verification ===");
  150. // Check for SimpleTeamPlacement
  151. SimpleTeamPlacement teamPlacement = FindFirstObjectByType<SimpleTeamPlacement>();
  152. Debug.Log($"SimpleTeamPlacement found: {teamPlacement != null}");
  153. if (teamPlacement != null && teamPlacement.TeamMarkerInstance != null)
  154. {
  155. Debug.Log($"Team marker position: {teamPlacement.TeamMarkerWorldPosition}");
  156. }
  157. // Check for TeamPerceptionVisualizer
  158. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  159. Debug.Log($"TeamPerceptionVisualizer found: {visualizer != null}");
  160. if (visualizer != null)
  161. {
  162. // Trigger debug info
  163. visualizer.ShowPerceptionDebugInfo();
  164. }
  165. // Check for GameStateManager
  166. GameStateManager gameStateManager = FindFirstObjectByType<GameStateManager>();
  167. Debug.Log($"GameStateManager found: {gameStateManager != null}");
  168. if (gameStateManager != null && gameStateManager.savedTeam != null)
  169. {
  170. int teamCount = 0;
  171. foreach (var member in gameStateManager.savedTeam)
  172. {
  173. if (member != null) teamCount++;
  174. }
  175. Debug.Log($"Saved team members: {teamCount}");
  176. }
  177. Debug.Log("=== End Verification ===");
  178. }
  179. /// <summary>
  180. /// Force refresh the perception visualization
  181. /// </summary>
  182. [ContextMenu("Force Refresh Perception")]
  183. public void ForceRefreshPerception()
  184. {
  185. TeamPerceptionVisualizer visualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  186. if (visualizer != null)
  187. {
  188. visualizer.ForceUpdatePerception();
  189. Debug.Log("TeamPerceptionSetup: Forced perception refresh");
  190. }
  191. else
  192. {
  193. Debug.LogWarning("TeamPerceptionSetup: No TeamPerceptionVisualizer found to refresh");
  194. }
  195. }
  196. }