diff --git a/assets/meshes/library/creepy_jumbo.glb b/assets/meshes/library/creepy_jumbo.glb deleted file mode 100644 index e8ef174..0000000 Binary files a/assets/meshes/library/creepy_jumbo.glb and /dev/null differ diff --git a/assets/meshes/library/space2.glb b/assets/meshes/library/space2.glb deleted file mode 100644 index 80b162a..0000000 Binary files a/assets/meshes/library/space2.glb and /dev/null differ diff --git a/assets/meshes/library/wall.glb b/assets/meshes/library/wall.glb deleted file mode 100644 index 2fcf23d..0000000 Binary files a/assets/meshes/library/wall.glb and /dev/null differ diff --git a/src/debugging.rs b/src/debugging.rs new file mode 100644 index 0000000..b49f8ca --- /dev/null +++ b/src/debugging.rs @@ -0,0 +1,8 @@ +use bevy::{app::App, diagnostic::FrameTimeDiagnosticsPlugin}; +use bevy::diagnostic::LogDiagnosticsPlugin; + + +pub fn plugin(app: &mut App) { + app.add_plugins(FrameTimeDiagnosticsPlugin::default()); + app.add_plugins(LogDiagnosticsPlugin::default()); +} diff --git a/src/level_instantiation/mod.rs b/src/level_instantiation/mod.rs index 335a8a1..30a92d9 100644 --- a/src/level_instantiation/mod.rs +++ b/src/level_instantiation/mod.rs @@ -1,4 +1,5 @@ use bevy::prelude::*; +use bevy_rapier3d::prelude::{Collider, RigidBody}; use crate::{asset_loading::GltfAssets, GameState}; @@ -12,13 +13,37 @@ fn spawn_level( gltf_assets: Res ) { println!("LIBRARY: {:?}", gltf_assets.library); - let shapes = ["corner_inside", "corner_outside", "wall", "door", "round_door", "round_hole"].map(|mesh_name| { + let mesh_names = ["corner_inside", "corner_outside", "wall", "door", "round_door", "round_hole"]; + let shapes = mesh_names.map(|mesh_name| { + let collider: Vec<(Collider, Transform)> = match mesh_name { + "corner_inside" => vec![ + (Collider::cuboid(1.0, 0.1, 1.0), Transform::from_xyz(0.0, 0.0, 0.0)) + ], + "corner_outside" => vec![ + (Collider::cuboid(1.0, 0.1, 1.0), Transform::from_xyz(0.0, 0.0, 0.0)) + ], + "wall" => vec![ + (Collider::cuboid(1.0, 1.0, 0.1), Transform::from_xyz(0.0, 0.5, -1.0)) + ], + "door" => vec![ + (Collider::cuboid(1.0, 0.1, 1.0), Transform::from_xyz(0.0, 0.0, 0.0)) + ], + "round_door" => vec![ + (Collider::cuboid(1.0, 0.1, 1.0), Transform::from_xyz(0.0, 0.0, 0.0)) + ], + "round_hole" => vec![ + (Collider::cuboid(1.0, 0.1, 1.0), Transform::from_xyz(0.0, 0.0, 0.0)) + ], + _ => vec![ + (Collider::cuboid(1.0, 0.1, 1.0), Transform::from_xyz(0.0, 0.0, 0.0)) + ], + }; let path = format!("meshes/library/space_{}.glb", mesh_name); let handle = gltf_assets.library.get(&path).expect(&format!("Couldn't find {} in library", mesh_name)); let gltf = models.get(handle).expect(&format!("No model for {}", mesh_name)); let asset = gltf.default_scene.as_ref().expect(&format!("No scene in {}", mesh_name)); - SceneRoot(asset.clone()) + (SceneRoot(asset.clone()), collider) }); let [ corner_inside, @@ -28,18 +53,44 @@ fn spawn_level( round_door, round_hole ] = shapes; - let mut x_offset = 0.0; - for i in 0..10 { + for i in 0..30 { commands.spawn(( - wall.clone(), + wall.0.clone(), Transform::from_xyz(i as f32 * 2.0, 0.0, 0.0), - )); + )).with_children(|parent| { + for ele in wall.1.clone() { + parent.spawn(( + RigidBody::Fixed, + ele.0, + ele.1, + )); + } + }); commands.spawn(( - wall.clone(), + wall.0.clone(), Transform::from_xyz(i as f32 * 2.0, 0.0, 0.0) .with_rotation(Quat::from_rotation_y(std::f32::consts::PI)), - )); - x_offset += 2.0; + )).with_children(|parent| { + for ele in wall.1.clone() { + parent.spawn(( + RigidBody::Fixed, + ele.0, + ele.1, + )); + } + }); } + + // huge floor + commands.spawn(( + RigidBody::Fixed, + Collider::cuboid(1000.0, 0.1, 1000.0), + Transform::from_xyz(-500.0, 0.0, -500.0), + )); + commands.spawn(( + RigidBody::Fixed, + Collider::cuboid(1000.0, 0.1, 1000.0), + Transform::from_xyz(-500.0, 3.0, -500.0), + )); } diff --git a/src/main.rs b/src/main.rs index 7aac236..cf1bac4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,6 +9,7 @@ mod level_instantiation; mod main_menu; mod player; mod util; +mod debugging; fn main() { App::new() @@ -21,6 +22,7 @@ fn main() { RapierPhysicsPlugin::::default(), RapierDebugRenderPlugin::default(), player::plugin, + debugging::plugin )) .init_state::() .add_systems(OnEnter(GameState::Playing), setup) @@ -55,7 +57,7 @@ fn setup( commands.spawn(( Mesh3d(meshes.add(Cuboid::new(1.0, 1.0, 1.0))), MeshMaterial3d(materials.add(Color::srgb_u8(124, 144, 255))), - Transform::from_xyz(3.0, 0.5, 0.0), + Transform::from_xyz(-3.0, 0.5, 0.0), RigidBody::Fixed, Collider::cuboid(0.5, 0.5, 0.5), )); diff --git a/src/player.rs b/src/player.rs index 8d27b89..dab2621 100644 --- a/src/player.rs +++ b/src/player.rs @@ -90,7 +90,10 @@ pub fn init_player( angular_damping: 1.0, }, GravityScale(3.0), - Transform::from_xyz(0.0, 1.0, 0.0), + Transform::from_xyz(0.0, 0.5, 0.0), + GlobalTransform::default(), + InheritedVisibility::default(), + ViewVisibility::default(), )) .with_children(|parent| { parent.spawn((