PkmnLib_rs/src/script_implementations/wasm/export_registry/static_data/item.rs

64 lines
1.9 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::Item;
use crate::static_data::ItemLibrary;
use crate::StringKey;
use std::mem::transmute;
use wasmer::FunctionEnvMut;
register! {
fn item_library_get_item(
env: FunctionEnvMut<WebAssemblyEnv>,
lib: ExternRef<dyn ItemLibrary>,
string_key: ExternRef<StringKey>,
) -> ExternRef<dyn Item> {
let lib = lib.value_func_box(&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 item_library_get_item_by_hash(env: FunctionEnvMut<WebAssemblyEnv>, lib: ExternRef<dyn ItemLibrary>, hash: u32) -> ExternRef<dyn Item> {
let lib = lib.value_func_box(&env).unwrap();
let m = lib.get_by_hash(hash);
if let Some(v) = m {
ExternRef::func_new(&env, &v)
} else {
ExternRef::null()
}
}
fn item_get_price(
env: FunctionEnvMut<WebAssemblyEnv>,
item: ExternRef<dyn Item>,
) -> i32 {
item.value_func_arc(&env).unwrap().price()
}
fn item_get_name(
env: FunctionEnvMut<WebAssemblyEnv>,
item: ExternRef<dyn Item>,
) -> ExternRef<StringKey> {
ExternRef::func_new(&env, item.value_func_arc(&env).unwrap().name())
}
fn item_get_category(
env: FunctionEnvMut<WebAssemblyEnv>,
item: ExternRef<dyn Item>,
) -> u8 {
unsafe { transmute(item.value_func_arc(&env).unwrap().category()) }
}
fn item_get_battle_category(
env: FunctionEnvMut<WebAssemblyEnv>,
item: ExternRef<dyn Item>,
) -> u8 {
unsafe { transmute(item.value_func_arc(&env).unwrap().battle_category()) }
}
}