You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

51 lines
1.3 KiB
Rust

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<S: States + Component>(mut q: Query<(Entity, &mut Visibility, &S)>, curr: Res<State<S>>) {
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() }));
}