104 lines
4.0 KiB
Rust
Executable File
104 lines
4.0 KiB
Rust
Executable File
use std::mem::transmute;
|
|
use wasmer::{FunctionEnv, FunctionEnvMut, Imports, StoreMut};
|
|
|
|
use crate::defines::LevelInt;
|
|
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::{
|
|
ItemLibrary, LibrarySettings, MoveLibrary, SpeciesLibrary, StaticData, StaticStatisticSet, StatisticSet,
|
|
TypeLibrary,
|
|
};
|
|
|
|
/// Ability data registration
|
|
mod ability;
|
|
/// Form data registration
|
|
mod form;
|
|
/// Item registration.
|
|
mod item;
|
|
/// Moves data registration
|
|
mod moves;
|
|
/// Nature data registration
|
|
mod nature;
|
|
/// Species data registration
|
|
mod species;
|
|
/// Types data registration
|
|
mod types;
|
|
|
|
register! {
|
|
fn static_data_get_move_library(env: FunctionEnvMut<WebAssemblyEnv>, data_library: ExternRef<dyn StaticData>) -> ExternRef<dyn MoveLibrary> {
|
|
ExternRef::func_new(&env, data_library.value_func_box(&env).unwrap().moves())
|
|
}
|
|
|
|
fn static_data_get_species_library(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
data_library: ExternRef<dyn StaticData>,
|
|
) -> ExternRef<dyn SpeciesLibrary> {
|
|
ExternRef::func_new(&env, data_library.value_func_box(&env).unwrap().species())
|
|
}
|
|
|
|
fn static_data_get_item_library(env: FunctionEnvMut<WebAssemblyEnv>, data_library: ExternRef<dyn StaticData>) -> ExternRef<dyn ItemLibrary> {
|
|
ExternRef::func_new(&env, data_library.value_func_box(&env).unwrap().items())
|
|
}
|
|
|
|
fn static_data_get_type_library(env: FunctionEnvMut<WebAssemblyEnv>, data_library: ExternRef<dyn StaticData>) -> ExternRef<dyn TypeLibrary> {
|
|
ExternRef::func_new(&env, data_library.value_func_box(&env).unwrap().types())
|
|
}
|
|
|
|
fn static_data_get_library_settings(
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
|
data_library: ExternRef<dyn StaticData>,
|
|
) -> ExternRef<dyn LibrarySettings> {
|
|
ExternRef::func_new(&env, data_library.value_func_box(&env).unwrap().settings())
|
|
}
|
|
|
|
fn library_settings_get_maximum_level(env: FunctionEnvMut<WebAssemblyEnv>, data_library: ExternRef<dyn LibrarySettings>) -> LevelInt {
|
|
data_library.value_func_box(&env).unwrap().maximum_level()
|
|
}
|
|
|
|
fn static_statistics_set_get_stat(env: FunctionEnvMut<WebAssemblyEnv>, statistics_set: ExternRef<StaticStatisticSet<u16>>, stat: u8) -> u32 {
|
|
unsafe {
|
|
statistics_set.value_func(&env).unwrap().get_stat(transmute(stat)) as u32
|
|
}
|
|
}
|
|
|
|
fn statistic_set_get(env: FunctionEnvMut<WebAssemblyEnv>, statistics_set: ExternRef<StatisticSet<u32>>, stat: u8) -> i64 {
|
|
unsafe {
|
|
statistics_set.value_func(&env).unwrap().get_stat(transmute(stat)) as i64
|
|
}
|
|
}
|
|
|
|
fn statistic_set_set(env: FunctionEnvMut<WebAssemblyEnv>, statistics_set: ExternRef<StatisticSet<u32>>, stat: u8, value: u64) {
|
|
unsafe {
|
|
statistics_set.value_func(&env).unwrap().set_stat(transmute(stat), value as u32)
|
|
}
|
|
}
|
|
|
|
fn statistic_set_increase_stat(env: FunctionEnvMut<WebAssemblyEnv>, statistics_set: ExternRef<StatisticSet<u32>>, stat: u8, value: u64) {
|
|
unsafe {
|
|
statistics_set.value_func(&env).unwrap().increase_stat(transmute(stat), value as u32)
|
|
}
|
|
}
|
|
|
|
fn statistic_set_decrease_stat(env: FunctionEnvMut<WebAssemblyEnv>, statistics_set: ExternRef<StatisticSet<u32>>, stat: u8, value: u64) {
|
|
unsafe {
|
|
statistics_set.value_func(&env).unwrap().decrease_stat(transmute(stat), value as u32)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
manual manual_registration
|
|
}
|
|
|
|
/// Additional required manual registration.
|
|
fn manual_registration(imports: &mut Imports, store: &mut StoreMut, env: &FunctionEnv<WebAssemblyEnv>) {
|
|
moves::register(imports, store, env);
|
|
species::register(imports, store, env);
|
|
item::register(imports, store, env);
|
|
nature::register(imports, store, env);
|
|
form::register(imports, store, env);
|
|
ability::register(imports, store, env);
|
|
types::register(imports, store, env);
|
|
}
|