38 lines
1.3 KiB
C++
38 lines
1.3 KiB
C++
#include "TypeLibrary.hpp"
|
|
#include <Arbutils/Assert.hpp>
|
|
#include <numeric>
|
|
|
|
using namespace CreatureLib::Library;
|
|
|
|
float TypeLibrary::GetEffectiveness(uint8_t attacking, const List<uint8_t>& defensive) const {
|
|
return std::accumulate(defensive.begin(), defensive.end(), (float)1, std::multiplies<float>());
|
|
}
|
|
|
|
float TypeLibrary::GetSingleEffectiveness(uint8_t attacking, uint8_t defensive) const {
|
|
return _effectiveness[attacking][defensive];
|
|
}
|
|
|
|
uint8_t TypeLibrary::GetTypeId(const ConstString& key) const { return _types.Get(key); }
|
|
uint8_t TypeLibrary::GetTypeId(uint32_t s) const { return _types.Get(s); }
|
|
|
|
uint8_t TypeLibrary::RegisterType(const ConstString& key) {
|
|
_types.Insert(key, _types.Count());
|
|
_effectiveness.Resize(_types.Count());
|
|
for (auto& eff : _effectiveness) {
|
|
eff.Resize(_types.Count(), 1);
|
|
}
|
|
return _types.Count() - 1;
|
|
}
|
|
uint8_t TypeLibrary::RegisterType(uint32_t key) {
|
|
_types.Insert(key, _types.Count());
|
|
_effectiveness.Resize(_types.Count());
|
|
for (auto& eff : _effectiveness) {
|
|
eff.Resize(_types.Count(), 1);
|
|
}
|
|
return _types.Count() - 1;
|
|
}
|
|
|
|
void TypeLibrary::SetEffectiveness(uint8_t attacking, uint8_t defensive, float effectiveness) {
|
|
_effectiveness[attacking][defensive] = effectiveness;
|
|
}
|