public double GetDamage(Boxer defender, AbstractAttack attack, double attackIntensityFactor) { double result; if (defender.IsCastingAttack) { result = attack.FullDamage * COUNTER_ATTACK_DAMAGE_MULTIPLIER; } else { switch (defender.BoxerStance) { case Boxer.Stance.NORMAL: result = attack.FullDamage; break; case Boxer.Stance.BLOCKING: result = attack.BlockedDamage; break; case Boxer.Stance.DODGING: result = attack.IsDodgeable ? 0 : attack.FullDamage; break; case Boxer.Stance.STAGGERING: result = attack.FullDamage * STAGGERING_DAMAGE_MULTIPLIER; break; default: throw new InvalidOperationException(); } } return result * attackIntensityFactor; }
public void StartAttack(Boxer attacker, AbstractAttack attack) { UpdateStaminaSlider(attacker); string className = attack.GetType().Name; string attackTrigger = String.Format("Attack{0}", className); float speedMultiplier = 1000f / attack.CastTimeInMs; boxerAnimator.SetFloat(ATTACK_ANIMATION_SPEED, speedMultiplier); boxerAnimator.SetTrigger(attackTrigger); }
public int GetStunDuration(Boxer boxer, AbstractAttack attack, double attackIntensityFactor) { return attack.StunDurationInMs; }
public void Attack(AbstractAttack attack) { ResolveAccumulatedStun(); boxer.Attack(attack); }
public BoxerAttackEventArgs(AbstractAttack attack) { this.Attack = attack; }