72 lines
2.2 KiB
Rust
Executable File
72 lines
2.2 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()) }
|
|
}
|
|
|
|
fn item_has_flag(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
item: ExternRef<dyn Item>,
|
|
key: ExternRef<StringKey>
|
|
) -> u8 {
|
|
if item.value_func_arc(&env).unwrap().has_flag(key.value_func(&env).unwrap()) { 1 } else { 0 }
|
|
}
|
|
|
|
}
|