2023-06-22 13:43:41 +00:00
|
|
|
use crate::script_implementations::wasm::export_registry::wasm_result::get_value_arc;
|
2023-01-14 12:25:21 +00:00
|
|
|
use crate::script_implementations::wasm::export_registry::FunctionEnvMut;
|
2023-06-22 13:43:41 +00:00
|
|
|
use crate::script_implementations::wasm::export_registry::{register, try_wasm, wasm_ok, WasmResult};
|
|
|
|
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
2023-01-14 12:25:21 +00:00
|
|
|
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
|
2023-07-29 10:57:52 +00:00
|
|
|
use crate::static_data::{Ability, Parameter};
|
2023-01-14 12:25:21 +00:00
|
|
|
use crate::StringKey;
|
|
|
|
|
|
|
|
register! {
|
|
|
|
|
|
|
|
fn ability_get_name(
|
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
|
|
ability: ExternRef<dyn Ability>
|
2023-06-22 13:43:41 +00:00
|
|
|
) -> WasmResult<ExternRef<StringKey>> {
|
|
|
|
let ability = get_value_arc!(ability, env);
|
|
|
|
wasm_ok(ExternRef::func_new(&env, ability.name().clone().into()))
|
2023-01-14 12:25:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn ability_get_effect(
|
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
|
|
ability: ExternRef<dyn Ability>
|
2023-06-22 13:43:41 +00:00
|
|
|
) -> WasmResult<ExternRef<StringKey>> {
|
|
|
|
let ability = get_value_arc!(ability, env);
|
|
|
|
wasm_ok(ExternRef::func_new(&env, ability.effect().clone().into()))
|
2023-01-14 12:25:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn ability_get_parameters(
|
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
|
|
ability: ExternRef<dyn Ability>
|
2023-06-22 13:43:41 +00:00
|
|
|
) -> WasmResult<u64> {
|
|
|
|
let ability = get_value_arc!(ability, env);
|
|
|
|
let parameters = ability.parameters();
|
|
|
|
let mut vec : Vec<u32> = Vec::with_capacity(parameters.len());
|
|
|
|
for parameter in parameters {
|
2023-07-29 10:57:52 +00:00
|
|
|
vec.push(ExternRef::<Parameter>::func_new(&env, parameter.into()).index() as u32);
|
2023-06-22 13:43:41 +00:00
|
|
|
}
|
|
|
|
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)
|
2023-01-14 12:25:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|