182 lines
5.0 KiB
C#
182 lines
5.0 KiB
C#
using Cysharp.Threading.Tasks;
|
|
using Framework;
|
|
using Gameplay;
|
|
using Gameplay.FirstTimeFlow;
|
|
using Gameplay.Naming;
|
|
using Gameplay.Net;
|
|
using System;
|
|
using TMPro;
|
|
using UnityEngine.UI;
|
|
|
|
/// <summary>
|
|
/// 改名UI
|
|
/// </summary>
|
|
public class UI_WriteNameController : UIWindow
|
|
{
|
|
/// <summary>
|
|
/// 打开改名界面
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static async UniTask<UIWindow> Open(Action callback)
|
|
{
|
|
CommonUtils.CaptureScreenshot(); // 截取当前屏幕截图
|
|
|
|
EventManager.Instance.Send(EventManager.EventName.STORY_WRITE_NAME);
|
|
return await UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_WriteName, callback);
|
|
}
|
|
|
|
#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;
|
|
/// <summary>
|
|
/// 关闭时回调
|
|
/// </summary>
|
|
private Action callbackAction;
|
|
|
|
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(!FirstTimeFlowManager.Instance.IsFlowing);
|
|
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);
|
|
}
|
|
|
|
private void ValidateInput(string input)
|
|
{
|
|
inputField.text = NamingManager.Instance.ValidateInput(input);
|
|
}
|
|
|
|
protected override void OnShowWindow(object data = null)
|
|
{
|
|
base.OnShowWindow(data);
|
|
|
|
if (data is Action callback)
|
|
callbackAction = callback;
|
|
|
|
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()
|
|
{
|
|
callbackAction?.Invoke();
|
|
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; });
|
|
}
|
|
|
|
private void OnChangeName()
|
|
{
|
|
if (changePreName == Actor.Instance.Base.Nickname)
|
|
return;
|
|
|
|
isChangeName = false;
|
|
|
|
OnClose();
|
|
}
|
|
|
|
private void ChangeError(uint msg)
|
|
{
|
|
DebugUtil.Log("Change Name Error: " + msg);
|
|
isChangeName = false;
|
|
}
|
|
|
|
protected override void OnCloseClick()
|
|
{
|
|
if (FirstTimeFlowManager.Instance.IsFlowing)
|
|
return;
|
|
|
|
base.OnCloseClick();
|
|
OnClose();
|
|
}
|
|
#endregion
|
|
} |