moon_engine/component.rs
1//! The [`Component`] trait.
2
3use std::any::Any;
4
5use crate::renderer::Quad;
6
7/// The [`Component`] trait
8pub trait Component {
9 /// Initializes a [`Component`].
10 fn init(&mut self) {}
11 /// Called once each frame.
12 ///
13 /// The time between frames is also provided.
14 fn update(&mut self, _delta_time: f32) {}
15
16 /// Get the [`Component`]'s drawable [`Quad`].
17 fn get_quads(&self) -> Option<Vec<Quad>> {
18 None
19 }
20
21 /// Borrow the [`Component`] as a [`&mut dyn Any`](Any).
22 fn as_any(&self) -> &dyn Any;
23
24 /// Borrow the [`Component`] as a [`&dyn Any`](Any).
25 fn as_mut_any(&mut self) -> &mut dyn Any;
26}