185 lines
5.3 KiB
C#
185 lines
5.3 KiB
C#
using Code.Scripts.Gameplay.Game;
|
|
using Cysharp.Threading.Tasks;
|
|
using Framework;
|
|
using Gameplay;
|
|
using Gameplay.Guide;
|
|
using Gameplay.Net;
|
|
using System.Text.RegularExpressions;
|
|
using TMPro;
|
|
using UnityEngine.UI;
|
|
|
|
/// <summary>
|
|
/// 改名UI
|
|
/// </summary>
|
|
public class UI_WriteNameController : UIWindow
|
|
{
|
|
/// <summary>
|
|
/// 打开改名界面
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static async UniTask<UIWindow> Open()
|
|
{
|
|
CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.STORY_WRITE_NAME);
|
|
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_WriteName);
|
|
}
|
|
|
|
#region UI
|
|
/// <summary>
|
|
/// 高斯模糊遮罩
|
|
/// </summary>
|
|
private RawImage rawImageGaussianBlurMask;
|
|
/// <summary>
|
|
/// 确定按钮
|
|
/// </summary>
|
|
private Button buttonConfirm;
|
|
/// <summary>
|
|
/// 输入框
|
|
/// </summary>
|
|
private TMP_InputField inputField;
|
|
/// <summary>
|
|
/// 关闭按钮
|
|
/// </summary>
|
|
private Button Button_Close;
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// 最大长度
|
|
/// </summary>
|
|
private const int MAX_LENGT = 8;
|
|
|
|
/// <summary>
|
|
/// 修改之前的名字
|
|
/// </summary>
|
|
private string changePreName;
|
|
|
|
private bool isChangeName;
|
|
|
|
public override void OnInit()
|
|
{
|
|
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
|
|
buttonConfirm = GetComponent<Button>("Image_BG/Button_Confirm");
|
|
inputField = GetComponent<TMP_InputField>("Image_BG/InputField (TMP)");
|
|
Button_Close = GetComponent<Button>("Image_BG/Button_Close");
|
|
|
|
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
|
|
|
|
inputField.onValueChanged.AddListener(ValidateInput);
|
|
|
|
Button_Close.gameObject.SetActive(!GuideManager.Instance.IsGuiding);
|
|
BindButton(buttonConfirm, OnConfirm);
|
|
BindButton(Button_Close, OnCloseClick);
|
|
isChangeName = false;
|
|
|
|
EventManager.Instance.Register(EventManager.EventName.PlayerInfoUpdate, OnChangeName);
|
|
EventManager.Instance.Register(EventManager.EventName.SetName, OnChangeName);
|
|
EventManager.Instance.Register<uint>(EventManager.EventName.NetOpResultError, ChangeError);
|
|
}
|
|
|
|
void ValidateInput(string input)
|
|
{
|
|
// 只允许输入英文字符、中文字符和数字
|
|
string pattern = @"^[a-zA-Z0-9\u4e00-\u9fa5]*$";
|
|
if (!Regex.IsMatch(input, pattern))
|
|
{
|
|
// 移除不合法的字符
|
|
inputField.text = Regex.Replace(input, @"[^a-zA-Z0-9\u4e00-\u9fa5]", "");
|
|
}
|
|
}
|
|
|
|
protected override void OnShowWindow(object data = null)
|
|
{
|
|
base.OnShowWindow(data);
|
|
|
|
changePreName = Actor.Instance.Base.Nickname;
|
|
}
|
|
|
|
public override void OnRelease()
|
|
{
|
|
EventManager.Instance.Unregister(EventManager.EventName.SetName, OnChangeName);
|
|
EventManager.Instance.Unregister(EventManager.EventName.PlayerInfoUpdate, OnChangeName);
|
|
EventManager.Instance.Unregister<uint>(EventManager.EventName.NetOpResultError, ChangeError);
|
|
|
|
inputField.onValueChanged.RemoveAllListeners();
|
|
|
|
base.OnRelease();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置名字
|
|
/// </summary>
|
|
/// <param name="name"></param>
|
|
private void SetName(string name)
|
|
{
|
|
NetHelper.SetPlayerName(name);
|
|
}
|
|
|
|
#region 回调方法
|
|
/// <summary>
|
|
/// 关闭
|
|
/// </summary>
|
|
private void OnClose()
|
|
{
|
|
CloseWindow();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 确定选择
|
|
/// </summary>
|
|
private async void OnConfirm()
|
|
{
|
|
if (isChangeName)
|
|
{
|
|
DebugUtil.Log("等待服务器返回,屏蔽重复点击操作");
|
|
return;
|
|
}
|
|
|
|
if (string.IsNullOrWhiteSpace(inputField.text))
|
|
{
|
|
UITipsManager.ShowConfirmOne(CommonUtils.GetLocalizeText("PlayerInfo_Attention"), CommonUtils.GetLocalizeText("PlayerInfo_ErrorName"), null);
|
|
return;
|
|
}
|
|
|
|
if (inputField.text.Length > MAX_LENGT)
|
|
{
|
|
UITipsManager.ShowConfirmOne(CommonUtils.GetLocalizeText("PlayerInfo_Attention"), string.Format(CommonUtils.GetLocalizeText("PlayerInfo_NameLengthLimited"), MAX_LENGT), null);
|
|
return;
|
|
}
|
|
|
|
isChangeName = true;
|
|
await UI_NameConfirmWindowController.Open(string.Format(CommonUtils.GetLocalizeText("PlayerInfo_NameEditConfirm"), inputField.text), () => { SetName(inputField.text); }, () => { isChangeName = false; });
|
|
//UITipsManager.ShowConfirmTwo("tis", $"确定取名'{inputField.text}'吗?", (Action)(() => { SetName(inputField.text); }), null);
|
|
}
|
|
|
|
private void OnChangeName()
|
|
{
|
|
if (changePreName == Actor.Instance.Base.Nickname)
|
|
return;
|
|
|
|
isChangeName = false;
|
|
if (GuideManager.Instance.IsGuiding)
|
|
{
|
|
if (GameStateManager.Instance.GetCurState() is GameStateStory gameStateStory)
|
|
gameStateStory.IsReady = true;
|
|
}
|
|
|
|
OnClose();
|
|
}
|
|
|
|
private void ChangeError(uint msg)
|
|
{
|
|
DebugUtil.Log("Change Name Error: " + msg);
|
|
isChangeName = false;
|
|
}
|
|
|
|
protected override void OnCloseClick()
|
|
{
|
|
if (!GuideManager.Instance.IsGuiding)
|
|
{
|
|
base.OnCloseClick();
|
|
OnClose();
|
|
}
|
|
}
|
|
#endregion
|
|
} |