diff --git a/.cargo/config.toml b/.cargo/config.toml index 9079b92..8099b7a 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,4 +1,4 @@ [target.x86_64-unknown-linux-gnu] linker = "clang" # TODO: Share generics when using nightly no longer causes an undefined symbol error -rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold", "-Zshare-generics=y"] +rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold"] #, "-Zshare-generics=y"] diff --git a/.vscode/launch.json b/.vscode/launch.json index 48ad4dc..424d2c8 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -15,13 +15,13 @@ "cwd": "${workspaceFolder}", "env": { "CARGO_MANIFEST_DIR": "${workspaceFolder}", - "LD_LIBRARY_PATH": "${workspaceFolder}/target/debug/deps:${env:HOME}/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" + "LD_LIBRARY_PATH": "${workspaceFolder}/target/debug/deps:${env:HOME}/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" }, "presentation": { "hidden": false, "group": "run", "order": 1 - }, + } }, { "type": "lldb", @@ -34,14 +34,13 @@ "cwd": "${workspaceFolder}", "env": { "CARGO_MANIFEST_DIR": "${workspaceFolder}", - "LD_LIBRARY_PATH": "${workspaceFolder}/target/debug/deps:${env:HOME}/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" + "LD_LIBRARY_PATH": "${workspaceFolder}/target/debug/deps:${env:HOME}/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" }, "presentation": { "hidden": false, "group": "run", "order": 2 - }, - "suppressMultipleSessionWarning": true, + } }, { "type": "lldb", @@ -54,14 +53,13 @@ "cwd": "${workspaceFolder}", "env": { "CARGO_MANIFEST_DIR": "${workspaceFolder}", - "LD_LIBRARY_PATH": "${workspaceFolder}/target/debug/deps:${env:HOME}/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" + "LD_LIBRARY_PATH": "${workspaceFolder}/target/debug/deps:${env:HOME}/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" }, "presentation": { "hidden": false, "group": "run", "order": 2 - }, - "suppressMultipleSessionWarning": true, - }, - ], + } + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 8ebe79c..7d9ea05 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,12 +15,6 @@ "RUSTFLAGS": "-Clinker=clang -Clink-arg=-fuse-ld=lld" }, "rust-analyzer.check.command": "clippy", // "check", // -// "rust-analyzer.check.overrideCommand": [ -// "bevy_lint", -// "--workspace", -// "--all-targets", -// "--message-format=json-diagnostic-rendered-ansi", -// ], "rust-analyzer.cargo.targetDir": true, "cSpell.words": [ "Backquote", diff --git a/Cargo.lock b/Cargo.lock index 6780b49..90ccc97 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1623,9 +1623,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.48" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" +checksum = "fd60e63e9be68e5fb56422e397cf9baddded06dae1d2e523401542383bc72a9f" dependencies = [ "clap_builder", "clap_derive", @@ -1633,9 +1633,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.48" +version = "4.5.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" +checksum = "89cc6392a1f72bbeb820d71f32108f61fdaf18bc526e1d23954168a67759ef51" dependencies = [ "anstream", "anstyle", @@ -1645,9 +1645,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.47" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ "heck", "proc-macro2", @@ -1923,7 +1923,7 @@ dependencies = [ "clap", "crossbeam-channel", "log", - "rand 0.9.2", + "rand 0.9.1", "uuid", "wyrand", ] @@ -2680,9 +2680,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.28" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "malloc_buf" @@ -3549,9 +3549,9 @@ dependencies = [ [[package]] name = "rand" -version = "0.9.2" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" dependencies = [ "rand_chacha 0.9.0", "rand_core 0.9.3", @@ -4480,9 +4480,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.18.1" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" dependencies = [ "getrandom 0.3.3", "js-sys", diff --git a/Cargo.toml b/Cargo.toml index d8468b5..a48d89a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,32 +5,12 @@ edition = "2024" description = "Experimental distributed physics system" license = "AGPL-3.0-only" -[lints.rust] -# Mark `bevy_lint` as a valid `cfg`, as it is set when the Bevy linter runs. -unexpected_cfgs = { level = "warn", check-cfg = ["cfg(bevy_lint)"] } - -[lints.clippy] -# Bevy supplies arguments to systems via dependency injection, so it's natural for systems to -# request more than 7 arguments, which would undesirably trigger this lint. -too_many_arguments = "allow" -# Queries may access many components, which would undesirably trigger this lint. -type_complexity = "allow" -# Make sure macros use their standard braces, such as `[]` for `bevy_ecs::children!`. -nonstandard_macro_braces = "warn" - -[package.metadata.bevy_lint] -panicking_methods = "deny" -pedantic = "warn" - [profile.dev] opt-level = 1 [profile.dev.package."*"] opt-level = 3 -[profile.dev.package.wgpu-types] -debug-assertions = false - [profile.release] lto = true opt-level = 3 @@ -55,14 +35,14 @@ bevy = { version = "0.16.1", default-features = false, features = [ "wayland", ] } bevy_rand = { version = "0.11.0", features = ["wyrand", "std"] } -clap = { version = "4.5.48", features = ["derive"] } +clap = { version = "4.5.39", features = ["derive"] } crossbeam-channel = "0.5.15" -log = { version = "0.4.28", features = ["release_max_level_warn"] } -rand = { version = "0.9.2", default-features = false, features = [ +log = { version = "0.4.27", features = ["release_max_level_warn"] } +rand = { version = "0.9.1", default-features = false, features = [ "std", "thread_rng", ] } -uuid = { version = "1.18.1", features = ["v4"] } +uuid = { version = "1.17.0", features = ["v4"] } wyrand = "0.3.2" [features] diff --git a/clippy.toml b/clippy.toml deleted file mode 100644 index af8b632..0000000 --- a/clippy.toml +++ /dev/null @@ -1,2 +0,0 @@ -# Require `bevy_ecs::children!` to use `[]` braces, instead of `()` or `{}`. -standard-macro-braces = [{ name = "children", brace = "[" }] diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 5d56faf..c672579 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,3 @@ [toolchain] -channel = "nightly" +# TODO: Switch back to nightly when it no longer causes an undefined symbol error +channel = "stable" # "nightly" diff --git a/src/game/net.rs b/src/game/net.rs index c52f85f..8e43e3f 100644 --- a/src/game/net.rs +++ b/src/game/net.rs @@ -2,16 +2,13 @@ use bevy::prelude::*; use crate::net::prelude::*; -pub fn handle_new_peer(new_peers: Query<&PeerID, Added>) { +pub fn handle_new_peer(new_peers: Query<&Peer, Added>) { for peer in new_peers { info!("Peer {} was added", peer.id); } } -pub fn handle_deleted_peer( - mut old_peers: RemovedComponents, - peers: Query<&PeerID>, -) -> Result { +pub fn handle_deleted_peer(mut old_peers: RemovedComponents, peers: Query<&Peer>) -> Result { for entity in old_peers.read() { if let Ok(peer) = peers.get(entity) { info!("Peer {} was removed", peer.id); @@ -23,7 +20,7 @@ pub fn handle_deleted_peer( } pub fn handle_incoming_packets(mut packets: EventReader) { - for InboundPacket(packet) in packets.read() { - info!("Packet received: {:?}", packet.message); + for packet in packets.read() { + info!("Packet received: {:?}", packet.0.message); } } diff --git a/src/game/plugin.rs b/src/game/plugin.rs index a7fdf48..d879c20 100644 --- a/src/game/plugin.rs +++ b/src/game/plugin.rs @@ -13,10 +13,7 @@ use super::{ check_for_seed, setup_balls, setup_camera, setup_from_seed, setup_player, setup_walls, }, state::AppState, - ui::{ - setup_peer_ui, setup_potential_peer_ui, setup_seed_ui, update_peer_ui, - update_peer_ui_timings, update_potential_peer_ui, update_seed_ui, - }, + ui::{setup_peer_ui, setup_seed_ui, update_peer_ui, update_peer_ui_timings, update_seed_ui}, }; #[derive(Debug, Clone, Copy)] @@ -58,20 +55,11 @@ impl GamePlugin { impl Plugin for GamePlugin { fn build(&self, app: &mut App) { app.add_plugins(( - NetIOPlugin::maybe_peer(self.port, self.source.try_to_address()), - distribution_plugin::, + NetIOPlugin::new(self.port, self.source.try_to_address()), PhysicsPlugins::default().with_length_unit(50.0), )) .init_state::() - .add_systems( - Startup, - ( - setup_camera, - setup_seed_ui, - setup_peer_ui, - setup_potential_peer_ui, - ), - ) + .add_systems(Startup, (setup_camera, setup_seed_ui, setup_peer_ui)) .add_systems( OnEnter(AppState::InGame), ( @@ -87,7 +75,8 @@ impl Plugin for GamePlugin { handle_new_peer, handle_deleted_peer, handle_incoming_packets, - ), + ) + .run_if(in_state(NetworkState::MultiPlayer)), ), ) .add_systems( @@ -96,15 +85,14 @@ impl Plugin for GamePlugin { ((move_player, move_camera).chain(), zoom_camera) .run_if(in_state(AppState::InGame)), update_seed_ui, - ( - update_peer_ui, - update_peer_ui_timings, - update_potential_peer_ui, - ), + (update_peer_ui, update_peer_ui_timings) + .run_if(in_state(NetworkState::MultiPlayer)), quit.run_if(input_pressed(KeyCode::KeyQ)), ), ); + Seed::register(app); + match self.source { DataSource::Address(peer) => { info!("Will retrieve seed from peer => {peer}"); diff --git a/src/game/seed.rs b/src/game/seed.rs index d95a957..085c10c 100644 --- a/src/game/seed.rs +++ b/src/game/seed.rs @@ -61,7 +61,7 @@ impl From for Vec { impl TryFrom> for Seed { type Error = TryFromSliceError; - fn try_from(value: Vec) -> std::result::Result { + fn try_from(value: Vec) -> Result { Ok(TryInto::<[u8; 8]>::try_into(value.as_slice())?.into()) } } diff --git a/src/game/ui.rs b/src/game/ui.rs index 60f17a1..391a39f 100644 --- a/src/game/ui.rs +++ b/src/game/ui.rs @@ -1,6 +1,6 @@ use bevy::prelude::*; -use crate::net::prelude::{Peer, PeerID, PeerReceiveTiming, PeerSendTiming, PotentialPeers}; +use crate::net::prelude::{Peer, PeerReceiveTiming, PeerSendTiming}; use super::seed::Seed; @@ -54,11 +54,11 @@ pub fn setup_peer_ui(mut commands: Commands) { } #[derive(Component)] -pub struct UIPeerID(Entity); +pub struct PeerID(Entity); pub fn update_peer_ui( ui: Query<(Entity, &Children), With>, - rows: Query<&UIPeerID>, + rows: Query<&PeerID>, added: Query>, mut removed: RemovedComponents, mut commands: Commands, @@ -67,14 +67,14 @@ pub fn update_peer_ui( for addition in added { commands .entity(table) - .with_child((Text::new("---- ---- ----"), UIPeerID(addition))); + .with_child((Text::new("---- ---- ----"), PeerID(addition))); } for removal in removed.read() { for child in children { - if let Ok(&UIPeerID(id)) = rows.get(*child) - && id == removal - { - commands.entity(*child).despawn(); + if let Ok(id) = rows.get(*child) { + if id.0 == removal { + commands.entity(*child).despawn(); + } } } } @@ -82,12 +82,12 @@ pub fn update_peer_ui( } pub fn update_peer_ui_timings( - rows: Query<(&mut Text, &UIPeerID)>, - peers: Query<(&PeerID, &PeerReceiveTiming, &PeerSendTiming)>, + rows: Query<(&mut Text, &PeerID)>, + peers: Query<(&Peer, &PeerReceiveTiming, &PeerSendTiming)>, time: Res