迁移剩下的 UI 到 Serialization 方式

This commit is contained in:
2026-09-14 17:19:31 +08:00
parent 091a29db63
commit b628a8537c
107 changed files with 4147 additions and 3680 deletions
@@ -0,0 +1,108 @@
using System.Collections.Generic;
using SepCore.Event;
using UnityGameFramework.Runtime;
namespace SepCore.UI
{
public partial class LevelUpForm : UGuiForm
{
private readonly List<LevelUpRewardItem> _rewardItems = new List<LevelUpRewardItem>();
private LevelUpContext _context;
private bool _listenersBound;
public void RefreshUI(LevelUpContext context)
{
EnsureButtonListeners();
_context = context;
if (View.levelUpRewardTemplate.gameObject.activeSelf)
{
View.levelUpRewardTemplate.gameObject.SetActive(false);
}
int count = _context.Props?.Count ?? 0;
EnsureRewardItemCount(count);
for (int i = 0; i < _rewardItems.Count; i++)
{
LevelUpRewardItem item = _rewardItems[i];
if (i < count)
{
item.Init(_context.Props[i]);
item.gameObject.SetActive(true);
}
else
{
item.gameObject.SetActive(false);
}
}
// 刷新 -20 <sprite name="coin" index=0>
View.refreshCostFormatText.Set(context.RefreshPrice);
}
#region Lifecycle
protected override void OnOpen(object userData)
{
base.OnOpen(userData);
if (userData is not LevelUpContext context)
{
Log.Error("LevelUpForm requires LevelUpContext as userData.");
return;
}
RefreshUI(context);
}
protected override void OnClose(bool isShutdown, object userData)
{
_context = null;
base.OnClose(isShutdown, userData);
}
#endregion
private void EnsureButtonListeners()
{
if (_listenersBound)
{
return;
}
_listenersBound = true;
View.refreshButton.onClick.AddListener(OnRefreshButtonClick);
}
private void EnsureRewardItemCount(int count)
{
while (_rewardItems.Count < count)
{
int index = _rewardItems.Count;
LevelUpRewardItem item = Instantiate(View.levelUpRewardTemplate, View.rewardAreaRoot);
CommonButton button = item.GetComponentInChildren<CommonButton>();
if (button != null)
{
button.onClick.AddListener(() => OnSelectButtonClick(index));
}
_rewardItems.Add(item);
}
}
public void OnSelectButtonClick(int index)
{
GameEntry.Event.Fire(this, LevelUpPropSelectedEventArgs.Create(index));
}
public void OnRefreshButtonClick()
{
GameEntry.Event.Fire(this, LevelUpRefreshEventArgs.Create(_context.RefreshPrice));
}
}
}