Files
vampire-like/Assets/GameMain/Scripts/Runtime/UIBase/Menu/SelectRole/SelectRoleUseCase.cs
T

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
};
}
}
}