CreatureLib/src/Library/TypeLibrary.hpp

29 lines
1.0 KiB
C++
Raw Normal View History

2019-11-04 16:58:26 +00:00
#ifndef CREATURELIB_TYPELIBRARY_HPP
#define CREATURELIB_TYPELIBRARY_HPP
2020-02-29 14:41:43 +00:00
#include <Arbutils/ConstString.hpp>
2019-11-04 16:58:26 +00:00
#include <unordered_map>
#include <vector>
2020-02-29 14:41:43 +00:00
using ConstString = Arbutils::CaseInsensitiveConstString;
2019-11-04 16:58:26 +00:00
namespace CreatureLib::Library {
2019-11-04 16:58:26 +00:00
class TypeLibrary {
std::unordered_map<uint32_t, uint8_t> _types;
2019-11-04 16:58:26 +00:00
std::vector<std::vector<float>> _effectiveness;
2019-11-04 16:58:26 +00:00
public:
TypeLibrary(size_t initialCapacity = 20) : _types(std::unordered_map<uint32_t, uint8_t>(initialCapacity)) {}
2020-02-29 14:41:43 +00:00
uint8_t GetTypeId(const ConstString& s) const;
uint8_t GetTypeId(uint32_t s) const;
2020-02-29 15:06:36 +00:00
[[nodiscard]] float GetSingleEffectiveness(uint8_t attacking, uint8_t defensive) const;
[[nodiscard]] float GetEffectiveness(uint8_t attacking, const std::vector<uint8_t>& defensive) const;
2019-11-04 16:58:26 +00:00
2020-02-29 14:41:43 +00:00
uint8_t RegisterType(const ConstString& typeName);
2020-02-29 15:06:36 +00:00
uint8_t RegisterType(uint32_t typeHash);
2019-11-04 16:58:26 +00:00
void SetEffectiveness(uint8_t attacking, uint8_t defensive, float effectiveness);
};
}
#endif // CREATURELIB_TYPELIBRARY_HPP