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