oxygengine_visual_novel/
scene.rs1use 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}