using System.Collections; using Convai.Scripts.Runtime.PlayerStats; using TMPro; using UnityEngine; namespace Convai.Scripts.Runtime.UI { /// /// This class is used to manage the display name settings in the UI. /// public class UIDisplayNameSettings : MonoBehaviour { /// /// Reference to the TextMeshPro input field for entering/displaying the display name. /// [SerializeField] private TMP_InputField playerNameInputField; private ConvaiPlayerDataSO _convaiPlayerData; private bool _hasPlayerNameBeenSaved; private string _originalPlayerName; private UISettingsPanel _uiSettingsPanel; private void Awake() { _originalPlayerName = string.Empty; _uiSettingsPanel = GetComponentInParent(); _uiSettingsPanel.SaveChangesButton.onClick.AddListener(() => { _hasPlayerNameBeenSaved = true; _originalPlayerName = string.Empty; }); _uiSettingsPanel.SettingsPanelExitButton.onClick.AddListener(() => { if (_hasPlayerNameBeenSaved || string.IsNullOrEmpty(_originalPlayerName)) return; playerNameInputField.text = _originalPlayerName; _originalPlayerName = string.Empty; }); } private IEnumerator Start() { yield return new WaitForSeconds(0.1f); if (ConvaiPlayerDataSO.GetPlayerData(out _convaiPlayerData)) playerNameInputField.text = string.IsNullOrEmpty(_convaiPlayerData.PlayerName) ? _convaiPlayerData.DefaultPlayerName : _convaiPlayerData.PlayerName; } private void OnEnable() { UISaveLoadSystem.Instance.OnSave += UISaveLoadSystem_OnSave; playerNameInputField.onSelect.AddListener(PlayerNameInputField_OnSelect); } private void OnDisable() { UISaveLoadSystem.Instance.OnSave -= UISaveLoadSystem_OnSave; playerNameInputField.onSelect.RemoveListener(PlayerNameInputField_OnSelect); } private void PlayerNameInputField_OnSelect(string value) { if (!string.IsNullOrEmpty(_originalPlayerName)) return; _originalPlayerName = value; } private void UISaveLoadSystem_OnSave() { if (_convaiPlayerData == null || !_hasPlayerNameBeenSaved || string.IsNullOrEmpty(playerNameInputField.text)) return; _convaiPlayerData.PlayerName = playerNameInputField.text; } } }