diff --git a/CInterface/Battling/Creature.cpp b/CInterface/Battling/Creature.cpp index e735939..da97070 100644 --- a/CInterface/Battling/Creature.cpp +++ b/CInterface/Battling/Creature.cpp @@ -47,8 +47,6 @@ SIMPLE_GET_FUNC_SMART_PTR(Creature, GetBattle, Battle*); SIMPLE_GET_FUNC_SMART_PTR(Creature, GetBattleSide, BattleSide*); SIMPLE_GET_FUNC(Creature, IsOnBattleField, bool); export const char* CreatureLib_Creature_GetNickname(Creature* p) { return p->GetNickname().c_str(); } -export size_t CreatureLib_Creature_GetTypesCount(Creature* p) { return p->GetTypes().Count(); } -export const uint8_t* CreatureLib_Creature_GetTypes(Creature* p) { return p->GetTypes().RawData(); } export bool CreatureLib_Creature_HasType(Creature* p, uint8_t type) { return p->HasType(type); } SIMPLE_GET_FUNC(Creature, GetMaxHealth, uint32_t); export uint8_t CreatureLib_Creature_ChangeLevelBy(Creature* p, int8_t level) { Try(p->ChangeLevelBy(level);) } diff --git a/CInterface/Library/TypeLibrary.cpp b/CInterface/Library/TypeLibrary.cpp index ff79907..2ba8455 100644 --- a/CInterface/Library/TypeLibrary.cpp +++ b/CInterface/Library/TypeLibrary.cpp @@ -34,5 +34,5 @@ export uint8_t CreatureLib_TypeLibrary_GetSingleEffectiveness(float& out, TypeLi export uint8_t CreatureLib_TypeLibrary_GetEffectiveness(float& out, TypeLibrary* p, uint8_t attacking, uint8_t defensive[], size_t defensiveCount) { - Try(out = p->GetEffectiveness(attacking, ArbUt::List(defensive, defensive + defensiveCount));) + Try(out = p->GetEffectiveness(attacking, std::unordered_set(defensive, defensive + defensiveCount));) } diff --git a/src/Battling/Flow/TurnHandler.cpp b/src/Battling/Flow/TurnHandler.cpp index 14f19af..da777e2 100644 --- a/src/Battling/Flow/TurnHandler.cpp +++ b/src/Battling/Flow/TurnHandler.cpp @@ -1,5 +1,6 @@ #include "TurnHandler.hpp" #include +#include #include "../../Library/Exceptions/NotImplementedException.hpp" #include "../ScriptHandling/ScriptMacros.hpp" #include "ResolveTarget.hpp" diff --git a/src/Battling/Models/Creature.cpp b/src/Battling/Models/Creature.cpp index 69866ac..f7e219a 100644 --- a/src/Battling/Models/Creature.cpp +++ b/src/Battling/Models/Creature.cpp @@ -25,6 +25,9 @@ Battling::Creature::Creature(ArbUt::BorrowedPtr library, if (_nickname.empty()) { _nickname = species->GetName().std_str(); } + for (auto t : _variant->GetTypes()) { + _types.insert(t); + } } void Battling::Creature::ChangeLevelBy(int8_t amount) { @@ -146,14 +149,10 @@ void Battling::Creature::OverrideActiveTalent(const ConstString& talent) { _activeTalent.reset(this->_library->LoadScript(ScriptCategory::Talent, talent)); } -const ArbUt::List& Battling::Creature::GetTypes() const noexcept { - // HOOK: override types. - return this->_variant->GetTypes(); -} +const std::unordered_set& Battling::Creature::GetTypes() const noexcept { return _types; } bool Battling::Creature::HasType(uint8_t type) const noexcept { - auto t = GetTypes(); - return std::find(t.begin(), t.end(), type) != t.end(); + return std::find(_types.begin(), _types.end(), type) != _types.end(); } size_t Battling::Creature::ScriptCount() const { diff --git a/src/Battling/Models/Creature.hpp b/src/Battling/Models/Creature.hpp index b49de6b..3f106d4 100644 --- a/src/Battling/Models/Creature.hpp +++ b/src/Battling/Models/Creature.hpp @@ -59,6 +59,8 @@ namespace CreatureLib::Battling { std::unique_ptr