PkmnLib_rs/src/script_implementations/wasm/export_registry/static_data/form.rs

83 lines
2.3 KiB
Rust

use crate::script_implementations::wasm::export_registry::register;
use crate::script_implementations::wasm::export_registry::FunctionEnvMut;
use crate::script_implementations::wasm::extern_ref::{ExternRef, VecExternRef};
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use crate::static_data::{Form, StatisticSet};
use crate::StringKey;
register! {
fn form_get_name(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> ExternRef<StringKey> {
let form = form.value_func_arc(&env).unwrap();
ExternRef::func_new(&env, form.name())
}
fn form_get_types(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> (u32, u32) {
let form = form.value_func_arc(&env).unwrap();
let vec = form.types();
let wasm_ptr = env.data().data().copy_value_vec_to_wasm(vec);
(wasm_ptr, vec.len() as u32)
}
fn form_get_height(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> f32 {
form.value_func_arc(&env).unwrap().height()
}
fn form_get_weight(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> f32 {
form.value_func_arc(&env).unwrap().weight()
}
fn form_get_base_experience(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> u32 {
form.value_func_arc(&env).unwrap().base_experience()
}
fn form_get_base_stats(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> ExternRef<StatisticSet<u16>> {
let form = form.value_func_arc(&env).unwrap();
ExternRef::func_new(&env, form.base_stats())
}
fn form_get_abilities(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> VecExternRef<StringKey> {
let form = form.value_func_arc(&env).unwrap();
VecExternRef::new(env.data().data().as_ref(), form.abilities())
}
fn form_get_hidden_abilities(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>
) -> VecExternRef<StringKey> {
let form = form.value_func_arc(&env).unwrap();
VecExternRef::new(env.data().data().as_ref(), form.hidden_abilities())
}
fn form_has_flag_by_hash(
env: FunctionEnvMut<WebAssemblyEnv>,
form: ExternRef<dyn Form>,
flag_hash: u32,
) -> u8 {
if form.value_func_arc(&env).unwrap().has_flag_by_hash(flag_hash) { 1 } else { 0 }
}
}