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