using System.Collections.Generic; using System.Linq; using SepCore.Definition; using SepCore.Procedure; using Random = UnityEngine.Random; namespace SepCore.UI { public class SelectRoleUseCase : IUIUseCase { private readonly IProcedureMenu _procedureMenu; public int SelectedRoleId { get; private set; } public SelectRoleUseCase(IProcedureMenu procedureMenu) { _procedureMenu = procedureMenu; } public SelectRoleRawData CreateModel() { return BuildModel(0); } public SelectRoleRawData SelectRole(int roleId) { SelectedRoleId = roleId; return BuildModel(roleId); } public SelectRoleRawData ClearSelection() { SelectedRoleId = 0; return BuildModel(0); } public bool ConfirmSelectedRole() { IReadOnlyList roles = GameEntry.Luban.GetTable(); if (roles == null || roles.Count == 0) { return false; } if (SelectedRoleId <= 0 || !roles.Any(r => r.Id == SelectedRoleId)) { int randomIndex = Random.Range(0, roles.Count); SelectedRoleId = roles[randomIndex].Id; } _procedureMenu.ConfirmSelectRole(SelectedRoleId); return true; } private SelectRoleRawData BuildModel(int selectedRoleId) { IReadOnlyList roles = GameEntry.Luban.GetTable(); int count = roles.Count; RoleItemRawData[] roleItems = new RoleItemRawData[count]; for (int i = 0; i < count; i++) { roleItems[i] = new RoleItemRawData { RoleId = roles[i].Id, IconName = roles[i].IconName }; } RoleConfig selectedRole = selectedRoleId > 0 ? roles.FirstOrDefault(r => r.Id == selectedRoleId) : null; RolePropertyAreaRawData selectedRoleData = selectedRole == null ? null : new RolePropertyAreaRawData { RoleId = selectedRole.Id, RoleName = selectedRole.RoleName, InitialProperties = selectedRole.Modifiers }; return new SelectRoleRawData { RoleItems = roleItems, SelectedRole = selectedRoleData }; } } }