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

101 lines
2.9 KiB
Rust
Executable File

use crate::dynamic_data::HitData;
use crate::script_implementations::wasm::export_registry::wasm_result::{
get_value_arc, get_value_arc_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 wasmer::FunctionEnvMut;
register! {
fn hit_data_get_damage(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
) -> WasmResult<u32> {
let hit = get_value_arc!(hit, env);
wasm_ok(hit.damage())
}
fn hit_data_is_critical(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
) -> WasmResult<u8> {
let hit = get_value_arc!(hit, env);
wasm_ok(u8::from(hit.is_critical()))
}
fn hit_data_fail(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
) -> WasmVoidResult {
let hit = get_value_arc_void!(hit, env);
hit.fail();
WasmVoidResult::ok()
}
fn hit_data_get_base_power(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
) -> WasmResult<u8> {
let hit = get_value_arc!(hit, env);
wasm_ok(hit.base_power())
}
fn hit_data_get_effectiveness(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
) -> WasmResult<f32> {
let hit = get_value_arc!(hit, env);
wasm_ok(hit.effectiveness())
}
fn hit_data_get_move_type(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
) -> WasmResult<u8> {
let hit = get_value_arc!(hit, env);
wasm_ok(hit.move_type().into())
}
fn hit_data_set_critical(
env: FunctionEnvMut<WebAssemblyEnv>,
hit: ExternRef<HitData>,
value: u8
) -> WasmVoidResult {
let hit = get_value_arc_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_arc_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_arc_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_arc_void!(hit, env);
hit.set_move_type(move_type.into());
WasmVoidResult::ok()
}
}