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

53 lines
1.8 KiB
Rust
Executable File

use std::intrinsics::transmute;
use crate::dynamic_data::{LearnedMove, MoveLearnMethod};
use crate::script_implementations::wasm::export_registry::wasm_result::{
get_value_call_getter, get_value_void, wasm_ok, WasmVoidResult, WasmVoidResultExtension,
};
use crate::script_implementations::wasm::export_registry::{register, WasmResult};
use crate::script_implementations::wasm::extern_ref::ExternRef;
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
use crate::static_data::MoveData;
use anyhow_ext::Context;
use wasmer::FunctionEnvMut;
register! {
fn learned_move_get_learn_method(
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<LearnedMove>,
) -> WasmResult<u8> {
unsafe {
let learn_method = get_value_call_getter!(turn_choice.learn_method(), &env);
wasm_ok(transmute::<MoveLearnMethod, u8>(learn_method))
}
}
fn learned_move_get_move_data(
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<LearnedMove>,
) -> WasmResult<ExternRef<dyn MoveData>> {
let move_data = get_value_call_getter!(turn_choice.move_data(), &env);
wasm_ok(ExternRef::<dyn MoveData>::func_new(&env, move_data))
}
fn learned_move_restore_all_uses(
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<LearnedMove>,
) -> WasmVoidResult {
let turn_choice = get_value_void!(turn_choice, env);
turn_choice.restore_all_uses();
WasmVoidResult::ok()
}
fn learned_move_restore_uses(
env: FunctionEnvMut<WebAssemblyEnv>,
turn_choice: ExternRef<LearnedMove>,
amount: u8,
) -> WasmVoidResult {
let turn_choice = get_value_void!(turn_choice, env);
turn_choice.restore_uses(amount);
WasmVoidResult::ok()
}
}