引入 UISerializationRoot 和 Item
- 完成 MenuForm 和 SelectRoleForm 的迁移
This commit is contained in:
@@ -0,0 +1,115 @@
|
||||
using System.Collections.Generic;
|
||||
using SepCore.Event;
|
||||
using UnityGameFramework.Runtime;
|
||||
|
||||
namespace SepCore.UI
|
||||
{
|
||||
public partial class SelectRoleForm
|
||||
{
|
||||
private readonly List<RoleItem> _roleItems = new List<RoleItem>();
|
||||
|
||||
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());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user