/// <summary> /// When a skill is casted this function is called. /// </summary> /// <param name="order">Order of the skill in the skill set.</param> /// <param name="characterSkill">Skill data</param> public void CastSkill(int order, CharacterSkill characterSkill) { ISkillStrategy skillStrategy = null; switch (characterSkill.Code) { case SkillCode.TripleShot: skillStrategy = new UpgradeToTripleShot(); break; case SkillCode.DoubleShot: skillStrategy = new UpgradeToDoubleShot(); break; case SkillCode.Haste: skillStrategy = new UpgradeAttackSpeed(new AdditionModifier(-1f, characterSkill.Name)); break; case SkillCode.UberBolt: skillStrategy = new UpgradeProjectileSpeed(new MultiplicationModifier(0.5f, characterSkill.Name)); break; case SkillCode.Clone: skillStrategy = new CloneTheCharacterRandomly(); break; } Skill skill = new Skill(skillStrategy); skill.Perform(); OnSkillCast?.Invoke(order, ++_skillsCastedSoFar); }
/// <summary> /// Constructor. /// </summary> /// <param name="strategy">The strategy (skill logic) of the corresponding skill.</param> public Skill(ISkillStrategy strategy) { Strategy = strategy; }