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,580 changes: 1,094 additions & 486 deletions Cargo.lock

Large diffs are not rendered by default.

29 changes: 14 additions & 15 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,28 @@
name = "rsmc"
version = "0.1.1"
edition = "2021"
rust-version = "1.83.0"
rust-version = "1.90.0"

[dependencies]
bevy = "0.15.1"
bevy_fps_controller = "0.15.0"
bevy_mod_raycast = { git = "https://github.com/CuddlyBunion341/bevy_mod_raycast.git", branch = "main" }
bevy_rapier3d = "0.28.0"
bevy = "0.16.1"
bevy_fps_controller = {version = "16.1.0", features = ["rapier"]}
bevy_rapier3d = {version ="0.31"}
Copy link
Owner Author

Choose a reason for hiding this comment

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

AAAAAAAAAAAAAAAA

cgmath = "0.18.0"
iyes_perf_ui = { git = "https://github.com/IyesGames/iyes_perf_ui.git", branch = "main" }
iyes_perf_ui = "0.5.0"
noise = "0.9.0"
bevy_renet = { git = "https://github.com/CuddlyBunion341/renet.git" }
bevy_renet = "2.0.1"
bincode = "1.3.3"
rand = {version = "0.9.0", features = ["small_rng"]}
renet = { git = "https://github.com/CuddlyBunion341/renet.git" }
renet = "1.1.0"
serde = { version = "1.0.203", features = ["derive"] }
serde-big-array = "0.5.1"
chrono = "0.4.38"
rayon = "1.10.0"
bevy_flair = "0.1.0"
bevy-inspector-egui = "0.29"
renet_visualizer = { git = "https://github.com/CuddlyBunion341/renet.git", features = [
"bevy",
] }
bevy_flair = "0.4.0"
bevy_egui = "0.36.0"
bevy_diagnostic = "0.16.1"
bevy-inspector-egui = {version = "0.33", features = ["bevy_render"]}
renet_visualizer = "1.0.0"
egui_plot = "0.30.0"

[profile.dev.package."*"]
Expand All @@ -45,11 +44,11 @@ name = "server"
path = "src/server/main.rs"

[features]
default = ["chat"]
default = ["chat", "dynamic_linking"]
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 don't see why I'd want slow compile times per default..

dynamic_linking = ["bevy/dynamic_linking"]

# both
chat = ["dynamic_linking"]
chat = []

# server
renet_visualizer = ["egui_layer"]
Expand Down
154 changes: 75 additions & 79 deletions src/client/chat/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,15 @@ pub fn setup_chat_container(mut commands: Commands, asset_server: Res<AssetServe
parent.spawn((
Node::default(),
Name::new("chat_message_container"),
ClassList::new(),
ClassList::empty(),
chat_components::ChatMessageContainer,
Text::new(""),
));

parent.spawn((
Node::default(),
Name::new("chat_message_input"),
ClassList::new(),
ClassList::empty(),
chat_components::ChatMessageInputElement,
Text::new(MESSAGE_PROMPT),
));
Expand Down Expand Up @@ -79,57 +79,57 @@ pub fn process_chat_input_system(
mut chat_state: ResMut<chat_resources::ChatState>,
mut chat_clear_writer: EventWriter<chat_events::ChatClearEvent>,
) {
if let Ok(mut text) = chat_input_query.get_single_mut() {
let mut chat_input_value = text.0.clone();

for event in evr_kbd.read() {
if event.state != ButtonState::Pressed {
continue;
}
let mut text = chat_input_query
.single_mut()
.expect("chat_input doesn't exist");
let mut chat_input_value = text.0.clone();

for event in evr_kbd.read() {
if event.state != ButtonState::Pressed {
continue;
}

if chat_state.just_focused {
// Hack to prevent 'T' from being added to the chat input upon focus
chat_state.just_focused = false;
continue;
}
if chat_state.just_focused {
// Hack to prevent 'T' from being added to the chat input upon focus
chat_state.just_focused = false;
continue;
}

info!("Chat state: {}", chat_input_value);
info!("Chat state: {}", chat_input_value);

let mut message = extract_message(&chat_input_value);
let mut message = extract_message(&chat_input_value);

match &event.logical_key {
Key::Enter if !message.trim().is_empty() => {
if message.trim() == "CLEAR" {
chat_clear_writer.send(chat_events::ChatClearEvent);
} else {
send_event_writer.send(ChatMessageSendEvent(message.trim().to_string()));
}
message.clear();
}
Key::Backspace => {
message.pop();
match &event.logical_key {
Key::Enter if !message.trim().is_empty() => {
if message.trim() == "CLEAR" {
chat_clear_writer.write(chat_events::ChatClearEvent);
} else {
send_event_writer.write(ChatMessageSendEvent(message.trim().to_string()));
}
Key::Space => {
if message.len() < MAX_MESSAGE_LENGTH {
message.push(' ');
}
message.clear();
}
Key::Backspace => {
message.pop();
}
Key::Space => {
if message.len() < MAX_MESSAGE_LENGTH {
message.push(' ');
}
Key::Character(input) => {
if message.len() < MAX_MESSAGE_LENGTH && input.chars().all(|c| !c.is_control())
{
message.push_str(input);
}
}
Key::Character(input) => {
if message.len() < MAX_MESSAGE_LENGTH && input.chars().all(|c| !c.is_control()) {
message.push_str(input);
}
_ => {}
}

chat_input_value = MESSAGE_PROMPT.to_string() + &message;
_ => {}
}

text.clear();

text.0 += &chat_input_value;
chat_input_value = MESSAGE_PROMPT.to_string() + &message;
}

text.clear();

text.0 += &chat_input_value;
}

fn extract_message(value: &str) -> String {
Expand All @@ -143,7 +143,7 @@ pub fn handle_chat_message_sync_event(
) {
for event in sync_events.read() {
event.0.clone().into_iter().for_each(|message| {
send_events.send(chat_events::SingleChatSendEvent(message));
send_events.write(chat_events::SingleChatSendEvent(message));
})
}
}
Expand All @@ -158,19 +158,19 @@ pub fn add_message_to_chat_container_system(
mut events: EventReader<chat_events::SingleChatSendEvent>,
) {
for event in events.read() {
if let Ok((entity, _, mut scroll_position)) = query.get_single_mut() {
// Offset does not need to be exact, just needs to be large enough to see the new message
scroll_position.offset_y += 100.0;
let (entity, _, mut scroll_position) = single_mut!(query);

commands.entity(entity).with_children(|parent| {
parent.spawn((
Node::default(),
Name::new("chat_entry"),
chat_components::ChatMessageElement,
Text::new(event.0.message.clone()),
));
});
}
// Offset does not need to be exact, just needs to be large enough to see the new message
scroll_position.offset_y += 100.0;

commands.entity(entity).with_children(|parent| {
parent.spawn((
Node::default(),
Name::new("chat_entry"),
chat_components::ChatMessageElement,
Text::new(event.0.message.clone()),
));
});
}
}

Expand All @@ -180,8 +180,8 @@ pub fn handle_chat_clear_events_system(
query: Query<Entity, With<chat_components::ChatMessageContainer>>,
) {
for _ in chat_clear_events.read() {
if let Ok(entity) = query.get_single() {
commands.entity(entity).despawn_descendants();
if let Ok(entity) = query.single() {
commands.entity(entity).despawn_related::<Children>();
}
}
}
Expand All @@ -202,17 +202,15 @@ pub fn unfocus_chat_system(
),
>,
) {
if let (Ok(mut container_classes), Ok(mut input_classes)) = (
chat_container_query.get_single_mut(),
chat_input_query.get_single_mut(),
) {
info!("Handling unfocus state");
container_classes.remove_class("focused");
container_classes.add_class("unfocused");

input_classes.remove_class("focused");
input_classes.add_class("unfocused");
}
let mut container_classes = single_mut!(chat_container_query);
let mut input_classes = single_mut!(chat_input_query);

info!("Handling unfocus state");
container_classes.remove("focused");
container_classes.add("unfocused");

input_classes.remove("focused");
input_classes.add("unfocused");
}

pub fn focus_chat_system(
Expand All @@ -231,17 +229,15 @@ pub fn focus_chat_system(
),
>,
) {
if let (Ok(mut container_classes), Ok(mut input_classes)) = (
chat_container_query.get_single_mut(),
chat_input_query.get_single_mut(),
) {
info!("Handling focus state");
container_classes.add_class("focused");
container_classes.remove_class("unfocused");

input_classes.add_class("focused");
input_classes.remove_class("unfocused");
}
let mut container_classes = single_mut!(chat_container_query);
let mut input_classes = single_mut!(chat_input_query);

info!("Handling focus state");
container_classes.add("focused");
container_classes.remove("unfocused");

input_classes.add("focused");
input_classes.remove("unfocused");
}

#[cfg(test)]
Expand Down
2 changes: 1 addition & 1 deletion src/client/collider/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ mod tests {
.world_mut()
.query::<(&Transform, &collider_components::BlockCollider)>();
let world_mut = app.world_mut();
let (collider_transform, _) = collider_query.single(world_mut);
let (collider_transform, _) = collider_query.single(world_mut).unwrap();
assert_eq!(
Vec3 {
x: 6.5,
Expand Down
7 changes: 3 additions & 4 deletions src/client/gui/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ pub fn handle_debug_state_transition_system(
}

pub fn handle_enter_debug_state_system(mut window_query: Query<&mut Window>) {
if let Ok(mut window) = window_query.get_single_mut() {
window.cursor_options.grab_mode = CursorGrabMode::None;
window.cursor_options.visible = true;
}
let mut window = single_mut!(window_query);
window.cursor_options.grab_mode = CursorGrabMode::None;
window.cursor_options.visible = true;
}
4 changes: 2 additions & 2 deletions src/client/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ mod wireframe_config {
use bevy::color::palettes::css::WHITE;

pub fn wireframe_plugin() -> WireframePlugin {
WireframePlugin
WireframePlugin::default()
}

pub fn wireframe_config() -> WireframeConfig {
Expand Down Expand Up @@ -52,7 +52,7 @@ fn main() {
FlairPlugin,
#[cfg(feature = "wireframe")]
wireframe_config::wireframe_plugin(),
FrameTimeDiagnosticsPlugin,
FrameTimeDiagnosticsPlugin::default(),
EntityCountDiagnosticsPlugin,
SystemInformationDiagnosticsPlugin,
PerfUiPlugin,
Expand Down
13 changes: 7 additions & 6 deletions src/client/player/systems/controller.rs
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,9 @@ pub fn setup_controller_on_area_ready_system(
.insert(player_components::Player)
.id();

let mut player = render_player.single_mut();
let mut player = render_player
.single_mut()
.expect("Failed to query render_player");
player.logical_entity = logical_entity;

player_spawned.0 = true;
Expand All @@ -104,7 +106,7 @@ pub fn handle_controller_movement_system(
for (_entity, _input, transform) in &mut query.iter() {
let controller_position = transform.translation;
if last_position.0.floor() != controller_position.floor() {
collider_events.send(collider_events::ColliderUpdateEvent {
collider_events.write(collider_events::ColliderUpdateEvent {
grid_center_position: controller_position.floor().into(),
});
}
Expand All @@ -119,10 +121,9 @@ pub fn activate_fps_controller_system(mut controller_query: Query<&mut FpsContro
}

pub fn lock_cursor_system(mut window_query: Query<&mut Window>) {
if let Ok(mut window) = window_query.get_single_mut() {
window.cursor_options.grab_mode = CursorGrabMode::Locked;
window.cursor_options.visible = false;
}
let mut window = window_query.single_mut().expect("Window doesnt't exist?");
window.cursor_options.grab_mode = CursorGrabMode::Locked;
window.cursor_options.visible = false;
}

pub fn deactivate_fps_controller_system(mut controller_query: Query<&mut FpsController>) {
Expand Down
4 changes: 2 additions & 2 deletions src/client/player/systems/keyboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ pub fn handle_keyboard_events_system(
}

if event.state.is_pressed() && event.key_code == bevy::input::keyboard::KeyCode::KeyC {
let controller_transform = camera_query.single();
let controller_transform = single!(camera_query);
println!("Handling event: {:?}", controller_transform.translation);
collider_events.send(collider_events::ColliderUpdateEvent {
collider_events.write(collider_events::ColliderUpdateEvent {
grid_center_position: controller_transform.translation.into(),
});
}
Expand Down
Loading