PkmnLib_rs/src/script_implementations/wasm/export_registry/dynamic_data/hit_data.rs

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()
}
}