按 UI 五层规范重构 SelectRoleForm 并整理事件目录

- SelectRoleForm 五层归位:UseCase 改为构造注入 IProcedureMenu(新增 Runtime/ProcedureInterface),RawData 暴露原始 StatModifier[] 而非展示串,Controller 复用 ItemDescUtility 拼装属性文本,并修复 OpenUIAsync(object) 合法 RawData 分支缺少 return 的误报路径
- StatModifier 去展示职责:删除 _statTypeNames / ToString,富文本格式化下沉到 Presentation 层的 ItemDescUtility.Describe(StatModifier),CreatePropDescription 改用统一入口
  - 事件目录按 UIForm 归档:Base/Event/UI/Menu/* 拆解到 SelectRoleForm/ MenuForm/ DialogForm/ DisplayItemInfoForm/ Combat/ 等各自子目录,MenuSelectRoleReturnEventArgs 改名 SelectRoleReturnEventArgs,语义归属本 UI 模块
- IUIFormController → IUIController 改名,联动 UIControllerBase / UIRouterComponent / Editor
- 同步更新 docs/UI-5层架构设计规范.md 中相关示例与 MenuForm.prefab、ProcedureMenu 引用
This commit is contained in:
SepComet
2026-06-16 17:09:20 +08:00
committed by basil
parent 1cd3936f49
commit d2ce741a37
49 changed files with 128 additions and 117 deletions
@@ -2,7 +2,7 @@ using Cysharp.Threading.Tasks;
namespace SepCore.UI
{
public interface IUIFormController
public interface IUIController
{
UniTask OpenUIAsync(object userData = null, float timeout = 30f);
@@ -5,7 +5,7 @@ using SepCore.AsyncTask;
namespace SepCore.UI
{
public abstract class UIControllerBase<TContext, TForm> : IUIFormController
public abstract class UIControllerBase<TContext, TForm> : IUIController
where TContext : UIContext
where TForm : UGuiForm
{
@@ -1,3 +1,5 @@
using SepCore.Definition;
namespace SepCore.UI
{
public class SelectRoleRawData
@@ -6,6 +8,6 @@ namespace SepCore.UI
public string[] RoleIconNames;
public int SelectedRoleId;
public string SelectedRoleName;
public string SelectedRoleInitialPropertyText;
public StatModifier[] SelectedRoleInitialProperties;
}
}
@@ -1,7 +1,6 @@
using System;
using System.Text;
using SepCore.DataTable;
using GameFramework.DataTable;
using SepCore.Procedure;
using Random = UnityEngine.Random;
namespace SepCore.UI
@@ -10,13 +9,13 @@ namespace SepCore.UI
{
private readonly IDataTable<DRRole> _roleDataTable;
private readonly Action<int> _onStartGame;
private readonly IProcedureMenu _procedureMenu;
public int SelectedRoleId { get; private set; }
public SelectRoleUseCase(Action<int> onStartGame)
public SelectRoleUseCase(IProcedureMenu procedureMenu)
{
_onStartGame = onStartGame;
_procedureMenu = procedureMenu;
_roleDataTable = GameEntry.DataTable.GetDataTable<DRRole>();
}
@@ -48,7 +47,7 @@ namespace SepCore.UI
bool result = SelectedRoleId >= 0;
if (result)
{
_onStartGame?.Invoke(SelectedRoleId);
_procedureMenu.ConfirmSelectRole(SelectedRoleId);
}
return result;
@@ -73,27 +72,8 @@ namespace SepCore.UI
RoleIconNames = iconNames,
SelectedRoleId = selectedRole?.Id ?? -1,
SelectedRoleName = selectedRole?.RoleName,
SelectedRoleInitialPropertyText = selectedRole != null
? BuildRoleInitialPropertyText(selectedRole)
: null
SelectedRoleInitialProperties = selectedRole?.InitialProperties
};
}
private static string BuildRoleInitialPropertyText(DRRole role)
{
if (role == null || role.InitialProperties == null || role.InitialProperties.Length == 0)
{
return string.Empty;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < role.InitialProperties.Length; i++)
{
sb.Append(role.InitialProperties[i]);
sb.Append('\n');
}
return sb.ToString();
}
}
}