2026-04-30 07:06:38 -04:00
|
|
|
|
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;
|
2026-05-10 11:47:55 -04:00
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
|
// 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>();
|
2026-04-30 07:06:38 -04:00
|
|
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
|
// 特殊节点数量配额
|
|
|
|
|
|
// ----------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
[Title("特殊节点配额")]
|
|
|
|
|
|
[Tooltip("每种特殊节点类型在整张地图中的数量上限")]
|
|
|
|
|
|
[DictionaryDrawerSettings(KeyLabel = "节点类型", ValueLabel = "数量")]
|
|
|
|
|
|
public Dictionary<MapNodeType, int> specialNodeCounts = new Dictionary<MapNodeType, int>
|
|
|
|
|
|
{
|
2026-05-10 11:47:55 -04:00
|
|
|
|
{ MapNodeType.EliteBattle, 3 },
|
2026-04-30 07:06:38 -04:00
|
|
|
|
{ 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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|