use super::*; /// A good starting place for creating a game building on top of the base Bevy app pub struct BaseGamePlugin { pub camera: CameraType } impl Plugin for BaseGamePlugin { fn build(&self, app: &mut App) { app.add_plugins(DefaultPlugins) .add_plugins(DebuggingPlugin); // Add a camera setup system and startup app.add_systems(Startup, match self.camera { CameraType::Camera2d => setup_camera_2d, CameraType::Camera3d => setup_camera_3d, }); } } /// For selecting the type of camera this game requires pub enum CameraType { Camera2d, Camera3d } /// System to toggle the visibility of entities based on their state pub fn toggle_state_visibility(mut q: Query<(Entity, &mut Visibility, &S)>, curr: Res>) { q.iter_mut().for_each(|(e, mut v, s)| { if curr.get() == s { *v = Visibility::Inherited; } else { *v = Visibility::Hidden; } debug!("Changing visibility of {:?} to {:?}", e, *v); }); } fn setup_camera_2d( mut commands: Commands, ) { commands.spawn((Camera { ..default() }, Camera2d)); } fn setup_camera_3d( mut commands: Commands, ) { commands.spawn((Camera { ..default() }, Camera3d { ..default() })); }