Adds ability to get the current time of day
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
use crate::dynamic_data::{DynamicLibrary, ScriptOwnerData};
|
||||
use crate::dynamic_data::{DynamicLibrary, MiscLibrary, ScriptOwnerData};
|
||||
use crate::script_implementations::wasm::export_registry::register;
|
||||
use crate::script_implementations::wasm::export_registry::wasm_result::{try_wasm, wasm_ok, WasmResult};
|
||||
use crate::script_implementations::wasm::extern_ref::ExternRef;
|
||||
use wasmer::{FunctionEnv, FunctionEnvMut, Imports, StoreMut};
|
||||
|
||||
use crate::script_implementations::wasm::script_resolver::WebAssemblyEnv;
|
||||
use crate::static_data::StaticData;
|
||||
use crate::static_data::{StaticData, TimeOfDay};
|
||||
|
||||
/// The battle registration
|
||||
mod battle;
|
||||
@@ -38,6 +38,27 @@ register! {
|
||||
wasm_ok(ExternRef::<dyn StaticData>::func_new(&env, static_data.into()))
|
||||
}
|
||||
|
||||
fn dynamic_library_get_misc_library(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
dynamic_lib: ExternRef<dyn DynamicLibrary>,
|
||||
) -> WasmResult<ExternRef<dyn MiscLibrary>> {
|
||||
let dynamic_lib = try_wasm!(dynamic_lib.value_func_arc(&env), env);
|
||||
let misc_library = dynamic_lib.misc_library();
|
||||
wasm_ok(ExternRef::<dyn MiscLibrary>::func_new(&env, misc_library.into()))
|
||||
}
|
||||
|
||||
fn misc_library_get_time_of_day(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
dynamic_lib: ExternRef<dyn MiscLibrary>,
|
||||
) -> WasmResult<u8> {
|
||||
let misc_library = try_wasm!(dynamic_lib.value_func_arc(&env), env);
|
||||
unsafe{
|
||||
let time_of_day = misc_library.time_of_day();
|
||||
wasm_ok(std::mem::transmute::<TimeOfDay, u8>(time_of_day))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn script_get_owner(
|
||||
env: FunctionEnvMut<WebAssemblyEnv>,
|
||||
script: u32,
|
||||
|
||||
@@ -40,6 +40,7 @@ pub(crate) enum WasmObject {
|
||||
|
||||
// Dynamic data libraries
|
||||
DynamicLibrary(Weak<dyn crate::dynamic_data::DynamicLibrary>),
|
||||
MiscLibrary(Weak<dyn crate::dynamic_data::MiscLibrary>),
|
||||
|
||||
// Battle data
|
||||
Battle(WeakBattleReference),
|
||||
@@ -88,6 +89,7 @@ impl PartialEq for WasmObject {
|
||||
(WasmObject::PokemonParty(s1), WasmObject::PokemonParty(s2)) => Weak::ptr_eq(s1, s2),
|
||||
(WasmObject::LearnedMove(s1), WasmObject::LearnedMove(s2)) => Weak::ptr_eq(s1, s2),
|
||||
(WasmObject::DynamicLibrary(s1), WasmObject::DynamicLibrary(s2)) => Weak::ptr_eq(s1, s2),
|
||||
(WasmObject::MiscLibrary(s1), WasmObject::MiscLibrary(s2)) => Weak::ptr_eq(s1, s2),
|
||||
(WasmObject::Battle(s1), WasmObject::Battle(s2)) => WeakBattleReference::eq(s1, s2),
|
||||
(WasmObject::ChoiceQueue(s1), WasmObject::ChoiceQueue(s2)) => Weak::ptr_eq(s1, s2),
|
||||
(WasmObject::BattleRandom(s1), WasmObject::BattleRandom(s2)) => Weak::ptr_eq(s1, s2),
|
||||
@@ -131,6 +133,7 @@ impl Hash for WasmObject {
|
||||
WasmObject::PokemonParty(m) => m.as_ptr().hash(state),
|
||||
WasmObject::LearnedMove(m) => m.as_ptr().hash(state),
|
||||
WasmObject::DynamicLibrary(m) => m.as_ptr().hash(state),
|
||||
WasmObject::MiscLibrary(m) => m.as_ptr().hash(state),
|
||||
WasmObject::Battle(m) => m.as_ptr().hash(state),
|
||||
WasmObject::ChoiceQueue(m) => m.as_ptr().hash(state),
|
||||
WasmObject::BattleRandom(m) => m.as_ptr().hash(state),
|
||||
@@ -394,6 +397,14 @@ impl From<&Arc<dyn crate::dynamic_data::DynamicLibrary>> for WasmObject {
|
||||
|
||||
impl_from_wasm_obj!(DynamicLibrary, Arc<dyn crate::dynamic_data::DynamicLibrary>);
|
||||
|
||||
impl From<&Arc<dyn crate::dynamic_data::MiscLibrary>> for WasmObject {
|
||||
fn from(value: &Arc<dyn crate::dynamic_data::MiscLibrary>) -> Self {
|
||||
Self::MiscLibrary(Arc::downgrade(value))
|
||||
}
|
||||
}
|
||||
|
||||
impl_from_wasm_obj!(MiscLibrary, Arc<dyn crate::dynamic_data::MiscLibrary>);
|
||||
|
||||
impl From<&Arc<crate::dynamic_data::BattleRandom>> for WasmObject {
|
||||
fn from(value: &Arc<crate::dynamic_data::BattleRandom>) -> Self {
|
||||
Self::BattleRandom(Arc::downgrade(value))
|
||||
|
||||
@@ -168,17 +168,6 @@ impl<T> Default for VecExternRef<T> {
|
||||
}
|
||||
}
|
||||
|
||||
// impl<T: 'static> VecExternRef<T> {
|
||||
// /// Instantiates a new VecExternRef for a given slice.
|
||||
// pub fn new(env: &WebAssemblyEnvironmentData, value: &Vec<T>) -> Self {
|
||||
// Self {
|
||||
// index: env.get_extern_vec_ref_index(value),
|
||||
// size: value.len() as u32,
|
||||
// _phantom: Default::default(),
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
unsafe impl<T> FromToNativeWasmType for VecExternRef<T> {
|
||||
type Native = i64;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user