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

54 lines
2.6 KiB
C++

#include "WASMSpeciesRegistry.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* Species_HasFormeByHash(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<bool, const CreatureSpecies*, u32>(
resolver, {[](WebAssemblyScriptResolver*, const CreatureSpecies* species, u32 flag) -> bool {
return species->HasVariant(flag);
}});
}
wasm_func_t* Species_GetFormeByHash(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<const SpeciesVariant*, const CreatureSpecies*, u32>(
resolver,
{[](WebAssemblyScriptResolver*, const CreatureSpecies* species, u32 variant) -> const SpeciesVariant* {
auto opt = species->TryGetVariant(variant);
return opt.has_value() ? opt.value() : nullptr;
}});
}
wasm_func_t* Species_HasFlagByHash(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<bool, const CreatureSpecies*, u32>(
resolver, {[](WebAssemblyScriptResolver*, const CreatureSpecies* species, u32 flag) -> bool {
return species->HasFlag(flag);
}});
}
wasm_func_t* Species_HasEggGroupByHash(WebAssemblyScriptResolver* resolver) {
return WasmHelpers::CreateFunc<bool, const PokemonSpecies*, u32>(
resolver, {[](WebAssemblyScriptResolver*, const PokemonSpecies* species, u32 flag) -> bool {
return species->HasEggGroup(flag);
}});
}
void WASMSpeciesRegistry::Register(ArbUt::Dictionary<std::string, wasm_func_t*>& externs,
WebAssemblyScriptResolver* resolver) {
REGISTER_GETTER("species_get_id", CreatureSpecies, GetId, resolver)
REGISTER_GETTER("species_get_name", CreatureSpecies, GetName, resolver)
REGISTER_GETTER("species_get_gender_rate", CreatureSpecies, GetGenderRate, resolver)
REGISTER_GETTER("species_get_growth_rate", CreatureSpecies, GetGrowthRate, resolver)
REGISTER_GETTER("species_get_capture_rate", CreatureSpecies, GetCaptureRate, resolver)
REGISTER_GETTER("species_get_base_happiness", PokemonSpecies, GetBaseHappiness, resolver)
externs.Insert("species_has_forme_by_hash", Species_HasFormeByHash(resolver));
externs.Insert("species_get_forme_by_hash", Species_GetFormeByHash(resolver));
externs.Insert("species_has_flag_by_hash", Species_HasFlagByHash(resolver));
externs.Insert("species_has_egg_group_by_hash", Species_HasEggGroupByHash(resolver));
}