using UnityEngine;
///
/// Configuration parameters for maze generation
/// Adjustable to control maze layout, room distribution, and difficulty
///
[System.Serializable]
public class MazeConfig
{
[Header("Maze Size")]
[SerializeField] public int Width = 100;
[SerializeField] public int Height = 100;
[SerializeField] public int MinSize = 100;
[SerializeField] public int MaxSize = 10000;
[Header("Room Generation")]
[SerializeField] public int TargetRoomCount = 20;
[SerializeField] public int MinRoomWidth = 5;
[SerializeField] public int MaxRoomWidth = 25;
[SerializeField] public int MinRoomHeight = 5;
[SerializeField] public int MaxRoomHeight = 25;
[SerializeField] public int MinRoomSpacing = 2; // Minimum space between rooms
[Header("Start and Exit Points")]
[SerializeField] public int MinStartPoints = 1;
[SerializeField] public int MaxStartPoints = 3;
[SerializeField] public int MinExits = 1;
[SerializeField] public int MaxExits = 5;
[Header("Hallway")]
[SerializeField] public int MinHallwayWidth = 1;
[SerializeField] public int MaxHallwayWidth = 3;
[Header("Special Rooms")]
[SerializeField] public int SafeRoomCount = 2;
[SerializeField] public int RestRoomCount = 2;
[SerializeField] public int BossRoomCount = 1;
[SerializeField] public int NormalRoomPercentage = 50; // Percentage that should be normal rooms
[Header("Monster Areas")]
[SerializeField] public bool UseMonsterAreas = true;
[SerializeField] public int MonsterAreaDensity = 50; // Percentage of rooms with monsters
[Header("Generation")]
[SerializeField] public int RandomSeed = 0;
[SerializeField] public bool UseRandomSeed = false;
///
/// Validates configuration values and clamps them to acceptable ranges
///
public void Validate()
{
Width = Mathf.Clamp(Width, MinSize, MaxSize);
Height = Mathf.Clamp(Height, MinSize, MaxSize);
TargetRoomCount = Mathf.Max(TargetRoomCount, 5);
MinRoomWidth = Mathf.Max(MinRoomWidth, 3);
MinRoomHeight = Mathf.Max(MinRoomHeight, 3);
MaxRoomWidth = Mathf.Max(MaxRoomWidth, MinRoomWidth + 2);
MaxRoomHeight = Mathf.Max(MaxRoomHeight, MinRoomHeight + 2);
MinStartPoints = Mathf.Max(MinStartPoints, 1);
MaxStartPoints = Mathf.Max(MaxStartPoints, MinStartPoints);
MinExits = Mathf.Max(MinExits, 1);
MaxExits = Mathf.Max(MaxExits, MinExits);
NormalRoomPercentage = Mathf.Clamp(NormalRoomPercentage, 0, 100);
MonsterAreaDensity = Mathf.Clamp(MonsterAreaDensity, 0, 100);
}
}