2020-02-29 16:21:36 +00:00
|
|
|
#include "../../src/Library/CreatureData/SpeciesVariant.hpp"
|
2020-07-31 08:51:03 +00:00
|
|
|
#include "../Core.hpp"
|
2020-02-29 16:21:36 +00:00
|
|
|
|
|
|
|
using namespace CreatureLib::Library;
|
|
|
|
|
2020-08-10 15:46:09 +00:00
|
|
|
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,
|
2021-11-15 11:04:45 +00:00
|
|
|
uint16_t baseSpeed, const Talent* talents[], size_t talentsLength,
|
|
|
|
const Talent* secretTalents[], size_t secretTalentsLength,
|
2020-08-10 15:46:09 +00:00
|
|
|
const LearnableAttacks* attacks, const char* flags[], size_t flagsCount) {
|
|
|
|
|
|
|
|
std::unordered_set<uint32_t> conversedFlags(flagsCount);
|
|
|
|
for (size_t i = 0; i < flagsCount; i++) {
|
|
|
|
conversedFlags.insert(ArbUt::StringView::CalculateHash(flags[i]));
|
|
|
|
}
|
2020-02-29 16:21:36 +00:00
|
|
|
|
2021-11-15 11:04:45 +00:00
|
|
|
auto talentsWrapped = ArbUt::List<ArbUt::BorrowedPtr<const Talent>>(talentsLength);
|
2020-02-29 16:21:36 +00:00
|
|
|
for (size_t i = 0; i < talentsLength; i++) {
|
2021-11-15 11:04:45 +00:00
|
|
|
talentsWrapped.Append(talents[i]);
|
2020-02-29 16:21:36 +00:00
|
|
|
}
|
2021-11-15 11:04:45 +00:00
|
|
|
auto secretTalentsWrapped = ArbUt::List<ArbUt::BorrowedPtr<const Talent>>(secretTalentsLength);
|
2020-02-29 16:21:36 +00:00
|
|
|
for (size_t i = 0; i < secretTalentsLength; i++) {
|
2021-11-15 11:04:45 +00:00
|
|
|
secretTalentsWrapped.Append(secretTalents[i]);
|
2020-02-29 16:21:36 +00:00
|
|
|
}
|
|
|
|
|
2020-06-26 15:08:23 +00:00
|
|
|
return new SpeciesVariant(
|
|
|
|
ArbUt::StringView(name), height, weight, baseExperience, ArbUt::List<uint8_t>(types, types + typeLength),
|
|
|
|
CreatureLib::Library::StatisticSet<uint16_t>(baseHealth, baseAttack, baseDefense, baseMagicalAttack,
|
|
|
|
baseMagicalDefense, baseSpeed),
|
2020-08-10 15:46:09 +00:00
|
|
|
talentsWrapped, secretTalentsWrapped, attacks, conversedFlags);
|
2020-02-29 16:21:36 +00:00
|
|
|
}
|
|
|
|
|
2020-03-02 12:59:49 +00:00
|
|
|
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); }
|
2020-05-02 18:03:18 +00:00
|
|
|
export uint16_t CreatureLib_SpeciesVariant_GetStatistic(SpeciesVariant* p, CreatureLib::Library::Statistic stat) {
|
2020-03-02 12:59:49 +00:00
|
|
|
return p->GetStatistic(stat);
|
|
|
|
}
|
|
|
|
SIMPLE_GET_FUNC(SpeciesVariant, GetTalentCount, size_t);
|
|
|
|
SIMPLE_GET_FUNC(SpeciesVariant, GetSecretTalentCount, size_t);
|
2021-11-15 11:04:45 +00:00
|
|
|
export uint8_t CreatureLib_SpeciesVariant_GetTalent(SpeciesVariant* p, bool secret, uint8_t index, const Talent*& out) {
|
|
|
|
Try(out = p->GetTalent(TalentIndex(secret, index)).GetRaw();)
|
2020-03-02 13:01:56 +00:00
|
|
|
}
|
2020-03-27 19:46:44 +00:00
|
|
|
export const LearnableAttacks* CreatureLib_SpeciesVariant_GetLearnableAttacks(SpeciesVariant* p) {
|
2020-07-07 13:33:43 +00:00
|
|
|
return p->GetLearnableAttacks().GetRaw();
|
2020-03-27 19:46:44 +00:00
|
|
|
}
|
2020-07-18 10:20:47 +00:00
|
|
|
export uint8_t CreatureLib_SpeciesVariant_GetRandomTalent(SpeciesVariant* p, ArbUt::Random* rand) {
|
|
|
|
return p->GetRandomTalent(*rand).GetIndex();
|
|
|
|
}
|
2020-08-10 15:46:09 +00:00
|
|
|
export bool CreatureLib_SpeciesVariant_HasFlag(const SpeciesVariant* p, const char* key) {
|
|
|
|
return p->HasFlag(ArbUt::StringView::CalculateHash(key));
|
|
|
|
}
|