48 lines
2.2 KiB
C++
48 lines
2.2 KiB
C++
#include "SpeciesVariant.hpp"
|
|
#include <algorithm>
|
|
#include <utility>
|
|
|
|
const std::vector<uint8_t>& CreatureLib::Library::SpeciesVariant::GetTypes() const { return _types; }
|
|
|
|
size_t CreatureLib::Library::SpeciesVariant::GetTypeCount() const { return _types.size(); }
|
|
|
|
uint8_t CreatureLib::Library::SpeciesVariant::GetType(size_t index) const { return _types[index]; }
|
|
|
|
uint32_t CreatureLib::Library::SpeciesVariant::GetStatistic(CreatureLib::Library::Statistic stat) const {
|
|
return _baseStatistics.GetStat(stat);
|
|
}
|
|
|
|
const CreatureLib::Library::TalentIndex
|
|
CreatureLib::Library::SpeciesVariant::GetTalentIndex(const ConstString& talent) const {
|
|
for (size_t i = 0; i < _talents.size(); i++) {
|
|
if (_talents.at(i) == talent) {
|
|
return TalentIndex(false, i);
|
|
}
|
|
}
|
|
for (size_t i = 0; i < _secretTalents.size(); i++) {
|
|
if (_secretTalents.at(i) == talent) {
|
|
return TalentIndex(true, i);
|
|
}
|
|
}
|
|
throw CreatureException("The given talent is not a valid talent for this creature.");
|
|
}
|
|
|
|
CreatureLib::Library::TalentIndex CreatureLib::Library::SpeciesVariant::GetRandomTalent(Arbutils::Random* rand) const {
|
|
return TalentIndex(false, rand->Get(_talents.size()));
|
|
}
|
|
|
|
const CreatureLib::Library::LearnableAttacks* CreatureLib::Library::SpeciesVariant::GetLearnableAttacks() const {
|
|
return _attacks;
|
|
}
|
|
|
|
CreatureLib::Library::SpeciesVariant::SpeciesVariant(ConstString name, float height, float weight,
|
|
uint32_t baseExperience, std::vector<uint8_t> types,
|
|
CreatureLib::Library::StatisticSet<uint16_t> baseStats,
|
|
std::vector<ConstString> talents,
|
|
std::vector<ConstString> secretTalents,
|
|
const LearnableAttacks* attacks)
|
|
: _name(std::move(name)), _height(height), _weight(weight), _baseExperience(baseExperience),
|
|
_types(std::move(types)), _baseStatistics(baseStats), _talents(std::move(talents)),
|
|
_secretTalents(std::move(secretTalents)), _attacks(attacks) {}
|
|
|
|
CreatureLib::Library::SpeciesVariant::~SpeciesVariant() { delete _attacks; } |