using UnityEngine; using UnityEngine.UI; using TMPro; using System.Collections.Generic; /// /// UI display for AI agent statistics and controls /// Shows agent count, exploration progress, and allows runtime agent spawning /// public class AIAgentUIDisplay : MonoBehaviour { [Header("UI Elements")] [SerializeField] private TextMeshProUGUI statsDisplay; [SerializeField] private TextMeshProUGUI controlsDisplay; [SerializeField] private Canvas uiCanvas; [Header("Settings")] [SerializeField] private float updateInterval = 1f; [SerializeField] private bool autoCreateUI = true; private MazeController mazeController; private AIAgentManager agentManager; private float lastUpdateTime = 0f; void Start() { mazeController = FindAnyObjectByType(); if (mazeController != null) { agentManager = mazeController.GetAgentManager(); } if (autoCreateUI && statsDisplay == null) { CreateUI(); } } void Update() { if (agentManager == null) return; if (Time.time - lastUpdateTime > updateInterval) { UpdateDisplay(); lastUpdateTime = Time.time; } // Handle keyboard input for spawning agents HandleInput(); } /// /// Updates the stats display /// private void UpdateDisplay() { if (statsDisplay == null) return; string stats = agentManager.GetAgentStats(); statsDisplay.text = stats; } /// /// Handles keyboard input for agent management /// private void HandleInput() { if (Input.GetKeyDown(KeyCode.A)) { Debug.Log("Spawning 1 agent"); agentManager.SpawnAgent(); } if (Input.GetKeyDown(KeyCode.S)) { Debug.Log("Spawning 5 agents"); agentManager.SpawnAgents(5); } if (Input.GetKeyDown(KeyCode.C)) { Debug.Log("Clearing all agents"); agentManager.ClearAllAgents(); } } /// /// Creates a simple UI if none exists /// private void CreateUI() { // Create canvas if needed if (uiCanvas == null) { GameObject canvasGO = new GameObject("AgentUICanvas"); uiCanvas = canvasGO.AddComponent(); uiCanvas.renderMode = RenderMode.ScreenSpaceOverlay; canvasGO.AddComponent(); } // Create stats display if (statsDisplay == null) { GameObject statsGO = new GameObject("AgentStats"); statsGO.transform.parent = uiCanvas.transform; statsGO.transform.localPosition = new Vector3(-200, 100, 0); var rectTransform = statsGO.AddComponent(); rectTransform.sizeDelta = new Vector2(400, 200); statsDisplay = statsGO.AddComponent(); statsDisplay.text = "Agent Stats"; statsDisplay.fontSize = 4; } // Create controls display if (controlsDisplay == null) { GameObject controlsGO = new GameObject("AgentControls"); controlsGO.transform.parent = uiCanvas.transform; controlsGO.transform.localPosition = new Vector3(-200, -100, 0); var rectTransform = controlsGO.AddComponent(); rectTransform.sizeDelta = new Vector2(400, 150); controlsDisplay = controlsGO.AddComponent(); controlsDisplay.text = "Controls:\nA - Spawn 1 agent\nS - Spawn 5 agents\nC - Clear all agents"; controlsDisplay.fontSize = 4; } } /// /// Sets the agent manager to use /// public void SetAgentManager(AIAgentManager manager) { agentManager = manager; } }