#include "../../src/Library/CreatureData/SpeciesVariant.hpp" #include "../Core.hpp" using namespace CreatureLib::Library; export SpeciesVariant* CreatureLib_SpeciesVariant_Construct(const char* name, float height, float weight, uint32_t baseExperience, uint8_t types[], size_t typeLength, uint16_t baseHealth, uint16_t baseAttack, uint16_t baseDefense, uint16_t baseMagicalAttack, uint16_t baseMagicalDefense, uint16_t baseSpeed, const Talent* talents[], size_t talentsLength, const Talent* secretTalents[], size_t secretTalentsLength, const LearnableAttacks* attacks, const char* flags[], size_t flagsCount) { std::unordered_set conversedFlags(flagsCount); for (size_t i = 0; i < flagsCount; i++) { conversedFlags.insert(ArbUt::StringView::CalculateHash(flags[i])); } auto talentsWrapped = ArbUt::List>(talentsLength); for (size_t i = 0; i < talentsLength; i++) { talentsWrapped.Append(talents[i]); } auto secretTalentsWrapped = ArbUt::List>(secretTalentsLength); for (size_t i = 0; i < secretTalentsLength; i++) { secretTalentsWrapped.Append(secretTalents[i]); } return new SpeciesVariant( ArbUt::StringView(name), height, weight, baseExperience, ArbUt::List(types, types + typeLength), CreatureLib::Library::StatisticSet(baseHealth, baseAttack, baseDefense, baseMagicalAttack, baseMagicalDefense, baseSpeed), talentsWrapped, secretTalentsWrapped, attacks, conversedFlags); } export void CreatureLib_SpeciesVariant_Destruct(SpeciesVariant* p) { delete p; } export const char* CreatureLib_SpeciesVariant_GetName(SpeciesVariant* p) { return p->GetName().c_str(); } SIMPLE_GET_FUNC(SpeciesVariant, GetHeight, float); SIMPLE_GET_FUNC(SpeciesVariant, GetWeight, float); SIMPLE_GET_FUNC(SpeciesVariant, GetBaseExperience, uint32_t); SIMPLE_GET_FUNC(SpeciesVariant, GetTypeCount, size_t); export uint8_t CreatureLib_SpeciesVariant_GetType(SpeciesVariant* p, size_t index) { return p->GetType(index); } export uint16_t CreatureLib_SpeciesVariant_GetStatistic(SpeciesVariant* p, CreatureLib::Library::Statistic stat) { return p->GetStatistic(stat); } SIMPLE_GET_FUNC(SpeciesVariant, GetTalentCount, size_t); SIMPLE_GET_FUNC(SpeciesVariant, GetSecretTalentCount, size_t); export uint8_t CreatureLib_SpeciesVariant_GetTalent(SpeciesVariant* p, bool secret, uint8_t index, const Talent*& out) { Try(out = p->GetTalent(TalentIndex(secret, index)).GetRaw();) } export const LearnableAttacks* CreatureLib_SpeciesVariant_GetLearnableAttacks(SpeciesVariant* p) { return p->GetLearnableAttacks().GetRaw(); } export uint8_t CreatureLib_SpeciesVariant_GetRandomTalent(SpeciesVariant* p, ArbUt::Random* rand) { return p->GetRandomTalent(*rand).GetIndex(); } export bool CreatureLib_SpeciesVariant_HasFlag(const SpeciesVariant* p, const char* key) { return p->HasFlag(ArbUt::StringView::CalculateHash(key)); }