PkmnLib/src/ScriptResolving/WASM/InterfaceMethods/Library/WASMFormeRegistry.cpp

51 lines
2.6 KiB
C++

#include "WASMFormeRegistry.hpp"
#include "../../../../Battling/Library/BattleLibrary.hpp"
#include "../../WebAssemblyScriptResolver.hpp"
#include "../WASMHelperFile.hpp"
#include "wasm.h"
using namespace CreatureLib::Library;
using namespace PkmnLib::Library;
wasm_func_t* Forme_GetType(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<u8, const SpeciesVariant*, size_t>(
resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, size_t index) -> u8 {
return forme->GetType(index);
}});
}
wasm_func_t* Forme_GetBaseStatistic(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<u16, const SpeciesVariant*, CreatureLib::Library::Statistic>(
resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme,
CreatureLib::Library::Statistic stat) -> u16 { return forme->GetStatistic(stat); }});
}
wasm_func_t* Forme_GetAbility(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<const Talent*, const SpeciesVariant*, bool, u8>(
resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, bool hidden, u8 index) -> const Talent* {
return forme->GetTalent(TalentIndex(hidden, index)).GetRaw();
}});
}
wasm_func_t* Forme_HasFlagByHash(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<bool, const SpeciesVariant*, u32>(
resolver, {[](WebAssemblyScriptResolver*, const SpeciesVariant* forme, u32 flag) -> bool {
return forme->HasFlag(flag);
}});
}
void WASMFormeRegistry::Register(ArbUt::Dictionary<std::string, wasm_func_t*>& externs,
WebAssemblyScriptResolver* resolver) {
REGISTER_GETTER("forme_get_name", SpeciesVariant, GetName, resolver)
REGISTER_GETTER("forme_get_height", SpeciesVariant, GetHeight, resolver)
REGISTER_GETTER("forme_get_weight", SpeciesVariant, GetWeight, resolver)
REGISTER_GETTER("forme_get_base_experience", SpeciesVariant, GetBaseExperience, resolver)
REGISTER_GETTER("forme_get_type_count", SpeciesVariant, GetTypeCount, resolver)
externs.Insert("forme_get_type", Forme_GetType(resolver));
externs.Insert("forme_get_statistic", Forme_GetBaseStatistic(resolver));
REGISTER_GETTER("forme_get_ability_count", SpeciesVariant, GetTalentCount, resolver)
REGISTER_GETTER("forme_get_hidden_ability_count", SpeciesVariant, GetSecretTalentCount, resolver)
externs.Insert("forme_get_ability", Forme_GetAbility(resolver));
externs.Insert("forme_has_flag_by_hash", Forme_HasFlagByHash(resolver));
}