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