summaryrefslogtreecommitdiff
path: root/rust/crates/commands/src/project_ext.rs
diff options
context:
space:
mode:
Diffstat (limited to 'rust/crates/commands/src/project_ext.rs')
-rw-r--r--rust/crates/commands/src/project_ext.rs20
1 files changed, 20 insertions, 0 deletions
diff --git a/rust/crates/commands/src/project_ext.rs b/rust/crates/commands/src/project_ext.rs
new file mode 100644
index 00000000..18262fbd
--- /dev/null
+++ b/rust/crates/commands/src/project_ext.rs
@@ -0,0 +1,20 @@
+use scene::{Project, Scene};
+
+pub fn active_scene(project: &Project) -> Option<&Scene> {
+ project
+ .scenes
+ .iter()
+ .find(|scene| scene.id == project.current_scene_id)
+ .or_else(|| project.scenes.iter().find(|scene| scene.is_main))
+ .or_else(|| project.scenes.first())
+}
+
+pub fn active_scene_mut(project: &mut Project) -> Option<&mut Scene> {
+ let index = project
+ .scenes
+ .iter()
+ .position(|scene| scene.id == project.current_scene_id)
+ .or_else(|| project.scenes.iter().position(|scene| scene.is_main))
+ .or(if project.scenes.is_empty() { None } else { Some(0) })?;
+ project.scenes.get_mut(index)
+}