2022-08-20 10:22:12 +00:00
|
|
|
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, Species, SpeciesLibrary};
|
|
|
|
use crate::StringKey;
|
2022-08-27 12:14:58 +00:00
|
|
|
use wasmer::FunctionEnvMut;
|
2022-08-20 10:22:12 +00:00
|
|
|
|
|
|
|
register! {
|
|
|
|
|
|
|
|
fn species_library_get_species(
|
2022-08-27 12:14:58 +00:00
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
2022-08-20 10:22:12 +00:00
|
|
|
lib: ExternRef<SpeciesLibrary>,
|
|
|
|
string_key: ExternRef<StringKey>,
|
|
|
|
) -> ExternRef<Species> {
|
2022-08-27 16:04:56 +00:00
|
|
|
let lib = lib.value_func(&env).unwrap();
|
|
|
|
let m = lib.get(string_key.value_func(&env).unwrap());
|
2022-08-20 10:22:12 +00:00
|
|
|
if let Some(v) = m {
|
2022-08-27 12:14:58 +00:00
|
|
|
ExternRef::func_new(&env, v)
|
2022-08-20 10:22:12 +00:00
|
|
|
} else {
|
|
|
|
ExternRef::null()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn species_get_capture_rate(
|
2022-08-27 12:14:58 +00:00
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
2022-08-20 10:22:12 +00:00
|
|
|
species: ExternRef<Species>,
|
|
|
|
) -> u8 {
|
2022-08-27 16:04:56 +00:00
|
|
|
species.value_func(&env).unwrap().capture_rate()
|
2022-08-20 10:22:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn species_get_growth_rate(
|
2022-08-27 12:14:58 +00:00
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
2022-08-20 10:22:12 +00:00
|
|
|
species: ExternRef<Species>,
|
|
|
|
) -> ExternRef<StringKey> {
|
2022-08-27 16:04:56 +00:00
|
|
|
let species = species.value_func(&env).unwrap();
|
2022-08-27 12:14:58 +00:00
|
|
|
ExternRef::func_new(&env, species.growth_rate())
|
2022-08-20 10:22:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn species_get_gender_rate(
|
2022-08-27 12:14:58 +00:00
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
2022-08-20 10:22:12 +00:00
|
|
|
species: ExternRef<Species>,
|
|
|
|
) -> f32 {
|
2022-08-27 16:04:56 +00:00
|
|
|
species.value_func(&env).unwrap().gender_rate()
|
2022-08-20 10:22:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn species_get_name(
|
2022-08-27 12:14:58 +00:00
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
2022-08-20 10:22:12 +00:00
|
|
|
species: ExternRef<Species>,
|
|
|
|
) -> ExternRef<StringKey> {
|
2022-08-27 16:04:56 +00:00
|
|
|
let species = species.value_func(&env).unwrap();
|
2022-08-27 12:14:58 +00:00
|
|
|
ExternRef::func_new(&env, species.name())
|
2022-08-20 10:22:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
fn species_get_id(
|
2022-08-27 12:14:58 +00:00
|
|
|
env: FunctionEnvMut<WebAssemblyEnv>,
|
2022-08-20 10:22:12 +00:00
|
|
|
species: ExternRef<Species>,
|
|
|
|
) -> u16 {
|
2022-08-27 16:04:56 +00:00
|
|
|
species.value_func(&env).unwrap().id()
|
2022-08-20 10:22:12 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|