53 lines
1.8 KiB
Rust
Executable File
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()
|
|
}
|
|
|
|
}
|