引入 UISerializationRoot 和 Item

- 完成 MenuForm 和 SelectRoleForm 的迁移
This commit is contained in:
2026-09-13 22:18:29 +08:00
parent e2fdb660ab
commit 091a29db63
101 changed files with 5281 additions and 5753 deletions
@@ -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());
}
}
}