From 66a3d71fe1828f95e2d093e895a9390230f8f3a1 Mon Sep 17 00:00:00 2001 From: Mark Moissette Date: Mon, 13 Nov 2023 16:16:31 +0100 Subject: [PATCH] feat(examples): added basic_xpbd_physics example (#45) * feat(examples): added basic_xpbd_physics example * adapted code from rapier physics * updated blend file & exported gltf files * changes & tweaks to cargo files so the examples are scanned as they should be * various minor tweaks --- Cargo.lock | 285 +- Cargo.toml | 20 +- .../bevy_gltf_blueprints/animation/Cargo.toml | 17 +- .../bevy_gltf_blueprints/animation/README.md | 2 +- .../bevy_gltf_blueprints/basic/Cargo.toml | 15 - examples/bevy_gltf_blueprints/basic/README.md | 5 +- .../basic_xpbd_physics/Cargo.lock | 4629 +++++++++++++++++ .../basic_xpbd_physics/Cargo.toml | 13 + .../basic_xpbd_physics/README.md | 15 + .../basic_xpbd_physics/assets/advanced.blend | Bin 0 -> 1288056 bytes .../assets/assets_core.assets.ron | 1 + .../assets/assets_game.assets.ron | 6 + .../assets/models/World.glb | Bin 0 -> 71064 bytes .../assets/models/library/Container.glb | Bin 0 -> 5940 bytes .../assets/models/library/Health_Pickup.glb | Bin 0 -> 5448 bytes .../assets/models/library/MagicTeapot.glb | Bin 0 -> 24028 bytes .../assets/models/library/Pillar.glb | Bin 0 -> 3984 bytes .../assets/models/library/Player.glb | Bin 0 -> 28712 bytes .../models/library/Unused_in_level_test.glb | Bin 0 -> 5552 bytes .../src/assets/assets_core.rs | 5 + .../src/assets/assets_game.rs | 13 + .../basic_xpbd_physics/src/assets/mod.rs | 35 + .../src/core/camera/camera_replace_proxies.rs | 24 + .../src/core/camera/camera_tracking.rs | 58 + .../basic_xpbd_physics/src/core/camera/mod.rs | 24 + .../core/lighting/lighting_replace_proxies.rs | 25 + .../src/core/lighting/mod.rs | 18 + .../basic_xpbd_physics/src/core/mod.rs | 28 + .../src/core/physics/controls.rs | 16 + .../src/core/physics/mod.rs | 29 + .../core/physics/physics_replace_proxies.rs | 87 + .../src/core/physics/utils.rs | 175 + .../src/core/relationships/mod.rs | 11 + ...lationships_insert_dependant_components.rs | 15 + .../basic_xpbd_physics/src/game/in_game.rs | 85 + .../src/game/in_main_menu.rs | 113 + .../basic_xpbd_physics/src/game/mod.rs | 107 + .../basic_xpbd_physics/src/game/picking.rs | 34 + .../basic_xpbd_physics/src/main.rs | 33 + .../basic_xpbd_physics/src/state.rs | 54 + .../basic_xpbd_physics/src/test_components.rs | 80 + .../bevy_gltf_components/basic/Cargo.toml | 16 - 42 files changed, 5987 insertions(+), 106 deletions(-) create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.lock create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.toml create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/README.md create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/advanced.blend create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/assets_core.assets.ron create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/assets_game.assets.ron create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/World.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Container.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Health_Pickup.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/MagicTeapot.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Pillar.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Player.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Unused_in_level_test.glb create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_core.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_game.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_replace_proxies.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_tracking.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/lighting_replace_proxies.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/controls.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/physics_replace_proxies.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/utils.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/relationships_insert_dependant_components.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_game.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_main_menu.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/mod.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/picking.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/main.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/state.rs create mode 100644 examples/bevy_gltf_blueprints/basic_xpbd_physics/src/test_components.rs diff --git a/Cargo.lock b/Cargo.lock index a0755f6..479cd2e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -761,6 +761,42 @@ dependencies = [ "bevy_gltf_components 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "bevy_gltf_blueprints_animation_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_rapier3d", + "rand", +] + +[[package]] +name = "bevy_gltf_blueprints_basic_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_rapier3d", + "rand", +] + +[[package]] +name = "bevy_gltf_blueprints_basic_xpbd_physics_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_xpbd_3d", + "rand", +] + [[package]] name = "bevy_gltf_components" version = "0.2.0" @@ -782,18 +818,13 @@ dependencies = [ ] [[package]] -name = "bevy_gltf_flow" +name = "bevy_gltf_components_basic_example" version = "0.3.0" dependencies = [ "bevy", - "bevy_asset_loader", "bevy_editor_pls", - "bevy_gltf_blueprints", "bevy_gltf_components 0.2.0", "bevy_rapier3d", - "rand", - "ron", - "serde", ] [[package]] @@ -1278,6 +1309,34 @@ dependencies = [ "winit", ] +[[package]] +name = "bevy_xpbd_3d" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8abc57e8b249dc2ae59896189c05a39faca384c1f2eb7fd6dfb5127ad796354d" +dependencies = [ + "bevy", + "bevy_xpbd_derive", + "derive_more", + "fxhash", + "glam", + "indexmap 2.1.0", + "itertools", + "nalgebra", + "parry3d", + "parry3d-f64", +] + +[[package]] +name = "bevy_xpbd_derive" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1ef1d5e328abe1b76df974245f78e17fd17867583883d5e77444c6a8223a64" +dependencies = [ + "quote", + "syn 2.0.38", +] + [[package]] name = "bindgen" version = "0.68.1" @@ -1387,9 +1446,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c79ad7fb2dd38f3dabd76b09c6a5a20c038fc0213ef1e9afd30eb777f120f019" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" dependencies = [ "memchr", "regex-automata 0.4.3", @@ -1571,6 +1630,12 @@ dependencies = [ "const_soft_float", ] +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + [[package]] name = "core-foundation" version = "0.9.3" @@ -1755,6 +1820,19 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -1809,9 +1887,9 @@ dependencies = [ [[package]] name = "egui_dock" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "681b082103898f874b509c0e5ed642c5001ff272bb7adcef32d3d920c26dcf08" +checksum = "a52f67bcab0eb6050cf8051c614966c1c57129fab23dbeae9c157214779053c7" dependencies = [ "duplicate", "egui", @@ -2044,6 +2122,15 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + [[package]] name = "gethostname" version = "0.2.3" @@ -2069,9 +2156,9 @@ dependencies = [ [[package]] name = "gilrs" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fd19844d0eb919aca41d3e4ea0e0b6bf60e1e827558b101c269015b8f5f27a" +checksum = "9e9eec02069fcbd7abe00a28adf216547774889129a777cb5e53fdfb75d59f09" dependencies = [ "fnv", "gilrs-core", @@ -2082,22 +2169,23 @@ dependencies = [ [[package]] name = "gilrs-core" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccc99e9b8d63ffcaa334c4babfa31f46e156618a11f63efb6e8e6bcb37b830d" +checksum = "e11f4e03be4f1beda399e4791c11d33102fa48f368e864259e4e810d3a3d2ff5" dependencies = [ "core-foundation", + "inotify", "io-kit-sys", "js-sys", "libc", "libudev-sys", "log", - "nix 0.26.4", + "nix 0.27.1", "uuid", "vec_map", "wasm-bindgen", "web-sys", - "windows 0.51.1", + "windows 0.48.0", ] [[package]] @@ -2112,6 +2200,7 @@ version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" dependencies = [ + "approx", "bytemuck", "serde", ] @@ -2363,6 +2452,28 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "futures-core", + "inotify-sys", + "libc", + "tokio", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + [[package]] name = "instant" version = "0.1.12" @@ -2377,14 +2488,23 @@ dependencies = [ [[package]] name = "io-kit-sys" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de" +checksum = "4769cb30e5dcf1710fc6730d3e94f78c47723a014a567de385e113c737394640" dependencies = [ "core-foundation-sys", "mach2", ] +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.9" @@ -2783,11 +2903,11 @@ dependencies = [ [[package]] name = "nix" -version = "0.26.4" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.4.1", "cfg-if", "libc", ] @@ -3059,12 +3179,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "optional" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978aa494585d3ca4ad74929863093e87cac9790d81fe7aba2b3dc2890643a0fc" - [[package]] name = "orbclient" version = "0.3.46" @@ -3133,6 +3247,7 @@ dependencies = [ "nalgebra", "num-derive", "num-traits", + "rayon", "rustc-hash", "serde", "simba", @@ -3141,6 +3256,28 @@ dependencies = [ "spade", ] +[[package]] +name = "parry3d-f64" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9789fd9474afd3b68cc1379a20b56c221dc73e1d5b21671c0646f78cd5441d8c" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "nalgebra", + "num-derive", + "num-traits", + "rayon", + "rustc-hash", + "simba", + "slab", + "smallvec", + "spade", +] + [[package]] name = "paste" version = "1.0.14" @@ -3365,6 +3502,26 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + [[package]] name = "rectangle-pack" version = "0.4.2" @@ -3447,9 +3604,9 @@ checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" [[package]] name = "robust" -version = "0.2.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" [[package]] name = "rodio" @@ -3485,6 +3642,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + [[package]] name = "ruzstd" version = "0.4.0" @@ -3526,6 +3692,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + [[package]] name = "serde" version = "1.0.190" @@ -3629,13 +3801,23 @@ dependencies = [ ] [[package]] -name = "spade" -version = "2.2.0" +name = "socket2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88e65803986868d2372c582007c39ba89936a36ea5f236bf7a7728dc258f04f9" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spade" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c39e369d9638e42586b226e67df08a7358d1e02eb80629d596b944b7c16f44f" +dependencies = [ + "hashbrown 0.14.2", "num-traits", - "optional", "robust", "smallvec", ] @@ -3706,9 +3888,9 @@ dependencies = [ [[package]] name = "taffy" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642c33c68313dd268701fe12e0de45a07e9aa4926c4986d244b511d5fe5c17c2" +checksum = "3c2287b6d7f721ada4cddf61ade5e760b2c6207df041cac9bfaa192897362fd3" dependencies = [ "arrayvec", "grid", @@ -3801,6 +3983,20 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + [[package]] name = "toml_datetime" version = "0.6.5" @@ -4311,25 +4507,6 @@ dependencies = [ "windows-targets 0.48.5", ] -[[package]] -name = "windows" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" -dependencies = [ - "windows-core", - "windows-targets 0.48.5", -] - -[[package]] -name = "windows-core" -version = "0.51.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" -dependencies = [ - "windows-targets 0.48.5", -] - [[package]] name = "windows-implement" version = "0.48.0" diff --git a/Cargo.toml b/Cargo.toml index b3faf72..6b50b00 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,9 +2,23 @@ members = [ "crates/bevy_gltf_components", "crates/bevy_gltf_blueprints", - #"examples/*" + "examples/bevy_gltf_components/basic/", + "examples/bevy_gltf_blueprints/basic/", + "examples/bevy_gltf_blueprints/basic_xpbd_physics/", + "examples/bevy_gltf_blueprints/animation/" + ] resolver = "2" -[profile.dev] -opt-level = 1 # Use slightly better optimization, so examples work \ No newline at end of file +#### --------------------Dev/ debug------------------------------- +# Enable high optimizations for dependencies (incl. Bevy), but not for our code: +[profile.dev.package."*"] +opt-level = 3 + +[profile.dev.package.bevy] +features = ["dynamic"] + +#### --------------------Production/ release------------------------------- +[profile.release] +strip = "debuginfo" +lto = "thin" diff --git a/examples/bevy_gltf_blueprints/animation/Cargo.toml b/examples/bevy_gltf_blueprints/animation/Cargo.toml index 226ea3d..23edf5e 100644 --- a/examples/bevy_gltf_blueprints/animation/Cargo.toml +++ b/examples/bevy_gltf_blueprints/animation/Cargo.toml @@ -1,11 +1,9 @@ [package] -name = "bevy_gltf_blueprints_basic_example" +name = "bevy_gltf_blueprints_animation_example" version = "0.3.0" edition = "2021" license = "MIT OR Apache-2.0" -[workspace] - [dependencies] bevy="0.12" bevy_gltf_blueprints = { path = "../../../crates/bevy_gltf_blueprints" } @@ -13,16 +11,3 @@ bevy_rapier3d = { version = "0.23.0", features = [ "serde-serialize", "debug-ren bevy_asset_loader = { version = "0.18", features = ["standard_dynamic_assets" ]} bevy_editor_pls = { version = "0.6" } rand = "0.8.5" - -#### --------------------Dev/ debug------------------------------- -# Enable high optimizations for dependencies (incl. Bevy), but not for our code: -[profile.dev.package."*"] -opt-level = 3 - -[profile.dev.package.bevy] -features = ["dynamic"] - -#### --------------------Production/ release------------------------------- -[profile.release] -strip = "debuginfo" -lto = "thin" diff --git a/examples/bevy_gltf_blueprints/animation/README.md b/examples/bevy_gltf_blueprints/animation/README.md index 67a87cf..f768199 100644 --- a/examples/bevy_gltf_blueprints/animation/README.md +++ b/examples/bevy_gltf_blueprints/animation/README.md @@ -1,5 +1,5 @@ -# Animation demo +# Animation example/demo Example on how to control animations & how to use the provided helpers Two animated blueprints are provided: Bevy's Fox, and a Robot I created. diff --git a/examples/bevy_gltf_blueprints/basic/Cargo.toml b/examples/bevy_gltf_blueprints/basic/Cargo.toml index 226ea3d..1e902c0 100644 --- a/examples/bevy_gltf_blueprints/basic/Cargo.toml +++ b/examples/bevy_gltf_blueprints/basic/Cargo.toml @@ -4,8 +4,6 @@ version = "0.3.0" edition = "2021" license = "MIT OR Apache-2.0" -[workspace] - [dependencies] bevy="0.12" bevy_gltf_blueprints = { path = "../../../crates/bevy_gltf_blueprints" } @@ -13,16 +11,3 @@ bevy_rapier3d = { version = "0.23.0", features = [ "serde-serialize", "debug-ren bevy_asset_loader = { version = "0.18", features = ["standard_dynamic_assets" ]} bevy_editor_pls = { version = "0.6" } rand = "0.8.5" - -#### --------------------Dev/ debug------------------------------- -# Enable high optimizations for dependencies (incl. Bevy), but not for our code: -[profile.dev.package."*"] -opt-level = 3 - -[profile.dev.package.bevy] -features = ["dynamic"] - -#### --------------------Production/ release------------------------------- -[profile.release] -strip = "debuginfo" -lto = "thin" diff --git a/examples/bevy_gltf_blueprints/basic/README.md b/examples/bevy_gltf_blueprints/basic/README.md index 700bd52..748e517 100644 --- a/examples/bevy_gltf_blueprints/basic/README.md +++ b/examples/bevy_gltf_blueprints/basic/README.md @@ -1,5 +1,8 @@ +# Basic physics example/demo -# Workflow with blender / demo information +This example showcases various components & blueprints extracted from the gltf files, including physics colliders & rigid bodies + +## Notes Workflow with blender / demo information This example, is actually closer to a boilerplate + tooling showcases how to use a minimalistic [Blender](https://www.blender.org/) (gltf) centric workflow for [Bevy](https://bevyengine.org/), ie defining entites & their components inside Blender using Blender's objects **custom properties**. diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.lock b/examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.lock new file mode 100644 index 0000000..5063b29 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.lock @@ -0,0 +1,4629 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8410747ed85a17c4a1e9ed3f5a74d3e7bdcc876cf9a18ff40ae21d645997b2" + +[[package]] +name = "accesskit_consumer" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" +dependencies = [ + "accesskit", +] + +[[package]] +name = "accesskit_macos" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2", + "once_cell", +] + +[[package]] +name = "accesskit_windows" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" +dependencies = [ + "accesskit", + "accesskit_consumer", + "once_cell", + "paste", + "static_assertions", + "windows 0.48.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e39fcec2e10971e188730b7a76bab60647dacc973d4591855ebebcadfaa738" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_windows", + "winit", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "alsa" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47" +dependencies = [ + "alsa-sys", + "bitflags 1.3.2", + "libc", + "nix 0.24.3", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android-activity" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.6.1", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arboard" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +dependencies = [ + "clipboard-win", + "core-graphics", + "image", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "winapi", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-task" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "bevy" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "329e344f835f5a9a4c46a6d1d57371f726aa2c482d1bd669b2b9c4eb1ee91fd7" +dependencies = [ + "bevy_internal", +] + +[[package]] +name = "bevy-inspector-egui" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65b98d6fca1209c36c4d403c377f303aad22d940281fe1a9e431217516f0622" +dependencies = [ + "bevy-inspector-egui-derive", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_egui", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_utils", + "bevy_window", + "egui", + "image", + "once_cell", + "pretty-type-name", + "smallvec", +] + +[[package]] +name = "bevy-inspector-egui-derive" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec800b7cf98151b5dbff80f0eb6dffcb4bcfceef6e457888b395ead4eb7e75ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_a11y" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271b812e5734f5056a400f7d64592dd82d6c0e6179389c2f066f433ab8bc7692" +dependencies = [ + "accesskit", + "bevy_app", + "bevy_derive", + "bevy_ecs", +] + +[[package]] +name = "bevy_animation" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab94187a1253433e14f175293d8a86ec1c2822fda2a17807908f11ec21f45f00" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_time", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_app" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "172d532ea812e5954fa814dae003c207f2a0b20c6e50431787c94a7159677ece" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb2b67984088b23e223cfe9ec1befd89a110665a679acb06839bc4334ed37d6" +dependencies = [ + "async-broadcast", + "async-fs", + "async-lock", + "bevy_app", + "bevy_asset_macros", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bevy_winit", + "blake3", + "crossbeam-channel", + "downcast-rs", + "futures-io", + "futures-lite", + "js-sys", + "parking_lot", + "ron", + "serde", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_asset_loader" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d797cc907daa293a2776fea1517ed79f9e54d9901dfd35410743cbe536d4c2b" +dependencies = [ + "anyhow", + "bevy", + "bevy_asset_loader_derive", + "bevy_common_assets", + "path-slash", + "serde", +] + +[[package]] +name = "bevy_asset_loader_derive" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43820afc6e2a7a9e09adb5f13a760bd9a973f391c106411f0bf229d9958c61d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_asset_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b3245193e90fc8abcf1059a467cb224501dcda083d114c67c10ac66b7171e3a" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_audio" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478de80ff25cb7decbcb22797774d1597e8c32914e81431c67d64faadc08f84a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "oboe", + "rodio", +] + +[[package]] +name = "bevy_common_assets" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9397adf1558aa3f08e20aa567538a7238b451362fc8c6b678d409c040c221799" +dependencies = [ + "anyhow", + "bevy", + "ron", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025e6800b73048092a55c3611e9327ad4c4c17b60517ec1c0086bb40b4b19ea8" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bytemuck", + "serde", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4b08a2d53ba62d9ec1fca3f7f4e0f556e9f59e1c8e63a4b7c2a18c0701152c" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags 2.4.1", + "radsort", + "serde", +] + +[[package]] +name = "bevy_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24bf40259be12a1a24d9fd536f5ff18d31eeb5665b77e2732899783be6edc5d6" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b5a99a9fb6cd7d1eb1714fad193944a0317f0887a15cccb8309c8d37951132" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_log", + "bevy_time", + "bevy_utils", + "sysinfo", +] + +[[package]] +name = "bevy_ecs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae11a1f467c372b50e9d4b55e78370f5420c9db7416200cc441cc84f08174dd3" +dependencies = [ + "async-channel", + "bevy_ecs_macros", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "event-listener", + "fixedbitset", + "rustc-hash", + "serde", + "thiserror", + "thread_local", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f642c2b67c4d0daf8edf15074f6351457eb487a34b3de1290c760d8f3ac9ec16" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_editor_pls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170e3ee3293f70be7fa1b82e8ffe52dcb190c68b2f0ef4847afe65626b417ad7" +dependencies = [ + "bevy", + "bevy_editor_pls_core", + "bevy_editor_pls_default_windows", + "egui", + "egui-gizmo", +] + +[[package]] +name = "bevy_editor_pls_core" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9bab331de653d7d976a1fb0ab3ae8eff1dc821c5991c09bdbe945e70234839c" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "egui_dock", + "indexmap 2.1.0", +] + +[[package]] +name = "bevy_editor_pls_default_windows" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833e3b3d5c69b92527e766b470b27cb4745406e2087be19be81b595cc48792c" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "bevy_editor_pls_core", + "bevy_mod_debugdump", + "egui-gizmo", + "indexmap 2.1.0", + "opener", + "pretty-type-name", +] + +[[package]] +name = "bevy_egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85450af551b7e1cb766f710763b60a12a82ffd6323945a8f776c6334c59ccdc1" +dependencies = [ + "arboard", + "bevy", + "egui", + "thread_local", + "webbrowser", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b9fb5a62c4e3ab70caaa839470d35fa932001b1b34b08bc7f7f1909bd2b3a7" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_gilrs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad31cc2c84315e0759d793d6c5bcb7d8789bbc16359c98d1b766e708c1bbae49" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_log", + "bevy_time", + "bevy_utils", + "gilrs", + "thiserror", +] + +[[package]] +name = "bevy_gizmos" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d1cc978b91f416b23eb16f00e69f95c3a04582021827d8082e92d4725cc510" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_gltf" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f933745c0c86e2c07948def581259b466f99708328657054e956275430ccfd7" +dependencies = [ + "base64 0.13.1", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_tasks", + "bevy_transform", + "bevy_utils", + "gltf", + "percent-encoding", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "bevy_gltf_blueprints" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_gltf_components", +] + +[[package]] +name = "bevy_gltf_blueprints_basic_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_rapier3d", + "rand", +] + +[[package]] +name = "bevy_gltf_components" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd745a2988c631286404e12d184d4a30a634fbbba1deceaaa1ca7fcbc607cc7a" +dependencies = [ + "bevy", + "ron", + "serde", +] + +[[package]] +name = "bevy_hierarchy" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa240011fce8ee23f9b46e5a26a628a31d7860d6d2e4e0e361bb3ea6d5a703" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_utils", + "smallvec", +] + +[[package]] +name = "bevy_input" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e86e241b3a10b79f65a69205552546723b855d3d4c1bd8261637c076144d32f" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_internal" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55124e486814c4d3632d5cfad9c4f4e46d052c028593ec46fef5bfbfb0f840b1" +dependencies = [ + "bevy_a11y", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_audio", + "bevy_core", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gilrs", + "bevy_gizmos", + "bevy_gltf", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_sprite", + "bevy_tasks", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_ui", + "bevy_utils", + "bevy_window", + "bevy_winit", +] + +[[package]] +name = "bevy_log" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "011417debf7868b45932bb97fc0d5bfdeaf9304e324aa94840e2f1e6deeed69d" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_ecs", + "bevy_utils", + "console_error_panic_hook", + "tracing-log", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf6fba87c6d069fcbcd8a48625ca8ab4392ad40d2b260863ce7d641a0f42986d" +dependencies = [ + "proc-macro2", + "quote", + "rustc-hash", + "syn 2.0.39", + "toml_edit 0.20.7", +] + +[[package]] +name = "bevy_math" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "752764558a1f429c20704c3b836a019fa308961c43fdfef4f08e339d456c96be" +dependencies = [ + "glam", + "serde", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b596c41a56f2268ec7cde560edc588bc7b5886e4b49c8b27c4dcc9f7c743424c" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_mod_debugdump" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4db8601f41ea570b7d32f3177292a608196c59bdf3298001a9e202d5e7439438" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_render", + "bevy_utils", + "once_cell", + "petgraph", + "pretty-type-name", +] + +[[package]] +name = "bevy_pbr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeb6a35a78d355cc21c10f277dcd171eca65e30a90e76eb89f4dacf606621fe1" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.4.1", + "bytemuck", + "fixedbitset", + "naga_oil", + "radsort", + "smallvec", + "thread_local", +] + +[[package]] +name = "bevy_ptr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308a02679f6ce21ef71de20fae6d6a2016c07baa21d8e8d0558e6b7851e8adf2" + +[[package]] +name = "bevy_rapier3d" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f0a2641af76c9eb17da0dcb0fb20cd9d615b93b67be0b85f1867487e956b5a" +dependencies = [ + "bevy", + "bitflags 2.4.1", + "log", + "nalgebra", + "rapier3d", + "serde", +] + +[[package]] +name = "bevy_reflect" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd56914a8ad57621d7a1a099f7e6b1f7482c9c76cedc9c3d4c175a203939c5d" +dependencies = [ + "bevy_math", + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "downcast-rs", + "erased-serde", + "glam", + "serde", + "smallvec", + "smol_str", + "thiserror", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f627907c40ac552f798423447fc331fc1ddacd94c5f7a2a70942eb06bc8447" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90d777f4c51bd58e9e40777c6cb8dde0778df7e2c5298b3f9e3455bd12a9856c" +dependencies = [ + "async-channel", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_encase_derive", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_mikktspace", + "bevy_reflect", + "bevy_render_macros", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.4.1", + "bytemuck", + "codespan-reporting", + "downcast-rs", + "encase", + "futures-lite", + "hexasphere", + "image", + "js-sys", + "ktx2", + "naga", + "naga_oil", + "ruzstd", + "serde", + "smallvec", + "thiserror", + "thread_local", + "wasm-bindgen", + "web-sys", + "wgpu", +] + +[[package]] +name = "bevy_render_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b00c3d0abff94a729460fc9aa95c2ceac71b49b3041166bb5ba3098e9657e7" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_scene" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6294396a6375f0b14341d8003408c10aa040e3f833ac8bd49677170ec55d73" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "ron", + "serde", + "thiserror", + "uuid", +] + +[[package]] +name = "bevy_sprite" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f7d1f88a6e5497fdafd95c20984a1d1b5517bc39d51600b4988cd60c51837a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags 2.4.1", + "bytemuck", + "fixedbitset", + "guillotiere", + "radsort", + "rectangle-pack", + "thiserror", +] + +[[package]] +name = "bevy_tasks" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a45be906618192515bc613e46546150089adbb4a82178dc462045acd1e89e92" +dependencies = [ + "async-channel", + "async-executor", + "async-task", + "concurrent-queue", + "futures-lite", + "wasm-bindgen-futures", +] + +[[package]] +name = "bevy_text" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c136af700af4f87c94f68d6e019528c371bf09ebf4a8ff7468bb3c73806b34f5" +dependencies = [ + "ab_glyph", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", + "bevy_window", + "glyph_brush_layout", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_time" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b29709cadf22d318a0b7c79f763e9c5ac414292bd0e850066fa935959021b276" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "crossbeam-channel", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_transform" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70262c51e915b6224129206d23823364e650cf5eb5f4b6ce3ee379f608c180d2" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_ui" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd5ecbf2dceaab118769dd870e34d780bfde556af561fd10d8d613b0f237297e" +dependencies = [ + "bevy_a11y", + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bytemuck", + "serde", + "smallvec", + "taffy", + "thiserror", +] + +[[package]] +name = "bevy_utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8e75d4a34ef0b15dffd1ee9079ef1f0f5139527e192b9d5708b3e158777c753" +dependencies = [ + "ahash", + "bevy_utils_proc_macros", + "getrandom", + "hashbrown 0.14.2", + "instant", + "nonmax", + "petgraph", + "thiserror", + "tracing", + "uuid", +] + +[[package]] +name = "bevy_utils_proc_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7dfd3735a61a1b681ed1e176afe4eae731bbb03e51ad871e9eb39e76a2d170e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_window" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e60d1830b3fbd7db5bfea7ac9fcd0f5e1d1af88c91ab469e697ab176d8b3140b" +dependencies = [ + "bevy_a11y", + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "raw-window-handle", + "serde", +] + +[[package]] +name = "bevy_winit" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8294e78c6a1f9c34d36501a377c5d20bf0fa23a0958187bb270187741448ba" +dependencies = [ + "accesskit_winit", + "approx", + "bevy_a11y", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_math", + "bevy_tasks", + "bevy_utils", + "bevy_window", + "crossbeam-channel", + "raw-window-handle", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bindgen" +version = "0.68.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +dependencies = [ + "bitflags 2.4.1", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.39", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + +[[package]] +name = "blocking" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite", + "piper", + "tracing", +] + +[[package]] +name = "bstr" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +dependencies = [ + "memchr", + "regex-automata 0.4.3", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading 0.7.4", +] + +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "com-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const_panic" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" + +[[package]] +name = "const_soft_float" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "constgebra" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd23e864550e6dafc1e41ac78ce4f1ccddc8672b40c403524a04ff3f0518420" +dependencies = [ + "const_soft_float", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.3.2", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" +dependencies = [ + "bitflags 1.3.2", + "core-foundation-sys", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c" +dependencies = [ + "alsa", + "core-foundation-sys", + "coreaudio-rs", + "dasp_sample", + "jni 0.19.0", + "js-sys", + "libc", + "mach2", + "ndk", + "ndk-context", + "oboe", + "once_cell", + "parking_lot", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.46.0", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +dependencies = [ + "cfg-if", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "d3d12" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20" +dependencies = [ + "bitflags 2.4.1", + "libloading 0.8.1", + "winapi", +] + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "duplicate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +dependencies = [ + "heck", + "proc-macro-error", +] + +[[package]] +name = "ecolor" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf4e52dbbb615cfd30cf5a5265335c217b5fd8d669593cea74a517d9c605af" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd69fed5fcf4fbb8225b24e80ea6193b61e17a625db105ef0c4d71dde6eb8b7" +dependencies = [ + "ahash", + "epaint", + "nohash-hasher", +] + +[[package]] +name = "egui-gizmo" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f732ad247afe275d6cf901e0f134025ad735007c8f4d82e667a6871f1b4a5441" +dependencies = [ + "egui", + "glam", +] + +[[package]] +name = "egui_dock" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a52f67bcab0eb6050cf8051c614966c1c57129fab23dbeae9c157214779053c7" +dependencies = [ + "duplicate", + "egui", + "paste", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "emath" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef2b29de53074e575c18b694167ccbe6e5191f7b25fe65175a0d905a32eeec0" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "encase" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fce2eeef77fd4a293a54b62aa00ac9daebfbcda4bf8998c5a815635b004aa1c" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror", +] + +[[package]] +name = "encase_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e520cde08cbf4f7cc097f61573ec06ce467019803de8ae82fb2823fa1554a0e" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe2568f851fd6144a45fa91cfed8fe5ca8fc0b56ba6797bfc1ed2771b90e37c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "epaint" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58067b840d009143934d91d8dcb8ded054d8301d7c11a517ace0a99bb1e1595e" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "nohash-hasher", + "parking_lot", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + +[[package]] +name = "euclid" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gilrs" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9eec02069fcbd7abe00a28adf216547774889129a777cb5e53fdfb75d59f09" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11f4e03be4f1beda399e4791c11d33102fa48f368e864259e4e810d3a3d2ff5" +dependencies = [ + "core-foundation", + "inotify", + "io-kit-sys", + "js-sys", + "libc", + "libudev-sys", + "log", + "nix 0.27.1", + "uuid", + "vec_map", + "wasm-bindgen", + "web-sys", + "windows 0.51.1", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glow" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gltf" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad2dcfb6dd7a66f9eb3d181a29dcfb22d146b0bcdc2e1ed1713cbf03939a88ea" +dependencies = [ + "byteorder", + "gltf-json", + "lazy_static", +] + +[[package]] +name = "gltf-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cbcea5dd47e7ad4e9ee6f040384fcd7204bbf671aa4f9e7ca7dfc9bfa1de20" +dependencies = [ + "inflections", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "gltf-json" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5b810806b78dde4b71a95cc0e6fdcab34c4c617da3574df166f9987be97d03" +dependencies = [ + "gltf-derive", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "glyph_brush_layout" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +dependencies = [ + "ab_glyph", + "approx", + "xi-unicode", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.4.1", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "gpu-allocator" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8" +dependencies = [ + "backtrace", + "log", + "thiserror", + "winapi", + "windows 0.44.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.4.1", + "gpu-descriptor-types", + "hashbrown 0.14.2", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "grid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec1c01eb1de97451ee0d60de7d81cf1e72aabefb021616027f3d1c3ec1c723c" + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + +[[package]] +name = "hassle-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" +dependencies = [ + "bitflags 1.3.2", + "com-rs", + "libc", + "libloading 0.7.4", + "thiserror", + "widestring", + "winapi", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hexasphere" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb3df16a7bcb1b5bc092abd55e14f77ca70aea14445026e264586fc62889a10" +dependencies = [ + "constgebra", + "glam", +] + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.2", +] + +[[package]] +name = "inflections" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" + +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "futures-core", + "inotify-sys", + "libc", + "tokio", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-kit-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4769cb30e5dcf1710fc6730d3e94f78c47723a014a567de385e113c737394640" +dependencies = [ + "core-foundation-sys", + "mach2", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + +[[package]] +name = "js-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +dependencies = [ + "libc", + "libloading 0.7.4", + "pkg-config", +] + +[[package]] +name = "ktx2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "623b5e6cefd76e58f774bd3cc0c6f5c7615c58c03a97815245a25c3c9bdee318" +dependencies = [ + "bitflags 2.4.1", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "naga" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ceaaa4eedaece7e4ec08c55c640ba03dbb73fb812a6570a59bcf1930d0f70e" +dependencies = [ + "bit-set", + "bitflags 2.4.1", + "codespan-reporting", + "hexf-parse", + "indexmap 1.9.3", + "log", + "num-traits", + "pp-rs", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "naga_oil" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fa9518ff79ae8a98c3abe3897d873a85561d1b5642981c2245c1c4b9b2429d" +dependencies = [ + "bit-set", + "codespan-reporting", + "data-encoding", + "indexmap 1.9.3", + "naga", + "once_cell", + "regex", + "regex-syntax 0.7.5", + "rustc-hash", + "thiserror", + "tracing", + "unicode-ident", +] + +[[package]] +name = "nalgebra" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "serde", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum 0.5.11", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonmax" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4a593ea4fffed8684ad13d75c82cf0b6dc2b88947e0ed85b9e70f555a7e422" + +[[package]] +name = "normpath" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oboe" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" +dependencies = [ + "jni 0.20.0", + "ndk", + "ndk-context", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opener" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788" +dependencies = [ + "bstr", + "normpath", + "winapi", +] + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owned_ttf_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "parry3d" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55dc0e6db79bddbc5fd583569f7356cdcc63e1e9b2b93a9ab70dd8e717160e0" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "indexmap 1.9.3", + "nalgebra", + "num-derive", + "num-traits", + "rustc-hash", + "serde", + "simba", + "slab", + "smallvec", + "spade", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "pp-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty-type-name" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f73cdaf19b52e6143685c3606206e114a4dfa969d6b14ec3894c88eb38bd4b" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89dff0959d98c9758c88826cc002e2c3d0b9dfac4139711d1f30de442f1139b" + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radsort" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "range-alloc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" + +[[package]] +name = "rapier3d" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a8a0bd9d3135f7b4eb45d0796540e7bab47b6b7c974f90567ccc5a0454f42b" +dependencies = [ + "approx", + "arrayvec", + "bit-vec", + "bitflags 1.3.2", + "crossbeam", + "downcast-rs", + "nalgebra", + "num-derive", + "num-traits", + "parry3d", + "rustc-hash", + "serde", + "simba", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rectangle-pack" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "renderdoc-sys" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" + +[[package]] +name = "robust" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + +[[package]] +name = "rodio" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b1bb7b48ee48471f55da122c0044fcc7600cfcc85db88240b89cb832935e611" +dependencies = [ + "cpal", + "lewton", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.5", + "bitflags 2.4.1", + "serde", + "serde_derive", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "libm", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +dependencies = [ + "serde", +] + +[[package]] +name = "smol_str" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spade" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c39e369d9638e42586b226e67df08a7358d1e02eb80629d596b944b7c16f44f" +dependencies = [ + "hashbrown 0.14.2", + "num-traits", + "robust", + "smallvec", +] + +[[package]] +name = "spirv" +version = "0.2.0+1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags 1.3.2", + "num-traits", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "taffy" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c2287b6d7f721ada4cddf61ade5e760b2c6207df041cac9bfaa192897362fd3" +dependencies = [ + "arrayvec", + "grid", + "num-traits", + "slotmap", +] + +[[package]] +name = "termcolor" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" + +[[package]] +name = "wayland-scanner" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "web-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" +dependencies = [ + "core-foundation", + "home", + "jni 0.21.1", + "log", + "ndk-context", + "objc", + "raw-window-handle", + "url", + "web-sys", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wgpu" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed547920565c56c7a29afb4538ac5ae5048865a5d2f05bff3ad4fbeb921a9a2c" +dependencies = [ + "arrayvec", + "cfg-if", + "js-sys", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f8a44dd301a30ceeed3c27d8c0090433d3da04d7b2a4042738095a424d12ae7" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.4.1", + "codespan-reporting", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a80bf0e3c77399bb52850cb0830af9bad073d5cfcb9dd8253bef8125c42db17" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.4.1", + "block", + "core-graphics-types", + "d3d12", + "glow", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.1", + "log", + "metal", + "naga", + "objc", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee64d7398d0c2f9ca48922c902ef69c42d000c759f3db41e355f4a570b052b67" +dependencies = [ + "bitflags 2.4.1", + "js-sys", + "web-sys", +] + +[[package]] +name = "wide" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-implement" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-interface" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winit" +version = "0.28.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +dependencies = [ + "android-activity", + "bitflags 1.3.2", + "cfg_aliases", + "core-foundation", + "core-graphics", + "dispatch", + "instant", + "libc", + "log", + "mio", + "ndk", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle", + "redox_syscall 0.3.5", + "wasm-bindgen", + "wayland-scanner", + "web-sys", + "windows-sys 0.45.0", + "x11-dl", +] + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +dependencies = [ + "gethostname", + "nix 0.24.3", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +dependencies = [ + "nix 0.24.3", +] + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "zerocopy" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.toml b/examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.toml new file mode 100644 index 0000000..3f22383 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bevy_gltf_blueprints_basic_xpbd_physics_example" +version = "0.3.0" +edition = "2021" +license = "MIT OR Apache-2.0" + +[dependencies] +bevy="0.12" +bevy_gltf_blueprints = { path = "../../../crates/bevy_gltf_blueprints" } +bevy_xpbd_3d = "0.3" +bevy_asset_loader = { version = "0.18", features = ["standard_dynamic_assets" ]} +bevy_editor_pls = { version = "0.6" } +rand = "0.8.5" diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/README.md b/examples/bevy_gltf_blueprints/basic_xpbd_physics/README.md new file mode 100644 index 0000000..a6a1051 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/README.md @@ -0,0 +1,15 @@ + +# Basic xpbd physics example/demo + +Same as the basic example but using [xpbd](https://github.com/Jondolf/bevy_xpbd) instead of Rapier [rapier](https://github.com/dimforge/bevy_rapier) + +## Running this example + +``` +cargo run --features bevy/dynamic_linking +``` + +### Additional notes + +* You usually define either the Components directly or use ```Proxy components``` that get replaced in Bevy systems with the actual Components that you want (usually when for some reason, ie external crates with unregistered components etc) you cannot use the components directly. +* this example contains code for future features, not finished yet ! please disregard anything related to saving & loading diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/advanced.blend b/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/advanced.blend new file mode 100644 index 0000000000000000000000000000000000000000..1fa9ed88a2c491a7435755c3226f6dbee6239ccd GIT binary patch literal 1288056 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 z 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�y_ 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 z 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 Wy2~eH((}AECO?-?#-!tUJpO;Ht|I{e literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Container.glb b/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Container.glb new file mode 100644 index 0000000000000000000000000000000000000000..d1690af2fc6a10061a3fbf5412852ebfa852e871 GIT binary patch literal 5940 zcmeHK+iu%N5M|S(*CcJ)ra}88@F7o(%KOC+jbg_^(%P0`yFq~`v!O|Wq}&*W z0ewjS#rcGOQqL@RB}$ZhLDD{TVR2?>XU<%9c1aK7y=ONRMX?_!%HMYs<(J*|)~Ooi zIV;qaQ+2=+mW4%{sVnNQhgq7Wd1C;R#%j!xKFb;}erh+4t)|;FeN|JBS(Zm>0%fzQ zt7n>;_W+=-=z`1Dl~<=Kds}27*i*H47$yVO-z~M&ji{T2*$II1H&GHDoN%2qNm#Gw z9I^b6BlUz}7-lRffCF?9C+mc9%mu|^)O(Y#oR*uu&WB+HrXHAqrXECan{{TCOh;40 z;V?ew9Ho7A#n9B!K_|?P!eW#m4ao9Qw-d8t1}_HkJ4jO`+l@o~A#9OPyZZ+sret4h z$aa`!1?#V+aSSQSLkp*B5*`6k-Hzfo%uuU|WGzjKFhbp{!tFRbnUy?eVO$(`wvp#( zSXJE&2T^a2g~PO{ihoN+IqP?#q>R5)upH~Jk%Wk3TKy#LGYV4I49(Q6*JnsW%1+hE zMhLq}yiHwqxX0-R??i*Bznb<>wzKptwo~0L!XoNHOM1m_mf3cC>CrGv_?A*NrXWJL=06Fp-e3o#whVCqiGnvYulb-TaIJ9zOP+Lgsjo1Ngg9)YHHNu zk=`_P6T|Us!}kIosG5!dQZU5Il&b>r$jZB3Ov@j9vcbeH-x7WuqJp5D}_KkGAC>eGZzlsW97 z1h}ipliwX39I)(V#Qx;Po7~5HCqtYl$1q*I;nGopF9Y;3u8p^Jx#A7M&uK(AuhX*DU@{sDk6(z6|^#b6lNQH#ckEvEg-dF660M$WnOUU3;?eWTysz-0J`z zsy1kw%fK(H4G%-SNB0)*+tj>X8}!m;-pg$_o2F^#o?`~M+l|2U9L*9U$FhA>$35?A zbuDzpQQ0Z=H8hTZ&>g&5EnKFy_NcCRNq6B8T$aPM1oh^`=i$}OQ9(pA?d|G8;)kev zQm_q{3<`X^n)vWgNzgtx;NRDHmla_)pigbf4qRMIc!Tmoc)2YHyQ(!ld}lp79(DN@ zeS34p9^T+H#@2NL_wDyd+c3;I=NDD2mbYOW*GRm!VTP+;!+YJ_53b?87QAWTJj@gx z*SPFH(RtN&vpg5qe53LFb46Kwv4#Kg#^-nteS8Vus^~1^2?ux+%tbueO8FulanRuL zT*S93I?H&%Azu<_5l^;KzKF*fA7epiE_jku>ozZ!>m-*okve=1xg0!(IbXCU?RXC3 zQoCmRxQv6Z3LWAnd1IZ&K$OOqKTB-ElZ3}Grz7Q@F2H&Bv+zR{Kbq5MK$rXzrLj+Q zvECvX>4B0y%^Ubt=|1U*b!k_nq)+pCN_f()N=c9A^Ymi{M*+W2l+Tnel>2zzSH4xg zQywVy@VuwoRqiNXDL3)FsoYRLRlZSf<9S>8Ncmp*Qn`iaE#+$mt5Y(OJe54*8Nei+Hk?@_!tX9bHS5jQWHL*M>!@w zA7ef)eef0VGMM)2W?%%|M+l=*166yUf{f|;M90w%jHY>RwbULd?kj~GQJXz#38>kd?f~n z!*!$_H9kk(XpH%DaqrFPaCNFT#+c~%3OK-+_r>i6w#1ppfGG#9@pTf6rF1Hjw(~mw G_y0e-N1eC; literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Health_Pickup.glb b/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Health_Pickup.glb new file mode 100644 index 0000000000000000000000000000000000000000..b073501b937bf298dd0a9465d1fdf533a4833c42 GIT binary patch literal 5448 zcmb7G&vzSF6~2`Ipg>Ctv=nGTofdG)MAgjbhou%7$4weHj^$cTpqO+RNl)@LqZu(X za_l%R;jrTz4h#MO);)(UTbXmZ=5JxqZ5Mp^X`cL)O0r@*SKqvM=icvr@7|~Mg1u`` z5YhFQi2n5q(Fe`O_KD#oiAaswiP00Gh`lt5jhb=eAdbQ)$@TC`?n)rSj)-%cZ#Qy> zPQIMCR}IrR6mjB5A)M`e!8kPyag>UXmy%nF=oqzqn|4_I| z8jG-(9vF8_BWWY6Q7dF9!D}ZRDfR$QjP`*S_C%*S_A<8oR_w*c$e!HwL%(}0eWEZF z?bPjy`pn^ zCDZT*gW%ZhM<~xSjd23ki&5k-Mj2R3hAlS`hXPqFh|-NBDAWo({DF2>Pown-7;~|Z zKpYLCI2E0ZC5DsocRamvU3fuy;O?N# z;Xrr2>Gk~fp6~`ysxRLPhd4La56Ar7R3zBHgCerL=jw-1M=;5PY27(R3F`U8m>fd( z&J+o^C!)Scae!RS`6;s#xYvvouOAJ=v}PABK`a);N8@2*!y6>SK&<3ej&NKBGk09O zY~?L8cb^|GJOq&HWrsY>2G;vooI*@O|V9Xr14PTc(b;@=C$Q)?SrM`ScPJxT(-&uyI8GQ zCVmm?e1f>IFPa{>sMt+4Q8lYn$(O45DXbQY6}wz2pQ4a+sRwa1K#|sXWV1thKZx$} zPz_q~O_5?k{Pu1%>>Z59B zqJieI*YSsPvdiPiww=|YwF(*-Q2#z&<5K{?g6ZT7P~MB%ZpS|~YPM+vm;i}++W>OY z;{mtLMq_vT>TVN4MV*f89r+1v6TgQmFiRUoZs7NQ+@^8?!e;`X^M%MUyWk!iPq~+- zvELeE*!awM8qLkU&BnI8qP82mH`lku_lO^M{5Jc5plUfdVLX|A8(T>fk0Z8*-L8ml z`{JIAGU?YnSw+dR%eaSl%n;dL<#0z*kCJKSOVFf*hHLo^9-M(c^F^w^x)5*oqh4-zemep_|?1JuJnHlyvFe}|Am-2aD065 zzh&{7=D!fL7MdnAF>_^25cA=(Skq**Bvv}G|3b{QWtu#E49q$x|Ako7q&^QLmgV;rgGm%>P21>9)o_H4h^Q_Z8Qr?w^I2V_|+(%$Ybl7g@_Pm^q*> zRr`gQxiV)ss{3If)@oP%!~CZ(GstvM^Ci!E-nym($5A>=;V)J`t2^|!QTf&0+25Z! ztG|2iBmU&)HD1U5h@aIuKP&%v@9OJc{_k_iHUF33Opl3Y)`PImIhaG8In3~{b57l# z-{E&TChyJSqsN)yFLN!(dv;On%vJelxUOrZ;W~3w^=kg38QkPq%8g( zd$V|IKCG?cru=2Dj3;BYK4PrbrRl#mZ#~m_gm~0+NW**suraYBl%XEo;LO-XsVBaExenBOw!dB^* z^ahy}!^YI3%T%LN*i%ZVKsME3>$FM^U8OD9E&O+^LcgMQ*mZh`eoZ&&L)Z`LJ$jd} z(0$nZ^e5V&9XfBr9aXG*avivA{x@Cu%FT~{U1jjSA75g literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/MagicTeapot.glb b/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/MagicTeapot.glb new file mode 100644 index 0000000000000000000000000000000000000000..0cde830e6916d22f7d60b2904eff2005a2402798 GIT binary patch literal 24028 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 literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Unused_in_level_test.glb b/examples/bevy_gltf_blueprints/basic_xpbd_physics/assets/models/library/Unused_in_level_test.glb new file mode 100644 index 0000000000000000000000000000000000000000..dff3f8768c2374731bf6edbeab88e8f39061eae4 GIT binary patch literal 5552 zcmb7GOLrqz5w0YJ437z~BoIhI>G1G`9;F|8gC#u9OvV|HZDf0R7}K<*mfV?Ex9Dzp ztTASC4tq8n7FlPP4cUc_?FB0iYtG>>uz^3og0HUn+E+7@t+B1rr`vVEs`_r#m3zU~ zt!Iholb4BJx?R{tdtoo#({^<&X(OsuGcuH5+aWW>F5sco-gCpA*V!CUEZ*AiydMC{zgDJ}9*fKM33y0v~GG%5oH@u8+e~7dHZTG`VuybAxox z*+8Acf$DnK?fLC3&mBamy1X3@ac+(uj`Md?FTwL&6p_U}S3it89w%w&=I#+nke?5= zvqQ-COe1xAUexzeoFf-?e%PEaN~mcIZa*4^Y0WaOK{M9HNB`l$vO7qIfwz!bIKZhH zdTvy^Zstur_mDqc%jx_empxG)=s7GFbIi8s?t3^4Ru-RFobyjjzvp*uL>;u1_Ra_u z_-&*p%b!|GJL(UjP_!8fan|kP1Uu0Xkv5S$`X!Br9u7Mjf?IA|Oxg~TwQbWVluISE zWLSl2+0^k1uJd`~F28J+;3By<<$Tr5VmV)|;>V~I3T3NQEFGbqbHxX7G(fH9c!0Ab zdpC$4@Q4js@m(*)y!h>AH0MwMCt11rbEjVOnDu?`$n!JQDh1#zp6;eS_@6PJ7tGnT|ys zPnlNh;@W}cvD@*7V$MtBIk)Ue!K@$+jH~|;+xQfapP}1%1IoK`+v)iGTFuh60P`R) zKh}VpbTr`ZSzd3h-E3|`sHoF%+yg(s-QxFfA!cF2$O-(ukGoYYK=@4Hfg85n`yNXi zvjgtL@x;4n8vCsw29HmCV|{aFYh`^+Tvu!B&AUsh<2%I@wDikW{O1okfOZ>#h+a;q^ zF4}gXY8yD>s{W)G!uNd$u){<7IK%ZR6jS`bkqLb7=CUnr2(<{@u$LBb(SAtw2^_*O;Bq;A~fFIWgyviQOq zlg+VtOgHa-^z>wG+bDA}N_hLcmaGmXc^fl{7Ru#vA6zB6v9d^AxzQ_+N+>O&YT>xMZI+=E1C6rbFW?FzX=wFT|V! z^Ft4j&zzWhL;7Ecm3d)JFi@T#or+7d9)8GHI_^*EsPXF@UM<;mI z8DovtkL5c1N&i`UXYu^+zkg#5DF27x6faQ&)=o12h7z~IF=zSn9?7HTrp8tGPVpD9 z)VQiY=W$u>s*i#fAJa!_wa7Jd&YX*ykFs|{=S%#BK3VOe7S&(Db(LSi6ZuT>7yOw& z<3)9E7MJ^^uGG6YYhCFR_K`hSSK}(0hHZ%D|kX5bzRL9I>_0ntGQ+VLWf!Y3g<*zh4Vzg+&`SB z><5Xte`F35{-{y*Jl88R&&A@Ddqb`_*jK4V-ajHP*7^PseUWhr|BQ3m-V>SgJbM)$ zc`i@X`&eAAi{nn@{}|6%4$x3y_LqB)6|C~e9uWPe=r3nMtk1dkEUu!1oLQ0oGxS;d z3O$3@3-la)gWiCBgT73kqp#8{u&>Zn`VxJI-h_RVzD8f5m#GWeC6`{J@6jIY9<}M~ z^i5iTU7#F&i}F;4Ez>pnHhrJof_;lL`T-TG3R|Tg(sxOx7&fLJU8f(>5$q8q^fsAP zhpkhE3UrHBVOOa^C0e8<*d?mbPiT#ruuXc0eoQxL1UsVN(=u()1K0=jJ9?My&^GKg z-KF>FS-Jvyg|=v&enva6JG4pn==1aX literal 0 HcmV?d00001 diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_core.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_core.rs new file mode 100644 index 0000000..29b577a --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_core.rs @@ -0,0 +1,5 @@ +use bevy::prelude::*; +use bevy_asset_loader::prelude::*; + +#[derive(AssetCollection, Resource)] +pub struct CoreAssets {} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_game.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_game.rs new file mode 100644 index 0000000..b8e0665 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/assets_game.rs @@ -0,0 +1,13 @@ +use bevy::gltf::Gltf; +use bevy::prelude::*; +use bevy::utils::HashMap; +use bevy_asset_loader::prelude::*; + +#[derive(AssetCollection, Resource)] +pub struct GameAssets { + #[asset(key = "world")] + pub world: Handle, + + #[asset(key = "models", collection(typed, mapped))] + pub models: HashMap>, +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/mod.rs new file mode 100644 index 0000000..a2c8b22 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/assets/mod.rs @@ -0,0 +1,35 @@ +pub mod assets_core; +pub use assets_core::*; + +pub mod assets_game; +pub use assets_game::*; + +use bevy::prelude::*; +use bevy_asset_loader::prelude::*; + +use crate::state::AppState; + +pub struct AssetsPlugin; +impl Plugin for AssetsPlugin { + fn build(&self, app: &mut App) { + app + // load core assets (ie assets needed in the main menu, and everywhere else before loading more assets in game) + .add_loading_state( + LoadingState::new(AppState::CoreLoading).continue_to_state(AppState::MenuRunning), + ) + .add_dynamic_collection_to_loading_state::<_, StandardDynamicAssetCollection>( + AppState::CoreLoading, + "assets_core.assets.ron", + ) + .add_collection_to_loading_state::<_, CoreAssets>(AppState::CoreLoading) + // load game assets + .add_loading_state( + LoadingState::new(AppState::AppLoading).continue_to_state(AppState::AppRunning), + ) + .add_dynamic_collection_to_loading_state::<_, StandardDynamicAssetCollection>( + AppState::AppLoading, + "assets_game.assets.ron", + ) + .add_collection_to_loading_state::<_, GameAssets>(AppState::AppLoading); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_replace_proxies.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_replace_proxies.rs new file mode 100644 index 0000000..9055c95 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_replace_proxies.rs @@ -0,0 +1,24 @@ +use bevy::core_pipeline::bloom::{BloomCompositeMode, BloomSettings}; +use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; +use bevy::prelude::*; + +use super::CameraTrackingOffset; + +pub fn camera_replace_proxies( + mut commands: Commands, + mut added_cameras: Query<(Entity, &mut Camera), (Added, With)>, +) { + for (entity, mut camera) in added_cameras.iter_mut() { + info!("detected added camera, updating proxy"); + camera.hdr = true; + commands + .entity(entity) + .insert(DebandDither::Enabled) + .insert(Tonemapping::BlenderFilmic) + .insert(BloomSettings { + intensity: 0.01, + composite_mode: BloomCompositeMode::Additive, + ..default() + }); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_tracking.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_tracking.rs new file mode 100644 index 0000000..62da84d --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/camera_tracking.rs @@ -0,0 +1,58 @@ +use bevy::prelude::*; + +#[derive(Component, Reflect, Debug)] +#[reflect(Component)] +/// Component for cameras, with an offset from the Trackable target +/// +pub struct CameraTracking { + pub offset: Vec3, +} +impl Default for CameraTracking { + fn default() -> Self { + CameraTracking { + offset: Vec3::new(0.0, 6.0, 8.0), + } + } +} + +#[derive(Component, Reflect, Debug, Deref, DerefMut)] +#[reflect(Component)] +/// Component for cameras, with an offset from the Trackable target +pub struct CameraTrackingOffset(Vec3); +impl Default for CameraTrackingOffset { + fn default() -> Self { + CameraTrackingOffset(Vec3::new(0.0, 6.0, 8.0)) + } +} + +impl CameraTrackingOffset { + fn new(input: Vec3) -> Self { + CameraTrackingOffset(input) + } +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Add this component to an entity if you want it to be tracked by a Camera +pub struct CameraTrackable; + +pub fn camera_track( + mut tracking_cameras: Query< + (&mut Transform, &CameraTrackingOffset), + ( + With, + With, + Without, + ), + >, + camera_tracked: Query<&Transform, With>, +) { + for (mut camera_transform, tracking_offset) in tracking_cameras.iter_mut() { + for tracked_transform in camera_tracked.iter() { + let target_position = tracked_transform.translation + tracking_offset.0; + let eased_position = camera_transform.translation.lerp(target_position, 0.1); + camera_transform.translation = eased_position; // + tracking.offset;// tracked_transform.translation + tracking.offset; + *camera_transform = camera_transform.looking_at(tracked_transform.translation, Vec3::Y); + } + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/mod.rs new file mode 100644 index 0000000..a6bbb65 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/camera/mod.rs @@ -0,0 +1,24 @@ +pub mod camera_tracking; +pub use camera_tracking::*; + +pub mod camera_replace_proxies; +pub use camera_replace_proxies::*; + +use bevy::prelude::*; +use bevy_gltf_blueprints::GltfBlueprintsSet; + +pub struct CameraPlugin; +impl Plugin for CameraPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .add_systems( + Update, + ( + camera_replace_proxies.after(GltfBlueprintsSet::AfterSpawn), + camera_track, + ), + ); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/lighting_replace_proxies.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/lighting_replace_proxies.rs new file mode 100644 index 0000000..48c0908 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/lighting_replace_proxies.rs @@ -0,0 +1,25 @@ +use bevy::prelude::*; + +use bevy::pbr::{CascadeShadowConfig, CascadeShadowConfigBuilder}; + +// fixme might be too specific to might needs, should it be moved out ? also these are all for lights, not models +pub fn lighting_replace_proxies( + mut added_dirights: Query<(Entity, &mut DirectionalLight), Added>, + mut added_spotlights: Query<&mut SpotLight, Added>, + mut commands: Commands, +) { + for (entity, mut light) in added_dirights.iter_mut() { + light.illuminance *= 5.0; + light.shadows_enabled = true; + let shadow_config: CascadeShadowConfig = CascadeShadowConfigBuilder { + first_cascade_far_bound: 15.0, + maximum_distance: 135.0, + ..default() + } + .into(); + commands.entity(entity).insert(shadow_config); + } + for mut light in added_spotlights.iter_mut() { + light.shadows_enabled = true; + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/mod.rs new file mode 100644 index 0000000..c9688cd --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/lighting/mod.rs @@ -0,0 +1,18 @@ +mod lighting_replace_proxies; +use lighting_replace_proxies::*; + +use bevy::pbr::{DirectionalLightShadowMap, NotShadowCaster}; +use bevy::prelude::*; + +pub struct LightingPlugin; +impl Plugin for LightingPlugin { + fn build(&self, app: &mut App) { + app + .insert_resource(DirectionalLightShadowMap { size: 4096 }) + // FIXME: adding these since they are missing + .register_type::() + + .add_systems(PreUpdate, lighting_replace_proxies) // FIXME: you should actually run this in a specific state most likely + ; + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/mod.rs new file mode 100644 index 0000000..0ef05fb --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/mod.rs @@ -0,0 +1,28 @@ +pub mod camera; +pub use camera::*; + +pub mod lighting; +pub use lighting::*; + +pub mod relationships; +pub use relationships::*; + +pub mod physics; +pub use physics::*; + +use bevy::prelude::*; +use bevy_gltf_blueprints::*; + +pub struct CorePlugin; +impl Plugin for CorePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(( + LightingPlugin, + CameraPlugin, + PhysicsPlugin, + BlueprintsPlugin { + library_folder: "models/library".into(), + }, + )); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/controls.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/controls.rs new file mode 100644 index 0000000..fa3dc92 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/controls.rs @@ -0,0 +1,16 @@ +use bevy::{ + prelude::{info, ResMut}, + time::Time, +}; +use bevy_xpbd_3d::prelude::Physics; +use bevy_xpbd_3d::prelude::*; + +pub fn pause_physics(mut time: ResMut>) { + info!("pausing physics"); + time.pause(); +} + +pub fn resume_physics(mut time: ResMut>) { + info!("unpausing physics"); + time.unpause(); +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/mod.rs new file mode 100644 index 0000000..55ae083 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/mod.rs @@ -0,0 +1,29 @@ +pub mod physics_replace_proxies; +pub use physics_replace_proxies::*; + +pub mod utils; + +pub mod controls; +pub use controls::*; + +use crate::state::GameState; + +use bevy::prelude::*; +use bevy_xpbd_3d::prelude::*; + +use bevy_gltf_blueprints::GltfBlueprintsSet; + +pub struct PhysicsPlugin; +impl Plugin for PhysicsPlugin { + fn build(&self, app: &mut App) { + app.add_plugins((PhysicsPlugins::default(), PhysicsDebugPlugin::default())) + .register_type::() + .register_type::() + .add_systems( + Update, + physics_replace_proxies.after(GltfBlueprintsSet::AfterSpawn), + ) + .add_systems(OnEnter(GameState::InGame), resume_physics) + .add_systems(OnExit(GameState::InGame), pause_physics); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/physics_replace_proxies.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/physics_replace_proxies.rs new file mode 100644 index 0000000..8579815 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/physics_replace_proxies.rs @@ -0,0 +1,87 @@ +use bevy::prelude::*; +use bevy_xpbd_3d::prelude::Collider as XpbdCollider; +use bevy_xpbd_3d::prelude::*; + +use super::utils::*; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum Collider { + Ball(f32), + Cuboid(Vec3), + Capsule(Vec3, Vec3, f32), + #[default] + Mesh, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum AutoAABBCollider { + #[default] + Cuboid, + Ball, + Capsule, +} + +// replaces all physics stand-ins with the actual xpbd types +pub fn physics_replace_proxies( + meshes: Res>, + mesh_handles: Query<&Handle>, + mut proxy_colliders: Query< + (Entity, &Collider, &Name, &mut Visibility), + (Without, Added), + >, + // needed for tri meshes + children: Query<&Children>, + + mut commands: Commands, +) { + for proxy_colider in proxy_colliders.iter_mut() { + let (entity, collider_proxy, name, mut visibility) = proxy_colider; + // we hide the collider meshes: perhaps they should be removed altogether once processed ? + if name.ends_with("_collider") || name.ends_with("_sensor") { + *visibility = Visibility::Hidden; + } + + let mut xpbd_collider: XpbdCollider; + match collider_proxy { + Collider::Ball(radius) => { + info!("generating collider from proxy: ball"); + xpbd_collider = XpbdCollider::ball(*radius); + commands.entity(entity) + .insert(xpbd_collider) + //.insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes (also is there something like that in xpbd ?) !!! + ; + } + Collider::Cuboid(size) => { + info!("generating collider from proxy: cuboid"); + xpbd_collider = XpbdCollider::cuboid(size.x, size.y, size.z); + commands.entity(entity) + .insert(xpbd_collider) + //.insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes (also is there something like that in xpbd ?) !!! + ; + } + Collider::Capsule(a, b, radius) => { + info!("generating collider from proxy: capsule"); + // FIXME: temp + let height = Vec3::distance(*a, *b); + xpbd_collider = XpbdCollider::capsule(height, *radius); + info!("CAPSULE {} {}", height, radius); + commands.entity(entity) + .insert(xpbd_collider) + .insert( Mass(5.0) ) + //.insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes (also is there something like that in xpbd ?) !!! + ; + } + Collider::Mesh => { + info!("generating collider from proxy: mesh"); + for (_, collider_mesh) in + Mesh::search_in_children(entity, &children, &meshes, &mesh_handles) + { + xpbd_collider = XpbdCollider::trimesh_from_mesh(&collider_mesh).unwrap(); // convex_hull_from_mesh? + commands.entity(entity).insert(xpbd_collider); + } + } + } + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/utils.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/utils.rs new file mode 100644 index 0000000..7886710 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/physics/utils.rs @@ -0,0 +1,175 @@ +use bevy::prelude::*; +use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues}; +// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs + +pub(crate) trait Vec3Ext: Copy { + fn is_approx_zero(self) -> bool; + fn split(self, up: Vec3) -> SplitVec3; +} +impl Vec3Ext for Vec3 { + #[inline] + fn is_approx_zero(self) -> bool { + self.length_squared() < 1e-5 + } + + #[inline] + fn split(self, up: Vec3) -> SplitVec3 { + let vertical = up * self.dot(up); + let horizontal = self - vertical; + SplitVec3 { + vertical, + horizontal, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub(crate) struct SplitVec3 { + pub(crate) vertical: Vec3, + pub(crate) horizontal: Vec3, +} + +pub(crate) trait Vec2Ext: Copy { + fn is_approx_zero(self) -> bool; + fn x0y(self) -> Vec3; +} +impl Vec2Ext for Vec2 { + #[inline] + fn is_approx_zero(self) -> bool { + self.length_squared() < 1e-5 + } + + #[inline] + fn x0y(self) -> Vec3 { + Vec3::new(self.x, 0., self.y) + } +} + +pub(crate) trait MeshExt { + fn transform(&mut self, transform: Transform); + fn transformed(&self, transform: Transform) -> Mesh; + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]>; + fn search_in_children<'a>( + parent: Entity, + children: &'a Query<&Children>, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> Vec<(Entity, &'a Mesh)>; +} + +impl MeshExt for Mesh { + fn transform(&mut self, transform: Transform) { + for coords in self.read_coords_mut(Mesh::ATTRIBUTE_POSITION.clone()) { + let vec3 = (*coords).into(); + let transformed = transform.transform_point(vec3); + *coords = transformed.into(); + } + for normal in self.read_coords_mut(Mesh::ATTRIBUTE_NORMAL.clone()) { + let vec3 = (*normal).into(); + let transformed = transform.rotation.mul_vec3(vec3); + *normal = transformed.into(); + } + } + + fn transformed(&self, transform: Transform) -> Mesh { + let mut mesh = self.clone(); + mesh.transform(transform); + mesh + } + + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]> { + // Guaranteed by Bevy for the current usage + match self + .attribute_mut(id) + .expect("Failed to read unknown mesh attribute") + { + VertexAttributeValues::Float32x3(values) => values, + // Guaranteed by Bevy for the current usage + _ => unreachable!(), + } + } + + fn search_in_children<'a>( + parent: Entity, + children_query: &'a Query<&Children>, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> Vec<(Entity, &'a Mesh)> { + if let Ok(children) = children_query.get(parent) { + let mut result: Vec<_> = children + .iter() + .filter_map(|entity| mesh_handles.get(*entity).ok().map(|mesh| (*entity, mesh))) + .map(|(entity, mesh_handle)| { + ( + entity, + meshes + .get(mesh_handle) + .expect("Failed to get mesh from handle"), + ) + }) + .map(|(entity, mesh)| { + assert_eq!(mesh.primitive_topology(), PrimitiveTopology::TriangleList); + (entity, mesh) + }) + .collect(); + let mut inner_result = children + .iter() + .flat_map(|entity| { + Self::search_in_children(*entity, children_query, meshes, mesh_handles) + }) + .collect(); + result.append(&mut inner_result); + result + } else { + Vec::new() + } + } +} + +pub(crate) trait F32Ext: Copy { + fn is_approx_zero(self) -> bool; + fn squared(self) -> f32; + fn lerp(self, other: f32, ratio: f32) -> f32; +} + +impl F32Ext for f32 { + #[inline] + fn is_approx_zero(self) -> bool { + self.abs() < 1e-5 + } + + #[inline] + fn squared(self) -> f32 { + self * self + } + + #[inline] + fn lerp(self, other: f32, ratio: f32) -> f32 { + self.mul_add(1. - ratio, other * ratio) + } +} + +pub(crate) trait TransformExt: Copy { + fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform; + fn lerp(self, other: Transform, ratio: f32) -> Transform; +} + +impl TransformExt for Transform { + fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform { + let direction = target - self.translation; + let horizontal_direction = direction - up * direction.dot(up); + let look_target = self.translation + horizontal_direction; + self.looking_at(look_target, up) + } + + fn lerp(self, other: Transform, ratio: f32) -> Transform { + let translation = self.translation.lerp(other.translation, ratio); + let rotation = self.rotation.slerp(other.rotation, ratio); + let scale = self.scale.lerp(other.scale, ratio); + Transform { + translation, + rotation, + scale, + } + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/mod.rs new file mode 100644 index 0000000..4128453 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/mod.rs @@ -0,0 +1,11 @@ +pub mod relationships_insert_dependant_components; +pub use relationships_insert_dependant_components::*; + +use bevy::prelude::*; + +pub struct EcsRelationshipsPlugin; +impl Plugin for EcsRelationshipsPlugin { + fn build(&self, app: &mut App) { + app; + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/relationships_insert_dependant_components.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/relationships_insert_dependant_components.rs new file mode 100644 index 0000000..4e9ad17 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/core/relationships/relationships_insert_dependant_components.rs @@ -0,0 +1,15 @@ +use bevy::prelude::*; + +pub fn insert_dependant_component< + Dependant: Component, + Dependency: Component + std::default::Default, +>( + mut commands: Commands, + entities_without_depency: Query<(Entity, &Name), (With, Without)>, +) { + for (entity, name) in entities_without_depency.iter() { + let name = name.clone().to_string(); + commands.entity(entity).insert(Dependency::default()); + warn!("found an entity called {} with a {} component but without an {}, please check your assets", name.clone(), std::any::type_name::(), std::any::type_name::()); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_game.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_game.rs new file mode 100644 index 0000000..f87bc12 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_game.rs @@ -0,0 +1,85 @@ +use bevy::prelude::*; + +use crate::{ + assets::GameAssets, + state::{GameState, InAppRunning}, +}; +use bevy_gltf_blueprints::{BluePrintBundle, BlueprintName, GameWorldTag}; + +// use bevy_rapier3d::prelude::Velocity; +use bevy_xpbd_3d::prelude::*; + +use rand::Rng; + +pub fn setup_game( + mut commands: Commands, + game_assets: Res, + models: Res>, + mut next_game_state: ResMut>, +) { + println!("setting up all stuff"); + commands.insert_resource(AmbientLight { + color: Color::WHITE, + brightness: 0.2, + }); + // here we actually spawn our game world/level + + commands.spawn(( + SceneBundle { + // note: because of this issue https://github.com/bevyengine/bevy/issues/10436, "world" is now a gltf file instead of a scene + scene: models + .get(game_assets.world.id()) + .expect("main level should have been loaded") + .scenes[0] + .clone(), + ..default() + }, + bevy::prelude::Name::from("world"), + GameWorldTag, + InAppRunning, + )); + + next_game_state.set(GameState::InGame) +} + +pub fn spawn_test( + keycode: Res>, + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, +) { + if keycode.just_pressed(KeyCode::T) { + let world = game_world.single_mut(); + let world = world.1[0]; + + let mut rng = rand::thread_rng(); + let range = 5.5; + let x: f32 = rng.gen_range(-range..range); + let y: f32 = rng.gen_range(-range..range); + + let mut rng = rand::thread_rng(); + let range = 0.8; + let vel_x: f32 = rng.gen_range(-range..range); + let vel_y: f32 = rng.gen_range(2.0..2.5); + let vel_z: f32 = rng.gen_range(-range..range); + + let name_index: u64 = rng.gen(); + + let new_entity = commands + .spawn(( + BluePrintBundle { + blueprint: BlueprintName("Health_Pickup".to_string()), + transform: TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + ..Default::default() + }, + bevy::prelude::Name::from(format!("test{}", name_index)), + // BlueprintName("Health_Pickup".to_string()), + // SpawnHere, + // TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + LinearVelocity(Vec3::new(vel_x, vel_y, vel_z)), + AngularVelocity::ZERO, + )) + .id(); + commands.entity(world).add_child(new_entity); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_main_menu.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_main_menu.rs new file mode 100644 index 0000000..cecd13a --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/in_main_menu.rs @@ -0,0 +1,113 @@ +use bevy::prelude::*; + +use crate::state::{AppState, GameState, InMainMenu}; + +pub fn setup_main_menu(mut commands: Commands) { + commands.spawn((Camera2dBundle::default(), InMainMenu)); + + commands.spawn(( + TextBundle::from_section( + "SOME GAME TITLE !!", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(100.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + commands.spawn(( + TextBundle::from_section( + "New Game (press Enter to start, press T once the game is started for demo spawning)", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(200.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + /* + commands.spawn(( + TextBundle::from_section( + "Load Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(250.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + )); + + commands.spawn(( + TextBundle::from_section( + "Exit Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(300.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + ));*/ +} + +pub fn teardown_main_menu(bla: Query>, mut commands: Commands) { + for bli in bla.iter() { + commands.entity(bli).despawn_recursive(); + } +} + +pub fn main_menu( + keycode: Res>, + + mut next_app_state: ResMut>, + // mut next_game_state: ResMut>, + // mut save_requested_events: EventWriter, + // mut load_requested_events: EventWriter, +) { + if keycode.just_pressed(KeyCode::Return) { + next_app_state.set(AppState::AppLoading); + // next_game_state.set(GameState::None); + } + + if keycode.just_pressed(KeyCode::L) { + next_app_state.set(AppState::AppLoading); + // load_requested_events.send(LoadRequest { path: "toto".into() }) + } + + if keycode.just_pressed(KeyCode::S) { + // save_requested_events.send(SaveRequest { path: "toto".into() }) + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/mod.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/mod.rs new file mode 100644 index 0000000..28cbdf3 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/mod.rs @@ -0,0 +1,107 @@ +pub mod in_game; +use bevy_xpbd_3d::prelude::{Collision, CollisionEnded, CollisionStarted}; +pub use in_game::*; + +pub mod in_main_menu; +pub use in_main_menu::*; + +pub mod picking; +pub use picking::*; + +use crate::{ + insert_dependant_component, + state::{AppState, GameState}, +}; +use bevy::prelude::*; + +// this file is just for demo purposes, contains various types of components, systems etc + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum SoundMaterial { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo marker component +pub struct Player; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo component showing auto injection of components +pub struct ShouldBeWithPlayer; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo marker component +pub struct Interactible; + +fn player_move_demo( + keycode: Res>, + mut players: Query<&mut Transform, With>, +) { + let speed = 0.2; + if let Ok(mut player) = players.get_single_mut() { + if keycode.pressed(KeyCode::Left) { + player.translation.x += speed; + } + if keycode.pressed(KeyCode::Right) { + player.translation.x -= speed; + } + + if keycode.pressed(KeyCode::Up) { + player.translation.z += speed; + } + if keycode.pressed(KeyCode::Down) { + player.translation.z -= speed; + } + } +} + +// collision tests/debug +pub fn test_collision_events( + mut collision_started_events: EventReader, + mut collision_ended_events: EventReader, +) { + for CollisionStarted(entity1, entity2) in collision_started_events.read() { + println!("collision started") + } + + for CollisionEnded(entity1, entity2) in collision_ended_events.read() { + println!("collision ended") + } +} + +pub struct GamePlugin; +impl Plugin for GamePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(PickingPlugin) + .register_type::() + .register_type::() + .register_type::() + // little helper utility, to automatically inject components that are dependant on an other component + // ie, here an Entity with a Player component should also always have a ShouldBeWithPlayer component + // you get a warning if you use this, as I consider this to be stop-gap solution (usually you should have either a bundle, or directly define all needed components) + .add_systems( + Update, + ( + // insert_dependant_component::, + player_move_demo, //.run_if(in_state(AppState::Running)), + test_collision_events, + spawn_test, + ) + .run_if(in_state(GameState::InGame)), + ) + .add_systems(OnEnter(AppState::MenuRunning), setup_main_menu) + .add_systems(OnExit(AppState::MenuRunning), teardown_main_menu) + .add_systems(Update, (main_menu)) + .add_systems(OnEnter(AppState::AppRunning), setup_game); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/picking.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/picking.rs new file mode 100644 index 0000000..6731bbb --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/game/picking.rs @@ -0,0 +1,34 @@ +use super::Player; +use bevy::prelude::*; +use bevy_gltf_blueprints::GltfBlueprintsSet; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct Pickable; + +// very simple, crude picking (as in picking up objects) implementation + +pub fn picking( + players: Query<&GlobalTransform, With>, + pickables: Query<(Entity, &GlobalTransform), With>, + mut commands: Commands, +) { + for player_transforms in players.iter() { + for (pickable, pickable_transforms) in pickables.iter() { + let distance = player_transforms + .translation() + .distance(pickable_transforms.translation()); + if distance < 2.5 { + commands.entity(pickable).despawn_recursive(); + } + } + } +} + +pub struct PickingPlugin; +impl Plugin for PickingPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .add_systems(Update, (picking.after(GltfBlueprintsSet::AfterSpawn),)); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/main.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/main.rs new file mode 100644 index 0000000..6edba33 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/main.rs @@ -0,0 +1,33 @@ +use bevy::prelude::*; +use bevy_editor_pls::prelude::*; + +mod core; +use crate::core::*; + +pub mod assets; +use assets::*; + +pub mod state; +use state::*; + +mod game; +use game::*; + +mod test_components; +use test_components::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins.set(AssetPlugin::default()), + // editor + EditorPlugin::default(), + // our custom plugins + StatePlugin, + AssetsPlugin, + CorePlugin, // reusable plugins + GamePlugin, // specific to our game + ComponentsTestPlugin, // Showcases different type of components /structs + )) + .run(); +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/state.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/state.rs new file mode 100644 index 0000000..8e983d9 --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/state.rs @@ -0,0 +1,54 @@ +use bevy::app::AppExit; +use bevy::prelude::*; + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Default, States)] +pub enum AppState { + #[default] + CoreLoading, + MenuRunning, + AppLoading, + AppRunning, + AppEnding, + + // FIXME: not sure + LoadingGame, +} + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Default, States)] +pub enum GameState { + #[default] + None, + + InMenu, + InGame, + + InGameOver, + + InSaving, + InLoading, +} + +// tag components for all entities within a certain state (for despawning them if needed) , FIXME: seems kinda hack-ish +#[derive(Component)] +pub struct InCoreLoading; +#[derive(Component, Default)] +pub struct InMenuRunning; +#[derive(Component)] +pub struct InAppLoading; +#[derive(Component)] +pub struct InAppRunning; + +// components for tagging in game vs in game menu stuff +#[derive(Component, Default)] +pub struct InMainMenu; +#[derive(Component, Default)] +pub struct InMenu; +#[derive(Component, Default)] +pub struct InGame; + +pub struct StatePlugin; +impl Plugin for StatePlugin { + fn build(&self, app: &mut App) { + app.add_state::().add_state::(); + } +} diff --git a/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/test_components.rs b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/test_components.rs new file mode 100644 index 0000000..d0e6fbd --- /dev/null +++ b/examples/bevy_gltf_blueprints/basic_xpbd_physics/src/test_components.rs @@ -0,0 +1,80 @@ +use bevy::prelude::*; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct UnitTest; + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TuppleTestF32(f32); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TuppleTestU64(u64); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +pub struct TuppleTestStr(String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTest2(f32, u64, String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestBool(bool); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec2(Vec2); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec3(Vec3); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestColor(Color); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct BasicTest { + a: f32, + b: u64, + c: String, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum EnumTest { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +pub struct ComponentsTestPlugin; +impl Plugin for ComponentsTestPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::>(); + } +} diff --git a/examples/bevy_gltf_components/basic/Cargo.toml b/examples/bevy_gltf_components/basic/Cargo.toml index a073cb3..f5132a3 100644 --- a/examples/bevy_gltf_components/basic/Cargo.toml +++ b/examples/bevy_gltf_components/basic/Cargo.toml @@ -4,24 +4,8 @@ version = "0.3.0" edition = "2021" license = "MIT OR Apache-2.0" -[workspace] - [dependencies] bevy="0.12" bevy_gltf_components = { path = "../../../crates/bevy_gltf_components" } bevy_rapier3d = { version = "0.23.0", features = [ "serde-serialize", "debug-render-3d", "enhanced-determinism"] } bevy_editor_pls = { version = "0.6" } - - -#### --------------------Dev/ debug------------------------------- -# Enable high optimizations for dependencies (incl. Bevy), but not for our code: -[profile.dev.package."*"] -opt-level = 3 - -[profile.dev.package.bevy] -features = ["dynamic"] - -#### --------------------Production/ release------------------------------- -[profile.release] -strip = "debuginfo" -lto = "thin"