Files
Cielonos/Assets/Scripts/MainGame/GameRun/Map/MapGenerationConfig.cs
SoulliesOfficial 9a9e48f8a5
2026-06-27 12:52:03 -04:00

85 lines
3.2 KiB
C#
Raw 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;
using System.Collections.Generic;
using Sirenix.OdinInspector;
using SLSUtilities.General;
using UnityEngine;
using Yarn.Unity;
namespace Cielonos.MainGame.Map
{
[CreateAssetMenu(fileName = "MapGenerationConfig", menuName = "Cielonos/Map/MapGenerationConfig")]
public partial 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 SerializedDictionary<MapNodeType, List<ZoneData>> zonePools = new SerializedDictionary<MapNodeType, List<ZoneData>>();
// ----------------------------------------------------------------
// 特殊节点数量配额
// ----------------------------------------------------------------
[Title("特殊节点配额")]
[Tooltip("每种特殊节点类型在整张地图中的数量上限")]
[DictionaryDrawerSettings(KeyLabel = "节点类型", ValueLabel = "数量")]
public Dictionary<MapNodeType, MapNodeSettings> specialNodes = new Dictionary<MapNodeType, MapNodeSettings>
{
{ MapNodeType.EliteBattle, new MapNodeSettings()},
{ MapNodeType.MechanicalTable, new MapNodeSettings() },
{ MapNodeType.LogisticsCenter, new MapNodeSettings() },
{ MapNodeType.MedicalStation, new MapNodeSettings() },
};
// ----------------------------------------------------------------
// UI 布局参数
// ----------------------------------------------------------------
[Title("UI 布局参数")]
[Tooltip("节点之间的间距(用于 UI 坐标计算)")]
public float nodeSpacing = 120f;
}
public partial class MapGenerationConfig
{
[Serializable]
public class MapNodeSettings
{
[Tooltip("每种特殊节点类型在整张地图中的数量上限")]
[MinValue(0)]
public int maxSpawnCount = 1;
[Tooltip("特殊节点与起点之间的最小距离BFS 步数),避免起点附近出现商店等")]
[MinValue(1)]
public int minDistanceFromStart = 2;
[Tooltip("同类特殊节点之间的最小距离BFS 步数),防止同类型节点扎堆")]
[MinValue(1)]
public int minSameTypeDistance = 2;
public MapNodeSettings()
{
}
}
}
}