40 lines
1.7 KiB
C++
40 lines
1.7 KiB
C++
|
#include "BattleStatCalculator.hpp"
|
||
|
#include "../Models/BattleCreature.hpp"
|
||
|
|
||
|
using namespace CreatureLib;
|
||
|
|
||
|
Core::StatisticSet<uint32_t>
|
||
|
Battling::BattleStatCalculator::CalculateStats(Battling::BattleCreature *creature) const {
|
||
|
return Core::StatisticSet<uint32_t>(
|
||
|
CalculateStat(creature, Core::Statistic::Health),
|
||
|
CalculateStat(creature, Core::Statistic::PhysicalAttack),
|
||
|
CalculateStat(creature, Core::Statistic::PhysicalDefense),
|
||
|
CalculateStat(creature, Core::Statistic::MagicalAttack),
|
||
|
CalculateStat(creature, Core::Statistic::MagicalDefense),
|
||
|
CalculateStat(creature, Core::Statistic::Speed)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
uint32_t CalculateHealthStat(Battling::BattleCreature *creature){
|
||
|
auto base = creature->GetBackingCreature();
|
||
|
auto level = creature->GetLevel();
|
||
|
auto a = (base->GetBaseStat(Core::Statistic::Health) + base->GetStatPotential(Core::Statistic::Health)) * 2 +
|
||
|
floor(sqrt(base->GetStatExperience(Core::Statistic::Health) / 4)) * level;
|
||
|
return floor(a / 100) + level + 10;
|
||
|
}
|
||
|
|
||
|
uint32_t CalculateOtherStat(Battling::BattleCreature *creature, Core::Statistic stat){
|
||
|
auto base = creature->GetBackingCreature();
|
||
|
auto level = creature->GetLevel();
|
||
|
auto a = (base->GetBaseStat(stat) + base->GetStatPotential(stat)) * 2 +
|
||
|
floor(sqrt(base->GetStatExperience(stat) / 4)) * level;
|
||
|
return floor(a / 100) + 10;
|
||
|
}
|
||
|
|
||
|
|
||
|
uint32_t Battling::BattleStatCalculator::CalculateStat(Battling::BattleCreature *creature, Core::Statistic stat) const{
|
||
|
if (stat == Core::Statistic::Health)
|
||
|
return CalculateHealthStat(creature);
|
||
|
return CalculateOtherStat(creature, stat);
|
||
|
}
|