PkmnLib_rs/src/script_implementations/wasm/export_registry/dynamic_data/turn_choice.rs

62 lines
1.8 KiB
Rust
Raw Normal View History

2022-08-20 10:22:12 +00:00
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;
register! {
fn turn_choice_get_user(
2022-08-20 10:22:12 +00:00
env: &WebAssemblyEnv,
turn_choice: ExternRef<TurnChoice>,
) -> ExternRef<Pokemon> {
2022-08-20 10:22:12 +00:00
let turn_choice = turn_choice.value(env).unwrap();
ExternRef::new(env.data().as_ref(), turn_choice.user().as_ref().deref())
}
fn turn_choice_get_kind(
env: &WebAssemblyEnv,
turn_choice: ExternRef<TurnChoice>,
) -> u8 {
match turn_choice.value(env).unwrap() {
TurnChoice::Move(_) => 0,
TurnChoice::Item(_) => 1,
TurnChoice::Switch(_) => 2,
TurnChoice::Flee(_) => 3,
TurnChoice::Pass(_) => 4,
}
}
fn turn_choice_move_used_move(
2022-08-20 10:22:12 +00:00
env: &WebAssemblyEnv,
turn_choice: ExternRef<TurnChoice>,
) -> ExternRef<LearnedMove> {
2022-08-20 10:22:12 +00:00
if let TurnChoice::Move(d) = turn_choice.value(env).unwrap() {
return ExternRef::new(env.data().as_ref(), d.used_move().as_ref());
}
panic!("Invalid turn choice");
}
fn turn_choice_move_target_side(
env: &WebAssemblyEnv,
turn_choice: ExternRef<TurnChoice>,
) -> u8 {
if let TurnChoice::Move(d) = turn_choice.value(env).unwrap() {
return d.target_side();
}
panic!("Invalid turn choice");
}
fn turn_choice_move_target_index(
env: &WebAssemblyEnv,
turn_choice: ExternRef<TurnChoice>,
) -> u8 {
if let TurnChoice::Move(d) = turn_choice.value(env).unwrap() {
return d.target_index();
}
panic!("Invalid turn choice");
}
}