mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 06:57:12 +08:00
(client) feat:支持定义实体的碰撞体大小和偏移;建筑支持定义实体建筑和瓦片建筑,建筑支持指定按钮回调;添加存档管理器;Dev支持设置是否暂停;实体允许定义事件组;添加基地界面 (#57)
Co-authored-by: m0_75251201 <m0_75251201@noreply.gitcode.com> Reviewed-on: http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite/pulls/57
This commit is contained in:
@@ -17,14 +17,18 @@ namespace Map
|
||||
[Tooltip("此维度的唯一标识符。如果为空,将使用GameObject的名称。")]
|
||||
private string _dimensionId;
|
||||
|
||||
[SerializeField] public MapGenerator mapGenerator;
|
||||
[SerializeField] public Landform landform;
|
||||
|
||||
public Vector3 cameraPosition;
|
||||
public Vector3 cameraPosition = new(0, 0, -10);
|
||||
|
||||
public Entity.Entity focusEntity;
|
||||
|
||||
public string mapGeneratorId;
|
||||
public DimensionDef dimensionDefinition;
|
||||
|
||||
public Vector2Int DimensionSize { get;private set; }
|
||||
|
||||
public event System.Action<Dimension> OnDimensionLoaded;
|
||||
/// <summary>
|
||||
/// 获取此维度的唯一标识符。
|
||||
/// </summary>
|
||||
@@ -50,26 +54,22 @@ namespace Map
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
|
||||
// 1. 确保 DimensionId 已初始化,这会触发 DimensionId 属性的 getter 逻辑
|
||||
var id = DimensionId;
|
||||
// 2. 创建一个用于存放此维度下所有实体的根GameObject,方便管理
|
||||
var rootObj = new GameObject($"_Entities_{id}");
|
||||
rootObj.transform.SetParent(this.transform); // 将其作为Dimension对象的子对象
|
||||
DimensionRoot = rootObj.transform;
|
||||
Program.Instance.RegisterDimension(this);
|
||||
|
||||
mapGenerator.Init();
|
||||
var size = mapGenerator.GetSize();
|
||||
cameraPosition = new Vector3(size.x / 2f, size.y / 2f, -10)+transform.position;
|
||||
|
||||
// 5. 处理 defaultOpen 逻辑,设置Program的焦点维度
|
||||
// 确保在自身注册到 Program 之后再设置焦点,这样 Program 内部才能找到它
|
||||
Program.Instance.RegisterDimension(this);
|
||||
landform.Init();
|
||||
if (defaultOpen)
|
||||
{
|
||||
Program.Instance.SetFocusedDimension(_dimensionId);
|
||||
}
|
||||
|
||||
mapGeneratorId = Configs.ConfigManager.Instance.GetValue<string>(mapGeneratorId);
|
||||
mapGeneratorId = Configs.ConfigManager.Instance.GetValue<string>(DimensionId);
|
||||
if (!string.IsNullOrEmpty(mapGeneratorId))
|
||||
{
|
||||
dimensionDefinition=DefineManager.Instance.FindDefine<DimensionDef>(mapGeneratorId);
|
||||
@@ -78,6 +78,7 @@ namespace Map
|
||||
_=ApplyDimensionDef(dimensionDefinition);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -92,14 +93,32 @@ namespace Map
|
||||
|
||||
private async Task ApplyDimensionDef(DimensionDef def)
|
||||
{
|
||||
var maxWidth = DimensionSize.x; // 初始化为当前的维度尺寸
|
||||
var maxHeight = DimensionSize.y; // 初始化为当前的维度尺寸
|
||||
|
||||
if (def.mapGenerators != null)
|
||||
{
|
||||
foreach (var defMapGenerator in def.mapGenerators)
|
||||
{
|
||||
await TileManager.Instance.ApplyMapGenerator(defMapGenerator.defName, mapGenerator);
|
||||
var workClass = TileManager.Instance.GetMapGeneratorWorkClass(defMapGenerator.defName);
|
||||
if (workClass == null) continue;
|
||||
|
||||
var requiredSize = workClass.GetSize();
|
||||
maxWidth = Mathf.Max(maxWidth, requiredSize.x);
|
||||
maxHeight = Mathf.Max(maxHeight, requiredSize.y);
|
||||
}
|
||||
|
||||
DimensionSize = new Vector2Int(maxWidth, maxHeight);
|
||||
cameraPosition = new Vector3(DimensionSize.x / 2f, DimensionSize.y / 2f, -10)+transform.position;
|
||||
foreach (var defMapGenerator in def.mapGenerators)
|
||||
{
|
||||
await TileManager.Instance.ApplyMapGenerator(defMapGenerator.defName, landform);
|
||||
}
|
||||
}
|
||||
|
||||
OnDimensionLoaded.Invoke(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user