use crate::dynamic_data::HitData; use crate::script_implementations::wasm::export_registry::wasm_result::{ get_value_call_getter, get_value_void, wasm_ok, WasmVoidResultExtension, }; use crate::script_implementations::wasm::export_registry::{register, WasmResult, WasmVoidResult}; 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 hit_data_get_damage( env: FunctionEnvMut, hit: ExternRef, ) -> WasmResult { wasm_ok(get_value_call_getter!(hit.damage(), env)) } fn hit_data_is_critical( env: FunctionEnvMut, hit: ExternRef, ) -> WasmResult { let is_critical = get_value_call_getter!(hit.is_critical(), env); wasm_ok(u8::from(is_critical)) } fn hit_data_fail( env: FunctionEnvMut, hit: ExternRef, ) -> WasmVoidResult { let hit = get_value_void!(hit, env); hit.fail(); WasmVoidResult::ok() } fn hit_data_get_base_power( env: FunctionEnvMut, hit: ExternRef, ) -> WasmResult { wasm_ok(get_value_call_getter!(hit.base_power(), env)) } fn hit_data_get_effectiveness( env: FunctionEnvMut, hit: ExternRef, ) -> WasmResult { wasm_ok(get_value_call_getter!(hit.effectiveness(), env)) } fn hit_data_get_move_type( env: FunctionEnvMut, hit: ExternRef, ) -> WasmResult { wasm_ok(get_value_call_getter!(hit.move_type(), env).into()) } fn hit_data_set_critical( env: FunctionEnvMut, hit: ExternRef, value: u8 ) -> WasmVoidResult { let hit = get_value_void!(hit, env); hit.set_critical(value == 1); WasmVoidResult::ok() } fn hit_data_set_effectiveness( env: FunctionEnvMut, hit: ExternRef, effectiveness: f32 ) -> WasmVoidResult { let hit = get_value_void!(hit, env); hit.set_effectiveness(effectiveness); WasmVoidResult::ok() } fn hit_data_set_damage( env: FunctionEnvMut, hit: ExternRef, damage: u32 ) -> WasmVoidResult { let hit = get_value_void!(hit, env); hit.set_damage(damage); WasmVoidResult::ok() } fn hit_data_set_move_type( env: FunctionEnvMut, hit: ExternRef, move_type: u8 ) -> WasmVoidResult { let hit = get_value_void!(hit, env); hit.set_move_type(move_type.into()); WasmVoidResult::ok() } }