diff --git a/Cargo.lock b/Cargo.lock index d4d0bf1..c2c15da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -102,6 +102,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" dependencies = [ "cfg-if", + "getrandom 0.3.4", "once_cell", "version_check", "zerocopy", @@ -580,7 +581,7 @@ dependencies = [ "bevy_utils", "blake3", "derive_more", - "downcast-rs", + "downcast-rs 2.0.2", "either", "petgraph", "ron 0.10.1", @@ -640,7 +641,7 @@ dependencies = [ "cfg-if", "console_error_panic_hook", "ctrlc", - "downcast-rs", + "downcast-rs 2.0.2", "log", "thiserror 2.0.17", "variadics_please", @@ -671,7 +672,7 @@ dependencies = [ "crossbeam-channel", "derive_more", "disqualified", - "downcast-rs", + "downcast-rs 2.0.2", "either", "futures-io", "futures-lite", @@ -743,6 +744,7 @@ dependencies = [ "bevy_reflect", "bevy_transform", "coreaudio-sys", + "cpal", "rodio", "tracing", ] @@ -774,7 +776,7 @@ dependencies = [ "bevy_utils", "bevy_window", "derive_more", - "downcast-rs", + "downcast-rs 2.0.2", "serde", "smallvec", "thiserror 2.0.17", @@ -1177,6 +1179,7 @@ dependencies = [ "bevy_pbr", "bevy_picking", "bevy_platform", + "bevy_post_process", "bevy_ptr", "bevy_reflect", "bevy_render", @@ -1393,6 +1396,36 @@ dependencies = [ "web-time", ] +[[package]] +name = "bevy_post_process" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b857972f5d56b43b0dce2c843b75b64d5fbbd0f6177f6ecccd75e7e41f72deb" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.10.0", + "nonmax", + "radsort", + "smallvec", + "thiserror 2.0.17", + "tracing", +] + [[package]] name = "bevy_ptr" version = "0.17.3" @@ -1412,7 +1445,7 @@ dependencies = [ "bevy_utils", "derive_more", "disqualified", - "downcast-rs", + "downcast-rs 2.0.2", "erased-serde", "foldhash 0.2.0", "glam 0.30.9", @@ -1471,7 +1504,7 @@ dependencies = [ "bitflags 2.10.0", "bytemuck", "derive_more", - "downcast-rs", + "downcast-rs 2.0.2", "encase", "fixedbitset", "image", @@ -2121,6 +2154,18 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop", + "rustix 0.38.44", + "wayland-backend", + "wayland-client", +] + [[package]] name = "cc" version = "1.2.49" @@ -2854,6 +2899,12 @@ dependencies = [ "litrs", ] +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + [[package]] name = "downcast-rs" version = "2.0.2" @@ -3634,7 +3685,7 @@ dependencies = [ [[package]] name = "happy_feet" version = "0.1.0" -source = "git+https://github.com/rustunit/happy_feet.git?rev=919657fa#919657fa3330b3a78026c239c17122b3e3beefd7" +source = "git+https://github.com/PROMETHIA-27/happy_feet.git?rev=e3a4660e0b68f9bf4d6facb0fb4d93f2d7848b27#e3a4660e0b68f9bf4d6facb0fb4d93f2d7848b27" dependencies = [ "avian3d", "bevy", @@ -5015,7 +5066,7 @@ dependencies = [ "approx", "arrayvec", "bitflags 2.10.0", - "downcast-rs", + "downcast-rs 2.0.2", "either", "ena", "foldhash 0.2.0", @@ -5046,7 +5097,7 @@ dependencies = [ "approx", "arrayvec", "bitflags 2.10.0", - "downcast-rs", + "downcast-rs 2.0.2", "either", "ena", "foldhash 0.2.0", @@ -5332,6 +5383,15 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" +[[package]] +name = "quick-xml" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "331e97a1af0bf59823e6eadffe373d7b27f485be8748f71471c662c1f269b7fb" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.42" @@ -5775,12 +5835,31 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + [[package]] name = "self_cell" version = "1.2.1" @@ -5945,6 +6024,31 @@ dependencies = [ "syn", ] +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.10.0", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.44", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + [[package]] name = "smol_str" version = "0.2.2" @@ -6024,6 +6128,12 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42862065c9e685d08cc3d9f6c609d4b46bd9684ec7e9420688eb979213469582" +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + [[package]] name = "strsim" version = "0.10.0" @@ -6243,6 +6353,31 @@ dependencies = [ "time-core", ] +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + [[package]] name = "tinystr" version = "0.8.2" @@ -6717,6 +6852,114 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "wayland-backend" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673a33c33048a5ade91a6b139580fa174e19fb0d23f396dca9fa15f2e1e49b35" +dependencies = [ + "cc", + "downcast-rs 1.2.1", + "rustix 1.1.2", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" +dependencies = [ + "bitflags 2.10.0", + "rustix 1.1.2", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.10.0", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447ccc440a881271b19e9989f75726d60faa09b95b0200a9b7eb5cc47c3eeb29" +dependencies = [ + "rustix 1.1.2", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a07a14257c077ab3279987c4f8bb987851bf57081b93710381daea94f2c2c032" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd94963ed43cf9938a090ca4f7da58eb55325ec8200c3848963e98dc25b78ec" +dependencies = [ + "bitflags 2.10.0", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34949b42822155826b41db8e5d0c1be3a2bd296c747577a43a3e6daefc296142" +dependencies = [ + "dlib", + "log", + "pkg-config", +] + [[package]] name = "web-sys" version = "0.3.83" @@ -7395,6 +7638,7 @@ version = "0.30.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" dependencies = [ + "ahash", "android-activity", "atomic-waker", "bitflags 2.10.0", @@ -7409,6 +7653,7 @@ dependencies = [ "dpi", "js-sys", "libc", + "memmap2", "ndk 0.9.0", "objc2 0.5.2", "objc2-app-kit 0.2.2", @@ -7420,11 +7665,17 @@ dependencies = [ "raw-window-handle", "redox_syscall 0.4.1", "rustix 0.38.44", + "sctk-adwaita", + "smithay-client-toolkit", "smol_str", "tracing", "unicode-segmentation", "wasm-bindgen", "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", "web-sys", "web-time", "windows-sys 0.52.0", @@ -7495,6 +7746,12 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" +[[package]] +name = "xcursor" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" + [[package]] name = "xkbcommon-dl" version = "0.4.2" diff --git a/Cargo.toml b/Cargo.toml index a1a2532..6c82a80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,7 +67,7 @@ bevy_trenchbroom = { version = "0.10", default-features = false, features = [ bevy_trenchbroom_avian = "0.10" clap = { version = "=4.5.47", features = ["derive"] } dirs = "6.0.0" -happy_feet = { git = "https://github.com/rustunit/happy_feet.git", rev = "919657fa", features = [ +happy_feet = { git = "https://github.com/PROMETHIA-27/happy_feet.git", rev = "e3a4660e0b68f9bf4d6facb0fb4d93f2d7848b27", features = [ "serde", ] } nil = "0.14.0" diff --git a/crates/hedz_reloaded/src/client/camera.rs b/crates/hedz_reloaded/src/client/camera.rs index 0b3bf71..e00b42d 100644 --- a/crates/hedz_reloaded/src/client/camera.rs +++ b/crates/hedz_reloaded/src/client/camera.rs @@ -6,9 +6,8 @@ use crate::{ physics_layers::GameLayer, player::LocalPlayer, }; -use avian3d::prelude::SpatialQuery; use avian3d::prelude::{ - Collider, LayerMask, PhysicsLayer as _, ShapeCastConfig, SpatialQueryFilter, + Collider, LayerMask, PhysicsLayer as _, ShapeCastConfig, SpatialQuery, SpatialQueryFilter, }; use bevy::prelude::*; diff --git a/crates/hedz_reloaded/src/client/ui/mod.rs b/crates/hedz_reloaded/src/client/ui/mod.rs index fd13156..1b04a09 100644 --- a/crates/hedz_reloaded/src/client/ui/mod.rs +++ b/crates/hedz_reloaded/src/client/ui/mod.rs @@ -4,9 +4,8 @@ mod heads_ui; mod pause; pub use backpack_ui::{BACKPACK_HEAD_SLOTS, BackpackUiState}; -pub use heads_ui::{HeadsImages, UiHeadState}; - use bevy::prelude::*; +pub use heads_ui::{HeadsImages, UiHeadState}; pub fn plugin(app: &mut App) { app.add_plugins(heads_ui::plugin); diff --git a/crates/hedz_reloaded/src/player.rs b/crates/hedz_reloaded/src/player.rs index 5d200bf..6349750 100644 --- a/crates/hedz_reloaded/src/player.rs +++ b/crates/hedz_reloaded/src/player.rs @@ -23,6 +23,7 @@ use bevy::{ }; use bevy_replicon::prelude::{ClientId, Replicated, SendMode, ServerTriggerExt, ToClients}; use happy_feet::debug::DebugInput; +use rand::Rng; use serde::{Deserialize, Serialize}; #[derive(Component, Default, Serialize, Deserialize, PartialEq)] @@ -69,7 +70,15 @@ pub fn spawn( ) -> Option { let spawn = query.iter().next()?; - let transform = Transform::from_translation(spawn.translation + Vec3::new(0., 3., 0.)); + // This offset helps prevent players from getting stuck inside each other on spawn and causing a perpetual + // motion machine. + let random_offset = Vec3::new( + rand::thread_rng().gen_range(-0.01..0.01), + 0.0, + rand::thread_rng().gen_range(-0.01..0.01), + ); + let transform = + Transform::from_translation(spawn.translation + Vec3::new(0., 3., 0.) + random_offset); let id = commands .spawn(( diff --git a/crates/hedz_reloaded/src/protocol/events.rs b/crates/hedz_reloaded/src/protocol/events.rs index 4bfdc44..49f9836 100644 --- a/crates/hedz_reloaded/src/protocol/events.rs +++ b/crates/hedz_reloaded/src/protocol/events.rs @@ -1,8 +1,7 @@ +use crate::protocol::PlayerId; use bevy::prelude::*; use serde::{Deserialize, Serialize}; -use crate::protocol::PlayerId; - // TODO: remove in favour of client side change detection #[derive(Clone, Event, Serialize, Deserialize, PartialEq)] pub struct ClientHeadChanged {