using Code.Scripts.Gameplay.Game; using Framework; using Gameplay.Net; using PhxhSDK; using System.Text.RegularExpressions; namespace Gameplay.Naming { /// /// 取名管理器 /// public sealed class NamingManager : Singlenton, IInitable { /// /// 有效校验正则表达式(只允许输入英文字符、中文字符和数字) /// private const string PATTERN = @"^[a-zA-Z0-9\u4e00-\u9fa5]*$"; /// /// 是否改过名 /// public bool IsSetName { get { uint time = Actor.Instance.Base.GetProp(NLDPB.ActorProp.SetNickTime); return 0u != time; } } public void Init() { EventManager.Instance.Register(EventManager.EventName.STORY_OPEN_NAME_PANEL, OpenNamePanelFromStory); } public void Release() { EventManager.Instance.Unregister(EventManager.EventName.STORY_OPEN_NAME_PANEL, OpenNamePanelFromStory); } /// /// 从剧情打开改名UI /// public async void OpenNamePanelFromStory() { if (IsSetName) return; if (GameStateManager.Instance.GetCurState() is GameStateStory gameStateStory) gameStateStory.IsReady = false; await UI_WriteNameController.Open(() => { if (GameStateManager.Instance.GetCurState() is GameStateStory gameStateStory) gameStateStory.IsReady = true; }); } /// /// 输入校验 /// /// /// public string ValidateInput(string input) { if (!Regex.IsMatch(input, PATTERN)) return Regex.Replace(input, @"[^a-zA-Z0-9\u4e00-\u9fa5]", string.Empty); // 移除不合法的字符 return input; } } }