mirror of
http://47.107.252.169:3000/Roguelite-Game-Developing-Team/Gen_Hack-and-Slash-Roguelite.git
synced 2025-11-20 04:07:13 +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:
@@ -177,7 +177,8 @@ namespace EventWorkClass
|
||||
/// 运行实体生成器事件,在指定维度生成实体。
|
||||
/// </summary>
|
||||
/// <param name="dimensionID">要生成实体的维度ID。</param>
|
||||
public override void Run(string dimensionID)
|
||||
/// <param name="initiator">发起者</param>
|
||||
public override void Run(string dimensionID,Entity.Entity initiator = null)
|
||||
{
|
||||
if (_config == null)
|
||||
{
|
||||
@@ -190,6 +191,7 @@ namespace EventWorkClass
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < _config.Count; i++)
|
||||
{
|
||||
// 随机选择一个实体定义
|
||||
@@ -205,13 +207,13 @@ namespace EventWorkClass
|
||||
|
||||
if (selectedEntityDef is CharacterDef characterDef)
|
||||
{
|
||||
EntityManage.Instance.GenerateEntity(dimensionID, characterDef, position);
|
||||
EntityManager.Instance.GenerateEntity(dimensionID, characterDef, position);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (selectedEntityDef is MonsterDef monsterDef)
|
||||
{
|
||||
EntityManage.Instance.GenerateMonsterEntity(dimensionID, monsterDef, position);
|
||||
EntityManager.Instance.GenerateMonsterEntity(dimensionID, monsterDef, position);
|
||||
continue;
|
||||
}
|
||||
Debug.LogWarning($"目标实体 '{selectedEntityDef.defName}' (类型: {selectedEntityDef.GetType().Name}) 既不是 CharacterDef 也不是 MonsterDef。" +
|
||||
@@ -237,7 +239,7 @@ namespace EventWorkClass
|
||||
Debug.LogError($"未找到维度 '{dimensionID}'。无法确定生成位置。");
|
||||
return Vector3.zero;
|
||||
}
|
||||
var mapGenerator = dimension.mapGenerator;
|
||||
var mapGenerator = dimension.landform;
|
||||
if (mapGenerator == null)
|
||||
{
|
||||
Debug.LogError($"维度 '{dimensionID}' 的地图生成器为空。无法确定生成位置。");
|
||||
@@ -249,32 +251,32 @@ namespace EventWorkClass
|
||||
{
|
||||
var size = mapGenerator.GetSize();
|
||||
var dir = Random.Range(0, 4); // 0:上, 1:下, 2:左, 3:右
|
||||
Vector2Int gridCoord; // 地图网格坐标
|
||||
Vector3Int gridCoord; // 地图网格坐标
|
||||
Vector2 worldCoord2D; // GetWorldCoordinates 返回的 Vector2Int
|
||||
Vector3 worldPos3D; // 最终的 Vector3 世界坐标
|
||||
var offset = _config.OffMapOffset;
|
||||
switch (dir)
|
||||
{
|
||||
case 0: // Top border (max Y)
|
||||
gridCoord = new Vector2Int(Random.Range(0, size.x), size.y);
|
||||
gridCoord = new Vector3Int(Random.Range(0, size.x), size.y);
|
||||
worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord);
|
||||
worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3
|
||||
worldPos3D.y += offset;
|
||||
break;
|
||||
case 1: // Bottom border (min Y)
|
||||
gridCoord = new Vector2Int(Random.Range(0, size.x), 0);
|
||||
gridCoord = new Vector3Int(Random.Range(0, size.x), 0);
|
||||
worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord);
|
||||
worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3
|
||||
worldPos3D.y -= offset;
|
||||
break;
|
||||
case 2: // Left border (min X)
|
||||
gridCoord = new Vector2Int(0, Random.Range(0, size.y));
|
||||
gridCoord = new Vector3Int(0, Random.Range(0, size.y));
|
||||
worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord);
|
||||
worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3
|
||||
worldPos3D.x -= offset;
|
||||
break;
|
||||
case 3: // Right border (max X)
|
||||
gridCoord = new Vector2Int(size.x, Random.Range(0, size.y));
|
||||
gridCoord = new Vector3Int(size.x, Random.Range(0, size.y));
|
||||
worldCoord2D = mapGenerator.GetWorldCoordinates(gridCoord);
|
||||
worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f); // 转换为 Vector3
|
||||
worldPos3D.x += offset;
|
||||
@@ -301,7 +303,7 @@ namespace EventWorkClass
|
||||
Debug.LogWarning($"配置了 'AroundTargetEntity',但 'TargetFactionDefName' 为空或null。无法找到派系实体。将在原点生成。");
|
||||
return Vector3.zero;
|
||||
}
|
||||
var factionEntities = EntityManage.Instance.FindEntitiesByFaction(dimensionID, _config.TargetFactionDefName);
|
||||
var factionEntities = EntityManager.Instance.FindEntitiesByFaction(dimensionID, _config.TargetFactionDefName);
|
||||
if (factionEntities == null || factionEntities.Length == 0)
|
||||
{
|
||||
Debug.LogWarning($"在维度 '{dimensionID}' 中未找到派系 '{_config.TargetFactionDefName}' 的任何实体。将在原点生成。");
|
||||
@@ -324,7 +326,7 @@ namespace EventWorkClass
|
||||
case EntitySpawnLocationType.RandomlyOnMap:
|
||||
{
|
||||
var size = mapGenerator.GetSize();
|
||||
var randomGridPos = new Vector2Int(Random.Range(0, size.x), Random.Range(0, size.y));
|
||||
var randomGridPos = new Vector3Int(Random.Range(0, size.x), Random.Range(0, size.y));
|
||||
|
||||
var worldCoord2D = mapGenerator.GetWorldCoordinates(randomGridPos);
|
||||
var worldPos3D = new Vector3(worldCoord2D.x, worldCoord2D.y, 0f);
|
||||
|
||||
Reference in New Issue
Block a user