summaryrefslogtreecommitdiff
path: root/platforms/tortuise-script-wasm/src/scene.rs
blob: 93889a706ec9699c3cdc9ef9857c2d852aed2104 (plain)
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 switch_scene(context: u64, id: usize);
	}
}

impl ScriptContext<'_> {
	pub fn scene_id(&self, name: &str) -> Option<usize> {
		let id = unsafe { tortuise::scene_id_by_name(self.0, name.as_ptr(), name.len()) };
		(id < usize::MAX).then_some(id)
	}

	pub fn switch_scene(&mut self, name: &str) -> Option<()> {
		let id = self.scene_id(name)?;
		tortuise::switch_scene(self.0, id);
		Some(())
	}
}