CreatureLib/src/Library/CreatureData/CreatureSpecies.cpp

33 lines
1.2 KiB
C++

#include "CreatureSpecies.hpp"
#include <Arbutils/Assert.hpp>
using namespace CreatureLib::Library;
CreatureSpecies::CreatureSpecies(uint16_t id, const ArbUt::StringView& name, const SpeciesVariant* defaultVariant,
float genderRatio, const ArbUt::StringView& growthRate, uint8_t captureRate)
: _name(name), _id(id), _genderRate(genderRatio), _growthRate(growthRate), _captureRate(captureRate), _variants(1) {
AssertNotNull(defaultVariant)
SetVariant("default"_cnc, defaultVariant);
}
bool CreatureSpecies::TryGetVariant(uint32_t hash, ArbUt::BorrowedPtr<const SpeciesVariant>& out) const noexcept {
auto find = _variants.GetStdMap().find(hash);
if (find == _variants.end())
return false;
out = std::get<1>(*find);
return true;
}
void CreatureSpecies::SetVariant(const ArbUt::StringView& name, const SpeciesVariant* variant) {
_variants.GetStdMap().insert({name, std::unique_ptr<const SpeciesVariant>(variant)});
}
Gender CreatureSpecies::GetRandomGender(ArbUt::Random& rand) const noexcept {
if (this->_genderRate == -1) {
return Gender::Genderless;
}
auto val = rand.GetDouble();
if (val >= this->_genderRate)
return Gender ::Female;
return Gender ::Male;
}