| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- using UnityEngine;
- using UnityEngine.UI;
- using TMPro;
- using System.Collections.Generic;
- /// <summary>
- /// UI display for AI agent statistics and controls
- /// Shows agent count, exploration progress, and allows runtime agent spawning
- /// </summary>
- 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<MazeController>();
- 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();
- }
- /// <summary>
- /// Updates the stats display
- /// </summary>
- private void UpdateDisplay()
- {
- if (statsDisplay == null) return;
- string stats = agentManager.GetAgentStats();
- statsDisplay.text = stats;
- }
- /// <summary>
- /// Handles keyboard input for agent management
- /// </summary>
- 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();
- }
- }
- /// <summary>
- /// Creates a simple UI if none exists
- /// </summary>
- private void CreateUI()
- {
- // Create canvas if needed
- if (uiCanvas == null)
- {
- GameObject canvasGO = new GameObject("AgentUICanvas");
- uiCanvas = canvasGO.AddComponent<Canvas>();
- uiCanvas.renderMode = RenderMode.ScreenSpaceOverlay;
- canvasGO.AddComponent<CanvasScaler>();
- }
- // 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>();
- rectTransform.sizeDelta = new Vector2(400, 200);
- statsDisplay = statsGO.AddComponent<TextMeshProUGUI>();
- 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>();
- rectTransform.sizeDelta = new Vector2(400, 150);
- controlsDisplay = controlsGO.AddComponent<TextMeshProUGUI>();
- controlsDisplay.text = "Controls:\nA - Spawn 1 agent\nS - Spawn 5 agents\nC - Clear all agents";
- controlsDisplay.fontSize = 4;
- }
- }
- /// <summary>
- /// Sets the agent manager to use
- /// </summary>
- public void SetAgentManager(AIAgentManager manager)
- {
- agentManager = manager;
- }
- }
|