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 string SelectedRoleName { get; private set; } public SelectRoleUseCase(IProcedureMenu procedureMenu) { _procedureMenu = procedureMenu; } public SelectRoleRawData CreateModel() { return BuildModel(null); } public SelectRoleRawData SelectRole(string roleName) { SelectedRoleName = roleName; return BuildModel(roleName); } public SelectRoleRawData ClearSelection() { SelectedRoleName = null; return BuildModel(null); } public bool ConfirmSelectedRole() { var roles = GameEntry.Luban.GetTable(); var config = GameEntry.Luban.Get(SelectedRoleName); if (string.IsNullOrEmpty(SelectedRoleName) || config == null) { int randomIndex = Random.Range(0, roles.Count); SelectedRoleName = roles[randomIndex].Name; } _procedureMenu.ConfirmSelectRole(SelectedRoleName); return true; } private SelectRoleRawData BuildModel(string selectedRoleName) { 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 { RoleName = roles[i].Name, IconName = roles[i].Sprite }; } RoleConfig selectedRole = string.IsNullOrEmpty(selectedRoleName) ? null : roles.FirstOrDefault(r => r.Name == selectedRoleName); RolePropertyAreaRawData selectedRoleData = selectedRole == null ? null : new RolePropertyAreaRawData { Name = selectedRole.Name, InitialProperties = selectedRole.Modifiers }; return new SelectRoleRawData { RoleItems = roleItems, SelectedRole = selectedRoleData }; } } }