use crate::prelude::*; pub(crate) struct Display3dPlugin; impl Plugin for Display3dPlugin { fn build(&self, app: &mut App) { app.add_systems( Startup, (initialize_camera, load_models).run_if(in_state(GameState::Loading)), ) .add_systems( Update, ( initialize_board.run_if(resource_added::()), menu::exit_to_menu.run_if(in_state(GameState::Display3d)), ), ) .add_systems(OnEnter(GameState::Display3d), activate); } } #[derive(Debug, Component)] struct Board3d; #[derive(Debug, Resource)] struct ModelMap; fn initialize_camera(mut commands: Commands) { commands.spawn(( Camera3dBundle { camera: Camera { is_active: false, ..default() }, ..default() }, UiCameraConfig { show_ui: true }, )); } fn load_models(server: Res, mut commands: Commands) { warn!("TODO: Load models"); commands.insert_resource(ModelMap); } fn initialize_board(mut commands: Commands, model_map: Option>) { if let Some(models) = model_map { warn!("TODO: Intialize 3D Board!"); commands.spawn(( SpatialBundle { visibility: Visibility::Hidden, ..default() }, Board3d, )); } } fn activate( mut cameras: Query<&mut Camera, With>, mut boards: Query<&mut Visibility, With>, ) { cameras.iter_mut().for_each(|mut camera| { camera.is_active = true; }); boards.iter_mut().for_each(|mut visibility| { *visibility = Visibility::Visible; }); }