fix depenetration panic (#98)

This commit is contained in:
PROMETHIA-27
2025-12-22 07:22:27 -05:00
committed by GitHub
parent da5c0f8fb7
commit dd01b03526
6 changed files with 280 additions and 17 deletions

275
Cargo.lock generated
View File

@@ -102,6 +102,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"getrandom 0.3.4",
"once_cell", "once_cell",
"version_check", "version_check",
"zerocopy", "zerocopy",
@@ -580,7 +581,7 @@ dependencies = [
"bevy_utils", "bevy_utils",
"blake3", "blake3",
"derive_more", "derive_more",
"downcast-rs", "downcast-rs 2.0.2",
"either", "either",
"petgraph", "petgraph",
"ron 0.10.1", "ron 0.10.1",
@@ -640,7 +641,7 @@ dependencies = [
"cfg-if", "cfg-if",
"console_error_panic_hook", "console_error_panic_hook",
"ctrlc", "ctrlc",
"downcast-rs", "downcast-rs 2.0.2",
"log", "log",
"thiserror 2.0.17", "thiserror 2.0.17",
"variadics_please", "variadics_please",
@@ -671,7 +672,7 @@ dependencies = [
"crossbeam-channel", "crossbeam-channel",
"derive_more", "derive_more",
"disqualified", "disqualified",
"downcast-rs", "downcast-rs 2.0.2",
"either", "either",
"futures-io", "futures-io",
"futures-lite", "futures-lite",
@@ -743,6 +744,7 @@ dependencies = [
"bevy_reflect", "bevy_reflect",
"bevy_transform", "bevy_transform",
"coreaudio-sys", "coreaudio-sys",
"cpal",
"rodio", "rodio",
"tracing", "tracing",
] ]
@@ -774,7 +776,7 @@ dependencies = [
"bevy_utils", "bevy_utils",
"bevy_window", "bevy_window",
"derive_more", "derive_more",
"downcast-rs", "downcast-rs 2.0.2",
"serde", "serde",
"smallvec", "smallvec",
"thiserror 2.0.17", "thiserror 2.0.17",
@@ -1177,6 +1179,7 @@ dependencies = [
"bevy_pbr", "bevy_pbr",
"bevy_picking", "bevy_picking",
"bevy_platform", "bevy_platform",
"bevy_post_process",
"bevy_ptr", "bevy_ptr",
"bevy_reflect", "bevy_reflect",
"bevy_render", "bevy_render",
@@ -1393,6 +1396,36 @@ dependencies = [
"web-time", "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]] [[package]]
name = "bevy_ptr" name = "bevy_ptr"
version = "0.17.3" version = "0.17.3"
@@ -1412,7 +1445,7 @@ dependencies = [
"bevy_utils", "bevy_utils",
"derive_more", "derive_more",
"disqualified", "disqualified",
"downcast-rs", "downcast-rs 2.0.2",
"erased-serde", "erased-serde",
"foldhash 0.2.0", "foldhash 0.2.0",
"glam 0.30.9", "glam 0.30.9",
@@ -1471,7 +1504,7 @@ dependencies = [
"bitflags 2.10.0", "bitflags 2.10.0",
"bytemuck", "bytemuck",
"derive_more", "derive_more",
"downcast-rs", "downcast-rs 2.0.2",
"encase", "encase",
"fixedbitset", "fixedbitset",
"image", "image",
@@ -2121,6 +2154,18 @@ dependencies = [
"thiserror 1.0.69", "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]] [[package]]
name = "cc" name = "cc"
version = "1.2.49" version = "1.2.49"
@@ -2854,6 +2899,12 @@ dependencies = [
"litrs", "litrs",
] ]
[[package]]
name = "downcast-rs"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
[[package]] [[package]]
name = "downcast-rs" name = "downcast-rs"
version = "2.0.2" version = "2.0.2"
@@ -3634,7 +3685,7 @@ dependencies = [
[[package]] [[package]]
name = "happy_feet" name = "happy_feet"
version = "0.1.0" 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 = [ dependencies = [
"avian3d", "avian3d",
"bevy", "bevy",
@@ -5015,7 +5066,7 @@ dependencies = [
"approx", "approx",
"arrayvec", "arrayvec",
"bitflags 2.10.0", "bitflags 2.10.0",
"downcast-rs", "downcast-rs 2.0.2",
"either", "either",
"ena", "ena",
"foldhash 0.2.0", "foldhash 0.2.0",
@@ -5046,7 +5097,7 @@ dependencies = [
"approx", "approx",
"arrayvec", "arrayvec",
"bitflags 2.10.0", "bitflags 2.10.0",
"downcast-rs", "downcast-rs 2.0.2",
"either", "either",
"ena", "ena",
"foldhash 0.2.0", "foldhash 0.2.0",
@@ -5332,6 +5383,15 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" 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]] [[package]]
name = "quote" name = "quote"
version = "1.0.42" version = "1.0.42"
@@ -5775,12 +5835,31 @@ dependencies = [
"winapi-util", "winapi-util",
] ]
[[package]]
name = "scoped-tls"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.2.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 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]] [[package]]
name = "self_cell" name = "self_cell"
version = "1.2.1" version = "1.2.1"
@@ -5945,6 +6024,31 @@ dependencies = [
"syn", "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]] [[package]]
name = "smol_str" name = "smol_str"
version = "0.2.2" version = "0.2.2"
@@ -6024,6 +6128,12 @@ version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42862065c9e685d08cc3d9f6c609d4b46bd9684ec7e9420688eb979213469582" checksum = "42862065c9e685d08cc3d9f6c609d4b46bd9684ec7e9420688eb979213469582"
[[package]]
name = "strict-num"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731"
[[package]] [[package]]
name = "strsim" name = "strsim"
version = "0.10.0" version = "0.10.0"
@@ -6243,6 +6353,31 @@ dependencies = [
"time-core", "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]] [[package]]
name = "tinystr" name = "tinystr"
version = "0.8.2" version = "0.8.2"
@@ -6717,6 +6852,114 @@ dependencies = [
"unicode-ident", "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]] [[package]]
name = "web-sys" name = "web-sys"
version = "0.3.83" version = "0.3.83"
@@ -7395,6 +7638,7 @@ version = "0.30.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732" checksum = "c66d4b9ed69c4009f6321f762d6e61ad8a2389cd431b97cb1e146812e9e6c732"
dependencies = [ dependencies = [
"ahash",
"android-activity", "android-activity",
"atomic-waker", "atomic-waker",
"bitflags 2.10.0", "bitflags 2.10.0",
@@ -7409,6 +7653,7 @@ dependencies = [
"dpi", "dpi",
"js-sys", "js-sys",
"libc", "libc",
"memmap2",
"ndk 0.9.0", "ndk 0.9.0",
"objc2 0.5.2", "objc2 0.5.2",
"objc2-app-kit 0.2.2", "objc2-app-kit 0.2.2",
@@ -7420,11 +7665,17 @@ dependencies = [
"raw-window-handle", "raw-window-handle",
"redox_syscall 0.4.1", "redox_syscall 0.4.1",
"rustix 0.38.44", "rustix 0.38.44",
"sctk-adwaita",
"smithay-client-toolkit",
"smol_str", "smol_str",
"tracing", "tracing",
"unicode-segmentation", "unicode-segmentation",
"wasm-bindgen", "wasm-bindgen",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"wayland-backend",
"wayland-client",
"wayland-protocols",
"wayland-protocols-plasma",
"web-sys", "web-sys",
"web-time", "web-time",
"windows-sys 0.52.0", "windows-sys 0.52.0",
@@ -7495,6 +7746,12 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
[[package]]
name = "xcursor"
version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b"
[[package]] [[package]]
name = "xkbcommon-dl" name = "xkbcommon-dl"
version = "0.4.2" version = "0.4.2"

View File

@@ -67,7 +67,7 @@ bevy_trenchbroom = { version = "0.10", default-features = false, features = [
bevy_trenchbroom_avian = "0.10" bevy_trenchbroom_avian = "0.10"
clap = { version = "=4.5.47", features = ["derive"] } clap = { version = "=4.5.47", features = ["derive"] }
dirs = "6.0.0" 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", "serde",
] } ] }
nil = "0.14.0" nil = "0.14.0"

View File

@@ -6,9 +6,8 @@ use crate::{
physics_layers::GameLayer, physics_layers::GameLayer,
player::LocalPlayer, player::LocalPlayer,
}; };
use avian3d::prelude::SpatialQuery;
use avian3d::prelude::{ use avian3d::prelude::{
Collider, LayerMask, PhysicsLayer as _, ShapeCastConfig, SpatialQueryFilter, Collider, LayerMask, PhysicsLayer as _, ShapeCastConfig, SpatialQuery, SpatialQueryFilter,
}; };
use bevy::prelude::*; use bevy::prelude::*;

View File

@@ -4,9 +4,8 @@ mod heads_ui;
mod pause; mod pause;
pub use backpack_ui::{BACKPACK_HEAD_SLOTS, BackpackUiState}; pub use backpack_ui::{BACKPACK_HEAD_SLOTS, BackpackUiState};
pub use heads_ui::{HeadsImages, UiHeadState};
use bevy::prelude::*; use bevy::prelude::*;
pub use heads_ui::{HeadsImages, UiHeadState};
pub fn plugin(app: &mut App) { pub fn plugin(app: &mut App) {
app.add_plugins(heads_ui::plugin); app.add_plugins(heads_ui::plugin);

View File

@@ -23,6 +23,7 @@ use bevy::{
}; };
use bevy_replicon::prelude::{ClientId, Replicated, SendMode, ServerTriggerExt, ToClients}; use bevy_replicon::prelude::{ClientId, Replicated, SendMode, ServerTriggerExt, ToClients};
use happy_feet::debug::DebugInput; use happy_feet::debug::DebugInput;
use rand::Rng;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
#[derive(Component, Default, Serialize, Deserialize, PartialEq)] #[derive(Component, Default, Serialize, Deserialize, PartialEq)]
@@ -69,7 +70,15 @@ pub fn spawn(
) -> Option<Entity> { ) -> Option<Entity> {
let spawn = query.iter().next()?; 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 let id = commands
.spawn(( .spawn((

View File

@@ -1,8 +1,7 @@
use crate::protocol::PlayerId;
use bevy::prelude::*; use bevy::prelude::*;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use crate::protocol::PlayerId;
// TODO: remove in favour of client side change detection // TODO: remove in favour of client side change detection
#[derive(Clone, Event, Serialize, Deserialize, PartialEq)] #[derive(Clone, Event, Serialize, Deserialize, PartialEq)]
pub struct ClientHeadChanged { pub struct ClientHeadChanged {