use crate::dynamic_data::{ Battle, BattleParty, BattleRandom, BattleSide, ChoiceQueue, DynamicLibrary, Pokemon, PokemonParty, }; use crate::script_implementations::wasm::export_registry::register; use crate::script_implementations::wasm::extern_ref::{ExternRef, VecExternRef}; use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv; use wasmer::FunctionEnvMut; register! { fn battle_get_parties( env: FunctionEnvMut, battle: ExternRef, ) -> VecExternRef { VecExternRef::new(env.data().data().as_ref(), battle.value_func(&env).unwrap().parties()) } fn battle_get_choice_queue( env: FunctionEnvMut, battle: ExternRef, ) -> ExternRef { let queue = battle.value_func(&env).unwrap().current_turn_queue().read(); if let Some(queue) = queue.as_ref() { ExternRef::func_new(&env, queue) } else { ExternRef::null() } } fn battle_get_library( env: FunctionEnvMut, battle: ExternRef, ) -> ExternRef { ExternRef::func_new(&env, battle.value_func(&env).unwrap().library().as_ref()) } fn battle_get_sides( env: FunctionEnvMut, battle: ExternRef, ) -> VecExternRef { VecExternRef::new(env.data().data().as_ref(), battle.value_func(&env).unwrap().sides()) } fn battle_get_random( env: FunctionEnvMut, battle: ExternRef, ) -> ExternRef { ExternRef::func_new(&env, battle.value_func(&env).unwrap().random()) } fn battle_find_party_for_pokemon( env: FunctionEnvMut, battle: ExternRef, pokemon: ExternRef ) -> ExternRef { let battle = battle.value_func(&env).unwrap(); let pokemon = pokemon.value_func(&env).unwrap(); for party in battle.parties() { if party.party().has_pokemon(pokemon) { return ExternRef::func_new(&env, party); } } ExternRef::null() } fn battle_party_get_party( env: FunctionEnvMut, battle_party: ExternRef, ) -> ExternRef { ExternRef::func_new(&env, battle_party.value_func(&env).unwrap().party().as_ref()) } }