87 lines
2.5 KiB
C#
87 lines
2.5 KiB
C#
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<RoleConfig> roles = GameEntry.Luban.GetTable<RoleConfig>();
|
|
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<RoleConfig> roles = GameEntry.Luban.GetTable<RoleConfig>();
|
|
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
|
|
};
|
|
}
|
|
}
|
|
}
|