use crate::rendering::renderer::Renderer;
use crate::{BreakingAction, SetupInfo, SharedState, UpdateInfo};
use crossterm::event::Event;
use std::any::Any;
pub mod debuginfo;
pub mod eventrecorder;
pub mod fpslocker;
pub mod keyboard;
pub mod mouse;
pub mod quitter;
pub mod ui;
pub trait Component<S = ()>: Any {
fn setup(&mut self, setup_info: &SetupInfo, shared_state: &mut SharedState<S>) {}
fn is_active(&self, shared_state: &SharedState<S>) -> bool {
true
}
fn on_resize(&mut self, width: usize, height: usize, shared_state: &mut SharedState<S>) {}
fn on_quit(&mut self, shared_state: &mut SharedState<S>) {}
fn on_event(
&mut self,
event: Event,
shared_state: &mut SharedState<S>,
) -> Option<BreakingAction> {
None
}
fn update(&mut self, update_info: UpdateInfo, shared_state: &mut SharedState<S>) {}
fn render(&self, renderer: &mut dyn Renderer, shared_state: &SharedState<S>, depth_base: i32) {}
}