diff options
Diffstat (limited to 'src/scene.rs')
| -rw-r--r-- | src/scene.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/scene.rs b/src/scene.rs new file mode 100644 index 0000000..95284e9 --- /dev/null +++ b/src/scene.rs @@ -0,0 +1,32 @@ +use crate::ScriptContext; + +mod tortuise { + #[link(wasm_import_module = "tortuise")] + unsafe extern "C" { + pub unsafe fn scene_id_by_name(context: u64, name: *const u8, length: usize) -> usize; + pub safe fn preload_scene(context: u64, id: usize); + pub safe fn is_scene_loaded(context: u64, id: usize) -> u32; + pub safe fn switch_scene(context: u64, id: usize); + } +} + +impl ScriptContext { + pub fn scene_id(&self, name: &str) -> usize { + unsafe { tortuise::scene_id_by_name(self.0, name.as_ptr(), name.len()) } + } + + pub fn preload_scene(&self, name: &str) { + let id = self.scene_id(name); + tortuise::preload_scene(self.0, id); + } + + pub fn is_scene_loaded(&self, name: &str) -> bool { + let id = self.scene_id(name); + tortuise::is_scene_loaded(self.0, id) > 0 + } + + pub fn switch_scene(&self, name: &str) { + let id = self.scene_id(name); + tortuise::switch_scene(self.0, id); + } +} |
