private static float ApplyDamageFormulaToInitialDamage(InitialDamageParameter initialDamageParameter) { float attackPoints, defensePoints; (attackPoints, defensePoints) = GetDamageForSpecialOrNormalMove(initialDamageParameter); float finalDamageResult = GetFinalDamageFromFinalDamageFormula(attackPoints, defensePoints, initialDamageParameter.Modifier); return(Convert.ToInt32(Math.Ceiling(finalDamageResult))); }
public static int CalculateDamage(IPokemon attackingPokemon, IPokemon targetPokemon, IMove move, TypeEffect typeEffect) { float modifier = CalculateSTABModifier(attackingPokemon, move); var initialDamageParameter = new InitialDamageParameter(attackingPokemon, targetPokemon, modifier, move); int calculatedDamage = Convert.ToInt32(TypeDamageFormulas.DictionaryOfFormulas[typeEffect].DynamicInvoke(initialDamageParameter)); return(calculatedDamage); }
private static (float, float) GetDamageForSpecialOrNormalMove(InitialDamageParameter initialDamageParameter) { float attackPoints, defensePoints; if (initialDamageParameter.Move.Special) { attackPoints = initialDamageParameter.AttackingPokemon.SpecialAttackPoints; defensePoints = initialDamageParameter.TargetPokemon.SpecialDefensePoints; } else { attackPoints = initialDamageParameter.AttackingPokemon.AttackPoints; defensePoints = initialDamageParameter.TargetPokemon.DefensePoints; } return(attackPoints, defensePoints); }
private static float NotVeryEffectiveDamage(InitialDamageParameter initialDamageParameter) { initialDamageParameter.Modifier -= initialDamageParameter.Modifier * NOT_VERY_EFFECTIVE_DAMAGE_SUBTRACTION; return(ApplyDamageFormulaToInitialDamage(initialDamageParameter)); }
private static float SuperEffectiveDamage(InitialDamageParameter initialDamageParameter) { initialDamageParameter.Modifier += initialDamageParameter.Modifier * SUPER_EFFECTIVE_DAMAGE_ADDITION; return(ApplyDamageFormulaToInitialDamage(initialDamageParameter)); }