use std::ops::Deref; use crate::dynamic_data::{LearnedMove, Pokemon, TurnChoice}; use crate::script_implementations::wasm::export_registry::register; use crate::script_implementations::wasm::extern_ref::ExternRef; use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv; use wasmer::FunctionEnvMut; register! { fn turn_choice_get_user( env: FunctionEnvMut, turn_choice: ExternRef, ) -> ExternRef { let turn_choice = turn_choice.value_func(&env).unwrap(); ExternRef::func_new(&env, turn_choice.user().as_ref().deref()) } fn turn_choice_get_kind( env: FunctionEnvMut, turn_choice: ExternRef, ) -> u8 { match turn_choice.value_func(&env).unwrap() { TurnChoice::Move(_) => 0, TurnChoice::Item(_) => 1, TurnChoice::Switch(_) => 2, TurnChoice::Flee(_) => 3, TurnChoice::Pass(_) => 4, } } fn turn_choice_move_used_move( env: FunctionEnvMut, turn_choice: ExternRef, ) -> ExternRef { if let TurnChoice::Move(d) = turn_choice.value_func(&env).unwrap() { return ExternRef::func_new(&env, d.used_move().as_ref()); } panic!("Invalid turn choice"); } fn turn_choice_move_target_side( env: FunctionEnvMut, turn_choice: ExternRef, ) -> u8 { if let TurnChoice::Move(d) = turn_choice.value_func(&env).unwrap() { return d.target_side(); } panic!("Invalid turn choice"); } fn turn_choice_move_target_index( env: FunctionEnvMut, turn_choice: ExternRef, ) -> u8 { if let TurnChoice::Move(d) = turn_choice.value_func(&env).unwrap() { return d.target_index(); } panic!("Invalid turn choice"); } fn turn_choice_fail( env: FunctionEnvMut, turn_choice: ExternRef, ) { turn_choice.value_func(&env).unwrap().fail(); } }