From 3eb02cbe5b106cd332f25d658430f7e0ae320745 Mon Sep 17 00:00:00 2001 From: Mica White Date: Sun, 28 Jun 2026 11:09:28 -0400 Subject: initial commit --- src/scene.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/scene.rs (limited to 'src/scene.rs') diff --git a/src/scene.rs b/src/scene.rs new file mode 100644 index 0000000..143eb0b --- /dev/null +++ b/src/scene.rs @@ -0,0 +1,43 @@ +use rustc_hash::FxHashSet; +use serde::{Deserialize, Serialize}; + +use crate::script::{ScriptContext, ScriptManager}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Scene { + pub name: Box, + pub scripts: ResourceRequirements, +} + +#[derive(Debug, Clone, Default, Serialize, Deserialize)] +pub struct ResourceRequirements { + pub required: Box<[usize]>, + pub preload: Box<[usize]>, +} + +pub fn scene_id_by_name(scenes: &[Scene], name: &str) -> Option { + for (i, scene) in scenes.iter().enumerate() { + if &*scene.name == name { + return Some(i); + } + } + + None +} + +pub fn switch_scenes( + scenes: &[Scene], + scripts: &mut ScriptManager, + context: &mut ScriptContext<'_>, + new: usize, +) { + let active_scripts = FxHashSet::from_iter(scripts.active_scripts.iter().cloned()); + let scripts_to_load = &scenes[new].scripts.required; + for script in scripts_to_load { + if !active_scripts.contains(script) { + scripts.activate_script(*script, context); + } else { + scripts.reset_script(*script, context); + } + } +} -- cgit v1.2.3