use crate::camera_system::camera_plugin::PhosCameraPlugin; use crate::camera_system::components::PhosCamera; use crate::map_rendering::map_init::MapInitPlugin; use crate::utlis::render_distance_system::RenderDistancePlugin; use bevy::{ pbr::{wireframe::WireframeConfig, CascadeShadowConfig}, prelude::*, }; use bevy_asset_loader::prelude::*; use bevy_rapier3d::dynamics::{Ccd, RigidBody, Velocity}; use bevy_rapier3d::geometry::Collider; use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin}; use buildings::BuildingPugin; use iyes_perf_ui::prelude::*; use shared::states::{GameplayState, MenuState}; use shared::{despawn::DespawnPuglin, states::AssetLoadState}; pub struct PhosGamePlugin; impl Plugin for PhosGamePlugin { fn build(&self, app: &mut App) { app.insert_state(AssetLoadState::Loading); app.insert_state(MenuState::Loading); app.insert_state(GameplayState::Waiting); app.add_loading_state( LoadingState::new(AssetLoadState::Loading).continue_to_state(AssetLoadState::FinalizeAssets), ); app.add_plugins(( PhosCameraPlugin, MapInitPlugin, RenderDistancePlugin, // BuildingPugin, DespawnPuglin, )); //Systems - Startup app.add_systems(Startup, init_game); //Systems - Update app.add_systems(Update, spawn_sphere); //Perf UI app.add_plugins(bevy::diagnostic::FrameTimeDiagnosticsPlugin) .add_plugins(bevy::diagnostic::EntityCountDiagnosticsPlugin) .add_plugins(bevy::diagnostic::SystemInformationDiagnosticsPlugin) .add_plugins(PerfUiPlugin); //Physics app.add_plugins(RapierPhysicsPlugin::::default()); // app.add_plugins(RapierDebugRenderPlugin::default()); app.insert_resource(WireframeConfig { global: false, default_color: Srgba::hex("FF0064").unwrap().into(), }); } } fn init_game(mut commands: Commands, mut materials: ResMut>) { commands.spawn(( PerfUiRoot::default(), PerfUiEntryFPS::default(), PerfUiEntryFPSWorst::default(), PerfUiEntryFrameTime::default(), PerfUiEntryFrameTimeWorst::default(), )); commands.spawn(DirectionalLightBundle { directional_light: DirectionalLight { shadows_enabled: true, ..default() }, cascade_shadow_config: CascadeShadowConfig { bounds: vec![200., 400., 600., 800.], ..default() }, transform: Transform::from_xyz(500., 260.0, 500.).looking_at(Vec3::ZERO, Vec3::Y), ..default() }); let sphere_mat = StandardMaterial { base_color: Color::srgb(1., 1., 0.), ..default() }; let handle = materials.add(sphere_mat); commands.insert_resource(SphereMat(handle)); } #[derive(Resource)] struct SphereMat(Handle); fn spawn_sphere( mut commands: Commands, cam: Query<&Transform, With>, keyboard_input: Res>, mut meshes: ResMut>, mat: Res, ) { if keyboard_input.just_pressed(KeyCode::KeyF) { let cam_transform = cam.single(); commands.spawn(( MaterialMeshBundle { mesh: meshes.add(Sphere::new(0.3)), material: mat.0.clone(), transform: Transform::from_translation(cam_transform.translation), ..default() }, Collider::ball(0.3), RigidBody::Dynamic, Ccd::enabled(), Velocity::linear(cam_transform.forward() * 50.), )); } }