DRY out calculator

This commit is contained in:
Jeff Colombo 2019-02-10 12:05:16 -05:00
parent e39c660578
commit da69c12356

View File

@ -4,10 +4,12 @@ import { IBaseStats } from 'app/models/Pokemon';
const calculateStatsFormula = (baseStats : IBaseStats, ivHp : number, ivAtk : number, ivDef : number) => Math.sqrt(baseStats.baseStamina + ivHp) * Math.sqrt(baseStats.baseDefense + ivDef) * (baseStats.baseAttack + ivAtk); const calculateStatsFormula = (baseStats : IBaseStats, ivHp : number, ivAtk : number, ivDef : number) => Math.sqrt(baseStats.baseStamina + ivHp) * Math.sqrt(baseStats.baseDefense + ivDef) * (baseStats.baseAttack + ivAtk);
const calculateCpByLevelMultiplier = (statsFormula : number, levelMultiplier : number) => Math.floor((statsFormula * Math.pow(levelMultiplier, 2)) / 10);
export const calculateCp = (baseStats : IBaseStats, level : number, ivHp : number, ivAtk : number, ivDef : number) => { export const calculateCp = (baseStats : IBaseStats, level : number, ivHp : number, ivAtk : number, ivDef : number) => {
const statsFormula = calculateStatsFormula(baseStats, ivHp, ivAtk, ivDef); const statsFormula = calculateStatsFormula(baseStats, ivHp, ivAtk, ivDef);
const levelMultiplier = LevelMultipliers[(level - 1) * 2]; const levelMultiplier = LevelMultipliers[(level - 1) * 2];
const cp = Math.floor((statsFormula * Math.pow(levelMultiplier, 2)) / 10); const cp = calculateCpByLevelMultiplier(statsFormula, levelMultiplier);
return cp; return cp;
}; };
@ -22,8 +24,7 @@ export const calculateMaxLevelForLeague = (baseStats : IBaseStats, ivHp : number
const statsFormula = calculateStatsFormula(baseStats, ivHp, ivAtk, ivDef); const statsFormula = calculateStatsFormula(baseStats, ivHp, ivAtk, ivDef);
let level = 1; let level = 1;
for (let i = LevelMultipliers.length - 1; i >= 0; i--) { for (let i = LevelMultipliers.length - 1; i >= 0; i--) {
const levelMultiplier = LevelMultipliers[i]; const cp = calculateCpByLevelMultiplier(statsFormula, LevelMultipliers[i]);
const cp = Math.floor((statsFormula * Math.pow(levelMultiplier, 2)) / 10);
if (cp <= maxCp) { if (cp <= maxCp) {
level = (i / 2) + 1; level = (i / 2) + 1;
break; break;