CreatureLib/src/Library/Creature.cpp

72 lines
3.4 KiB
C++

#include "Creature.hpp"
CreatureLib::Library::Creature::Creature(const CreatureLib::Library::DataLibrary *library,
const CreatureLib::Library::CreatureSpecies *species,
const CreatureLib::Library::SpeciesVariant *variant, uint8_t level,
std::string nickname, int8_t talentIndex,
CreatureLib::Core::StatisticSet<uint8_t > statExperience,
CreatureLib::Core::StatisticSet<uint8_t > statPotential,
uint32_t identifier, CreatureLib::Library::Gender gender, uint8_t coloring,
const CreatureLib::Library::Item *heldItem)
:
__Library(library),
__Species(species),
__Variant(variant),
__Level(level),
__StatExperience(statExperience),
__StatPotential(statPotential),
__UniqueIdentifier(identifier),
__Gender(gender),
__Coloring(coloring),
__HeldItem(heldItem),
_nickname(nickname),
_talentIndex(talentIndex)
{
}
std::string CreatureLib::Library::Creature::GetTalent() const {
return __Variant->GetTalent(_talentIndex);
}
std::string CreatureLib::Library::Creature::GetNickname() const {
if (_nickname.empty())
return __Species->GetName();
return _nickname;
}
int32_t CalculateHealth(const CreatureLib::Library::Creature* creature){
auto baseStat = creature->GetVariant()->GetStatistic(CreatureLib::Core::Statistic::Health);
auto statPotential = creature->GetStatPotential().GetHealth();
auto statExperience = creature->GetStatExperience().GetHealth();
auto level = creature->GetLevel();
return ((2 * baseStat + statPotential + (statExperience / 4) * level) / 100) + level + 10;
}
int32_t CalculateStat(const CreatureLib::Library::Creature* creature, CreatureLib::Core::Statistic stat){
auto baseStat = creature->GetVariant()->GetStatistic(stat);
auto statPotential = creature->GetStatPotential().GetStat(stat);
auto statExperience = creature->GetStatExperience().GetStat(stat);
auto level = creature->GetLevel();
return ((2 * baseStat + statPotential + (statExperience / 4) * level) / 100) + 5;
}
uint32_t CreatureLib::Library::Creature::CalculateFullStat(CreatureLib::Core::Statistic stat) const {
if (stat == Core::Statistic::Health)
return CalculateHealth(this);
return CalculateStat(this, stat);
}
uint16_t CreatureLib::Library::Creature::GetBaseStat(CreatureLib::Core::Statistic stat) const {
return this->GetVariant()->GetStatistic(stat);
}
uint8_t CreatureLib::Library::Creature::GetStatPotential(CreatureLib::Core::Statistic stat) const {
return this->__StatPotential.GetStat(stat);
}
uint8_t CreatureLib::Library::Creature::GetStatExperience(CreatureLib::Core::Statistic stat) const {
return this->__StatExperience.GetStat(stat);
}