using System.Text; using DataTable; using GameFramework.DataTable; using Procedure; using UnityEngine; namespace UI { public class SelectRoleFormUseCase : IUIUseCase { private readonly IDataTable _roleDataTable; private readonly ProcedureStartMenu _procedureStartMenu; public int SelectedRoleId { get; private set; } public SelectRoleFormUseCase(ProcedureStartMenu procedureStartMenu) { _procedureStartMenu = procedureStartMenu; _roleDataTable = GameEntry.DataTable.GetDataTable(); } 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(); } } }