using UnityEngine;
///
/// Main controller for maze generation and management
///
public class MazeController : MonoBehaviour
{
[SerializeField] private MazeConfig mazeConfig = new();
[SerializeField] private bool generateOnStart = true;
[SerializeField] private bool visualizeDebug = true;
[Header("Renderers")]
[SerializeField] private MazeRenderer mazeRenderer;
[SerializeField] private MeshMazeRenderer meshMazeRenderer;
[Header("AI Agents")]
[SerializeField] private bool spawnAIAgents = true;
[SerializeField] private AIAgentManager agentManager;
[Header("Monsters")]
[SerializeField] private MonsterSpawner monsterSpawner;
private MazeData currentMaze;
private MazeGenerator generator;
void Start()
{
if (mazeRenderer == null)
{
mazeRenderer = GetComponent() ?? FindAnyObjectByType();
}
if (meshMazeRenderer == null)
{
meshMazeRenderer = GetComponent() ?? FindAnyObjectByType();
}
// Setup Fight Tracker and UI
InitializeFightTracking();
// Setup AI agent manager
if (spawnAIAgents)
{
if (agentManager == null)
{
agentManager = GetComponent();
}
if (agentManager == null)
{
// Create agent manager if not already present
GameObject managerGO = new GameObject("AIAgentManager");
managerGO.transform.parent = transform;
agentManager = managerGO.AddComponent();
}
}
// Find MonsterSpawner if not assigned
if (monsterSpawner == null)
monsterSpawner = FindAnyObjectByType();
if (generateOnStart)
{
GenerateMaze();
}
}
///
/// Initializes the fight tracking system and UI
///
private void InitializeFightTracking()
{
// Ensure FightTracker exists
var fightTracker = FindAnyObjectByType();
if (fightTracker == null)
{
var trackerGO = new GameObject("FightTracker");
trackerGO.transform.parent = transform;
trackerGO.AddComponent();
}
// Ensure ActiveFightsUIPanel exists
var fightsPanel = FindAnyObjectByType();
if (fightsPanel == null)
{
var panelGO = new GameObject("ActiveFightsUIPanel");
var canvas = FindAnyObjectByType