85 lines
2.5 KiB
Rust
85 lines
2.5 KiB
Rust
use crate::script_implementations::wasm::export_registry::wasm_result::try_wasm;
|
|
use crate::script_implementations::wasm::export_registry::{register, wasm_ok, FunctionEnvMut, WasmResult};
|
|
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;
|
|
use anyhow_ext::Context;
|
|
|
|
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>
|
|
) -> WasmResult<u64> {
|
|
let form = form.value_func_arc(&env).unwrap();
|
|
let vec = form.types();
|
|
let wasm_ptr = try_wasm!(env.data().data().copy_value_vec_to_wasm(vec), env);
|
|
let r: u64 = unsafe { std::mem::transmute((wasm_ptr, vec.len() as u32)) };
|
|
wasm_ok(r)
|
|
}
|
|
|
|
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 }
|
|
}
|
|
|
|
|
|
}
|