using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; namespace Cielonos.MainGame.Map { [CreateAssetMenu(fileName = "MapGenerationConfig", menuName = "Cielonos/Map/MapGenerationConfig")] public class MapGenerationConfig : SerializedScriptableObject { // ---------------------------------------------------------------- // 地图结构 // ---------------------------------------------------------------- [Title("地图结构")] [Tooltip("网格的半径大小(实际网格为 (2*gridRadius+1) x (2*gridRadius+1))")] [MinValue(3), MaxValue(10)] public int gridRadius = 5; [Tooltip("期望生成的房间总数(不含起点和 Boss)")] [MinValue(8), MaxValue(80)] public int targetRoomCount = 20; [Tooltip("Boss 节点与起点之间的最小距离(曼哈顿距离)")] [MinValue(3)] public int minBossDistance = 5; // ---------------------------------------------------------------- // 特殊节点数量配额 // ---------------------------------------------------------------- [Title("特殊节点配额")] [Tooltip("每种特殊节点类型在整张地图中的数量上限")] [DictionaryDrawerSettings(KeyLabel = "节点类型", ValueLabel = "数量")] public Dictionary specialNodeCounts = new Dictionary { { MapNodeType.EliteCombat, 3 }, { MapNodeType.MechanicalTable, 2 }, { MapNodeType.LogisticsCenter, 2 }, { MapNodeType.MedicalStation, 2 }, }; [Tooltip("特殊节点与起点之间的最小距离(BFS 步数),避免起点附近出现商店等")] [MinValue(1)] public int specialNodeMinDistanceFromStart = 2; [Tooltip("同类特殊节点之间的最小距离(BFS 步数),防止同类型节点扎堆")] [MinValue(1)] public int specialNodeMinSameTypeDistance = 1; // ---------------------------------------------------------------- // ZoneData 资产名配置 // ---------------------------------------------------------------- [Title("ZoneData 资产名配置")] [Tooltip("可用的普通战斗 ZoneData 资产名列表(随机抽取分配给 NormalCombat 节点)")] public List normalCombatZoneDataNames = new List(); [Tooltip("可用的精英战斗 ZoneData 资产名列表(随机抽取分配给 EliteCombat 节点)")] public List eliteCombatZoneDataNames = new List(); [Tooltip("Boss 战斗 ZoneData 资产名(固定分配给 Boss 节点)")] public string bossCombatZoneDataName; // ---------------------------------------------------------------- // UI 布局参数 // ---------------------------------------------------------------- [Title("UI 布局参数")] [Tooltip("节点之间的间距(用于 UI 坐标计算)")] public float nodeSpacing = 120f; } }