Files
CreatureLib/src/Library/TypeLibrary.cpp
Deukhoofd 899e432271
Some checks failed
continuous-integration/drone/push Build is failing
Added lots of security using asserts.
2020-03-22 13:42:26 +01:00

45 lines
1.4 KiB
C++

#include "TypeLibrary.hpp"
#include <Arbutils/Assert.hpp>
using namespace CreatureLib::Library;
float TypeLibrary::GetEffectiveness(uint8_t attacking, const std::vector<uint8_t>& defensive) const {
auto eff = 1;
for (auto def : defensive) {
eff *= GetSingleEffectiveness(attacking, def);
}
return eff;
}
float TypeLibrary::GetSingleEffectiveness(uint8_t attacking, uint8_t defensive) const {
Assert(attacking < _effectiveness.size())
Assert(defensive < _effectiveness.size())
return _effectiveness[attacking][defensive];
}
uint8_t TypeLibrary::GetTypeId(const ConstString& key) const { return _types.at(key); }
uint8_t TypeLibrary::GetTypeId(uint32_t s) const { return _types.at(s); }
uint8_t TypeLibrary::RegisterType(const ConstString& key) {
_types.insert({key, _types.size()});
_effectiveness.resize(_types.size());
for (auto& eff : _effectiveness) {
eff.resize(_types.size(), 1);
}
return _types.size() - 1;
}
uint8_t TypeLibrary::RegisterType(uint32_t key) {
_types.insert({key, _types.size()});
_effectiveness.resize(_types.size());
for (auto& eff : _effectiveness) {
eff.resize(_types.size(), 1);
}
return _types.size() - 1;
}
void TypeLibrary::SetEffectiveness(uint8_t attacking, uint8_t defensive, float effectiveness) {
Assert(attacking < _effectiveness.size())
Assert(defensive < _effectiveness.size())
_effectiveness[attacking][defensive] = effectiveness;
}