PerceptionEventSystemSetup.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using UnityEngine;
  2. /// <summary>
  3. /// Setup script for the enhanced perception and event system
  4. /// Automatically adds required components and configures the spottable event system
  5. /// </summary>
  6. public class PerceptionEventSystemSetup : MonoBehaviour
  7. {
  8. [Header("Auto Setup")]
  9. [SerializeField] private bool autoSetupOnStart = true;
  10. [Header("Event Marker Settings")]
  11. [SerializeField] private GameObject eventMarkerPrefab;
  12. [SerializeField] private Material eventMarkerMaterial;
  13. [SerializeField] private Color eventMarkerColor = Color.red;
  14. [SerializeField] private int maxActiveMarkers = 5;
  15. [Header("Debug")]
  16. [SerializeField] private bool showSetupLogs = true;
  17. void Start()
  18. {
  19. if (autoSetupOnStart)
  20. {
  21. SetupPerceptionEventSystem();
  22. }
  23. }
  24. /// <summary>
  25. /// Sets up the perception and event system components
  26. /// </summary>
  27. [ContextMenu("Setup Perception Event System")]
  28. public void SetupPerceptionEventSystem()
  29. {
  30. if (showSetupLogs)
  31. Debug.Log("🔧 Setting up Perception Event System...");
  32. // Ensure TeamPerceptionVisualizer exists
  33. SetupPerceptionVisualizer();
  34. // Setup EventMarkerVisualizer
  35. SetupEventMarkerVisualizer();
  36. // Verify TravelEventSystem integration
  37. VerifyTravelEventSystem();
  38. if (showSetupLogs)
  39. Debug.Log("✅ Perception Event System setup complete!");
  40. }
  41. private void SetupPerceptionVisualizer()
  42. {
  43. var perceptionVisualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  44. if (perceptionVisualizer == null)
  45. {
  46. // Find a suitable GameObject to add it to (prefer the one with SimpleTeamPlacement)
  47. var teamPlacement = FindFirstObjectByType<SimpleTeamPlacement>();
  48. GameObject targetObject = teamPlacement?.gameObject ?? gameObject;
  49. perceptionVisualizer = targetObject.AddComponent<TeamPerceptionVisualizer>();
  50. if (showSetupLogs)
  51. Debug.Log($"✅ Added TeamPerceptionVisualizer to {targetObject.name}");
  52. }
  53. else if (showSetupLogs)
  54. {
  55. Debug.Log("✅ TeamPerceptionVisualizer already exists");
  56. }
  57. }
  58. private void SetupEventMarkerVisualizer()
  59. {
  60. var markerVisualizer = FindFirstObjectByType<EventMarkerVisualizer>();
  61. if (markerVisualizer == null)
  62. {
  63. // Find a suitable GameObject to add it to (prefer the one with TravelEventSystem)
  64. var eventSystem = FindFirstObjectByType<TravelEventSystem>();
  65. GameObject targetObject = eventSystem?.gameObject ?? gameObject;
  66. markerVisualizer = targetObject.AddComponent<EventMarkerVisualizer>();
  67. // Configure with our settings
  68. if (eventMarkerPrefab != null)
  69. {
  70. // Use reflection to set private fields since they're SerializeField
  71. var prefabField = markerVisualizer.GetType().GetField("eventMarkerPrefab",
  72. System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  73. prefabField?.SetValue(markerVisualizer, eventMarkerPrefab);
  74. }
  75. if (eventMarkerMaterial != null)
  76. {
  77. var materialField = markerVisualizer.GetType().GetField("eventMarkerMaterial",
  78. System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  79. materialField?.SetValue(markerVisualizer, eventMarkerMaterial);
  80. }
  81. var colorField = markerVisualizer.GetType().GetField("eventMarkerColor",
  82. System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  83. colorField?.SetValue(markerVisualizer, eventMarkerColor);
  84. var maxMarkersField = markerVisualizer.GetType().GetField("maxActiveMarkers",
  85. System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
  86. maxMarkersField?.SetValue(markerVisualizer, maxActiveMarkers);
  87. if (showSetupLogs)
  88. Debug.Log($"✅ Added EventMarkerVisualizer to {targetObject.name}");
  89. }
  90. else if (showSetupLogs)
  91. {
  92. Debug.Log("✅ EventMarkerVisualizer already exists");
  93. }
  94. }
  95. private void VerifyTravelEventSystem()
  96. {
  97. var eventSystem = FindFirstObjectByType<TravelEventSystem>();
  98. if (eventSystem == null)
  99. {
  100. if (showSetupLogs)
  101. Debug.LogWarning("⚠️ No TravelEventSystem found. Please add one to use the event system.");
  102. return;
  103. }
  104. if (showSetupLogs)
  105. Debug.Log("✅ TravelEventSystem found and should integrate automatically");
  106. }
  107. /// <summary>
  108. /// Shows current system status
  109. /// </summary>
  110. [ContextMenu("Show System Status")]
  111. public void ShowSystemStatus()
  112. {
  113. Debug.Log("=== Perception Event System Status ===");
  114. var perceptionVisualizer = FindFirstObjectByType<TeamPerceptionVisualizer>();
  115. Debug.Log($"TeamPerceptionVisualizer: {(perceptionVisualizer ? "✅ Found" : "❌ Missing")}");
  116. var markerVisualizer = FindFirstObjectByType<EventMarkerVisualizer>();
  117. Debug.Log($"EventMarkerVisualizer: {(markerVisualizer ? "✅ Found" : "❌ Missing")}");
  118. var eventSystem = FindFirstObjectByType<TravelEventSystem>();
  119. Debug.Log($"TravelEventSystem: {(eventSystem ? "✅ Found" : "❌ Missing")}");
  120. var teamPlacement = FindFirstObjectByType<SimpleTeamPlacement>();
  121. Debug.Log($"SimpleTeamPlacement: {(teamPlacement ? "✅ Found" : "❌ Missing")}");
  122. if (markerVisualizer != null)
  123. {
  124. // Use reflection to get active marker count
  125. var method = markerVisualizer.GetType().GetMethod("GetActiveMarkerCount");
  126. if (method != null)
  127. {
  128. int activeMarkers = (int)method.Invoke(markerVisualizer, null);
  129. Debug.Log($"Active Event Markers: {activeMarkers}");
  130. }
  131. }
  132. Debug.Log("========================================");
  133. }
  134. }