diff --git a/Cargo.lock b/Cargo.lock index 6a24e14..3b99229 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,15 +79,6 @@ dependencies = [ "winit", ] -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", -] - [[package]] name = "adler2" version = "2.0.1" @@ -104,100 +95,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "aeronet_io" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10fd12c8d1f4949bc06329c0d358c57f55953830111748bfb998121bf738a984" -dependencies = [ - "anyhow", - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bytes", - "derive_more", - "log", -] - -[[package]] -name = "aeronet_steam" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90b2cb304473ed9da08a74066d75347e976432529e947585b0bae1e274b317e" -dependencies = [ - "aeronet_io", - "anyhow", - "bevy_app", - "bevy_ecs", - "bevy_platform", - "blocking", - "bytes", - "derive_more", - "oneshot", - "steamworks", - "sync_wrapper", - "tracing", -] - -[[package]] -name = "aeronet_websocket" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b41cd2aeaa0d4a7b699132c8d4ff99aec043181e0678fa0e1bffc9a4618e8763" -dependencies = [ - "aeronet_io", - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bytes", - "cfg-if", - "derive_more", - "futures", - "js-sys", - "rcgen", - "rustls", - "rustls-native-certs", - "tokio", - "tokio-rustls", - "tokio-tungstenite", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "aeronet_webtransport" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bd1516ba16702fffbd372370ce9e1dd1b74d15c4038330d437cad6c0ba4d84" -dependencies = [ - "aeronet_io", - "anyhow", - "base64 0.22.1", - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bytes", - "cfg-if", - "derive_more", - "futures", - "gloo-timers", - "js-sys", - "spki", - "tokio", - "tracing", - "wasm-bindgen", - "wasm-bindgen-futures", - "wtransport", - "x509-cert", - "xwt-core", - "xwt-web", - "xwt-wtransport", -] - [[package]] name = "ahash" version = "0.8.12" @@ -275,12 +172,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" -[[package]] -name = "android-tzdata" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" - [[package]] name = "android_log-sys" version = "0.3.2" @@ -408,45 +299,6 @@ dependencies = [ "libloading", ] -[[package]] -name = "asn1-rs" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" -dependencies = [ - "asn1-rs-derive", - "asn1-rs-impl", - "displaydoc", - "nom", - "num-traits", - "rusticata-macros", - "thiserror 2.0.12", - "time", -] - -[[package]] -name = "asn1-rs-derive" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3109e49b1e4909e9db6515a30c633684d68cdeaa252f215214cb4fa1a5bfee2c" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "asn1-rs-impl" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b18050c2cd6fe86c3a76584ef5e0baf286d038cda203eb6223df2cc413565f7" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "assert_type_match" version = "0.1.1" @@ -552,31 +404,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "avian2d" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a09520bf5896787549454bfefee896fd24cca34ec0ce4c7d9c00b6402322edf" -dependencies = [ - "approx", - "arrayvec", - "avian_derive", - "bevy", - "bevy_heavy", - "bevy_math", - "bevy_transform_interpolation", - "bitflags 2.9.1", - "derive_more", - "disqualified", - "glam_matrix_extras", - "itertools 0.13.0", - "nalgebra", - "parry2d", - "slab", - "smallvec", - "thiserror 2.0.12", -] - [[package]] name = "avian3d" version = "0.4.1" @@ -616,45 +443,6 @@ dependencies = [ "syn", ] -[[package]] -name = "aws-lc-rs" -version = "1.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879b6c89592deb404ba4dc0ae6b58ffd1795c78991cbb5b8bc441c48a070440d" -dependencies = [ - "aws-lc-sys", - "zeroize", -] - -[[package]] -name = "aws-lc-sys" -version = "0.32.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee74396bee4da70c2e27cf94762714c911725efe69d9e2672f998512a67a4ce4" -dependencies = [ - "bindgen", - "cc", - "cmake", - "dunce", - "fs_extra", - "libloading", -] - -[[package]] -name = "backtrace" -version = "0.3.75" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets 0.52.6", -] - [[package]] name = "base64" version = "0.21.7" @@ -667,12 +455,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64ct" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" - [[package]] name = "bevy" version = "0.17.2" @@ -1185,32 +967,6 @@ dependencies = [ "encase_derive_impl", ] -[[package]] -name = "bevy_enhanced_input" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5b83e6193cad8ff98a226547402ae63f0ee32fb9963839d0c6d1060e479fa1" -dependencies = [ - "bevy", - "bevy_enhanced_input_macros", - "bitflags 2.9.1", - "log", - "serde", - "smallvec", - "variadics_please", -] - -[[package]] -name = "bevy_enhanced_input_macros" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9acf2a10e98305d234852bd60bd17fdf42c651b25f926e4985c56f19a08680d0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "bevy_gilrs" version = "0.17.2" @@ -1766,6 +1522,49 @@ dependencies = [ "syn", ] +[[package]] +name = "bevy_renet" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597d76e02d0b24bcf1a00db362179c58207cb7c1dd9968e5c0d4898129b57c70" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_time", + "renet", + "renet_netcode", +] + +[[package]] +name = "bevy_replicon" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7abe4bb7d0140f2472dd7ecbb40dfeb1c4ee53109a7a17eb057f9bb0ab4b7e61" +dependencies = [ + "bevy", + "bitflags 2.9.1", + "bytes", + "deterministic-hash", + "log", + "petgraph", + "postcard", + "serde", + "typeid", + "variadics_please", + "xxhash-rust", +] + +[[package]] +name = "bevy_replicon_renet" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52b5c693c326783ca459e7ee45b7f3f5c23ab5ad9b9f04c8baf56f7755e410c1" +dependencies = [ + "bevy", + "bevy_renet", + "bevy_replicon", +] + [[package]] name = "bevy_scene" version = "0.17.2" @@ -2116,20 +1915,6 @@ dependencies = [ "thread_local", ] -[[package]] -name = "bevy_web_keepalive" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13adcc34b12e13f30b1838e40ed9fb48ddcdb811742c432df695971d5bca3bdd" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_time", - "bevy_winit", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "bevy_window" version = "0.17.2" @@ -2182,16 +1967,6 @@ dependencies = [ "winit", ] -[[package]] -name = "bincode" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36eaf5d7b090263e8150820482d5d93cd964a81e4019913c972f4edcc6edb740" -dependencies = [ - "serde", - "unty", -] - [[package]] name = "bindgen" version = "0.72.0" @@ -2202,8 +1977,6 @@ dependencies = [ "cexpr", "clang-sys", "itertools 0.13.0", - "log", - "prettyplease", "proc-macro2", "quote", "regex", @@ -2262,15 +2035,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "block2" version = "0.5.1" @@ -2349,7 +2113,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" dependencies = [ "portable-atomic", - "serde", ] [[package]] @@ -2440,20 +2203,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "chrono" -version = "0.4.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" -dependencies = [ - "android-tzdata", - "iana-time-zone", - "js-sys", - "num-traits", - "wasm-bindgen", - "windows-link 0.1.3", -] - [[package]] name = "cipher" version = "0.4.4" @@ -2526,12 +2275,12 @@ dependencies = [ ] [[package]] -name = "cmake" -version = "0.1.54" +name = "cobs" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7caa3f9de89ddbe2c607f4101924c5abec803763ae9534e4f4d7d8f84aa81f0" +checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" dependencies = [ - "cc", + "thiserror 2.0.12", ] [[package]] @@ -2587,12 +2336,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" -[[package]] -name = "const-oid" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" - [[package]] name = "const_panic" version = "0.2.12" @@ -2903,20 +2646,6 @@ dependencies = [ "syn", ] -[[package]] -name = "dashmap" -version = "6.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" -dependencies = [ - "cfg-if", - "crossbeam-utils", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "dasp_sample" version = "0.11.0" @@ -2982,44 +2711,6 @@ dependencies = [ "syn", ] -[[package]] -name = "der" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" -dependencies = [ - "const-oid", - "der_derive", - "flagset", - "pem-rfc7468", - "zeroize", -] - -[[package]] -name = "der-parser" -version = "10.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07da5016415d5a3c4dd39b11ed26f915f52fc4e0dc197d87908bc916e51bc1a6" -dependencies = [ - "asn1-rs", - "displaydoc", - "nom", - "num-bigint", - "num-traits", - "rusticata-macros", -] - -[[package]] -name = "der_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "deranged" version = "0.4.0" @@ -3082,14 +2773,10 @@ dependencies = [ ] [[package]] -name = "digest" -version = "0.10.7" +name = "deterministic-hash" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] +checksum = "11277822c27bde750de02c5dc5159b91e88bf2661a2c1d98106f2fb1c5c6f590" [[package]] name = "disjoint-sets" @@ -3166,30 +2853,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" -[[package]] -name = "dunce" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" - -[[package]] -name = "dyn-clone" -version = "1.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c7a8fb8a9fbf66c1f703fe16184d10ca0ee9d23be5b4436400408ba54a95005" - -[[package]] -name = "dyn-eq" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c2d035d21af5cde1a6f5c7b444a5bf963520a9f142e5d06931178433d7d5388" - -[[package]] -name = "dyn-hash" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15401da73a9ed8c80e3b2d4dc05fe10e7b72d7243b9f614e516a44fa99986e88" - [[package]] name = "ecolor" version = "0.32.3" @@ -3272,24 +2935,6 @@ dependencies = [ "syn", ] -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - -[[package]] -name = "enum_dispatch" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" -dependencies = [ - "once_cell", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "enumflags2" version = "0.7.12" @@ -3427,12 +3072,6 @@ version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" -[[package]] -name = "flagset" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" - [[package]] name = "flate2" version = "1.1.2" @@ -3535,27 +3174,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs_extra" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.31" @@ -3563,7 +3181,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -3572,17 +3189,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - [[package]] name = "futures-io" version = "0.3.31" @@ -3602,53 +3208,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - [[package]] name = "fuzzy-matcher" version = "0.3.7" @@ -3685,10 +3244,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.1+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -3739,12 +3296,6 @@ dependencies = [ "windows 0.61.3", ] -[[package]] -name = "gimli" -version = "0.31.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" - [[package]] name = "gl_generator" version = "0.14.0" @@ -3876,18 +3427,6 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" -[[package]] -name = "gloo-timers" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" -dependencies = [ - "futures-channel", - "futures-core", - "js-sys", - "wasm-bindgen", -] - [[package]] name = "glow" version = "0.16.0" @@ -3945,29 +3484,6 @@ dependencies = [ "gl_generator", ] -[[package]] -name = "governor" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cbe789d04bf14543f03c4b60cd494148aa79438c8440ae7d81a7778147745c3" -dependencies = [ - "cfg-if", - "dashmap", - "futures-sink", - "futures-timer", - "futures-util", - "getrandom 0.3.3", - "hashbrown 0.15.4", - "nonzero_ext", - "parking_lot", - "portable-atomic", - "quanta", - "rand 0.9.1", - "smallvec", - "spinning_top", - "web-time", -] - [[package]] name = "gpu-alloc" version = "0.6.0" @@ -4065,12 +3581,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - [[package]] name = "hashbrown" version = "0.15.4" @@ -4128,11 +3638,13 @@ dependencies = [ "bevy_ballistic", "bevy_common_assets", "bevy_debug_log", + "bevy_replicon", + "bevy_replicon_renet", "bevy_sprite3d", "bevy_trenchbroom", "bevy_trenchbroom_avian", + "clap", "happy_feet", - "lightyear", "nil 0.14.0", "rand 0.8.5", "ron 0.8.1", @@ -4165,53 +3677,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "httlib-huffman" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a9fcbcc408c5526c3ab80d534e5c86e7967c1fb7aa0a8c76abd1edc27deb877" - -[[package]] -name = "http" -version = "1.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - -[[package]] -name = "httparse" -version = "1.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" - -[[package]] -name = "iana-time-zone" -version = "0.1.63" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.61.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - [[package]] name = "icu_collections" version = "2.0.0" @@ -4409,17 +3874,6 @@ dependencies = [ "mach2", ] -[[package]] -name = "io-uring" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b86e202f00093dcba4275d4636b93ef9dd75d025ae560d2521b45ea28ab49013" -dependencies = [ - "bitflags 2.9.1", - "cfg-if", - "libc", -] - [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -4536,34 +3990,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" -[[package]] -name = "leafwing-input-manager" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "565d500780e26557b099b5f058d71c32ad6e92a7caac2cf4718d1078d97aa8b5" -dependencies = [ - "bevy", - "dyn-clone", - "dyn-eq", - "dyn-hash", - "itertools 0.14.0", - "leafwing_input_manager_macros", - "serde", - "serde_flexitos", -] - -[[package]] -name = "leafwing_input_manager_macros" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2226cb83129176a6c634f2ce0828c2c29896ea0898fc198636f98696b8056890" -dependencies = [ - "proc-macro-crate 3.3.0", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "lewton" version = "0.10.2" @@ -4618,580 +4044,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "lightyear" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b27c71484ff74fe439442afd55147f49e33f1c8617e39e4b9e845a6d879c118d" -dependencies = [ - "aeronet_io", - "bevy_app", - "bevy_ecs", - "bevy_web_keepalive", - "console_error_panic_hook", - "document-features", - "lightyear_aeronet", - "lightyear_avian2d", - "lightyear_avian3d", - "lightyear_connection", - "lightyear_core", - "lightyear_frame_interpolation", - "lightyear_inputs", - "lightyear_inputs_bei", - "lightyear_inputs_leafwing", - "lightyear_inputs_native", - "lightyear_interpolation", - "lightyear_link", - "lightyear_messages", - "lightyear_netcode", - "lightyear_prediction", - "lightyear_replication", - "lightyear_serde", - "lightyear_steam", - "lightyear_sync", - "lightyear_transport", - "lightyear_udp", - "lightyear_ui", - "lightyear_utils", - "lightyear_websocket", - "lightyear_webtransport", - "serde", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_aeronet" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102c42548b7d42bf682d8e9a3447bc6c7ec6f1a018802b0fb20546b00b4b4b0d" -dependencies = [ - "aeronet_io", - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "lightyear_core", - "lightyear_link", - "tracing", -] - -[[package]] -name = "lightyear_avian2d" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d0e4c738835ff126a603224edc1ad61370feef78a4ca20c43c5e744acda976" -dependencies = [ - "avian2d", - "bevy_app", - "bevy_ecs", - "bevy_math", - "bevy_time", - "bevy_transform", - "bevy_utils", - "lightyear_core", - "lightyear_frame_interpolation", - "lightyear_interpolation", - "lightyear_link", - "lightyear_prediction", - "lightyear_replication", - "tracing", -] - -[[package]] -name = "lightyear_avian3d" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54f61ced92e2e48345145aec2cd3806a7d5081449737ab36a072dbec72281901" -dependencies = [ - "avian3d", - "bevy_app", - "bevy_ecs", - "bevy_math", - "bevy_time", - "bevy_transform", - "bevy_utils", - "lightyear_core", - "lightyear_frame_interpolation", - "lightyear_interpolation", - "lightyear_link", - "lightyear_prediction", - "lightyear_replication", - "tracing", -] - -[[package]] -name = "lightyear_connection" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155263f4b9327745bbfd10b8ef1d73ae7b584539e01a7f2f54fceac9c629f89a" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bytes", - "lightyear_core", - "lightyear_link", - "lightyear_serde", - "serde", - "smallvec", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_core" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6861dd5d2c571d4bd847ea56c15fa2eb40c51d876d227316e7136aaac4496738" -dependencies = [ - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_time", - "chrono", - "lightyear_serde", - "lightyear_utils", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_frame_interpolation" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fce46dae79b88933e385a1baa9d28abc88a71d8c8e0dc3bcaf9c80bb61c97c32" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_time", - "bevy_transform", - "bevy_utils", - "lightyear_connection", - "lightyear_core", - "lightyear_interpolation", - "lightyear_replication", - "tracing", -] - -[[package]] -name = "lightyear_inputs" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c14dd0514a4b8c50f4595f6cccd51406832b1f4046efcee9972408899385398e" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_utils", - "lightyear_connection", - "lightyear_core", - "lightyear_interpolation", - "lightyear_link", - "lightyear_messages", - "lightyear_prediction", - "lightyear_replication", - "lightyear_sync", - "lightyear_transport", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_inputs_bei" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "412cec608ad53efe6e45d9346f5b2638536a4bdfea7488ec20d3c4805c74d4e4" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_enhanced_input", - "bevy_reflect", - "bevy_utils", - "lightyear_connection", - "lightyear_core", - "lightyear_inputs", - "lightyear_link", - "lightyear_replication", - "lightyear_serde", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_inputs_leafwing" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fe6ff8d32b7e38e7473c2f46edd92ab33828b4d24cd3a2b49ec8d6b40169c49" -dependencies = [ - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_input", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_utils", - "leafwing-input-manager", - "lightyear_core", - "lightyear_inputs", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_inputs_native" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da7fc079616fc2d40624fa5e3962ddb1343d433d99e2772bf2aa945df9905c96" -dependencies = [ - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_reflect", - "lightyear_core", - "lightyear_inputs", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_interpolation" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "906066d29ade3a60f3ca986fed5c2dbf7b50a39d15af320b7bfcc02249e38bbf" -dependencies = [ - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_time", - "bevy_utils", - "lightyear_connection", - "lightyear_core", - "lightyear_messages", - "lightyear_replication", - "lightyear_serde", - "lightyear_sync", - "lightyear_utils", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_link" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39b16fa6acea520fa3c3f93cae916753c70ab9600110bf2b1f01e7e14bcd4da9" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_utils", - "bytes", - "lightyear_core", - "lightyear_utils", - "rand 0.9.1", - "tracing", -] - -[[package]] -name = "lightyear_messages" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd0e3a0d1ad3993eee6c6f31fcb9379864e570094f45c9e672dc1aaaee903b8" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_utils", - "bytes", - "lightyear_connection", - "lightyear_core", - "lightyear_link", - "lightyear_serde", - "lightyear_transport", - "lightyear_utils", - "serde", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_netcode" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c5bd6c609388aa9a48282846bc4b67ae0cfef59592914638fba764b75186f" -dependencies = [ - "aeronet_io", - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_time", - "bytes", - "chacha20poly1305", - "lightyear_connection", - "lightyear_core", - "lightyear_link", - "lightyear_serde", - "lightyear_transport", - "lightyear_utils", - "no_std_io2", - "rand 0.9.1", - "thiserror 2.0.12", - "tracing", - "web-time", -] - -[[package]] -name = "lightyear_prediction" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c917f6caa9be74561043635e532693235c3b9ab820f1444bca7961c2a38751" -dependencies = [ - "bevy_app", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "bevy_math", - "bevy_platform", - "bevy_reflect", - "bevy_time", - "bevy_utils", - "lightyear_connection", - "lightyear_core", - "lightyear_frame_interpolation", - "lightyear_interpolation", - "lightyear_messages", - "lightyear_replication", - "lightyear_sync", - "lightyear_utils", - "parking_lot", - "seahash", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_replication" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08b6e6d159226d84fa2662be58553f85d18baf4f66e2008581a3e1db339c2d36" -dependencies = [ - "avian2d", - "avian3d", - "bevy_app", - "bevy_derive", - "bevy_ecs", - "bevy_math", - "bevy_platform", - "bevy_ptr", - "bevy_reflect", - "bevy_time", - "bevy_transform", - "bevy_utils", - "bytes", - "dashmap", - "indexmap", - "lightyear_connection", - "lightyear_core", - "lightyear_link", - "lightyear_messages", - "lightyear_serde", - "lightyear_sync", - "lightyear_transport", - "lightyear_utils", - "seahash", - "serde", - "smallvec", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_serde" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "739083df47ce4476eb14f9c2acbf8ea38a0fe34b3760fcb929b47aca8d1cf3df" -dependencies = [ - "bevy_derive", - "bevy_ecs", - "bevy_platform", - "bevy_ptr", - "bevy_reflect", - "bevy_utils", - "bincode", - "bytes", - "no_std_io2", - "serde", - "thiserror 2.0.12", - "tracing", - "variadics_please", -] - -[[package]] -name = "lightyear_steam" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a967f6ac1ce7faf7c7e4a0be410ae570c9f148c98d1d04081ec6def526c4ffc" -dependencies = [ - "aeronet_io", - "aeronet_steam", - "bevy_app", - "bevy_ecs", - "lightyear_aeronet", - "lightyear_connection", - "lightyear_core", - "lightyear_link", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_sync" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a344b3169a7013500794647200cad15b9e59f4bc98a231525b4afad47e905450" -dependencies = [ - "bevy_app", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "bevy_reflect", - "bevy_time", - "bevy_utils", - "lightyear_connection", - "lightyear_core", - "lightyear_link", - "lightyear_messages", - "lightyear_serde", - "lightyear_transport", - "lightyear_utils", - "serde", - "tracing", -] - -[[package]] -name = "lightyear_transport" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3712946802f153d01008b35ef9bdb7c9fa8a0bdae67803b617fac464679b84" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_time", - "bevy_utils", - "bytes", - "crossbeam-channel", - "enum_dispatch", - "governor", - "indexmap", - "lightyear_connection", - "lightyear_core", - "lightyear_link", - "lightyear_serde", - "lightyear_utils", - "nonzero_ext", - "ringbuffer", - "serde", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_udp" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b0a5c3e555da7439a704c8812c811f764f53aa455329bdb8da7ab933fd8aa0" -dependencies = [ - "aeronet_io", - "bevy_app", - "bevy_ecs", - "bevy_platform", - "bytes", - "lightyear_core", - "lightyear_link", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_ui" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bf5b6948915eb29695a477dcbfe30f3a185a5f2e368a10828ef94c2dbbab5e5" -dependencies = [ - "bevy_app", - "bevy_color", - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_text", - "bevy_time", - "bevy_ui", - "bevy_utils", - "metrics", - "metrics-util", - "tracing", -] - -[[package]] -name = "lightyear_utils" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1888ca0e182f1e2eb89eb621d3c998f5e2cd2b178dcafc12b25198affcca2167" -dependencies = [ - "bevy_ecs", - "bevy_platform", - "bevy_reflect", - "bevy_utils", - "hashbrown 0.16.0", - "paste", - "seahash", - "tracing", -] - -[[package]] -name = "lightyear_websocket" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cba5df5880378cedef65a97f62869975726b254ab869678ca3e50f3afbfc708" -dependencies = [ - "aeronet_io", - "aeronet_websocket", - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "lightyear_aeronet", - "lightyear_link", - "thiserror 2.0.12", - "tracing", -] - -[[package]] -name = "lightyear_webtransport" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fae258b142ac20c0da066eeeb7d7459addd26ac3cf213c804e3a5018dddcb3a" -dependencies = [ - "aeronet_io", - "aeronet_webtransport", - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "lightyear_aeronet", - "lightyear_link", - "thiserror 2.0.12", - "tracing", -] - [[package]] name = "linux-raw-sys" version = "0.4.15" @@ -5232,12 +4084,6 @@ version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" -[[package]] -name = "lru-slab" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" - [[package]] name = "mach2" version = "0.4.3" @@ -5305,36 +4151,6 @@ dependencies = [ "paste", ] -[[package]] -name = "metrics" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5" -dependencies = [ - "ahash", - "portable-atomic", -] - -[[package]] -name = "metrics-util" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe8db7a05415d0f919ffb905afa37784f71901c9a773188876984b4f769ab986" -dependencies = [ - "aho-corasick", - "crossbeam-epoch", - "crossbeam-utils", - "hashbrown 0.15.4", - "indexmap", - "metrics", - "ordered-float 4.6.0", - "quanta", - "radix_trie", - "rand 0.9.1", - "rand_xoshiro", - "sketches-ddsketch", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -5351,17 +4167,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" -dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", -] - [[package]] name = "naga" version = "26.0.0" @@ -5512,15 +4317,6 @@ dependencies = [ "static_assertions", ] -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - [[package]] name = "nil" version = "0.14.0" @@ -5567,15 +4363,6 @@ dependencies = [ "libc", ] -[[package]] -name = "no_std_io2" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c2b9acd47481ab557a89a5665891be79e43cce8a29ad77aa9419d7be5a7c06a" -dependencies = [ - "memchr", -] - [[package]] name = "nohash-hasher" version = "0.2.0" @@ -5598,12 +4385,6 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" -[[package]] -name = "nonzero_ext" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" - [[package]] name = "normpath" version = "1.5.0" @@ -5714,7 +4495,7 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.3.0", "proc-macro2", "quote", "syn", @@ -6018,15 +4799,6 @@ dependencies = [ "objc2-foundation 0.2.2", ] -[[package]] -name = "object" -version = "0.36.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" -dependencies = [ - "memchr", -] - [[package]] name = "oboe" version = "0.6.1" @@ -6075,15 +4847,6 @@ dependencies = [ "byteorder", ] -[[package]] -name = "oid-registry" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f40cff3dde1b6087cc5d5f5d4d65712f34016a03ed60e9c08dcc392736b5b7" -dependencies = [ - "asn1-rs", -] - [[package]] name = "once_cell" version = "1.21.3" @@ -6096,12 +4859,6 @@ version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" -[[package]] -name = "oneshot" -version = "0.1.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce411919553d3f9fa53a0880544cda985a112117a0444d5ff1e870a893d6ea" - [[package]] name = "opaque-debug" version = "0.3.1" @@ -6119,12 +4876,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "openssl-probe" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" - [[package]] name = "orbclient" version = "0.3.48" @@ -6190,32 +4941,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "parry2d" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f1eacf164abb056951c5fa8e0836c2390f13d0f4c2084c09477112cf37d54b" -dependencies = [ - "approx", - "arrayvec", - "bitflags 2.9.1", - "downcast-rs 2.0.1", - "either", - "ena", - "foldhash 0.2.0", - "hashbrown 0.16.0", - "log", - "nalgebra", - "num-derive", - "num-traits", - "ordered-float 5.1.0", - "simba", - "slab", - "smallvec", - "spade", - "thiserror 2.0.12", -] - [[package]] name = "parry3d" version = "0.25.0" @@ -6289,25 +5014,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" -[[package]] -name = "pem" -version = "3.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38af38e8470ac9dee3ce1bae1af9c1671fffc44ddfd8bd1d0a3445bf349a8ef3" -dependencies = [ - "base64 0.22.1", - "serde", -] - -[[package]] -name = "pem-rfc7468" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" -dependencies = [ - "base64ct", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -6353,12 +5059,6 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - [[package]] name = "piper" version = "0.2.4" @@ -6430,6 +5130,28 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "postcard" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" +dependencies = [ + "cobs", + "postcard-derive", + "serde", +] + +[[package]] +name = "postcard-derive" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0232bd009a197ceec9cc881ba46f727fcd8060a2d8d6a9dde7a69030a6fe2bb" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "potential_utf" version = "0.1.2" @@ -6469,16 +5191,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" -[[package]] -name = "prettyplease" -version = "0.2.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061c1221631e079b26479d25bbf2275bfe5917ae8419cd7e34f13bfc2aa7539a" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "proc-macro-crate" version = "1.3.1" @@ -6541,21 +5253,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "663a8931940a7bf465a672f54ad19864b91d761695f64c18cbe6cb9782d40023" -[[package]] -name = "quanta" -version = "0.12.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ab5a9d756f0d97bdc89019bd2e4ea098cf9cde50ee7564dde6b81ccc8f06c7" -dependencies = [ - "crossbeam-utils", - "libc", - "once_cell", - "raw-cpuid", - "wasi 0.11.1+wasi-snapshot-preview1", - "web-sys", - "winapi", -] - [[package]] name = "quick-xml" version = "0.37.5" @@ -6565,61 +5262,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "quinn" -version = "0.11.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "626214629cda6781b6dc1d316ba307189c85ba657213ce642d9c77670f8202c8" -dependencies = [ - "bytes", - "cfg_aliases", - "pin-project-lite", - "quinn-proto", - "quinn-udp", - "rustc-hash 2.1.1", - "rustls", - "socket2", - "thiserror 2.0.12", - "tokio", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-proto" -version = "0.11.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49df843a9161c85bb8aae55f101bc0bac8bcafd637a620d9122fd7e0b2f7422e" -dependencies = [ - "bytes", - "getrandom 0.3.3", - "lru-slab", - "rand 0.9.1", - "ring", - "rustc-hash 2.1.1", - "rustls", - "rustls-pki-types", - "slab", - "thiserror 2.0.12", - "tinyvec", - "tracing", - "web-time", -] - -[[package]] -name = "quinn-udp" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970" -dependencies = [ - "cfg_aliases", - "libc", - "once_cell", - "socket2", - "tracing", - "windows-sys 0.59.0", -] - [[package]] name = "quote" version = "1.0.40" @@ -6635,16 +5277,6 @@ version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", -] - [[package]] name = "radsort" version = "0.1.1" @@ -6720,15 +5352,6 @@ dependencies = [ "rand 0.9.1", ] -[[package]] -name = "rand_xoshiro" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f703f4665700daf5512dcca5f43afa6af89f09db47fb56be587f80636bda2d41" -dependencies = [ - "rand_core 0.9.3", -] - [[package]] name = "range-alloc" version = "0.1.4" @@ -6741,15 +5364,6 @@ version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f60fcc7d6849342eff22c4350c8b9a989ee8ceabc4b481253e8946b9fe83d684" -[[package]] -name = "raw-cpuid" -version = "11.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df7ab838ed27997ba19a4664507e6f82b41fe6e20be42929332156e5e85146" -dependencies = [ - "bitflags 2.9.1", -] - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -6782,19 +5396,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "rcgen" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75e669e5202259b5314d1ea5397316ad400819437857b90861765f24c4cf80a2" -dependencies = [ - "pem", - "ring", - "rustls-pki-types", - "time", - "yasna", -] - [[package]] name = "read-fonts" version = "0.29.3" @@ -6865,24 +5466,38 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" [[package]] -name = "ring" -version = "0.17.14" +name = "renet" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +checksum = "2c3784a36baf3db87eb738af59a2d57cd54b2d09088499eaab300440f81fd41a" dependencies = [ - "cc", - "cfg-if", - "getrandom 0.2.16", - "libc", - "untrusted", - "windows-sys 0.52.0", + "bevy_ecs", + "bytes", + "log", + "octets", ] [[package]] -name = "ringbuffer" -version = "0.16.0" +name = "renet_netcode" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b0b88a509053cbfd535726dcaaceee631313cef981266119527a1d110f6d2b" +checksum = "7d73ffa79c2081fe93286acac186a20d49657b93b8cfa4e0e8b79b1f3ee81241" +dependencies = [ + "bevy_ecs", + "log", + "renet", + "renetcode", +] + +[[package]] +name = "renetcode" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "118d456f815f7fd5bd12713a9e69a0b0f8b45806bd515e05bb60146f1867310d" +dependencies = [ + "chacha20poly1305", + "log", +] [[package]] name = "robust" @@ -6955,12 +5570,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "rustc-demangle" -version = "0.1.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -6973,15 +5582,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rusticata-macros" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faf0c4a6ece9950b9abdb62b1cfcf2a68b3b67a10ba445b3bb85be2a293d0632" -dependencies = [ - "nom", -] - [[package]] name = "rustix" version = "0.38.44" @@ -7008,65 +5608,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "rustls" -version = "0.23.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2491382039b29b9b11ff08b76ff6c97cf287671dbb74f0be44bda389fffe9bd1" -dependencies = [ - "aws-lc-rs", - "log", - "once_cell", - "ring", - "rustls-pki-types", - "rustls-webpki", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" -dependencies = [ - "openssl-probe", - "rustls-pki-types", - "schannel", - "security-framework", -] - -[[package]] -name = "rustls-pemfile" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" -dependencies = [ - "rustls-pki-types", -] - -[[package]] -name = "rustls-pki-types" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" -dependencies = [ - "web-time", - "zeroize", -] - -[[package]] -name = "rustls-webpki" -version = "0.103.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc" -dependencies = [ - "aws-lc-rs", - "ring", - "rustls-pki-types", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.21" @@ -7123,15 +5664,6 @@ dependencies = [ "winapi-util", ] -[[package]] -name = "schannel" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "scoped-tls" version = "1.0.1" @@ -7157,35 +5689,6 @@ dependencies = [ "tiny-skia", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - -[[package]] -name = "security-framework" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" -dependencies = [ - "bitflags 2.9.1", - "core-foundation 0.10.1", - "core-foundation-sys", - "libc", - "security-framework-sys", -] - -[[package]] -name = "security-framework-sys" -version = "2.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" -dependencies = [ - "core-foundation-sys", - "libc", -] - [[package]] name = "self_cell" version = "1.2.0" @@ -7237,16 +5740,6 @@ dependencies = [ "syn", ] -[[package]] -name = "serde_flexitos" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3323d093d7597660758b742dd7a1525539613f6182b306a4e1dd6e01a89bada9" -dependencies = [ - "erased-serde", - "serde", -] - [[package]] name = "serde_json" version = "1.0.140" @@ -7276,12 +5769,13 @@ dependencies = [ "bevy", "bevy-steamworks", "bevy_common_assets", + "bevy_replicon", + "bevy_replicon_renet", "bevy_sprite3d", "bevy_trenchbroom", "bevy_trenchbroom_avian", "clap", "happy_feet", - "lightyear", "rand 0.8.5", "ron 0.8.1", "serde", @@ -7289,28 +5783,6 @@ dependencies = [ "steamworks", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -7332,11 +5804,10 @@ dependencies = [ "bevy_ballistic", "bevy_common_assets", "bevy_debug_log", + "bevy_replicon", "bevy_sprite3d", "bevy_trenchbroom", "happy_feet", - "lightyear", - "lightyear_serde", "nil 0.14.0", "rand 0.8.5", "ron 0.8.1", @@ -7369,12 +5840,6 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" -[[package]] -name = "sketches-ddsketch" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e9a774a6c28142ac54bb25d25562e6bcf957493a184f15ad4eebccb23e410a" - [[package]] name = "skrifa" version = "0.31.3" @@ -7454,16 +5919,6 @@ dependencies = [ "serde", ] -[[package]] -name = "socket2" -version = "0.5.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" -dependencies = [ - "libc", - "windows-sys 0.52.0", -] - [[package]] name = "spade" version = "2.14.0" @@ -7486,15 +5941,6 @@ dependencies = [ "portable-atomic", ] -[[package]] -name = "spinning_top" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d96d2d1d716fb500937168cc09353ffdc7a012be8475ac7308e1bdf0e3923300" -dependencies = [ - "lock_api", -] - [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -7504,17 +5950,6 @@ dependencies = [ "bitflags 2.9.1", ] -[[package]] -name = "spki" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" -dependencies = [ - "base64ct", - "der", - "sha2", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -7625,12 +6060,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" - [[package]] name = "synstructure" version = "0.13.2" @@ -7830,82 +6259,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" -[[package]] -name = "tls_codec" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0de2e01245e2bb89d6f05801c564fa27624dbd7b1846859876c7dad82e90bf6b" -dependencies = [ - "tls_codec_derive", - "zeroize", -] - -[[package]] -name = "tls_codec_derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio" -version = "1.46.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc3a2344dafbe23a245241fe8b09735b521110d30fcefbbd5feb1797ca35d17" -dependencies = [ - "backtrace", - "bytes", - "io-uring", - "libc", - "mio", - "pin-project-lite", - "slab", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", -] - -[[package]] -name = "tokio-macros" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-rustls" -version = "0.26.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" -dependencies = [ - "rustls", - "tokio", -] - -[[package]] -name = "tokio-tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" -dependencies = [ - "futures-util", - "log", - "rustls", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", - "tungstenite", -] - [[package]] name = "toml" version = "0.9.6" @@ -8087,25 +6440,6 @@ version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" -[[package]] -name = "tungstenite" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13" -dependencies = [ - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.9.1", - "rustls", - "rustls-pki-types", - "sha1", - "thiserror 2.0.12", - "utf-8", -] - [[package]] name = "twox-hash" version = "2.1.1" @@ -8194,18 +6528,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "untrusted" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" - -[[package]] -name = "unty" -version = "0.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" - [[package]] name = "url" version = "2.5.4" @@ -8217,12 +6539,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -8528,31 +6844,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-sys-async-io" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65a1ea96a932ec2252276bc517eb4fccaebc0ecfea2faa49e242de769d188409" -dependencies = [ - "js-sys", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "web-sys-stream-utils" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90a913a6d558dbf153010d8add2f27bf5964427aa395299b57a7680a5e971cc7" -dependencies = [ - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "web-time" version = "1.1.0" @@ -8563,19 +6854,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "web-wt-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be7bc7d2d53ad808ff3b3e967391ec3734932d8119320dfd96b13d89327dfc9" -dependencies = [ - "js-sys", - "paste", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - [[package]] name = "webbrowser" version = "1.0.5" @@ -9369,43 +7647,6 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" -[[package]] -name = "wtransport" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e5e745c8789c20095c9061d292098d4106660efe2d172efd8ae7a369fe28e3e" -dependencies = [ - "bytes", - "pem", - "quinn", - "rcgen", - "rustls", - "rustls-native-certs", - "rustls-pemfile", - "rustls-pki-types", - "sha2", - "socket2", - "thiserror 2.0.12", - "time", - "tokio", - "tracing", - "url", - "wtransport-proto", - "x509-parser", -] - -[[package]] -name = "wtransport-proto" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a09d89a8dba201c2439d9d5eca55a0faa08909d69da50decdb5ec00be0ac504" -dependencies = [ - "httlib-huffman", - "octets", - "thiserror 2.0.12", - "url", -] - [[package]] name = "x11-dl" version = "2.21.0" @@ -9438,35 +7679,6 @@ version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec107c4503ea0b4a98ef47356329af139c0a4f7750e621cf2973cd3385ebcb3d" -[[package]] -name = "x509-cert" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1301e935010a701ae5f8655edc0ad17c44bad3ac5ce8c39185f75453b720ae94" -dependencies = [ - "const-oid", - "der", - "spki", - "tls_codec", -] - -[[package]] -name = "x509-parser" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569f339c0c402346d4a75a9e39cf8dad310e287eef1ff56d4c68e5067f53460" -dependencies = [ - "asn1-rs", - "data-encoding", - "der-parser", - "lazy_static", - "nom", - "oid-registry", - "rusticata-macros", - "thiserror 2.0.12", - "time", -] - [[package]] name = "xcursor" version = "0.3.10" @@ -9499,48 +7711,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a62ce76d9b56901b19a74f19431b0d8b3bc7ca4ad685a746dfd78ca8f4fc6bda" [[package]] -name = "xwt-core" -version = "0.6.0" +name = "xxhash-rust" +version = "0.8.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "647e17b66bd49bfebe8fe73d327358432f298bb41227600f47fb07fa4f7c1eef" - -[[package]] -name = "xwt-web" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f80997b90d89451537f2866130f52b1e4be4d29cfadf9183081b24542f1abdf0" -dependencies = [ - "js-sys", - "thiserror 2.0.12", - "tokio", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "web-sys-async-io", - "web-sys-stream-utils", - "web-wt-sys", - "xwt-core", -] - -[[package]] -name = "xwt-wtransport" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8623c2ddff8a7321feb12b484094be0341a9203dc46eb4060fc2e852841d8786" -dependencies = [ - "thiserror 2.0.12", - "wtransport", - "xwt-core", -] - -[[package]] -name = "yasna" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" -dependencies = [ - "time", -] +checksum = "fdd20c5420375476fbd4394763288da7eb0cc0b8c11deed431a91562af7335d3" [[package]] name = "yazi" @@ -9624,20 +7798,6 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] [[package]] name = "zerotrie" diff --git a/Cargo.toml b/Cargo.toml index 628ba16..6e0d28c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -55,26 +55,17 @@ bevy_asset_loader = "=0.24.0-rc.1" bevy_ballistic = { git = "https://github.com/rustunit/bevy_ballistic.git", rev = "b08ffec" } bevy_common_assets = { version = "0.14.0", features = ["ron"] } bevy_debug_log = { git = "https://github.com/rustunit/bevy_debug_log.git", rev = "86051a0" } +bevy_replicon = "0.36.1" +bevy_replicon_renet = "0.12.0" bevy_sprite3d = "7.0.0" bevy_trenchbroom = { version = "0.10", default-features = false, features = [ "physics-integration", ] } bevy_trenchbroom_avian = "0.10" +clap = { version = "=4.5.47", features = ["derive"] } happy_feet = { git = "https://github.com/PROMETHIA-27/happy_feet.git", rev = "48a96cc", features = [ "serde", ] } -lightyear = { version = "0.25", default-features = false, features = [ - "avian3d", - "input_native", - "interpolation", - "netcode", - "prediction", - "replication", - "std", - "udp", - "frame_interpolation", -] } -lightyear_serde = "0.25" nil = "0.14.0" rand = "=0.8.5" ron = "0.8" diff --git a/crates/client/Cargo.toml b/crates/client/Cargo.toml index 84c9f61..32187fa 100644 --- a/crates/client/Cargo.toml +++ b/crates/client/Cargo.toml @@ -21,11 +21,13 @@ bevy_asset_loader = { workspace = true } bevy_ballistic = { workspace = true } bevy_common_assets = { workspace = true } bevy_debug_log = { workspace = true } +bevy_replicon = { workspace = true, features = ["client"] } +bevy_replicon_renet = { workspace = true, features = ["client"] } bevy_sprite3d = { workspace = true } bevy_trenchbroom = { workspace = true, features = ["client"] } bevy_trenchbroom_avian = { workspace = true } +clap = { workspace = true } happy_feet = { workspace = true } -lightyear = { workspace = true } nil = { workspace = true } rand = { workspace = true } ron = { workspace = true } diff --git a/crates/client/src/client.rs b/crates/client/src/client.rs index d393038..4739754 100644 --- a/crates/client/src/client.rs +++ b/crates/client/src/client.rs @@ -1,48 +1,50 @@ +use crate::config::ClientConfig; use avian3d::prelude::{ Collider, ColliderAabb, ColliderDensity, ColliderMarker, ColliderOf, ColliderTransform, - CollisionEventsEnabled, CollisionLayers, Position, Rotation, Sensor, + CollisionEventsEnabled, CollisionLayers, Sensor, }; use bevy::{ ecs::bundle::BundleFromComponents, platform::cell::SyncCell, prelude::*, scene::SceneInstance, }; -use bevy_trenchbroom::geometry::Brushes; -use lightyear::{ - frame_interpolation::FrameInterpolate, - link::{LinkConditioner, prelude::*}, - netcode::Key, - prelude::{ - client::{Input, InputDelayConfig, NetcodeConfig}, - input::native::InputMarker, - *, - }, +use bevy_replicon::{ + RepliconPlugins, + client::{ClientSystems, confirm_history::ConfirmHistory}, + prelude::{ClientState, ClientTriggerExt, RepliconChannels}, }; +use bevy_replicon_renet::{ + RenetChannelsExt, RepliconRenetPlugins, + netcode::{ClientAuthentication, NetcodeClientTransport, NetcodeError}, + renet::{ConnectionConfig, RenetClient}, +}; +use bevy_trenchbroom::geometry::Brushes; use nil::prelude::Mutex; use shared::{ - GameState, - control::ControlState, - global_observer, - player::Player, + GameState, global_observer, protocol::{ - ClientEnteredPlaying, TbMapEntityId, TbMapEntityMapping, - channels::UnorderedReliableChannel, messages::DespawnTbMapEntity, + ClientEnteredPlaying, TbMapEntityId, TbMapEntityMapping, messages::DespawnTbMapEntity, }, - tb_entities::{Platform, PlatformTarget}, + tb_entities::{Movable, Platform, PlatformTarget}, }; use std::{ env::current_exe, fs::File, io::{BufRead, BufReader}, - net::{IpAddr, Ipv4Addr, SocketAddr}, + net::{Ipv4Addr, UdpSocket}, process::Stdio, sync::{LazyLock, mpsc}, - time::Duration, + time::SystemTime, }; /// Cache of server processes to be cleared at process exit static SERVER_PROCESSES: LazyLock>> = LazyLock::new(Mutex::default); pub fn plugin(app: &mut App) { - app.add_systems(OnEnter(GameState::Connecting), attempt_connection); + app.add_plugins((RepliconPlugins, RepliconRenetPlugins)); + + app.add_systems( + OnEnter(GameState::Connecting), + connect_to_server.run_if(|config: Res| config.server.is_some()), + ); app.add_systems( Update, parse_local_server_stdout.run_if(resource_exists::), @@ -53,15 +55,31 @@ pub fn plugin(app: &mut App) { PreUpdate, (migrate_remote_entities, ApplyDeferred) .chain() - .after(ReplicationSystems::Receive), + .after(ClientSystems::Receive), + ); + + // TODO: migrate this to connect_on_local_server_started + app.add_systems(OnEnter(ClientState::Connected), on_connected_state); + app.add_systems(OnExit(ClientState::Connected), on_disconnect); + app.add_systems( + OnEnter(GameState::Connecting), + host_local_server.run_if(|config: Res| config.server.is_none()), ); - global_observer!(app, on_connecting); - global_observer!(app, on_connection_failed); - global_observer!(app, on_connection_succeeded); - global_observer!(app, temp_give_player_marker); global_observer!(app, connect_on_local_server_started); - global_observer!(app, add_visual_interpolation_components); +} + +// +// Client logic +// + +fn on_connected_state(mut commands: Commands, mut game_state: ResMut>) { + commands.client_trigger(ClientEnteredPlaying::default()); + game_state.set(GameState::Playing); +} + +fn on_disconnect() { + info!("disconnected from the server"); } fn close_server_processes(mut app_exit: MessageReader) { @@ -75,142 +93,88 @@ fn close_server_processes(mut app_exit: MessageReader) { } } -fn attempt_connection(mut commands: Commands) -> Result { - let mut args = std::env::args(); - let client_port = loop { - match args.next().as_deref() { - Some("--port") => { - break args.next().unwrap().parse::().unwrap(); - } - Some(_) => (), - None => break 25564, - } - }; +// +// Renet +// - let client_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), client_port); - let server_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)), 25565); - let auth = Authentication::Manual { - server_addr, - client_id: client_port as u64, - private_key: Key::default(), - protocol_id: 0, - }; - let sync_config = SyncConfig { - jitter_multiple: 5, - jitter_margin: Duration::from_millis(15), - ..default() - }; - let conditioner = LinkConditioner::new(LinkConditionerConfig { - incoming_latency: Duration::from_millis(10), - incoming_jitter: Duration::from_millis(0), - incoming_loss: 0.0, +fn connect_to_server( + mut commands: Commands, + config: Res, + channels: Res, +) -> Result { + let server_channels_config = channels.server_configs(); + let client_channels_config = channels.client_configs(); + + let client = RenetClient::new(ConnectionConfig { + server_channels_config, + client_channels_config, + ..Default::default() }); - commands - .spawn(( - Name::from("Client"), - Client::default(), - Link::new(Some(conditioner)), - LocalAddr(client_addr), - PeerAddr(server_addr), - ReplicationReceiver::default(), - client::NetcodeClient::new( - auth, - NetcodeConfig { - client_timeout_secs: 3, - ..default() - }, - )?, - UdpIo::default(), - PredictionManager::default(), - InputTimeline(Timeline::from(Input::new( - sync_config, - InputDelayConfig::balanced(), - ))), - )) - .trigger(|entity| Connect { entity }); + + commands.insert_resource(client); + commands.insert_resource(client_transport(&config)?); Ok(()) } -fn on_connection_succeeded( - _trigger: On, - state: Res>, - mut change_state: ResMut>, - mut sender: Single<&mut EventSender>, -) { - if *state == GameState::Connecting { - change_state.set(GameState::Playing); - sender.trigger::(ClientEnteredPlaying); - } -} +fn client_transport(config: &ClientConfig) -> Result { + let current_time = SystemTime::now() + .duration_since(SystemTime::UNIX_EPOCH) + .unwrap(); + let client_id = current_time.as_millis() as u64; + let socket = UdpSocket::bind((Ipv4Addr::UNSPECIFIED, config.port))?; + let server_addr = config + .server + .flatten() + .unwrap_or_else(|| "127.0.0.1:31111".parse().unwrap()); + let authentication = ClientAuthentication::Unsecure { + client_id, + protocol_id: 0, + server_addr, + user_data: None, + }; -/// A client starts `Disconnected`, so in order to tell if it *actually* failed to connect/disconnected -/// vs. simply having been created, we need some extra state. -#[derive(Component)] -struct ClientActive; - -fn on_connecting(trigger: On, mut commands: Commands) { - commands.entity(trigger.event().entity).insert(ClientActive); + info!("attempting connection to {server_addr}"); + NetcodeClientTransport::new(current_time, authentication, socket) } #[derive(Resource)] struct LocalServerStdout(SyncCell>); -fn on_connection_failed( - trigger: On, - disconnected: Query<&Disconnected>, - mut commands: Commands, - client_active: Query<&ClientActive>, - mut opened_server: Local, -) -> Result { - let disconnected = disconnected.get(trigger.event().entity).unwrap(); - if *opened_server { - panic!( - "failed to connect to local server: {:?}", - disconnected.reason - ); - } +fn host_local_server(mut commands: Commands) -> Result { + // the server executable is assumed to be adjacent to the client executable + let mut exe_path = current_exe().expect("failed to get path of client executable"); + exe_path.set_file_name("server"); + let server_log_file = File::create("server.log")?; + let mut server_process = std::process::Command::new(exe_path) + .args(["--timeout", "60", "--close-on-client-disconnect"]) + .env("NO_COLOR", "1") + .stdin(Stdio::null()) + .stdout(Stdio::piped()) + .stderr(server_log_file) + .spawn() + .expect("failed to start server"); + let server_stdout = server_process.stdout.take().unwrap(); + SERVER_PROCESSES.lock().push(server_process); - let client = trigger.event().entity; - if client_active.contains(client) { - commands.entity(client).remove::(); + let (tx, rx) = std::sync::mpsc::channel(); - // the server executable is assumed to be adjacent to the client executable - let mut exe_path = current_exe().expect("failed to get path of client executable"); - exe_path.set_file_name("server"); - let server_log_file = File::create("server.log")?; - let mut server_process = std::process::Command::new(exe_path) - .args(["--timeout", "60", "--close-on-client-disconnect"]) - .env("NO_COLOR", "1") - .stdin(Stdio::null()) - .stdout(Stdio::piped()) - .stderr(server_log_file) - .spawn() - .expect("failed to start server"); - let server_stdout = server_process.stdout.take().unwrap(); - SERVER_PROCESSES.lock().push(server_process); + let stdout = BufReader::new(server_stdout).lines(); - let (tx, rx) = std::sync::mpsc::channel(); - - let stdout = BufReader::new(server_stdout).lines(); - - std::thread::spawn(move || { - for line in stdout { - match line { - Ok(line) => { - tx.send(line).unwrap(); - } - Err(error) => { - error!("error reading local server stdout: `{error}`"); - } + std::thread::spawn(move || { + for line in stdout { + match line { + Ok(line) => { + tx.send(line).unwrap(); + } + Err(error) => { + error!("error reading local server stdout: `{error}`"); } } - }); + } + }); - commands.insert_resource(LocalServerStdout(SyncCell::new(rx))); - - *opened_server = true; - } + commands.insert_resource(LocalServerStdout(SyncCell::new(rx))); Ok(()) } @@ -231,27 +195,22 @@ fn parse_local_server_stdout(mut commands: Commands, mut stdout: ResMut, + _: On, + commands: Commands, state: Res>, - mut commands: Commands, - client: Single>, -) { + channels: Res, + config: Res, +) -> Result<()> { if *state == GameState::Connecting { - commands - .entity(*client) - .trigger(|entity| Connect { entity }); + connect_to_server(commands, config, channels)?; } -} -fn temp_give_player_marker(trigger: On, mut commands: Commands) { - commands - .entity(trigger.event().entity) - .insert(InputMarker::::default()); + Ok(()) } #[allow(clippy::type_complexity)] fn migrate_remote_entities( - query: Query<(Entity, &TbMapEntityId), (Added, With)>, + query: Query<(Entity, &TbMapEntityId), (Added, With)>, children: Query<&Children>, mut commands: Commands, mut mapping: ResMut, @@ -286,6 +245,7 @@ fn received_remote_map_entity( move_component::(commands, clientside, serverside); move_component::(commands, clientside, serverside); move_component::(commands, clientside, serverside); + move_component::(commands, clientside, serverside); move_component::(commands, clientside, serverside); move_component::(commands, clientside, serverside); move_component::(commands, clientside, serverside); @@ -316,37 +276,16 @@ fn move_component( fn despawn_absent_map_entities( mut commands: Commands, - mut messages: Query<&mut MessageReceiver>, + mut messages: MessageReader, mut map: ResMut, ) { - for mut recv in messages.iter_mut() { - for msg in recv.receive() { - // the server may double-send DespawnTbMapEntity for a given ID, so ignore it if the entity - // was already despawned. - let Some(entity) = map.0.remove(&msg.0) else { - continue; - }; + for msg in messages.read() { + // the server may double-send DespawnTbMapEntity for a given ID, so ignore it if the entity + // was already despawned. + let Some(entity) = map.0.remove(&msg.0) else { + continue; + }; - commands.entity(entity).despawn(); - } + commands.entity(entity).despawn(); } } - -fn add_visual_interpolation_components(trigger: On, mut commands: Commands) { - commands.entity(trigger.entity).insert(( - FrameInterpolate:: { - // We must trigger change detection on visual interpolation - // to make sure that child entities (sprites, meshes, text) - // are also interpolated - trigger_change_detection: true, - ..default() - }, - FrameInterpolate:: { - // We must trigger change detection on visual interpolation - // to make sure that child entities (sprites, meshes, text) - // are also interpolated - trigger_change_detection: true, - ..default() - }, - )); -} diff --git a/crates/client/src/config.rs b/crates/client/src/config.rs new file mode 100644 index 0000000..27585db --- /dev/null +++ b/crates/client/src/config.rs @@ -0,0 +1,23 @@ +use bevy::prelude::*; +use clap::Parser; +use std::net::SocketAddr; + +pub fn plugin(app: &mut App) { + let config = ClientConfig::parse(); + + app.insert_resource(config); +} + +#[derive(Resource, Parser, Debug)] +#[command(version, about, long_about = None)] +pub struct ClientConfig { + /// The port to use when connecting. + #[arg(long, default_value_t = 0)] + pub port: u16, + /// The IP/port to connect to. + /// If `None`, host a local server. + /// If Some(None), connect to the default server (`127.0.0.1:31111`) + /// Otherwise, connect to the given server + #[arg(long)] + pub server: Option>, +} diff --git a/crates/client/src/control/controller_flying.rs b/crates/client/src/control/controller_flying.rs index c15a0de..dd91d94 100644 --- a/crates/client/src/control/controller_flying.rs +++ b/crates/client/src/control/controller_flying.rs @@ -1,5 +1,4 @@ use bevy::prelude::*; -use lightyear::prelude::input::native::ActionState; use shared::{ GameState, control::{ControlState, ControllerSet, LookDirMovement}, @@ -18,13 +17,11 @@ pub fn plugin(app: &mut App) { } fn rotate_rig( - actions: Query<&ActionState>, + controls: Res, look_dir: Res, - mut player: Query<(&mut Transform, &ChildOf), With>, + mut player: Query<&mut Transform, With>, ) { - for (mut rig_transform, child_of) in player.iter_mut() { - let controls = actions.get(child_of.parent()).unwrap(); - + for mut rig_transform in player.iter_mut() { if controls.view_mode { continue; } diff --git a/crates/client/src/control/controls.rs b/crates/client/src/control/controls.rs index 1419dde..54c2ca0 100644 --- a/crates/client/src/control/controls.rs +++ b/crates/client/src/control/controls.rs @@ -8,10 +8,6 @@ use bevy::{ }, prelude::*, }; -use lightyear::{ - input::client::InputSystems, - prelude::input::native::{ActionState, InputMarker}, -}; use shared::{ control::{ControllerSet, LookDirMovement}, player::PlayerBodyMesh, @@ -27,7 +23,7 @@ pub fn plugin(app: &mut App) { app.add_systems(PreUpdate, (cache_keyboard_state, cache_gamepad_state)); app.add_systems( - FixedPreUpdate, + PreUpdate, ( reset_lookdir, gamepad_controls, @@ -39,18 +35,14 @@ pub fn plugin(app: &mut App) { get_lookdir, clear_keyboard_just, clear_gamepad_just, + send_inputs, ) .chain() .in_set(ControllerSet::CollectInputs) - .before(InputSystems::WriteClientInputs) .run_if( in_state(GameState::Playing) .and(resource_exists_and_equals(CharacterInputEnabled::On)), ), - ) - .add_systems( - FixedPreUpdate, - buffer_inputs.in_set(InputSystems::WriteClientInputs), ); app.add_systems( @@ -61,11 +53,8 @@ pub fn plugin(app: &mut App) { /// Write inputs from combined keyboard/gamepad state into the networked input buffer /// for the local player. -fn buffer_inputs( - mut player: Single<&mut ActionState, With>>, - controls: Res, -) { - player.0 = *controls; +fn send_inputs(mut writer: MessageWriter, controls: Res) { + writer.write(*controls); } fn reset_lookdir(mut look_dir: ResMut) { @@ -177,7 +166,7 @@ fn combine_controls(controls: Res, mut combined_controls: ResMut>>, ) { controls.look_dir = if let Some(ref rig_transform) = rig_transform { - rig_transform.forward() + rig_transform.forward().as_vec3() } else { - Dir3::NEG_Z + Vec3::NEG_Z }; } @@ -252,7 +241,7 @@ fn gamepad_controls( let state = ControlState { move_dir, - look_dir: Dir3::NEG_Z, + look_dir: Vec3::NEG_Z, jump: gamepad.pressed(GamepadButton::South), view_mode: gamepad.pressed(GamepadButton::LeftTrigger2), trigger: gamepad.pressed(GamepadButton::RightTrigger2), diff --git a/crates/client/src/control/mod.rs b/crates/client/src/control/mod.rs index b7349b1..4712243 100644 --- a/crates/client/src/control/mod.rs +++ b/crates/client/src/control/mod.rs @@ -1,5 +1,6 @@ use crate::GameState; use bevy::prelude::*; +use bevy_replicon::client::ClientSystems; use shared::control::{ControlState, ControllerSet}; mod controller_flying; @@ -23,7 +24,9 @@ pub fn plugin(app: &mut App) { app.add_plugins((controller_flying::plugin, controls::plugin)); app.configure_sets( - FixedPreUpdate, - ControllerSet::CollectInputs.run_if(in_state(GameState::Playing)), + PreUpdate, + ControllerSet::CollectInputs + .before(ClientSystems::Receive) + .run_if(in_state(GameState::Playing)), ); } diff --git a/crates/client/src/main.rs b/crates/client/src/main.rs index cd11d60..46b84e1 100644 --- a/crates/client/src/main.rs +++ b/crates/client/src/main.rs @@ -1,5 +1,6 @@ mod backpack; mod client; +mod config; mod control; mod debug; mod enemy; @@ -22,13 +23,8 @@ use bevy_trenchbroom::prelude::*; use bevy_trenchbroom_avian::AvianPhysicsBackend; use camera::MainCamera; use heads_database::HeadDatabaseAsset; -use lightyear::{ - avian3d::plugin::LightyearAvianPlugin, frame_interpolation::FrameInterpolationPlugin, - prelude::client::ClientPlugins, -}; use loading_assets::AudioAssets; use shared::*; -use std::time::Duration; fn main() { let mut app = App::new(); @@ -68,25 +64,7 @@ fn main() { bevy_debug_log::LogViewerPlugin::default() .auto_open_threshold(bevy::log::tracing::level_filters::LevelFilter::OFF), ); - app.add_plugins( - PhysicsPlugins::default() - .build() - // TODO: This plugin is *not* disabled on the server. This is to solve a bug related to collider transform inheritance. See the - // LightyearAvianPlugin below. - // Periwink is looking into it at the moment. This **must** be disabled on the client, or positions break for NPCs and some other things. - .disable::() - // FrameInterpolation handles interpolating Position and Rotation - .disable::(), - ); - // TODO: This plugin is *not* inserted on the server. This is to solve a bug related to collider transform inheritance. See the - // `.disable::()` above. - // Periwink is looking into it at the moment. This **must** be inserted on the client, or positions break for NPCs and some other things. - app.add_plugins(LightyearAvianPlugin::default()); - app.add_plugins(FrameInterpolationPlugin::::default()); - app.add_plugins(FrameInterpolationPlugin::::default()); - app.add_plugins(ClientPlugins { - tick_duration: Duration::from_secs_f64(1.0 / 60.0), - }); + app.add_plugins(PhysicsPlugins::default()); app.add_plugins(Sprite3dPlugin); app.add_plugins(TrenchBroomPlugins( TrenchBroomConfig::new("hedz") @@ -116,7 +94,6 @@ fn main() { app.add_plugins(shared::player::plugin); app.add_plugins(shared::gates::plugin); app.add_plugins(shared::platforms::plugin); - app.add_plugins(shared::protocol::plugin); app.add_plugins(shared::movables::plugin); app.add_plugins(shared::utils::billboards::plugin); app.add_plugins(shared::aim::plugin); @@ -140,10 +117,16 @@ fn main() { app.add_plugins(shared::utils::trail::plugin); app.add_plugins(shared::utils::auto_rotate::plugin); app.add_plugins(shared::tb_entities::plugin); + app.add_plugins(shared::tick::plugin); app.add_plugins(shared::utils::explosions::plugin); - app.add_plugins(backpack::plugin); + // Networking + // The client/server plugin must go before the protocol, or else `ProtocolHasher` will not be available. app.add_plugins(client::plugin); + app.add_plugins(shared::protocol::plugin); + + app.add_plugins(backpack::plugin); + app.add_plugins(config::plugin); app.add_plugins(control::plugin); app.add_plugins(debug::plugin); app.add_plugins(enemy::plugin); diff --git a/crates/client/src/player.rs b/crates/client/src/player.rs index 8cf518d..29b8f34 100644 --- a/crates/client/src/player.rs +++ b/crates/client/src/player.rs @@ -4,14 +4,13 @@ use crate::{ loading_assets::AudioAssets, }; use bevy::prelude::*; -use lightyear::prelude::MessageReceiver; use shared::{ - player::PlayerBodyMesh, + player::{LocalPlayerId, PlayerBodyMesh}, protocol::{PlaySound, PlayerId, events::ClientHeadChanged, messages::AssignClientPlayer}, }; pub fn plugin(app: &mut App) { - app.register_type::(); + app.register_type::(); app.register_type::(); app.init_state::(); @@ -28,35 +27,32 @@ pub fn plugin(app: &mut App) { global_observer!(app, on_update_head_mesh); } -#[derive(Resource, Reflect)] -#[reflect(Resource)] -pub struct ClientPlayerId { - id: u8, -} - fn receive_player_id( mut commands: Commands, - mut recv: Single<&mut MessageReceiver>, + mut client_assignments: MessageReader, mut next: ResMut>, ) { - for AssignClientPlayer(id) in recv.receive() { - commands.insert_resource(ClientPlayerId { id }); + for &AssignClientPlayer(id) in client_assignments.read() { + commands.insert_resource(LocalPlayerId { id }); next.set(PlayerAssignmentState::IdReceived); - info!("player id `{id}` received"); + info!("player id `{}` received", id.id); } } fn match_player_id( mut commands: Commands, players: Query<(Entity, &PlayerId), Changed>, - client: Res, + client: Res, mut next: ResMut>, ) { - for (entity, player) in players.iter() { - if player.id == client.id { + for (entity, player_id) in players.iter() { + if *player_id == client.id { commands.entity(entity).insert(LocalPlayer); next.set(PlayerAssignmentState::Confirmed); - info!("player entity {entity:?} confirmed with id `{}`", player.id); + info!( + "player entity {entity:?} confirmed with id `{}`", + player_id.id + ); break; } } diff --git a/crates/server/Cargo.toml b/crates/server/Cargo.toml index 5fed98a..9ca9e5e 100644 --- a/crates/server/Cargo.toml +++ b/crates/server/Cargo.toml @@ -12,12 +12,13 @@ avian3d = { workspace = true } bevy = { workspace = true, default-features = false } bevy-steamworks = { workspace = true } bevy_common_assets = { workspace = true } +bevy_replicon = { workspace = true, features = ["server"] } +bevy_replicon_renet = { workspace = true, features = ["server"] } bevy_sprite3d = { workspace = true } bevy_trenchbroom = { workspace = true } bevy_trenchbroom_avian = { workspace = true } -clap = { version = "=4.5.47", features = ["derive"] } +clap = { workspace = true } happy_feet = { workspace = true } -lightyear = { workspace = true } rand = { workspace = true } ron = { workspace = true } serde = { workspace = true } diff --git a/crates/server/src/backpack/backpack_ui.rs b/crates/server/src/backpack/backpack_ui.rs index c9cdb1c..7c81f39 100644 --- a/crates/server/src/backpack/backpack_ui.rs +++ b/crates/server/src/backpack/backpack_ui.rs @@ -1,5 +1,5 @@ use bevy::prelude::*; -use lightyear::prelude::input::native::ActionState; +use bevy_replicon::prelude::{ClientState, FromClient, SendMode, ServerTriggerExt, ToClients}; use shared::{ GameState, backpack::{ @@ -7,7 +7,7 @@ use shared::{ backpack_ui::{BackpackUiState, HEAD_SLOTS}, }, control::ControlState, - protocol::PlaySound, + protocol::{ClientToController, PlaySound}, }; pub fn plugin(app: &mut App) { @@ -15,23 +15,34 @@ pub fn plugin(app: &mut App) { FixedUpdate, sync_on_change.run_if(in_state(GameState::Playing)), ); - app.add_systems(FixedUpdate, swap_head_inputs); + app.add_systems( + FixedUpdate, + swap_head_inputs.run_if(in_state(ClientState::Disconnected)), + ); } fn swap_head_inputs( - player: Query<(&ActionState, Ref)>, + backpacks: Query>, + clients: ClientToController, + mut inputs: MessageReader>, mut commands: Commands, mut state: Single<&mut BackpackUiState>, time: Res