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 crate::static_data::{DataLibrary, MoveData, MoveLibrary}; use crate::StringKey; use wasmer::FunctionEnvMut; register! { fn move_library_get_move( env: FunctionEnvMut, lib: ExternRef, string_key: ExternRef, ) -> ExternRef { let lib = lib.value_func(&env).unwrap(); let m = lib.get(string_key.value_func(&env).unwrap()); if let Some(v) = m { ExternRef::func_new(&env, v) } else { ExternRef::null() } } fn move_library_get_move_by_hash(env: FunctionEnvMut, lib: ExternRef, hash: u32) -> ExternRef { let lib = lib.value_func(&env).unwrap(); let m = lib.get_by_hash(hash); if let Some(v) = m { ExternRef::func_new(&env, v) } else { ExternRef::null() } } fn move_data_get_name(env: FunctionEnvMut, move_data: ExternRef) -> ExternRef { ExternRef::func_new(&env, move_data.value_func(&env).unwrap().name()) } fn move_data_get_type(env: FunctionEnvMut, move_data: ExternRef) -> u8 { move_data.value_func(&env).unwrap().move_type().into() } fn move_data_get_category(env: FunctionEnvMut, move_data: ExternRef) -> u8 { move_data.value_func(&env).unwrap().category() as u8 } fn move_data_get_base_power(env: FunctionEnvMut, move_data: ExternRef) -> u8 { move_data.value_func(&env).unwrap().base_power() } fn move_data_get_accuracy(env: FunctionEnvMut, move_data: ExternRef) -> u8 { move_data.value_func(&env).unwrap().accuracy() } fn move_data_get_base_usages(env: FunctionEnvMut, move_data: ExternRef) -> u8 { move_data.value_func(&env).unwrap().base_usages() } fn move_data_get_target(env: FunctionEnvMut, move_data: ExternRef) -> u8 { move_data.value_func(&env).unwrap().target() as u8 } fn move_data_get_priority(env: FunctionEnvMut, move_data: ExternRef) -> i8 { move_data.value_func(&env).unwrap().priority() } fn move_data_has_flag(env: FunctionEnvMut, move_data: ExternRef, flag: ExternRef) -> u8 { if move_data.value_func(&env).unwrap().has_flag(flag.value_func(&env).unwrap()) { 1 } else { 0 } } fn move_data_has_flag_by_hash(env: FunctionEnvMut, move_data: ExternRef, flag_hash: u32) -> u8 { if move_data.value_func(&env).unwrap().has_flag_by_hash(flag_hash) { 1 } else { 0 } } }