地图初步

This commit is contained in:
SoulliesOfficial
2026-04-30 07:06:38 -04:00
parent 8ad26129b2
commit 47125f95f4
98 changed files with 2237 additions and 20524 deletions

View File

@@ -0,0 +1,72 @@
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<MapNodeType, int> specialNodeCounts = new Dictionary<MapNodeType, int>
{
{ 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<string> normalCombatZoneDataNames = new List<string>();
[Tooltip("可用的精英战斗 ZoneData 资产名列表(随机抽取分配给 EliteCombat 节点)")]
public List<string> eliteCombatZoneDataNames = new List<string>();
[Tooltip("Boss 战斗 ZoneData 资产名(固定分配给 Boss 节点)")]
public string bossCombatZoneDataName;
// ----------------------------------------------------------------
// UI 布局参数
// ----------------------------------------------------------------
[Title("UI 布局参数")]
[Tooltip("节点之间的间距(用于 UI 坐标计算)")]
public float nodeSpacing = 120f;
}
}