/// <summary> /// Performs an ability on a target. /// </summary> /// <param name="ability">The ability to perform.</param> /// <param name="target">The target of the ability.</param> protected void PerformAbility(Ability ability, GameCharacterController target) { HeroCombatController.AbilityCooldowns.Add(ability.name, ability.Cooldown * Mathf.Max(0, 1.0f - Attributes.CooldownReduction)); HeroCombatController.ApplyEnergyLoss(ability.EnergyCost); switch (ability.AbilityType) { case AbilityType.Area: PerformAreaAbility(ability, target); break; case AbilityType.Direct: PerformDirectAbility(ability, target); break; case AbilityType.Heal: PerformHealAbility(ability, target); break; case AbilityType.Shield: PerformShieldAbility(ability, target); break; default: break; } }
/// <summary> /// Performs a shield ability on a target. /// </summary> /// <param name="ability">The ability to perform.</param> /// <param name="target">The target of the ability.</param> protected void PerformShieldAbility(Ability ability, GameCharacterController target) { Debug.Log(gameObject.name + ": Performing shield ability " + ability.name + " on " + target.name); switch (ability.AbilityRange) { case AbilityRange.Melee: // Not implemented break; case AbilityRange.Ranged: // Not implemented break; case AbilityRange.Self: HeroCombatController.PerformDefendAbility(ability); break; default: break; } }
/// <summary> /// Performs a direct ability on a target. /// </summary> /// <param name="ability">The ability to perform.</param> /// <param name="target">The target of the ability.</param> protected void PerformDirectAbility(Ability ability, GameCharacterController target) { Debug.Log(gameObject.name + ": Performing direct ability " + ability.name + " on " + target.name); switch (ability.AbilityRange) { case AbilityRange.Melee: HeroCombatController.PerformMeleeAttack(); break; case AbilityRange.Ranged: HeroCombatController.PerformFireball(ability, target); break; case AbilityRange.Self: // Not implemented break; default: break; } }