private double CalculateDamage(bool DirectionBonus, AttackTiming TimingBonus) { double Damage = BASE_DAMAGE_HERO; if (DirectionBonus) { Damage *= DIRECTION_BONUS_MULT; } switch (TimingBonus) { case (AttackTiming.Perfect): Damage *= PERFECT_TIMING_MULT; break; case (AttackTiming.Good): Damage *= GOOD_TIMING_MULT; break; case (AttackTiming.Okay): Damage *= OKAY_TIMING_MULT; break; case (AttackTiming.Miss): Damage *= MISS_TIMING_MULT; break; default: break; } return(Damage); }
public double PerformAttack() { bool Hit = !IsBlock(); AttackTiming Timing = GetTiming(); if (Timing == AttackTiming.Miss) { BS.ResetComboCounter(); Hit = false; } if (Hit) { BS.IncrementComboCounter(); return(CalculateDamage(IsDirectionBonus(), GetTiming())); } return(0.0); }
public double PerformDefence() { bool Hit = !IsBlock(); AttackTiming BlockTiming = GetTiming(); if (BlockTiming == AttackTiming.Miss) { BS.ResetComboCounter(); Hit = true; } if (Hit) { return(CalculateDamageToPlayer(IsDirectionBonus(), GetTiming())); } else { BS.IncrementComboCounter(); return(0.0); } }
private AttackTiming GetTiming() { AttackTiming Timing = AttackTiming.Miss; double DistToNextBeat = BS.getBeatDist(); if (DistToNextBeat >= MISS_TIMING_THRESH) { Timing = AttackTiming.Miss; } else if (DistToNextBeat >= OKAY_TIMING_THRESH) { Timing = AttackTiming.Okay; } else if (DistToNextBeat >= GOOD_TIMING_THRESH) { Timing = AttackTiming.Good; } else if (DistToNextBeat >= PERFECT_TIMING_THRESH) { Timing = AttackTiming.Perfect; } return(Timing); }