#ifndef CREATURELIB_TYPELIBRARY_HPP #define CREATURELIB_TYPELIBRARY_HPP #include #include #include #include #include using ConstString = Arbutils::CaseInsensitiveConstString; using namespace Arbutils::Collections; namespace CreatureLib::Library { class TypeLibrary { Dictionary _types; List> _effectiveness; public: TypeLibrary(size_t initialCapacity = 20) : _types(Dictionary(initialCapacity)) {} uint8_t GetTypeId(const ConstString& s) const; uint8_t GetTypeId(uint32_t s) const; [[nodiscard]] float GetSingleEffectiveness(uint8_t attacking, uint8_t defensive) const; [[nodiscard]] float GetEffectiveness(uint8_t attacking, const List& defensive) const; uint8_t RegisterType(const ConstString& typeName); uint8_t RegisterType(uint32_t typeHash); void SetEffectiveness(uint8_t attacking, uint8_t defensive, float effectiveness); }; } #endif // CREATURELIB_TYPELIBRARY_HPP