Files
Cielonos/Assets/Scripts/MainGame/GameRun/Map/MapGenerationConfig.cs
2026-05-10 11:47:55 -04:00

81 lines
3.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
// ----------------------------------------------------------------
// Zone 池
// ----------------------------------------------------------------
[TitleGroup("Zone 池")]
public List<ZoneData> startingZones = new List<ZoneData>();
[TitleGroup("Zone 池")]
public List<ZoneData> normalBattleZones = new List<ZoneData>();
[TitleGroup("Zone 池")]
public List<ZoneData> eliteBattleZones = new List<ZoneData>();
[TitleGroup("Zone 池")]
public List<ZoneData> bossBattleZones = new List<ZoneData>();
[TitleGroup("Zone 池")]
public List<ZoneData> mechanicalTableZones = new List<ZoneData>();
[TitleGroup("Zone 池")]
public List<ZoneData> logisticsCenterZones = new List<ZoneData>();
// ----------------------------------------------------------------
// 特殊节点数量配额
// ----------------------------------------------------------------
[Title("特殊节点配额")]
[Tooltip("每种特殊节点类型在整张地图中的数量上限")]
[DictionaryDrawerSettings(KeyLabel = "节点类型", ValueLabel = "数量")]
public Dictionary<MapNodeType, int> specialNodeCounts = new Dictionary<MapNodeType, int>
{
{ MapNodeType.EliteBattle, 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;
// ----------------------------------------------------------------
// UI 布局参数
// ----------------------------------------------------------------
[Title("UI 布局参数")]
[Tooltip("节点之间的间距(用于 UI 坐标计算)")]
public float nodeSpacing = 120f;
}
}