use crate::dynamic_data::{DynamicLibrary, ScriptOwnerData}; use crate::script_implementations::wasm::export_registry::register; use crate::script_implementations::wasm::extern_ref::ExternRef; use std::sync::atomic::Ordering; use wasmer::{FunctionEnv, FunctionEnvMut, Imports, StoreMut}; use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv; use crate::static_data::StaticData; mod battle_random; /// Battle side registration mod battle_side; mod choice_queue; mod executing_move; /// Learned move registration mod learned_move; mod party; /// Pokemon registration mod pokemon; /// Turn choice registration mod turn_choice; mod hit_data; mod battle; register! { fn dynamic_library_get_static_data( env: FunctionEnvMut, dynamic_lib: ExternRef, ) -> ExternRef { ExternRef::func_new(&env, dynamic_lib.value_func(&env).unwrap().static_data()) } fn script_get_owner( env: FunctionEnvMut, script: u32, ) -> u32 { unsafe { let script = env.data().data().get_loaded_script(script); if let Some(script) = script { match script.get_owner() { ScriptOwnerData::Pokemon(p) => env.data().data().get_extern_ref_index(p.load(Ordering::Relaxed).as_ref().unwrap()), ScriptOwnerData::BattleSide(p) => env.data().data().get_extern_ref_index(p.load(Ordering::Relaxed).as_ref().unwrap()), ScriptOwnerData::Battle(p) => env.data().data().get_extern_ref_index(p.load(Ordering::Relaxed).as_ref().unwrap()), ScriptOwnerData::None => 0, } } else { 0 } } } manual manual_register } /// Additional required manual registration fn manual_register(imports: &mut Imports, store: &mut StoreMut, env: &FunctionEnv) { battle::register(imports, store, env); turn_choice::register(imports, store, env); pokemon::register(imports, store, env); learned_move::register(imports, store, env); battle_side::register(imports, store, env); battle_random::register(imports, store, env); choice_queue::register(imports, store, env); party::register(imports, store, env); executing_move::register(imports, store, env); hit_data::register(imports, store, env); }