Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
- Drop `lib::` prefix
- Increase world size
- Fix issue where chunks were only serialized on the client
- Add feature flags for debug rendering

## 0.1.1

Expand Down
3 changes: 3 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,7 @@ path = "src/server/main.rs"
wireframe = []
debug_ui = []
renet_visualizer = []
physics_debug = []
raycast_debug = []
visual_debug = ["wireframe", "physics_debug", "raycast_debug"]

71 changes: 41 additions & 30 deletions src/client/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,25 @@ mod scene;
mod states;
mod terrain;

use bevy::color::palettes::css::WHITE;
use bevy_flair::FlairPlugin;
use scene::setup_scene;
use wireframe::WireframeConfig;

#[cfg(feature = "wireframe")]
mod wireframe_config {
use crate::wireframe::{WireframeConfig, WireframePlugin};
use bevy::color::palettes::css::WHITE;

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like this encapsulation of wireframe related stuff

pub fn wireframe_plugin() -> WireframePlugin {
WireframePlugin
}

pub fn wireframe_config() -> WireframeConfig {
WireframeConfig {
global: true,
default_color: WHITE.into(),
}
}
}

fn main() {
let window_plugin = WindowPlugin {
Expand All @@ -31,32 +46,28 @@ fn main() {
.set(window_plugin)
.set(ImagePlugin::default_nearest());

App::new()
.add_plugins((
default_plugins,
FlairPlugin,
#[cfg(feature = "wireframe")]
WireframePlugin,
FrameTimeDiagnosticsPlugin,
EntityCountDiagnosticsPlugin,
SystemInformationDiagnosticsPlugin,
PerfUiPlugin,
gui::GuiPlugin,
networking::NetworkingPlugin,
terrain::TerrainPlugin,
collider::ColliderPlugin,
player::PlayerPlugin,
remote_player::RemotePlayerPlugin,
chat::ChatPlugin,
))
.insert_state(GameState::Playing)
.insert_resource(WireframeConfig {
#[cfg(not(feature = "wireframe"))]
global: false,
#[cfg(feature = "wireframe")]
global: true,
default_color: WHITE.into(),
})
.add_systems(Startup, setup_scene)
.run();
let mut app = App::new();
app.add_plugins((
default_plugins,
FlairPlugin,
#[cfg(feature = "wireframe")]
wireframe_config::wireframe_plugin(),
FrameTimeDiagnosticsPlugin,
EntityCountDiagnosticsPlugin,
SystemInformationDiagnosticsPlugin,
PerfUiPlugin,
gui::GuiPlugin,
networking::NetworkingPlugin,
terrain::TerrainPlugin,
collider::ColliderPlugin,
player::PlayerPlugin,
remote_player::RemotePlayerPlugin,
chat::ChatPlugin,
));
app.insert_state(GameState::Playing);

#[cfg(feature = "wireframe")]
app.insert_resource(wireframe_config::wireframe_config());

app.add_systems(Startup, setup_scene).run();
}
1 change: 1 addition & 0 deletions src/client/player/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ impl Plugin for PlayerPlugin {
info!("Building PlayerPlugin");
app.add_plugins(FpsControllerPlugin);
app.add_plugins(RapierPhysicsPlugin::<NoUserData>::default());
#[cfg(feature = "physics_debug")]
app.add_plugins(RapierDebugRenderPlugin::default());
app.add_event::<player_events::PlayerColliderUpdateEvent>();
app.insert_resource(player_resources::BlockSelection::new());
Expand Down
21 changes: 12 additions & 9 deletions src/client/player/systems/selection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ pub fn setup_highlight_cube_system(
#[allow(clippy::type_complexity)]
pub fn raycast_system(
mut raycast: Raycast,
mut gizmos: Gizmos,
#[cfg(feature = "raycast_debug")] mut gizmos: Gizmos,
raycast_origin: Query<&Transform, With<player_components::PlayerCamera>>,
mut selection_query: Query<
(&mut Transform, &player_components::HighlightCube),
Expand All @@ -41,14 +41,17 @@ pub fn raycast_system(
let dir = camera_transform.rotation.mul_vec3(Vec3::Z).normalize();
let dir = dir * RAY_DIST.z;

let intersections = raycast.debug_cast_ray(
Ray3d::new(pos, Dir3::new(dir).expect("Ray can be cast")),
&RaycastSettings {
filter: &filter,
..default()
},
&mut gizmos,
);
let ray = Ray3d::new(pos, Dir3::new(dir).expect("Ray can be cast"));
let settings = RaycastSettings {
filter: &filter,
..default()
};

#[cfg(feature = "raycast_debug")]
let intersections = raycast.debug_cast_ray(ray, &settings, &mut gizmos);

#[cfg(not(feature = "raycast_debug"))]
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if i like this duplicate code :/

let intersections = raycast.cast_ray(ray, &settings);

let (mut highlight_transform, _) = selection_query.single_mut();
let hover_position = intersections
Expand Down
2 changes: 1 addition & 1 deletion src/client/terrain/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ fn create_chunk_material(

#[cfg(feature = "wireframe")]
fn create_chunk_material(
texture_handle: Handle<Image>,
_texture_handle: Handle<Image>,
materials: &mut Mut<Assets<StandardMaterial>>,
) -> Handle<StandardMaterial> {
materials.add(StandardMaterial {
Expand Down
7 changes: 3 additions & 4 deletions src/server/networking/mod.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
pub mod systems;

use crate::connection_config;
#[cfg(feature = "renet_visualizer")]
use bevy_inspector_egui::bevy_egui::EguiPlugin;
#[cfg(feature = "renet_visualizer")]
use renet_visualizer::RenetServerVisualizer;

use crate::prelude::*;

Expand All @@ -18,6 +14,9 @@ impl Plugin for NetworkingPlugin {

#[cfg(feature = "renet_visualizer")]
{
use bevy_inspector_egui::bevy_egui::EguiPlugin;
use renet_visualizer::RenetServerVisualizer;

app.add_plugins(EguiPlugin);
app.insert_resource(RenetServerVisualizer::<200>::default());
app.add_systems(
Expand Down
53 changes: 28 additions & 25 deletions src/server/networking/systems.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
#[cfg(feature = "renet_visualizer")]
use bevy_inspector_egui::bevy_egui::EguiContexts;
#[cfg(feature = "renet_visualizer")]
use renet_visualizer::RenetServerVisualizer;

use crate::prelude::*;

pub fn receive_message_system(
Expand Down Expand Up @@ -166,28 +161,36 @@ pub fn handle_events_system(
}

#[cfg(feature = "renet_visualizer")]
pub fn handle_events_for_visualizer_system(
mut server_events: EventReader<ServerEvent>,
mut visualizer: ResMut<RenetServerVisualizer<200>>,
) {
for event in server_events.read() {
match event {
ServerEvent::ClientConnected { client_id } => {
visualizer.add_client(*client_id);
}
ServerEvent::ClientDisconnected { client_id, .. } => {
visualizer.remove_client(*client_id);
pub use server_visualizer::*;

#[cfg(feature = "renet_visualizer")]
pub mod server_visualizer {
use crate::prelude::*;
use bevy_inspector_egui::bevy_egui::EguiContexts;
use renet_visualizer::RenetServerVisualizer;

pub fn handle_events_for_visualizer_system(
mut server_events: EventReader<ServerEvent>,
mut visualizer: ResMut<RenetServerVisualizer<200>>,
) {
for event in server_events.read() {
match event {
ServerEvent::ClientConnected { client_id } => {
visualizer.add_client(*client_id);
}
ServerEvent::ClientDisconnected { client_id, .. } => {
visualizer.remove_client(*client_id);
}
}
}
}
}

#[cfg(feature = "renet_visualizer")]
pub fn update_visulizer_system(
mut egui_contexts: EguiContexts,
mut visualizer: ResMut<RenetServerVisualizer<200>>,
server: Res<RenetServer>,
) {
visualizer.update(&server);
visualizer.show_window(egui_contexts.ctx_mut());
pub fn update_visulizer_system(
mut egui_contexts: EguiContexts,
mut visualizer: ResMut<RenetServerVisualizer<200>>,
server: Res<RenetServer>,
) {
visualizer.update(&server);
visualizer.show_window(egui_contexts.ctx_mut());
}
}