32 lines
1.0 KiB
Rust
Executable File
32 lines
1.0 KiB
Rust
Executable File
use crate::dynamic_data::{Pokemon, PokemonParty};
|
|
use crate::script_implementations::wasm::export_registry::register;
|
|
use crate::script_implementations::wasm::export_registry::wasm_result::{get_value, wasm_ok, WasmResult};
|
|
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
|
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
|
|
use anyhow_ext::Context;
|
|
use wasmer::FunctionEnvMut;
|
|
|
|
register! {
|
|
fn party_get_pokemon(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
party: ExternRef<PokemonParty>,
|
|
index: u32
|
|
) -> WasmResult<ExternRef<Pokemon>> {
|
|
let party = get_value!(party, env);
|
|
wasm_ok(
|
|
if let Some(Some(v)) = &party.pokemon().get(index as usize) {
|
|
ExternRef::func_new(&env, v.as_ref())
|
|
} else {
|
|
ExternRef::null()
|
|
})
|
|
}
|
|
|
|
fn party_get_length(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
party: ExternRef<PokemonParty>,
|
|
) -> WasmResult<u32> {
|
|
let party = get_value!(party, env);
|
|
wasm_ok(party.length() as u32)
|
|
}
|
|
}
|