using FairyGUI; using UI.CreateRole; using System; using System.Text.RegularExpressions; using ET; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace GFGGame { public class CreateRoleView : BaseWindow { public enum State { IN, IDLE, OPEN, OUT } private UI_CreateRoleUI _ui; private Dictionary _effectUIDic = new Dictionary(); private GameObject _createRoleNameGameObject; private InputField _createInputField; // 用于存储预制体中的 InputField 组件 public override void Dispose() { // Clear Effect foreach (var v in _effectUIDic) { EffectUIPool.Recycle(v.Value); } _effectUIDic.Clear(); if (_ui != null) { _ui.Dispose(); _ui = null; } // 销毁 _createRoleNameGameObject(如果存在) if (_createRoleNameGameObject != null) { GameObject.Destroy(_createRoleNameGameObject); _createRoleNameGameObject = null; _createInputField = null; // 同时清空引用 } base.Dispose(); } protected override void OnInit() { base.OnInit(); packageName = UI_CreateRoleUI.PACKAGE_NAME; _ui = UI_CreateRoleUI.Create(); this.viewCom = _ui.target; // this.viewCom.Center(); this.isfullScreen = true; this.clickBlankToClose = false; this.modal = false; _ui.m_loaBg.url = ResPathUtil.GetBgImgPath("bg_yaoqinghan"); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_envelope.m_playerClickTipEffectHolder, "ui_CreateRoleUI/Before_Open", "FX_player", 100, onComplete: (effect) => { _effectUIDic.Add("FX_player", effect); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_btnDice.m_holder, "ui_CreateRoleUI/After_Open", "FX_TZ_DJ", 100, (effect2) => { _ui.m_envelopeModel.m_btnSure.onClick.Add(OnClickBtnSure); _effectUIDic.Add("FX_TZ_DJ", effect2); }); }); EffectUIPool.CreateEffectUI(_ui.m_BgEffectHolder, "ui_CreateRoleUI/After_Open", "FX_ALL_BG", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_ALL_BG", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_envelope.m_flowerEffectHolder, "ui_CreateRoleUI/Before_Open", "FX_Flower", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_Flower", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_envelope.m_LiuSuEffectHolder, "ui_CreateRoleUI/Before_Open", "FX_LiuSu", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_LiuSu", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_trailEffectHolder, "ui_CreateRoleUI/Before_Open", "FX_taril", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_taril", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_envelope.m_XINFEffectHolder, "ui_CreateRoleUI/Before_Open", "FX_XINF", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_XINF", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_TextEffectHolder, "ui_CreateRoleUI/After_Open", "FX_Text", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_Text", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_ShanZiEffectHolder, "ui_CreateRoleUI/After_Open", "FX_ShanZi", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_ShanZi", effect); } }); EffectUIPool.CreateEffectUI(_ui.m_envelopeModel.m_NiaoEffectHolder, "ui_CreateRoleUI/After_Open", "FX_Niao", onComplete: (effect) => { if (effect != null) { _effectUIDic.Add("FX_Niao", effect); } }); } private void CreateUnityInputField(Action action = null) { PrefabManager.Instance.InstantiateAsync( ResPathUtil.GetPrefabPath("CreateRoleName"), (gameObject) => { _createRoleNameGameObject = gameObject; _createInputField = _createRoleNameGameObject.GetInputFieldByName("CreateInputField"); if (_createInputField == null) { Debug.LogError("无法在预制体中找到名为 'CreateInputField' 的 InputField!"); } else { if (_createRoleNameGameObject != null) { _createRoleNameGameObject.gameObject.SetActive(true); } } action?.Invoke(); }); } //private bool test = false; private Animator _btnDiceAnimator; private void ChangeAnimationState(State state) { switch (state) { case State.IN: _ui.m_t_In.Play(() => { ChangeAnimationState(State.IDLE); }); break; case State.IDLE: _ui.m_envelopeModel.m_envelope.target.onClick.Add(OnClickBtnEnvelope); _ui.m_envelopeModel.m_t_Idle.Play(-1, 0, null); break; case State.OPEN: EffectUIPool.Recycle(_effectUIDic["FX_player"]); _effectUIDic.Remove("FX_player"); _btnDiceAnimator = _effectUIDic["FX_TZ_DJ"].GetObj().GetComponentInChildren(); _ui.m_envelopeModel.m_envelope.target.touchable = false; _ui.m_envelopeModel.m_t_Idle.Stop(); _ui.m_t_Open.Play(() => { CreateUnityInputField(() => { _ui.m_envelopeModel.m_btnDice.target.onClick.Add(() => { RandomRoleName().Coroutine(); }); }); }); break; case State.OUT: _ui.m_t_AfterOpen.Play(() => { this.Hide(); StoryDialogDataManager.Instance.waiting = false; }); break; } } protected override void OnShown() { base.OnShown(); if (_createRoleNameGameObject != null) { _createRoleNameGameObject.gameObject.SetActive(false); } if (_createInputField != null) { _createInputField.text = ""; } LogServerHelper.SendNodeLog((int)LogNode.ShowCreateRole); ChangeAnimationState(State.IN); } protected override void OnHide() { base.OnHide(); // 销毁 _createRoleNameGameObject(如果存在) if (_createRoleNameGameObject != null) { GameObject.Destroy(_createRoleNameGameObject); _createRoleNameGameObject = null; _createInputField = null; // 同时清空引用 } } private async void OnClickBtnSure() { if (_createInputField == null) return; string roleName = _createInputField.text; if (string.IsNullOrEmpty(roleName)) { PromptController.Instance.ShowFloatTextPrompt("角色名不能为空"); return; } if (roleName.Length > GlobalConst.MaxNameLen) { PromptController.Instance.ShowFloatTextPrompt("角色名最多七个字"); return; } if (!Regex.IsMatch(roleName, @"^[\u4e00-\u9fa5_0-9]+$")) //角色起名仅允许汉字、数字、底划线 { PromptController.Instance.ShowFloatTextPrompt("角色名仅允许汉字、数字、下划线"); return; } bool result = await RoleInfoSProxy.ReqModifyRoleName(roleName); if (result) { StorageSProxy.ReqSetClientValue(ConstStorageId.CHANGE_NAME, 1).Coroutine(); ChangeAnimationState(State.OUT); if (_createRoleNameGameObject != null) { _createRoleNameGameObject.gameObject.SetActive(false); } } } private async ETTask RandomRoleName() { _btnDiceAnimator?.SetTrigger("click"); string name = await LoginController.ReqRandomRoleName(); if (_createInputField != null) { _createInputField.text = name; } else { Log.Error($"RandomRoleName _createInputField is null. "); } } private void OnClickBtnEnvelope() { ChangeAnimationState(State.OPEN); } } }