98 lines
2.8 KiB
Rust
Executable File
98 lines
2.8 KiB
Rust
Executable File
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<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
) -> WasmResult<u32> {
|
|
wasm_ok(get_value_call_getter!(hit.damage(), env))
|
|
}
|
|
|
|
fn hit_data_is_critical(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
) -> WasmResult<u8> {
|
|
let is_critical = get_value_call_getter!(hit.is_critical(), env);
|
|
wasm_ok(u8::from(is_critical))
|
|
}
|
|
|
|
fn hit_data_fail(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
) -> WasmVoidResult {
|
|
let hit = get_value_void!(hit, env);
|
|
hit.fail();
|
|
WasmVoidResult::ok()
|
|
}
|
|
|
|
fn hit_data_get_base_power(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
) -> WasmResult<u8> {
|
|
wasm_ok(get_value_call_getter!(hit.base_power(), env))
|
|
}
|
|
|
|
fn hit_data_get_effectiveness(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
) -> WasmResult<f32> {
|
|
wasm_ok(get_value_call_getter!(hit.effectiveness(), env))
|
|
}
|
|
|
|
fn hit_data_get_move_type(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
) -> WasmResult<u8> {
|
|
wasm_ok(get_value_call_getter!(hit.move_type(), env).into())
|
|
}
|
|
|
|
fn hit_data_set_critical(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
value: u8
|
|
) -> WasmVoidResult {
|
|
let hit = get_value_void!(hit, env);
|
|
hit.set_critical(value == 1);
|
|
WasmVoidResult::ok()
|
|
}
|
|
|
|
fn hit_data_set_effectiveness(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
effectiveness: f32
|
|
) -> WasmVoidResult {
|
|
let hit = get_value_void!(hit, env);
|
|
hit.set_effectiveness(effectiveness);
|
|
WasmVoidResult::ok()
|
|
}
|
|
|
|
fn hit_data_set_damage(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
damage: u32
|
|
) -> WasmVoidResult {
|
|
let hit = get_value_void!(hit, env);
|
|
hit.set_damage(damage);
|
|
WasmVoidResult::ok()
|
|
}
|
|
|
|
fn hit_data_set_move_type(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
hit: ExternRef<HitData>,
|
|
move_type: u8
|
|
) -> WasmVoidResult {
|
|
let hit = get_value_void!(hit, env);
|
|
hit.set_move_type(move_type.into());
|
|
WasmVoidResult::ok()
|
|
}
|
|
|
|
}
|