using SepCore.DataTable; using GameFramework.DataTable; using SepCore.Procedure; using Random = UnityEngine.Random; namespace SepCore.UI { public class SelectRoleUseCase : IUIUseCase { private readonly IDataTable _roleDataTable; private readonly IProcedureMenu _procedureMenu; public int SelectedRoleId { get; private set; } public SelectRoleUseCase(IProcedureMenu procedureMenu) { _procedureMenu = procedureMenu; _roleDataTable = GameEntry.DataTable.GetDataTable(); } public SelectRoleRawData CreateModel() { return BuildModel(0); } public SelectRoleRawData 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) { _procedureMenu.ConfirmSelectRole(SelectedRoleId); } return result; } private SelectRoleRawData 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 SelectRoleRawData { RoleIds = roleIds, RoleIconNames = iconNames, SelectedRoleId = selectedRole?.Id ?? -1, SelectedRoleName = selectedRole?.RoleName, SelectedRoleInitialProperties = selectedRole?.InitialProperties }; } } }