NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Naming/NamingManager.cs

72 lines
2.1 KiB
C#

using Code.Scripts.Gameplay.Game;
using Framework;
using Gameplay.Net;
using PhxhSDK;
using System.Text.RegularExpressions;
namespace Gameplay.Naming
{
/// <summary>
/// 取名管理器
/// </summary>
public sealed class NamingManager : Singlenton<NamingManager>, IInitable
{
/// <summary>
/// 有效校验正则表达式(只允许输入英文字符、中文字符和数字)
/// </summary>
private const string PATTERN = @"^[a-zA-Z0-9\u4e00-\u9fa5]*$";
/// <summary>
/// 是否改过名
/// </summary>
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);
}
/// <summary>
/// 从剧情打开改名UI
/// </summary>
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;
});
}
/// <summary>
/// 输入校验
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public string ValidateInput(string input)
{
if (!Regex.IsMatch(input, PATTERN))
return Regex.Replace(input, @"[^a-zA-Z0-9\u4e00-\u9fa5]", string.Empty); // 移除不合法的字符
return input;
}
}
}