AIAgentUIDisplay.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using TMPro;
  4. using System.Collections.Generic;
  5. /// <summary>
  6. /// UI display for AI agent statistics and controls
  7. /// Shows agent count, exploration progress, and allows runtime agent spawning
  8. /// </summary>
  9. public class AIAgentUIDisplay : MonoBehaviour
  10. {
  11. [Header("UI Elements")]
  12. [SerializeField] private TextMeshProUGUI statsDisplay;
  13. [SerializeField] private TextMeshProUGUI controlsDisplay;
  14. [SerializeField] private Canvas uiCanvas;
  15. [Header("Settings")]
  16. [SerializeField] private float updateInterval = 1f;
  17. [SerializeField] private bool autoCreateUI = true;
  18. private MazeController mazeController;
  19. private AIAgentManager agentManager;
  20. private float lastUpdateTime = 0f;
  21. void Start()
  22. {
  23. mazeController = FindAnyObjectByType<MazeController>();
  24. if (mazeController != null)
  25. {
  26. agentManager = mazeController.GetAgentManager();
  27. }
  28. if (autoCreateUI && statsDisplay == null)
  29. {
  30. CreateUI();
  31. }
  32. }
  33. void Update()
  34. {
  35. if (agentManager == null) return;
  36. if (Time.time - lastUpdateTime > updateInterval)
  37. {
  38. UpdateDisplay();
  39. lastUpdateTime = Time.time;
  40. }
  41. // Handle keyboard input for spawning agents
  42. HandleInput();
  43. }
  44. /// <summary>
  45. /// Updates the stats display
  46. /// </summary>
  47. private void UpdateDisplay()
  48. {
  49. if (statsDisplay == null) return;
  50. string stats = agentManager.GetAgentStats();
  51. statsDisplay.text = stats;
  52. }
  53. /// <summary>
  54. /// Handles keyboard input for agent management
  55. /// </summary>
  56. private void HandleInput()
  57. {
  58. if (Input.GetKeyDown(KeyCode.A))
  59. {
  60. Debug.Log("Spawning 1 agent");
  61. agentManager.SpawnAgent();
  62. }
  63. if (Input.GetKeyDown(KeyCode.S))
  64. {
  65. Debug.Log("Spawning 5 agents");
  66. agentManager.SpawnAgents(5);
  67. }
  68. if (Input.GetKeyDown(KeyCode.C))
  69. {
  70. Debug.Log("Clearing all agents");
  71. agentManager.ClearAllAgents();
  72. }
  73. }
  74. /// <summary>
  75. /// Creates a simple UI if none exists
  76. /// </summary>
  77. private void CreateUI()
  78. {
  79. // Create canvas if needed
  80. if (uiCanvas == null)
  81. {
  82. GameObject canvasGO = new GameObject("AgentUICanvas");
  83. uiCanvas = canvasGO.AddComponent<Canvas>();
  84. uiCanvas.renderMode = RenderMode.ScreenSpaceOverlay;
  85. canvasGO.AddComponent<CanvasScaler>();
  86. }
  87. // Create stats display
  88. if (statsDisplay == null)
  89. {
  90. GameObject statsGO = new GameObject("AgentStats");
  91. statsGO.transform.parent = uiCanvas.transform;
  92. statsGO.transform.localPosition = new Vector3(-200, 100, 0);
  93. var rectTransform = statsGO.AddComponent<RectTransform>();
  94. rectTransform.sizeDelta = new Vector2(400, 200);
  95. statsDisplay = statsGO.AddComponent<TextMeshProUGUI>();
  96. statsDisplay.text = "Agent Stats";
  97. statsDisplay.fontSize = 4;
  98. }
  99. // Create controls display
  100. if (controlsDisplay == null)
  101. {
  102. GameObject controlsGO = new GameObject("AgentControls");
  103. controlsGO.transform.parent = uiCanvas.transform;
  104. controlsGO.transform.localPosition = new Vector3(-200, -100, 0);
  105. var rectTransform = controlsGO.AddComponent<RectTransform>();
  106. rectTransform.sizeDelta = new Vector2(400, 150);
  107. controlsDisplay = controlsGO.AddComponent<TextMeshProUGUI>();
  108. controlsDisplay.text = "Controls:\nA - Spawn 1 agent\nS - Spawn 5 agents\nC - Clear all agents";
  109. controlsDisplay.fontSize = 4;
  110. }
  111. }
  112. /// <summary>
  113. /// Sets the agent manager to use
  114. /// </summary>
  115. public void SetAgentManager(AIAgentManager manager)
  116. {
  117. agentManager = manager;
  118. }
  119. }