Files
AIC-Project/Client/Assets/Script/xmain/UI/AuthRegisterLoginController.cs
T
2026-07-10 10:24:29 +08:00

270 lines
8.8 KiB
C#

using System;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace XGame
{
public class AuthRegisterLoginController : MonoBehaviour
{
private TMP_InputField loginUsernameField;
private TMP_InputField loginPasswordField;
private TMP_InputField registerUsernameField;
private TMP_InputField registerPasswordField;
private TMP_InputField registerConfirmField;
private Toggle toggleRemember;
private Button btnLogin;
private Button btnRegister;
private Button btnGuest;
private Button btnTabLogin;
private Button btnTabRegister;
private GameObject loginForm;
private GameObject registerForm;
private GameObject rememberRow;
private TMP_Text tipsText;
private TMP_Text titleText;
private TMP_Text rememberText;
private string luaModule = "client/login";
private bool isRegisterMode;
private bool isLoading;
public Action<string, string, bool, bool> OnLogin;
public Action<string, string, string> OnRegister;
public Action<string, string, bool, bool> OnGuestLogin;
private void Awake()
{
CacheControls();
WireEvents();
SwitchLogin();
}
public void Bind(string module)
{
if (!string.IsNullOrEmpty(module))
{
luaModule = module;
}
}
public void SetInitialState(string account, bool remember, bool autoLogin, bool agreement)
{
SetInitialState(account, string.Empty, remember, autoLogin, agreement);
}
public void SetInitialState(string account, string password, bool rememberPassword, bool autoLogin, bool agreement)
{
CacheControls();
SetInputText(loginUsernameField, account);
SetInputText(loginPasswordField, rememberPassword ? password : string.Empty);
SetInputText(registerUsernameField, account);
if (toggleRemember != null)
{
toggleRemember.isOn = rememberPassword;
}
if (rememberText != null)
{
rememberText.text = "记住密码";
}
}
public void SetServerInfo(string serverName, string status)
{
}
public void SetVersion(string version)
{
}
public void SetLoading(bool loading)
{
isLoading = loading;
SetButtonEnabled(btnLogin, !loading);
SetButtonEnabled(btnRegister, !loading);
SetButtonEnabled(btnGuest, !loading);
SetButtonEnabled(btnTabLogin, !loading);
SetButtonEnabled(btnTabRegister, !loading);
if (loading)
{
ShowError(isRegisterMode ? "Registering..." : "Logging in...");
}
}
public void ShowError(string message)
{
CacheControls();
if (tipsText != null)
{
tipsText.text = message ?? string.Empty;
}
}
public void Close()
{
Destroy(gameObject);
}
public void ToggleBaseAtlas()
{
}
public void SwitchLogin()
{
isRegisterMode = false;
SetActive(loginForm, true);
SetActive(registerForm, false);
SetActive(rememberRow, true);
SetActive(btnLogin, true);
SetActive(btnGuest, true);
SetActive(btnRegister, false);
if (titleText != null)
{
titleText.text = "Login";
}
ShowError(string.Empty);
}
public void SwitchRegister()
{
isRegisterMode = true;
SetActive(loginForm, false);
SetActive(registerForm, true);
SetActive(rememberRow, false);
SetActive(btnLogin, false);
SetActive(btnGuest, false);
SetActive(btnRegister, true);
if (titleText != null)
{
titleText.text = "Register";
}
ShowError(string.Empty);
}
private void OnLoginClicked()
{
if (isLoading)
{
return;
}
OnLogin?.Invoke(
GetInputText(loginUsernameField),
GetInputText(loginPasswordField),
toggleRemember != null && toggleRemember.isOn,
false);
}
private void OnRegisterClicked()
{
if (isLoading)
{
return;
}
OnRegister?.Invoke(
GetInputText(registerUsernameField),
GetInputText(registerPasswordField),
GetInputText(registerConfirmField));
}
private void OnGuestClicked()
{
if (isLoading)
{
return;
}
OnGuestLogin?.Invoke(
GetInputText(loginUsernameField),
GetInputText(loginPasswordField),
toggleRemember != null && toggleRemember.isOn,
false);
}
private void CacheControls()
{
loginUsernameField = loginUsernameField ? loginUsernameField : Find<TMP_InputField>("LoginUsernameField");
loginPasswordField = loginPasswordField ? loginPasswordField : Find<TMP_InputField>("LoginPasswordField");
registerUsernameField = registerUsernameField ? registerUsernameField : Find<TMP_InputField>("RegisterUsernameField");
registerPasswordField = registerPasswordField ? registerPasswordField : Find<TMP_InputField>("RegisterPasswordField");
registerConfirmField = registerConfirmField ? registerConfirmField : Find<TMP_InputField>("RegisterConfirmField");
toggleRemember = toggleRemember ? toggleRemember : Find<Toggle>("ToggleRemember");
btnLogin = btnLogin ? btnLogin : Find<Button>("BtnLogin");
btnRegister = btnRegister ? btnRegister : Find<Button>("BtnRegister");
btnGuest = btnGuest ? btnGuest : Find<Button>("BtnGuest");
btnTabLogin = btnTabLogin ? btnTabLogin : Find<Button>("BtnTabLogin");
btnTabRegister = btnTabRegister ? btnTabRegister : Find<Button>("BtnTabRegister");
loginForm = loginForm ? loginForm : FindGameObject("LoginForm");
registerForm = registerForm ? registerForm : FindGameObject("RegisterForm");
rememberRow = rememberRow ? rememberRow : FindGameObject("RememberRow");
tipsText = tipsText ? tipsText : Find<TMP_Text>("TextTips");
titleText = titleText ? titleText : Find<TMP_Text>("TextPanelTitle");
rememberText = rememberText ? rememberText : Find<TMP_Text>("TextRemember");
}
private void WireEvents()
{
AddClick(btnLogin, OnLoginClicked);
AddClick(btnRegister, OnRegisterClicked);
AddClick(btnGuest, OnGuestClicked);
AddClick(btnTabLogin, SwitchLogin);
AddClick(btnTabRegister, SwitchRegister);
}
private T Find<T>(string name) where T : Component
{
Transform target = transform.FindTransform(name);
return target == null ? null : target.GetComponent<T>();
}
private GameObject FindGameObject(string name)
{
Transform target = transform.FindTransform(name);
return target == null ? null : target.gameObject;
}
private void AddClick(Button button, UnityEngine.Events.UnityAction action)
{
if (button == null)
{
return;
}
button.onClick.RemoveListener(action);
button.onClick.AddListener(action);
}
private static string GetInputText(TMP_InputField input)
{
return input == null ? string.Empty : input.text;
}
private static void SetInputText(TMP_InputField input, string text)
{
if (input != null)
{
input.text = text ?? string.Empty;
}
}
private static void SetButtonEnabled(Button button, bool enabled)
{
if (button != null)
{
button.interactable = enabled;
}
}
private static void SetActive(Component component, bool active)
{
if (component != null)
{
component.gameObject.SetActive(active);
}
}
private static void SetActive(GameObject gameObject, bool active)
{
if (gameObject != null)
{
gameObject.SetActive(active);
}
}
}
}