73 lines
2.8 KiB
Rust
Executable File
73 lines
2.8 KiB
Rust
Executable File
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<WebAssemblyEnv>,
|
|
lib: ExternRef<MoveLibrary>,
|
|
string_key: ExternRef<StringKey>,
|
|
) -> ExternRef<MoveData> {
|
|
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<WebAssemblyEnv>, lib: ExternRef<MoveLibrary>, hash: u32) -> ExternRef<MoveData> {
|
|
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<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> ExternRef<StringKey> {
|
|
ExternRef::func_new(&env, move_data.value_func(&env).unwrap().name())
|
|
}
|
|
|
|
fn move_data_get_type(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> u8 {
|
|
move_data.value_func(&env).unwrap().move_type().into()
|
|
}
|
|
fn move_data_get_category(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> u8 {
|
|
move_data.value_func(&env).unwrap().category() as u8
|
|
}
|
|
fn move_data_get_base_power(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> u8 {
|
|
move_data.value_func(&env).unwrap().base_power()
|
|
}
|
|
fn move_data_get_accuracy(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> u8 {
|
|
move_data.value_func(&env).unwrap().accuracy()
|
|
}
|
|
fn move_data_get_base_usages(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> u8 {
|
|
move_data.value_func(&env).unwrap().base_usages()
|
|
}
|
|
fn move_data_get_target(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> u8 {
|
|
move_data.value_func(&env).unwrap().target() as u8
|
|
}
|
|
fn move_data_get_priority(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>) -> i8 {
|
|
move_data.value_func(&env).unwrap().priority()
|
|
}
|
|
fn move_data_has_flag(env: FunctionEnvMut<WebAssemblyEnv>, move_data: ExternRef<MoveData>, flag: ExternRef<StringKey>) -> 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<WebAssemblyEnv>, move_data: ExternRef<MoveData>, flag_hash: u32) -> u8 {
|
|
if move_data.value_func(&env).unwrap().has_flag_by_hash(flag_hash) {
|
|
1
|
|
} else {
|
|
0
|
|
}
|
|
}
|
|
}
|