using System.Collections.Generic; using SepCore.Event; using UnityGameFramework.Runtime; namespace SepCore.UI { public partial class SelectRoleForm { private readonly List _roleItems = new List(); private SelectRoleContext _context = null; private bool _listenersBound; public void RefreshUI(SelectRoleContext context) { EnsureButtonListeners(); _context = context; EnsureRoleItemCount(context.RoleItemContexts.Length); RoleItemContext[] roleContexts = _context.RoleItemContexts; for (int i = 0; i < _roleItems.Count; i++) { RoleItem item = _roleItems[i]; if (i < roleContexts.Length) { item.OnInit(roleContexts[i]).Forget(); item.gameObject.SetActive(true); } else { item.OnReset(); item.gameObject.SetActive(false); } } if (_context.ShowRoleProperty) { View.showAreaForm.ShowRoleProperty(_context.ShowAreaContext); } else { View.showAreaForm.ShowRandomRole(); } } #region Lifecycle protected override void OnOpen(object userData) { base.OnOpen(userData); if (userData is SelectRoleContext context) { RefreshUI(context); return; } Log.Error("SelectRoleForm requires SelectRoleContext as userData."); } protected override void OnClose(bool isShutdown, object userData) { base.OnClose(isShutdown, userData); _context = null; for (int i = 0; i < _roleItems.Count; i++) { _roleItems[i].OnReset(); } } #endregion private void EnsureButtonListeners() { if (_listenersBound) { return; } _listenersBound = true; View.returnButton.onClick.AddListener(OnReturnButtonClick); View.randomRoleItem.onClick.AddListener(OnRandomConfirmClick); View.randomRoleItem.RegisterPointerEnterAction(OnRandomHoverEnter); } private void EnsureRoleItemCount(int count) { while (_roleItems.Count < count) { RoleItem item = Instantiate(View.roleItemTemplate, View.roleListRoot); _roleItems.Add(item); } } private void OnReturnButtonClick() { GameEntry.Event.Fire(this, SelectRoleReturnEventArgs.Create()); } private void OnRandomConfirmClick() { GameEntry.Event.Fire(this, SelectRoleConfirmEventArgs.Create()); } private void OnRandomHoverEnter() { GameEntry.Event.Fire(this, SelectRoleClearEventArgs.Create()); } } }