summaryrefslogtreecommitdiff
path: root/rust/crates/commands/src/project_ext.rs
blob: 18262fbd4b5d78224f3f8670a53a3985bda476f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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)
}