(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:
2025-09-28 15:02:57 +08:00
parent 87a8abe86c
commit aff747be17
232 changed files with 39203 additions and 4161 deletions

View File

@@ -0,0 +1,74 @@
using System;
using Base;
using Newtonsoft.Json;
namespace EventWorkClass
{
public class Event_OpenUI : EventWorkClassBase
{
// 新增私有数据类用于JSON反序列化
private class OpenUIEventData
{
public string uiName { get; set; } // 对应JSON中的 "uiName" 字段
}
// 新增私有字段用于存储解析出的UI名称
private string _uiName;
/// <summary>
/// 初始化事件解析JSON字符串获取UI名称。
/// </summary>
/// <param name="value">包含UI名称的JSON字符串例如: {"uiName": "MainMenuUI"}</param>
/// <exception cref="System.ArgumentException">当value为null或空时抛出。</exception>
/// <exception cref="System.FormatException">当JSON格式无效或缺少'uiName'属性时抛出。</exception>
/// <exception cref="System.InvalidOperationException">当发生其他意外错误时抛出。</exception>
public override void Init(string value)
{
if (string.IsNullOrEmpty(value))
{
throw new System.ArgumentException(
"Event_OpenUI Init: value cannot be null or empty. It must contain the UI configuration JSON.",
nameof(value));
}
try
{
// 反序列化JSON字符串为OpenUIEventData对象
OpenUIEventData eventData = JsonConvert.DeserializeObject<OpenUIEventData>(value);
// 检查反序列化结果是否有效
if (eventData == null || string.IsNullOrEmpty(eventData.uiName))
{
throw new System.FormatException(
$"Event_OpenUI Init: Invalid JSON format or missing 'uiName' property in value: '{value}'");
}
// 存储UI名称
_uiName = eventData.uiName;
}
catch (Newtonsoft.Json.JsonSerializationException ex)
{
// JSON反序列化失败的特定处理
throw new System.FormatException(
$"Event_OpenUI Init: Failed to deserialize JSON for value: '{value}'. Please ensure it is a valid JSON string with a 'uiName' property. Error: {ex.Message}",
ex);
}
catch (Exception ex)
{
// 捕获其他所有潜在异常,提供更通用的错误信息
throw new System.InvalidOperationException(
$"Event_OpenUI Init: An unexpected error occurred during initialization for value: '{value}'. Error: {ex.Message}",
ex);
}
}
/// <summary>
/// 运行事件打开UI界面。
/// </summary>
/// <param name="dimensionID">维度ID (当前未被使用,但保留接口)。</param>
/// <param name="initiator">触发此事件的实体 (当前未被使用,但保留接口)。</param>
public override void Run(string dimensionID, Entity.Entity initiator = null)
{
UIInputControl.Instance.Show(_uiName);
}
}
}