feat(auth): add reusable auth button and input field components

This commit is contained in:
EmirHanMamak 2026-01-17 14:22:05 +03:00
parent ea005e4477
commit c947a84477
8 changed files with 142 additions and 12 deletions

View file

@ -451,9 +451,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 3955dbe39e234b7a84bffd5f053855ff, type: 3}
m_Name:
m_EditorClassIdentifier:
loginButton: {fileID: 489976505}
usernameInputField: {fileID: 535676077}
passwordInputField: {fileID: 234502803}
loginButton: {fileID: 489976508}
usernameInputField: {fileID: 535676080}
passwordInputField: {fileID: 234502806}
--- !u!1 &184757597
GameObject:
m_ObjectHideFlags: 0
@ -498,6 +498,7 @@ GameObject:
- component: {fileID: 234502805}
- component: {fileID: 234502804}
- component: {fileID: 234502803}
- component: {fileID: 234502806}
m_Layer: 5
m_Name: Password_IF
m_TagString: Untagged
@ -665,6 +666,19 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 234502801}
m_CullTransparentMesh: 1
--- !u!114 &234502806
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 234502801}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cc52e32da9f14d4596cc527b7496815a, type: 3}
m_Name:
m_EditorClassIdentifier:
errorText: {fileID: 0}
--- !u!1 &330585543
GameObject:
m_ObjectHideFlags: 0
@ -1280,6 +1294,7 @@ GameObject:
- component: {fileID: 489976507}
- component: {fileID: 489976506}
- component: {fileID: 489976505}
- component: {fileID: 489976508}
m_Layer: 5
m_Name: Login_BT
m_TagString: Untagged
@ -1390,6 +1405,18 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 489976503}
m_CullTransparentMesh: 1
--- !u!114 &489976508
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 489976503}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f2fb03888bd1498daadd244b4646b820, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &535676075
GameObject:
m_ObjectHideFlags: 0
@ -1402,6 +1429,7 @@ GameObject:
- component: {fileID: 535676079}
- component: {fileID: 535676078}
- component: {fileID: 535676077}
- component: {fileID: 535676080}
m_Layer: 5
m_Name: Username_IF
m_TagString: Untagged
@ -1569,6 +1597,19 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 535676075}
m_CullTransparentMesh: 1
--- !u!114 &535676080
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 535676075}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: cc52e32da9f14d4596cc527b7496815a, type: 3}
m_Name:
m_EditorClassIdentifier:
errorText: {fileID: 0}
--- !u!1 &555582722
GameObject:
m_ObjectHideFlags: 0

View file

@ -1,6 +1,6 @@
using System;
using System.Text.RegularExpressions;
using _Hub.Scripts.Network;
using _Network.Auth;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
@ -13,9 +13,9 @@ namespace _Hub.Scripts.UI
private const int _maxUsernameLength = 15;
private const int _maxPasswordLength = 15;
[SerializeField] private Button loginButton;
[SerializeField] private TMP_InputField usernameInputField;
[SerializeField] private TMP_InputField passwordInputField;
[SerializeField] private AuthButton loginButton;
[SerializeField] private AuthInputField usernameInputField;
[SerializeField] private AuthInputField passwordInputField;
private string _username = String.Empty;
private string _password = String.Empty;
@ -23,11 +23,16 @@ namespace _Hub.Scripts.UI
#region Unity
private void Awake()
private void Start()
{
loginButton.onClick.AddListener(OnLoginClick);
usernameInputField.onValueChanged.AddListener(UpdateUsername);
passwordInputField.onValueChanged.AddListener(UpdatePassword);
AddListeners();
}
private void AddListeners()
{
loginButton.Button.onClick.AddListener(OnLoginClick);
usernameInputField.InputField.onValueChanged.AddListener(UpdateUsername);
passwordInputField.InputField.onValueChanged.AddListener(UpdatePassword);
}
private void OnLoginClick()
@ -59,7 +64,7 @@ namespace _Hub.Scripts.UI
private void EnableLoginButton(bool interactable)
{
loginButton.interactable = interactable;
loginButton.SetInteractable(interactable);
}
#endregion

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: edb52cd058b3ca540abe98e6753e88b5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: abb1ea9e4295c5f43b5a59e431512163
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View file

@ -0,0 +1,26 @@
using System;
using UnityEngine;
using UnityEngine.UI;
namespace _Network.Auth
{
public class AuthButton : MonoBehaviour
{
public Button Button
{
get { return _button; }
}
private Button _button;
private void Awake()
{
_button = GetComponent<Button>();
}
public void SetInteractable(bool value)
{
_button.interactable = value;
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f2fb03888bd1498daadd244b4646b820
timeCreated: 1768648667

View file

@ -0,0 +1,36 @@
using System;
using TMPro;
using UnityEngine;
namespace _Network.Auth
{
public class AuthInputField : MonoBehaviour
{
public TMP_InputField InputField
{
get { return _inputField; }
}
private TMP_InputField _inputField;
[SerializeField] private TMP_Text errorText;
private void Awake()
{
_inputField = GetComponent<TMP_InputField>();
}
public void Error(bool show)
{
if (show)
{
errorText.gameObject.SetActive(true);
}
else
{
errorText.gameObject.SetActive(true);
}
}
}
}

View file

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: cc52e32da9f14d4596cc527b7496815a
timeCreated: 1768647887