NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/UI_WriteNameController.cs

182 lines
5.0 KiB
C#
Raw Normal View History

2024-06-20 16:06:27 +08:00
using Cysharp.Threading.Tasks;
2024-07-03 19:15:36 +08:00
using Framework;
2024-06-20 16:06:27 +08:00
using Gameplay;
2025-03-27 15:26:49 +08:00
using Gameplay.FirstTimeFlow;
2025-03-27 15:46:09 +08:00
using Gameplay.Naming;
2024-06-20 16:06:27 +08:00
using Gameplay.Net;
2025-03-27 15:26:49 +08:00
using System;
2024-06-20 16:06:27 +08:00
using TMPro;
using UnityEngine.UI;
/// <summary>
/// 改名UI
/// </summary>
public class UI_WriteNameController : UIWindow
{
/// <summary>
/// 打开改名界面
/// </summary>
/// <returns></returns>
2025-03-27 15:26:49 +08:00
public static async UniTask<UIWindow> Open(Action callback)
2024-06-20 16:06:27 +08:00
{
2024-09-18 16:03:02 +08:00
CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
2024-06-20 16:06:27 +08:00
EventManager.Instance.Send(EventManager.EventName.STORY_WRITE_NAME);
2025-03-27 15:26:49 +08:00
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_WriteName, callback);
2024-06-20 16:06:27 +08:00
}
#region UI
/// <summary>
/// 高斯模糊遮罩
/// </summary>
private RawImage rawImageGaussianBlurMask;
/// <summary>
/// 确定按钮
/// </summary>
private Button buttonConfirm;
/// <summary>
/// 输入框
/// </summary>
private TMP_InputField inputField;
2024-10-11 14:04:52 +08:00
/// <summary>
/// 关闭按钮
/// </summary>
private Button Button_Close;
2024-06-20 16:06:27 +08:00
#endregion
/// <summary>
/// 最大长度
/// </summary>
private const int MAX_LENGT = 8;
2024-10-18 14:26:34 +08:00
/// <summary>
/// 修改之前的名字
/// </summary>
private string changePreName;
2024-10-15 12:21:22 +08:00
private bool isChangeName;
2025-03-27 15:26:49 +08:00
/// <summary>
/// 关闭时回调
/// </summary>
private Action callbackAction;
2024-10-15 12:21:22 +08:00
2024-06-20 16:06:27 +08:00
public override void OnInit()
{
rawImageGaussianBlurMask = GetComponent<RawImage>("GaussianBlurMask");
buttonConfirm = GetComponent<Button>("Image_BG/Button_Confirm");
inputField = GetComponent<TMP_InputField>("Image_BG/InputField (TMP)");
2024-10-11 14:04:52 +08:00
Button_Close = GetComponent<Button>("Image_BG/Button_Close");
2024-06-20 16:06:27 +08:00
rawImageGaussianBlurMask.texture = CommonUtils.GetScreenTexture2D();
2024-06-20 16:06:27 +08:00
2024-10-17 13:13:53 +08:00
inputField.onValueChanged.AddListener(ValidateInput);
2025-03-27 15:46:09 +08:00
Button_Close.gameObject.SetActive(!FirstTimeFlowManager.Instance.IsFlowing);
2024-06-20 16:06:27 +08:00
BindButton(buttonConfirm, OnConfirm);
2024-10-11 14:04:52 +08:00
BindButton(Button_Close, OnCloseClick);
2024-10-15 12:21:22 +08:00
isChangeName = false;
2024-07-09 13:23:49 +08:00
EventManager.Instance.Register(EventManager.EventName.PlayerInfoUpdate, OnChangeName);
2024-07-09 15:53:50 +08:00
EventManager.Instance.Register(EventManager.EventName.SetName, OnChangeName);
EventManager.Instance.Register<uint>(EventManager.EventName.NetOpResultError, ChangeError);
2024-06-20 16:06:27 +08:00
}
2025-03-27 15:46:09 +08:00
private void ValidateInput(string input)
2024-10-17 13:13:53 +08:00
{
2025-03-27 15:46:09 +08:00
inputField.text = NamingManager.Instance.ValidateInput(input);
2024-10-17 13:13:53 +08:00
}
2024-06-20 16:06:27 +08:00
protected override void OnShowWindow(object data = null)
{
base.OnShowWindow(data);
2025-03-27 15:26:49 +08:00
if (data is Action callback)
callbackAction = callback;
2024-10-18 14:26:34 +08:00
changePreName = Actor.Instance.Base.Nickname;
2024-06-20 16:06:27 +08:00
}
public override void OnRelease()
{
2024-07-09 15:53:50 +08:00
EventManager.Instance.Unregister(EventManager.EventName.SetName, OnChangeName);
2024-07-09 13:23:49 +08:00
EventManager.Instance.Unregister(EventManager.EventName.PlayerInfoUpdate, OnChangeName);
2024-10-15 12:21:22 +08:00
EventManager.Instance.Unregister<uint>(EventManager.EventName.NetOpResultError, ChangeError);
2024-07-09 13:23:49 +08:00
2024-10-17 13:13:53 +08:00
inputField.onValueChanged.RemoveAllListeners();
2024-06-20 16:06:27 +08:00
base.OnRelease();
}
/// <summary>
/// 设置名字
/// </summary>
/// <param name="name"></param>
private void SetName(string name)
{
2024-07-09 13:23:49 +08:00
NetHelper.SetPlayerName(name);
2024-06-20 16:06:27 +08:00
}
#region 回调方法
/// <summary>
/// 关闭
/// </summary>
private void OnClose()
{
2025-03-27 15:26:49 +08:00
callbackAction?.Invoke();
2024-06-20 16:06:27 +08:00
CloseWindow();
}
/// <summary>
/// 确定选择
/// </summary>
2024-07-04 19:28:37 +08:00
private async void OnConfirm()
2024-06-20 16:06:27 +08:00
{
2024-10-15 12:21:22 +08:00
if (isChangeName)
{
DebugUtil.Log("等待服务器返回,屏蔽重复点击操作");
return;
}
2024-06-20 16:06:27 +08:00
if (string.IsNullOrWhiteSpace(inputField.text))
{
2025-01-17 16:23:44 +08:00
UITipsManager.ShowConfirmOne(CommonUtils.GetLocalizeText("PlayerInfo_Attention"), CommonUtils.GetLocalizeText("PlayerInfo_ErrorName"), null);
2024-06-20 16:06:27 +08:00
return;
}
if (inputField.text.Length > MAX_LENGT)
{
2025-01-17 16:23:44 +08:00
UITipsManager.ShowConfirmOne(CommonUtils.GetLocalizeText("PlayerInfo_Attention"), string.Format(CommonUtils.GetLocalizeText("PlayerInfo_NameLengthLimited"), MAX_LENGT), null);
2024-06-20 16:06:27 +08:00
return;
}
2024-10-15 12:21:22 +08:00
isChangeName = true;
2025-03-27 15:26:49 +08:00
await UI_NameConfirmWindowController.Open(string.Format(CommonUtils.GetLocalizeText("PlayerInfo_NameEditConfirm"), inputField.text),
() => { SetName(inputField.text); },
() => { isChangeName = false; });
2024-06-20 16:06:27 +08:00
}
2024-07-09 13:23:49 +08:00
private void OnChangeName()
{
2024-10-18 14:26:34 +08:00
if (changePreName == Actor.Instance.Base.Nickname)
return;
2024-10-15 12:21:22 +08:00
isChangeName = false;
2024-07-09 13:23:49 +08:00
OnClose();
}
2024-10-15 12:21:22 +08:00
private void ChangeError(uint msg)
{
DebugUtil.Log("Change Name Error: " + msg);
isChangeName = false;
}
2024-10-11 14:04:52 +08:00
protected override void OnCloseClick()
{
2025-03-27 15:26:49 +08:00
if (FirstTimeFlowManager.Instance.IsFlowing)
return;
base.OnCloseClick();
OnClose();
2024-10-11 14:04:52 +08:00
}
2024-06-20 16:06:27 +08:00
#endregion
}