using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Entity
{
///
/// 角色职业管理类
///
///
public class CharacterClass(Character character)
{
///
/// 所属的角色
///
public Character Character { get; set; } = character;
///
/// 职业点数
///
public int ClassPoints { get; set; } = 1;
///
/// 已选择职业
///
public HashSet Classes { get; set; } = [];
///
/// 已选择流派
///
public HashSet SubClasses { get; set; } = [];
///
/// 已激活战斗天赋
///
public Skill? CombatTalent { get; set; } = null;
///
/// 通过升级重新计算职业点数
///
public void OnLevelUp()
{
ClassPoints = 0;
foreach (int level in Character.GameplayEquilibriumConstant.ClassPointsGetterList)
{
if (Character.Level >= level)
{
ClassPoints++;
}
}
if (ClassPoints == 0)
{
ClassPoints = 1;
}
}
///
/// 重新构建角色职业,设置定位和技能等
///
///
public void ReBuildCharacterClass(ClassObject obj)
{
Character.FirstRoleType = RoleType.None;
Character.SecondRoleType = RoleType.None;
Character.ThirdRoleType = RoleType.None;
CombatTalent?.RemoveSkillFromCharacter(Character);
foreach (SubClass sc in SubClasses)
{
foreach (Skill skill in sc.InherentPassives)
{
skill.RemoveSkillFromCharacter(Character);
}
}
foreach (Class c in Classes)
{
foreach (Skill skill in c.PassiveSkills)
{
skill.RemoveSkillFromCharacter(Character);
}
foreach (Skill skill in c.Skills)
{
skill.RemoveSkillFromCharacter(Character);
}
foreach (Skill skill in c.Magics)
{
skill.RemoveSkillFromCharacter(Character);
}
foreach (Skill skill in c.SuperSkills)
{
skill.RemoveSkillFromCharacter(Character);
}
}
Classes.Clear();
SubClasses.Clear();
foreach (Class c in obj.Classes)
{
Classes.Add(c);
foreach (Skill skill in c.PassiveSkills)
{
skill.AddSkillToCharacter(Character);
}
foreach (Skill skill in c.Skills)
{
skill.AddSkillToCharacter(Character);
}
foreach (Skill skill in c.Magics)
{
skill.AddSkillToCharacter(Character);
}
foreach (Skill skill in c.SuperSkills)
{
skill.AddSkillToCharacter(Character);
}
}
foreach (SubClass sc in obj.SubClasses)
{
SubClasses.Add(sc);
foreach (Skill skill in sc.InherentPassives)
{
skill.AddSkillToCharacter(Character);
}
}
if (obj.CurrentCombatTalent != null)
{
CombatTalent = obj.CurrentCombatTalent;
CombatTalent.AddSkillToCharacter(Character);
}
}
}
///
/// 决定如何构建角色的职业。这个类没有 JSON 转换器支持
///
public class ClassObject(Class[] c, SubClass[] s)
{
public Class[] Classes { get; set; } = c;
public SubClass[] SubClasses { get; set; } = s;
public RoleType FirstRoleType { get; set; } = RoleType.None;
public RoleType SecondRoleType { get; set; } = RoleType.None;
public RoleType ThirdRoleType { get; set; } = RoleType.None;
public Skill? CurrentCombatTalent { get; set; } = null;
}
}