oxygengine_visual_novel/
scene.rs

1use crate::{background::BackgroundStyle, Position};
2use anim::{animation::Interpolation, transition::Transition};
3use core::{prefab::Prefab, Scalar};
4use serde::{Deserialize, Serialize};
5
6pub type ActiveScene = Transition<Option<String>>;
7
8#[derive(Debug, Default, Clone, Serialize, Deserialize)]
9pub struct Scene {
10    #[serde(default)]
11    pub name: String,
12    #[serde(default)]
13    pub background_style: BackgroundStyle,
14    #[serde(default)]
15    pub camera_position: Interpolation<Position>,
16    #[serde(default)]
17    pub camera_rotation: Interpolation<Scalar>,
18}
19
20impl Prefab for Scene {}
21
22impl Scene {
23    pub fn initialize(&mut self) {
24        self.background_style.end();
25        self.camera_position.end();
26        self.camera_rotation.end();
27    }
28
29    pub fn in_progress(&self) -> bool {
30        self.background_style.in_progress()
31            || self.camera_position.in_progress()
32            || self.camera_rotation.in_progress()
33    }
34
35    pub fn process(&mut self, delta_time: Scalar) {
36        self.background_style.process(delta_time);
37        self.camera_position.process(delta_time);
38        self.camera_rotation.process(delta_time);
39    }
40}