- 规范 UI 设计成为:

- UIForm 负责展示
    - Controller 负责控制
    - UseCase 负责业务逻辑
    - RawData 负责提供原始数据
    - Context 负责为 UIForm 提供数据
- 添加和补充一系列 UI 功能
This commit is contained in:
SepComet
2026-02-16 19:03:09 +08:00
parent d650dd63e7
commit 85b0205c73
251 changed files with 12705 additions and 5220 deletions
@@ -0,0 +1,99 @@
using System.Text;
using DataTable;
using GameFramework.DataTable;
using Procedure;
using UnityEngine;
namespace UI
{
public class SelectRoleFormUseCase : IUIUseCase
{
private readonly IDataTable<DRRole> _roleDataTable;
private readonly ProcedureStartMenu _procedureStartMenu;
public int SelectedRoleId { get; private set; }
public SelectRoleFormUseCase(ProcedureStartMenu procedureStartMenu)
{
_procedureStartMenu = procedureStartMenu;
_roleDataTable = GameEntry.DataTable.GetDataTable<DRRole>();
}
public SelectRoleFormRawData CreateModel()
{
return BuildModel(0);
}
public SelectRoleFormRawData SelectRole(int roleId)
{
SelectedRoleId = roleId;
return BuildModel(roleId);
}
public bool ConfirmSelectedRole()
{
DRRole[] roles = _roleDataTable != null ? _roleDataTable.GetAllDataRows() : null;
if (roles == null || roles.Length == 0)
{
return false;
}
if (SelectedRoleId < 0 || _roleDataTable.GetDataRow(SelectedRoleId) == null)
{
int randomIndex = Random.Range(0, roles.Length);
SelectedRoleId = roles[randomIndex].Id;
}
bool result = SelectedRoleId >= 0;
if (result)
{
_procedureStartMenu.StartGame(SelectedRoleId);
}
return result;
}
private SelectRoleFormRawData BuildModel(int selectedRoleId)
{
DRRole[] roles = _roleDataTable.GetAllDataRows();
int count = _roleDataTable.Count;
int[] roleIds = new int[count];
string[] iconNames = new string[count];
for (int i = 0; i < count; i++)
{
roleIds[i] = roles[i].Id;
iconNames[i] = roles[i].IconName;
}
DRRole selectedRole = selectedRoleId > 0 ? _roleDataTable.GetDataRow(selectedRoleId) : null;
return new SelectRoleFormRawData
{
RoleIds = roleIds,
RoleIconNames = iconNames,
SelectedRoleId = selectedRole?.Id ?? -1,
SelectedRoleName = selectedRole?.RoleName,
SelectedRoleInitialPropertyText = selectedRole != null
? BuildRoleInitialPropertyText(selectedRole)
: null
};
}
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();
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: aec2db2225cb4bb890eb347e73fc5890
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: