72 lines
2.4 KiB
Rust
72 lines
2.4 KiB
Rust
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<WebAssemblyEnv>,
|
|
battle: ExternRef<Battle>,
|
|
) -> VecExternRef<BattleParty> {
|
|
VecExternRef::new(env.data().data().as_ref(), battle.value_func(&env).unwrap().parties())
|
|
}
|
|
|
|
fn battle_get_choice_queue(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
battle: ExternRef<Battle>,
|
|
) -> ExternRef<ChoiceQueue> {
|
|
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<WebAssemblyEnv>,
|
|
battle: ExternRef<Battle>,
|
|
) -> ExternRef<DynamicLibrary> {
|
|
ExternRef::func_new(&env, battle.value_func(&env).unwrap().library().as_ref())
|
|
}
|
|
|
|
fn battle_get_sides(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
battle: ExternRef<Battle>,
|
|
) -> VecExternRef<BattleSide> {
|
|
VecExternRef::new(env.data().data().as_ref(), battle.value_func(&env).unwrap().sides())
|
|
}
|
|
|
|
fn battle_get_random(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
battle: ExternRef<Battle>,
|
|
) -> ExternRef<BattleRandom> {
|
|
ExternRef::func_new(&env, battle.value_func(&env).unwrap().random())
|
|
}
|
|
|
|
fn battle_find_party_for_pokemon(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
battle: ExternRef<Battle>,
|
|
pokemon: ExternRef<Pokemon>
|
|
) -> ExternRef<BattleParty> {
|
|
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<WebAssemblyEnv>,
|
|
battle_party: ExternRef<BattleParty>,
|
|
) -> ExternRef<PokemonParty> {
|
|
ExternRef::func_new(&env, battle_party.value_func(&env).unwrap().party().as_ref())
|
|
}
|
|
}
|