From f7fd4821993cc9fad0af6def285e234eaca189ed Mon Sep 17 00:00:00 2001 From: BlackPhlox <theluja@gmail.com> Date: Thu, 2 Jun 2022 15:54:01 +0200 Subject: [PATCH 01/63] Init bevy 0.8 update --- Cargo.lock | 695 ++++++++++++++++++++++++++++++--------------- Cargo.toml | 10 +- README.md | 5 +- examples/switch.rs | 4 +- src/lib.rs | 22 +- 5 files changed, 493 insertions(+), 243 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f84bead..179b189 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,22 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + [[package]] name = "ahash" version = "0.7.6" @@ -51,9 +67,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" [[package]] name = "approx" @@ -124,34 +140,19 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bevy" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fce306d40a111309ee61d4626efbafccdd46bb80657122c38061fa7264c08e4" +version = "0.8.0-dev" dependencies = [ "bevy_internal", ] -[[package]] -name = "bevy-crevice-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "191a752a01c3402deb24320acf42288bf822e5d22f19ae1d903797f02e9b0c33" -dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "bevy_app" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32660ae99fa3498ca379de28b7e2f447e6531b0e432bf200901efeec075553c1" +version = "0.8.0-dev" dependencies = [ "bevy_derive", "bevy_ecs", "bevy_reflect", + "bevy_tasks", "bevy_utils", "wasm-bindgen", "web-sys", @@ -159,9 +160,7 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2afd395240087924ba49c8cae2b00d007aeb1db53ee726a543b1e90dce2d3ab" +version = "0.8.0-dev" dependencies = [ "anyhow", "bevy_app", @@ -174,7 +173,7 @@ dependencies = [ "crossbeam-channel", "downcast-rs", "js-sys", - "ndk-glue", + "ndk-glue 0.6.2", "parking_lot", "rand", "serde", @@ -186,9 +185,10 @@ dependencies = [ [[package]] name = "bevy_config_cam" -version = "0.3.0" +version = "0.4.0" dependencies = [ "bevy", + "bevy_dolly", "rand", "strum", "strum_macros", @@ -196,12 +196,9 @@ dependencies = [ [[package]] name = "bevy_core" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c0f8614b6014671ab60bacb8bf681373d08b0bb15633b8ef72b895cf966d29" +version = "0.8.0-dev" dependencies = [ "bevy_app", - "bevy_derive", "bevy_ecs", "bevy_math", "bevy_reflect", @@ -212,35 +209,22 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d570bc9310196190910a5b1ffd8c8c35bd6b73f918d0651ae3c3d4e57be9a7" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_asset", - "bevy_core", + "bevy_derive", "bevy_ecs", + "bevy_reflect", "bevy_render", + "bevy_transform", "bevy_utils", -] - -[[package]] -name = "bevy_crevice" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da0a284fb26c02cb96ef4d5bbf4de5fad7e1a901730035a61813bf64e28482e" -dependencies = [ - "bevy-crevice-derive", - "bytemuck", - "glam", - "mint", + "serde", ] [[package]] name = "bevy_derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6abddf2ed415f31d28a9bf9ab3c0bc857e98a722858d38dba65bdda481f8d714" +version = "0.8.0-dev" dependencies = [ "bevy_macro_utils", "quote", @@ -249,25 +233,30 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebf72ea058cfc379756e9da7de6861174e1860504f41e3e5a46d5b1c35d6644" +version = "0.8.0-dev" dependencies = [ "bevy_app", - "bevy_core", "bevy_ecs", "bevy_log", + "bevy_time", "bevy_utils", ] +[[package]] +name = "bevy_dolly" +version = "0.0.1" +dependencies = [ + "bevy", + "dolly", +] + [[package]] name = "bevy_ecs" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e67dd06b14e787d2026fe6e2b63f67482afcc62284f20ea2784d8b0662e95f" +version = "0.8.0-dev" dependencies = [ "async-channel", "bevy_ecs_macros", + "bevy_ptr", "bevy_reflect", "bevy_tasks", "bevy_utils", @@ -275,14 +264,11 @@ dependencies = [ "fixedbitset", "fxhash", "serde", - "thiserror", ] [[package]] name = "bevy_ecs_macros" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718923a491490bd81074492d61fc08134f9c62a29ba8666818cd7a6630421246" +version = "0.8.0-dev" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -290,17 +276,24 @@ dependencies = [ "syn", ] +[[package]] +name = "bevy_encase_derive" +version = "0.8.0-dev" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + [[package]] name = "bevy_gltf" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e07bda7721091c1a683343d466132dc69dec65aa83d8c9e328a2fb3431f03be" +version = "0.8.0-dev" dependencies = [ "anyhow", "base64", "bevy_app", "bevy_asset", "bevy_core", + "bevy_core_pipeline", "bevy_ecs", "bevy_hierarchy", "bevy_log", @@ -318,9 +311,7 @@ dependencies = [ [[package]] name = "bevy_hierarchy" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f407f152f35541a099484200afe3b0ca09ce625469e8233dcdc264d6f88e01a" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_ecs", @@ -331,9 +322,7 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4ec4f6e38ef1b41ff68ec7badd6afc5c9699191e61e511c4abee91a5888afc" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_ecs", @@ -343,9 +332,7 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d518a8e5f526a9537fc8408a284caec7af22b23c3b23c0dee08bacc0930e2f1a" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_asset", @@ -360,22 +347,25 @@ dependencies = [ "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", - "ndk-glue", + "ndk-glue 0.6.2", ] [[package]] name = "bevy_log" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943ec496720ded2ff62b292d8e5fc845817a504915f41b7c5fd12b1380300f75" +version = "0.8.0-dev" dependencies = [ "android_log-sys", "bevy_app", @@ -388,34 +378,33 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ddfc33a99547e36718e56e414541e461c74ec318ff987a1e9f4ff46d0dacbb" +version = "0.8.0-dev" dependencies = [ - "cargo-manifest", "quote", "syn", + "toml", ] [[package]] name = "bevy_math" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20288df0f70ff258bbaffaf55209f1271a7436438591bbffc3d81e4d84b423f2" +version = "0.8.0-dev" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.8.0-dev" dependencies = [ - "bevy_reflect", "glam", ] [[package]] name = "bevy_pbr" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06adee54840f18cfeda7af4cdc57608644fa840be076a562353f896bfdb9c694" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_asset", - "bevy_core", "bevy_core_pipeline", "bevy_ecs", "bevy_math", @@ -428,11 +417,13 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "bevy_ptr" +version = "0.8.0-dev" + [[package]] name = "bevy_reflect" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d0793107bc4b7c6bd04232d739fc8d70aa5fb313bfad6e850f91f79b2557eed" +version = "0.8.0-dev" dependencies = [ "bevy_reflect_derive", "bevy_utils", @@ -447,9 +438,7 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81c88de8067d19dfde31662ee78e3ee6971e2df27715799f91b515b37a636677" +version = "0.8.0-dev" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -460,19 +449,19 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a358da8255b704153913c3499b3693fa5cfe13a48725ac6e76b043fa5633bc8" +version = "0.8.0-dev" dependencies = [ "anyhow", "bevy_app", "bevy_asset", "bevy_core", - "bevy_crevice", "bevy_derive", "bevy_ecs", + "bevy_encase_derive", "bevy_math", + "bevy_mikktspace", "bevy_reflect", + "bevy_render_macros", "bevy_transform", "bevy_utils", "bevy_window", @@ -480,6 +469,7 @@ dependencies = [ "codespan-reporting", "copyless", "downcast-rs", + "encase", "futures-lite", "hex", "hexasphere", @@ -494,11 +484,19 @@ dependencies = [ "wgpu", ] +[[package]] +name = "bevy_render_macros" +version = "0.8.0-dev" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "bevy_scene" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea240f2ffce9f58a5601cc5ead24111f577dc4c656452839eb1fdf4b7a28529" +version = "0.8.0-dev" dependencies = [ "anyhow", "bevy_app", @@ -513,11 +511,32 @@ dependencies = [ "uuid", ] +[[package]] +name = "bevy_sprite" +version = "0.8.0-dev" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags", + "bytemuck", + "copyless", + "guillotiere", + "rectangle-pack", + "serde", + "thiserror", +] + [[package]] name = "bevy_tasks" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2b0f0b86c8f78c53a2d4c669522f45e725ed9d9c3d734f54ec30876494e04e" +version = "0.8.0-dev" dependencies = [ "async-channel", "async-executor", @@ -527,11 +546,40 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "bevy_text" +version = "0.8.0-dev" +dependencies = [ + "ab_glyph", + "anyhow", + "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.8.0-dev" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", +] + [[package]] name = "bevy_transform" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f7a77900fb23f24ca312c1f8df3eb47a45161326f41e9b4ef05b039793503" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_ecs", @@ -540,14 +588,37 @@ dependencies = [ "bevy_reflect", ] +[[package]] +name = "bevy_ui" +version = "0.8.0-dev" +dependencies = [ + "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", + "stretch", +] + [[package]] name = "bevy_utils" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f354c584812996febd48cc885f36b23004b49d6680e73fc95a69a2bb17a48e5" +version = "0.8.0-dev" dependencies = [ "ahash", - "bevy_derive", "getrandom", "hashbrown", "instant", @@ -557,12 +628,11 @@ dependencies = [ [[package]] name = "bevy_window" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04fe33d177e10b2984fa90c1d19496fc6f6e7b36d4442699d359e2b4b507873d" +version = "0.8.0-dev" dependencies = [ "bevy_app", "bevy_ecs", + "bevy_input", "bevy_math", "bevy_utils", "raw-window-handle", @@ -571,9 +641,7 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c0e3b94cc73907f8a9f82945ca006a39ed2ab401aca0974b47a007a468509f" +version = "0.8.0-dev" dependencies = [ "approx", "bevy_app", @@ -582,6 +650,7 @@ dependencies = [ "bevy_math", "bevy_utils", "bevy_window", + "crossbeam-channel", "raw-window-handle", "wasm-bindgen", "web-sys", @@ -617,9 +686,9 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" [[package]] name = "bytemuck" @@ -663,17 +732,6 @@ dependencies = [ "nix", ] -[[package]] -name = "cargo-manifest" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6d65c7592744998c67947ec771c62687c76f00179a83ffd563c0482046bb98" -dependencies = [ - "serde", - "serde_derive", - "toml", -] - [[package]] name = "cc" version = "1.0.73" @@ -764,6 +822,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "const_panic" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b81387ce99333fe045d8256d2f4cf8ed8fdc7342f0b5fe74fbb3cc70cd91ad53" + [[package]] name = "copyless" version = "0.1.5" @@ -939,12 +1003,53 @@ dependencies = [ "libloading", ] +[[package]] +name = "dolly" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ca62af80028e899eae554918f89106ae480104b1de01965b454601e1ad87de" +dependencies = [ + "glam", +] + [[package]] name = "downcast-rs" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +[[package]] +name = "encase" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f33a42bdd49d6bd63cc10778a55d3f702254c68017a634be723063dc9bad270" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror", +] + +[[package]] +name = "encase_derive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d46ef76e6a127b37791f8e48575fc6db50f030ee811ed19c1e381cf819ec1c57" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36232cf81f78d216f9ae0865e8f8ac562fb6a5dc8d2e3e98c00ccec0b7c6473f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "env_logger" version = "0.8.4" @@ -964,6 +1069,15 @@ dependencies = [ "serde", ] +[[package]] +name = "euclid" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" +dependencies = [ + "num-traits", +] + [[package]] name = "event-listener" version = "2.5.2" @@ -1062,7 +1176,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" dependencies = [ "bytemuck", - "mint", + "num-traits", "serde", ] @@ -1113,6 +1227,17 @@ dependencies = [ "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.5.3" @@ -1152,6 +1277,16 @@ dependencies = [ "bitflags", ] +[[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.11.2" @@ -1207,9 +1342,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "image" -version = "0.23.14" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +checksum = "28edd9d7bc256be2502e325ac0628bde30b7001b9b52e0abe31a1a9dc2701212" dependencies = [ "bytemuck", "byteorder", @@ -1221,9 +1356,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "e6012d540c5baa3589337a98ce73408de9b5a25ec9fc2c6fd6be8f0d39e0ca5a" dependencies = [ "autocfg", "hashbrown", @@ -1255,9 +1390,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "jni-sys" @@ -1292,9 +1427,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.124" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a41fed9d98f27ab1c6d161da622a4fa35e8a54a8adc24bbf3ddd0ef70b0e50" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libloading" @@ -1306,6 +1441,12 @@ dependencies = [ "winapi", ] +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + [[package]] name = "lock_api" version = "0.4.7" @@ -1318,9 +1459,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] @@ -1345,9 +1486,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memmap2" @@ -1387,33 +1528,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - [[package]] name = "mio" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799" dependencies = [ "libc", "log", - "miow", - "ntapi", "wasi 0.11.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "windows-sys", ] [[package]] @@ -1444,7 +1568,20 @@ checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" dependencies = [ "bitflags", "jni-sys", - "ndk-sys", + "ndk-sys 0.2.2", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.3.0", "num_enum", "thiserror", ] @@ -1460,15 +1597,30 @@ name = "ndk-glue" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.5.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.2.2", +] + +[[package]] +name = "ndk-glue" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0c4a7b83860226e6b4183edac21851f05d5a51756e97a1144b7f5a6b63e65f" dependencies = [ "android_logger", "lazy_static", "libc", "log", - "ndk", + "ndk 0.6.0", "ndk-context", "ndk-macro", - "ndk-sys", + "ndk-sys 0.3.0", ] [[package]] @@ -1490,6 +1642,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + [[package]] name = "nix" version = "0.22.3" @@ -1513,20 +1674,11 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -1534,9 +1686,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -1545,9 +1697,9 @@ dependencies = [ [[package]] name = "num-rational" -version = "0.3.2" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +checksum = "d41702bd167c2df5520b384281bc111a4b5efcf7fbc4c9c222c815b07e0a6a6a" dependencies = [ "autocfg", "num-integer", @@ -1556,9 +1708,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -1615,9 +1767,18 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.10.0" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" + +[[package]] +name = "owned_ttf_parser" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d" +dependencies = [ + "ttf-parser", +] [[package]] name = "parking" @@ -1658,9 +1819,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -1668,9 +1829,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pkg-config" @@ -1705,18 +1866,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.37" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9145ac0af1d93c638c98c40cf7d25665f427b2a44ad0a99b1dccf3e2f25bb987" +checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" [[package]] name = "quote" @@ -1772,6 +1933,12 @@ dependencies = [ "cty", ] +[[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.2.13" @@ -1783,9 +1950,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.5.5" +version = "1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1" dependencies = [ "aho-corasick", "memchr", @@ -1803,9 +1970,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64" [[package]] name = "renderdoc-sys" @@ -1838,9 +2005,9 @@ checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "scoped-tls" @@ -1856,18 +2023,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1876,9 +2043,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "itoa", "ryu", @@ -1947,6 +2114,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "stretch" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0dc6d20ce137f302edf90f9cd3d278866fd7fb139efca6f246161222ad6d87" +dependencies = [ + "lazy_static", + "libm", +] + [[package]] name = "strsim" version = "0.10.0" @@ -1972,15 +2149,21 @@ dependencies = [ "syn", ] +[[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.91" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +checksum = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1994,18 +2177,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -2027,7 +2210,6 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ - "indexmap", "serde", ] @@ -2045,9 +2227,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote", @@ -2066,9 +2248,9 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -2104,6 +2286,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ttf-parser" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c74c96594835e10fa545e2a51e8709f30b173a092bfd6036ef2cec53376244f3" + +[[package]] +name = "unicode-ident" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee" + [[package]] name = "unicode-width" version = "0.1.9" @@ -2112,15 +2306,15 @@ checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "uuid" -version = "0.8.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "c6d5d669b51467dcf7b2f1a796ce0f955f05f01cafda6c19d6e95f730df29238" dependencies = [ "getrandom", "serde", @@ -2350,9 +2544,9 @@ dependencies = [ [[package]] name = "wgpu-hal" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93b1a9400e8d7f32dd4dd909bb9a391015d70633d639775ddd3f14d1104bc970" +checksum = "d684ea6a34974a2fc19f1dfd183d11a62e22d75c4f187a574bb1224df8e056c2" dependencies = [ "arrayvec", "ash", @@ -2426,6 +2620,49 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + [[package]] name = "winit" version = "0.26.1" @@ -2443,9 +2680,9 @@ dependencies = [ "libc", "log", "mio", - "ndk", - "ndk-glue", - "ndk-sys", + "ndk 0.5.0", + "ndk-glue 0.5.2", + "ndk-sys 0.2.2", "objc", "parking_lot", "percent-encoding", @@ -2479,6 +2716,12 @@ dependencies = [ "nom", ] +[[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.4" diff --git a/Cargo.toml b/Cargo.toml index b864604..532787b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_config_cam" -version = "0.3.0" +version = "0.4.0" authors = ["Black Phlox <bphlox@gmail.com>"] license = "MIT OR Apache-2.0" edition = "2021" @@ -14,7 +14,6 @@ exclude = [ "assets/*", ".github/*", ] -resolver = "2" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -25,13 +24,16 @@ name = "bevy_config_cam" rand = "0.8.0" strum = "0.24.0" strum_macros = "0.24.0" +bevy_dolly = { path = "../bevy_dolly" } [dependencies.bevy] -version = "0.7" +#version = "0.7" +path = "../bevy" features = ["bevy_render","bevy_pbr"] default-features = false [dev-dependencies.bevy] -version = "0.7" +#version = "0.7" +path = "../bevy" features = ["bevy_core_pipeline", "bevy_pbr", "bevy_gltf", "x11", "wayland"] default-features = false \ No newline at end of file diff --git a/README.md b/README.md index ad3465c..027bf7e 100644 --- a/README.md +++ b/README.md @@ -78,9 +78,9 @@ Adding this plugin to your project is *very* simple, it only requires you to wri Add the correct version to your `Cargo.toml`, you can find the version you are looking for under the support section. The thing you should be adding should look like this (only add the line marked by `# <--`): ```toml [dependencies] -bevy = { version = "0.7"} +bevy = { version = "0.8"} # ... -bevy_config_cam = { version = "0.3.0"} # <-- +bevy_config_cam = { version = "0.4.0"} # <-- ``` ### Step 2. - Add to project @@ -125,6 +125,7 @@ Note: That some of them are overwritten by accessing the settings or the changin |0.5|0.1.X| |0.6|0.2.X| |0.7|0.3.X| +|0.8|0.4.X| # Licensing The project is under dual license MIT and Apache-2.0, so yoink to your hearts content, just remember the license agreements. diff --git a/examples/switch.rs b/examples/switch.rs index 39f7876..44c460b 100644 --- a/examples/switch.rs +++ b/examples/switch.rs @@ -52,7 +52,7 @@ fn setup( // cube camera commands - .spawn_bundle(PerspectiveCameraBundle { + .spawn_bundle(Camera3dBundle { transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), ..Default::default() }) @@ -60,7 +60,7 @@ fn setup( // topdown camera commands - .spawn_bundle(PerspectiveCameraBundle { + .spawn_bundle(Camera3dBundle { transform: Transform::from_xyz(0.0, 10.0, 0.1).looking_at(Vec3::ZERO, Vec3::Y), ..Default::default() }) diff --git a/src/lib.rs b/src/lib.rs index aeb0dde..ef23c58 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,7 +8,7 @@ use bevy::{ render::{ camera::Camera, camera::CameraProjection, - camera::{ActiveCamera, Camera3d, PerspectiveProjection}, + camera::PerspectiveProjection, }, window::Windows, }; @@ -213,7 +213,7 @@ fn setup( b.insert(PlayerMove) .with_children(|parent| { parent - .spawn_bundle(PerspectiveCameraBundle { + .spawn_bundle(Camera3dBundle { transform: Transform::from_xyz(-2.0, 5.0, 5.0) .looking_at(Vec3::ZERO, Vec3::Y), ..Default::default() @@ -225,7 +225,7 @@ fn setup( // camera commands - .spawn_bundle(PerspectiveCameraBundle { + .spawn_bundle(Camera3dBundle { camera: Camera { ..Default::default() }, @@ -412,20 +412,24 @@ fn move_camera( #[allow(clippy::type_complexity)] fn toggle_camera_parent( - mut act_cams: ResMut<ActiveCamera<Camera3d>>, + mut act_cams: Query<&mut Camera>, mut settings: ResMut<MovementSettings>, mut query: ParamSet<(Query<(&FlyCam, Entity)>, Query<(&PlayerCam, Entity)>)>, ) { if settings.locked_to_player && !settings.ltp { let p1 = query.p1(); let (_, b) = p1.single(); - act_cams.set(b); + act_cams.iter_mut().for_each(|mut cam| { + cam.set(Box::new(b)); + }); settings.ltp = true; } else if !settings.locked_to_player && settings.ltp { let pr = query.p0(); let (_, b) = pr.single(); - act_cams.set(b); + act_cams.iter_mut().for_each(|mut cam| { + cam.set(Box::new(b)); + }); settings.ltp = false; } } @@ -472,8 +476,8 @@ fn scroll( project.update(prim.width(), prim.height()); //Update camera with the new fov - camera.projection_matrix = project.get_projection_matrix(); - camera.depth_calculation = project.depth_calculation(); + //camera.projection_matrix = project.get_projection_matrix(); + //camera.depth_calculation = project.depth_calculation(); println!("FOV: {:?}", project.fov); } @@ -580,7 +584,7 @@ fn initial_grab_cursor(mut windows: ResMut<Windows>) { /// Spawns the `Camera3dBundle` to be controlled fn setup_player(mut commands: Commands) { commands - .spawn_bundle(PerspectiveCameraBundle { + .spawn_bundle(Camera3dBundle { transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), ..Default::default() }) From c6e22353903306ffa000c320bcbc2a6f4c438030 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 13 Jun 2022 23:46:56 +0200 Subject: [PATCH 02/63] Update LICENSE-APACHE --- LICENSE-APACHE | 192 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 190 insertions(+), 2 deletions(-) diff --git a/LICENSE-APACHE b/LICENSE-APACHE index d807a6c..11069ed 100644 --- a/LICENSE-APACHE +++ b/LICENSE-APACHE @@ -1,4 +1,192 @@ -Copyright 2022 Mikkel Rasmussen + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -10,4 +198,4 @@ Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and -limitations under the License. \ No newline at end of file +limitations under the License. From b1fa50e20eb5b98c3f315213168505d0d510e87f Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 13 Jun 2022 23:48:54 +0200 Subject: [PATCH 03/63] Delete LICENSE-APACHE --- LICENSE-APACHE | 201 ------------------------------------------------- 1 file changed, 201 deletions(-) delete mode 100644 LICENSE-APACHE diff --git a/LICENSE-APACHE b/LICENSE-APACHE deleted file mode 100644 index 11069ed..0000000 --- a/LICENSE-APACHE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. From 2b9ce77a595e741de98cda1dd4d560e589aca35e Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 13 Jun 2022 23:49:19 +0200 Subject: [PATCH 04/63] Create LICENSE-APACHE --- LICENSE-APACHE | 201 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 LICENSE-APACHE diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From bfea8687a76f534fcfa9cb586610f6b8ec7d5087 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 16:47:29 +0200 Subject: [PATCH 05/63] Added change detection for ergonomic improvements --- .gitignore | 2 +- Cargo.lock | 968 ++++++++++++++++++++++++++++++-------------- Cargo.toml | 15 +- examples/minimal.rs | 69 +++- src/lib.rs | 709 +------------------------------- src/lib2.rs | 709 ++++++++++++++++++++++++++++++++ 6 files changed, 1447 insertions(+), 1025 deletions(-) create mode 100644 src/lib2.rs diff --git a/.gitignore b/.gitignore index 8d935a6..088ba6b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,7 @@ # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html -#Cargo.lock +Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk diff --git a/Cargo.lock b/Cargo.lock index f84bead..e41890d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,22 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ab_glyph" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + [[package]] name = "ahash" version = "0.7.6" @@ -40,6 +56,15 @@ dependencies = [ "log", ] +[[package]] +name = "android_system_properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -51,9 +76,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.56" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" +checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" [[package]] name = "approx" @@ -72,9 +97,9 @@ checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" [[package]] name = "ash" -version = "0.34.0+1.2.203" +version = "0.37.0+1.3.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f780da53d0063880d45554306489f09dd8d1bda47688b4a57bc579119356df" +checksum = "006ca68e0f2b03f22d6fa9f2860f85aed430d257fec20f8879b2145e7c7ae1a6" dependencies = [ "libloading", ] @@ -106,9 +131,9 @@ dependencies = [ [[package]] name = "async-task" -version = "4.2.0" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" [[package]] name = "autocfg" @@ -124,34 +149,23 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" [[package]] name = "bevy" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fce306d40a111309ee61d4626efbafccdd46bb80657122c38061fa7264c08e4" +checksum = "55f08528a4e59d607460513a823b40f602d013c1a00f57b824f1075d5d48c3cd" dependencies = [ "bevy_internal", ] -[[package]] -name = "bevy-crevice-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "191a752a01c3402deb24320acf42288bf822e5d22f19ae1d903797f02e9b0c33" -dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "bevy_app" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32660ae99fa3498ca379de28b7e2f447e6531b0e432bf200901efeec075553c1" +checksum = "53d26d6ffdf493609d2fedc1018a2ef0cb4d8e48f6d3bcea56fa2df81867e464" dependencies = [ "bevy_derive", "bevy_ecs", "bevy_reflect", + "bevy_tasks", "bevy_utils", "wasm-bindgen", "web-sys", @@ -159,9 +173,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2afd395240087924ba49c8cae2b00d007aeb1db53ee726a543b1e90dce2d3ab" +checksum = "3d8fb95306d5f18fa70df40632cd984993aeb71e91ce059ae99699098a4f9ce9" dependencies = [ "anyhow", "bevy_app", @@ -173,10 +187,10 @@ dependencies = [ "bevy_utils", "crossbeam-channel", "downcast-rs", + "fastrand", "js-sys", "ndk-glue", - "parking_lot", - "rand", + "parking_lot 0.12.1", "serde", "thiserror", "wasm-bindgen", @@ -186,9 +200,10 @@ dependencies = [ [[package]] name = "bevy_config_cam" -version = "0.3.0" +version = "0.4.0" dependencies = [ "bevy", + "bevy_dolly", "rand", "strum", "strum_macros", @@ -196,12 +211,11 @@ dependencies = [ [[package]] name = "bevy_core" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12c0f8614b6014671ab60bacb8bf681373d08b0bb15633b8ef72b895cf966d29" +checksum = "c6712146d54fff9e1865362e9f39a7b63c7b037ddb72a3d7bb05b959213fb61e" dependencies = [ "bevy_app", - "bevy_derive", "bevy_ecs", "bevy_math", "bevy_reflect", @@ -212,35 +226,27 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d570bc9310196190910a5b1ffd8c8c35bd6b73f918d0651ae3c3d4e57be9a7" +checksum = "080bb00399b6d7697e505f871d67c6de8b52eb06b47b0cda2be80c2396805983" dependencies = [ "bevy_app", "bevy_asset", - "bevy_core", + "bevy_derive", "bevy_ecs", + "bevy_reflect", "bevy_render", + "bevy_transform", "bevy_utils", -] - -[[package]] -name = "bevy_crevice" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3da0a284fb26c02cb96ef4d5bbf4de5fad7e1a901730035a61813bf64e28482e" -dependencies = [ - "bevy-crevice-derive", - "bytemuck", - "glam", - "mint", + "radsort", + "serde", ] [[package]] name = "bevy_derive" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6abddf2ed415f31d28a9bf9ab3c0bc857e98a722858d38dba65bdda481f8d714" +checksum = "a4b8f0786d1fc7e0d35297917be463db3d0886f7bd8d4221ca3d565502579ffb" dependencies = [ "bevy_macro_utils", "quote", @@ -249,25 +255,34 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ebf72ea058cfc379756e9da7de6861174e1860504f41e3e5a46d5b1c35d6644" +checksum = "adab74ee5375fbf5d2b1d3da41de8d1491a8a706d17441b5e31214b65349d692" dependencies = [ "bevy_app", - "bevy_core", "bevy_ecs", "bevy_log", + "bevy_time", "bevy_utils", ] +[[package]] +name = "bevy_dolly" +version = "0.0.1" +dependencies = [ + "bevy", + "dolly", +] + [[package]] name = "bevy_ecs" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79e67dd06b14e787d2026fe6e2b63f67482afcc62284f20ea2784d8b0662e95f" +checksum = "a5643dc27b7d6778e3a66c8e0f6ad1fd33309aa2fa61d935f360ccc85b7be6a2" dependencies = [ "async-channel", "bevy_ecs_macros", + "bevy_ptr", "bevy_reflect", "bevy_tasks", "bevy_utils", @@ -275,14 +290,14 @@ dependencies = [ "fixedbitset", "fxhash", "serde", - "thiserror", + "thread_local", ] [[package]] name = "bevy_ecs_macros" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "718923a491490bd81074492d61fc08134f9c62a29ba8666818cd7a6630421246" +checksum = "a5f2f12677f8725d40930d0a19652f007fe0ef5ac38e23817cfc4930c61f5680" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -290,17 +305,28 @@ dependencies = [ "syn", ] +[[package]] +name = "bevy_encase_derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a767adc36ce1fc917a736843b026d4de7069d90ed5e669c852481ef69fd5aa" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + [[package]] name = "bevy_gltf" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e07bda7721091c1a683343d466132dc69dec65aa83d8c9e328a2fb3431f03be" +checksum = "150cc6782c4472600c2ade5d78c6ce481c992690f0499e63765aba752d7e0f04" dependencies = [ "anyhow", "base64", "bevy_app", "bevy_asset", "bevy_core", + "bevy_core_pipeline", "bevy_ecs", "bevy_hierarchy", "bevy_log", @@ -309,6 +335,7 @@ dependencies = [ "bevy_reflect", "bevy_render", "bevy_scene", + "bevy_tasks", "bevy_transform", "bevy_utils", "gltf", @@ -318,9 +345,9 @@ dependencies = [ [[package]] name = "bevy_hierarchy" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f407f152f35541a099484200afe3b0ca09ce625469e8233dcdc264d6f88e01a" +checksum = "8e2e4c20d7c843cd26ef3c5d7b4c20e3e32c275943e2437ecaca1cfd6cfe3b30" dependencies = [ "bevy_app", "bevy_ecs", @@ -331,9 +358,9 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4ec4f6e38ef1b41ff68ec7badd6afc5c9699191e61e511c4abee91a5888afc" +checksum = "a11c70573fb4d4c056ba32cfa553daa7e6e1245cb876ccfbe322640928b7ee1c" dependencies = [ "bevy_app", "bevy_ecs", @@ -343,9 +370,9 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d518a8e5f526a9537fc8408a284caec7af22b23c3b23c0dee08bacc0930e2f1a" +checksum = "0d603b597772130782eab6e604706cbb764fb037f9cf0a1904b6f342845b6f44" dependencies = [ "bevy_app", "bevy_asset", @@ -360,11 +387,16 @@ dependencies = [ "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", @@ -373,9 +405,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943ec496720ded2ff62b292d8e5fc845817a504915f41b7c5fd12b1380300f75" +checksum = "8cafb12fc84734236e36f407ab62c72d5d4279fa4777e40a95d7cc973cbabcd1" dependencies = [ "android_log-sys", "bevy_app", @@ -388,34 +420,41 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7ddfc33a99547e36718e56e414541e461c74ec318ff987a1e9f4ff46d0dacbb" +checksum = "4d081af83b701e16cad209255ba6b383744dfa49efa99eb6505989f293305ab3" dependencies = [ - "cargo-manifest", "quote", "syn", + "toml", ] [[package]] name = "bevy_math" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20288df0f70ff258bbaffaf55209f1271a7436438591bbffc3d81e4d84b423f2" +checksum = "db5394e86c5708d3aa506c6e98ec4ed2a4083a7a018c6693d9ac0e77ebfabfc2" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b299a61175a6f7e7398f83cd5b50920fd8bad4df674e614ad94f25f8426509" dependencies = [ - "bevy_reflect", "glam", ] [[package]] name = "bevy_pbr" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06adee54840f18cfeda7af4cdc57608644fa840be076a562353f896bfdb9c694" +checksum = "ed9a81bbd02f5e0a57899a41aec37d9cb14965e1e4d510547f3f680323d05c0f" dependencies = [ "bevy_app", "bevy_asset", - "bevy_core", "bevy_core_pipeline", "bevy_ecs", "bevy_math", @@ -426,20 +465,29 @@ dependencies = [ "bevy_window", "bitflags", "bytemuck", + "radsort", ] +[[package]] +name = "bevy_ptr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92d5679e89602a18682a37846573dcd1979410179e14204280460ba9fb8713a" + [[package]] name = "bevy_reflect" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d0793107bc4b7c6bd04232d739fc8d70aa5fb313bfad6e850f91f79b2557eed" +checksum = "08798e67f2d4e6898ef117d8c99cf3b50a8eebc8da4159e6dad2657a0fbe9a4e" dependencies = [ + "bevy_ptr", "bevy_reflect_derive", "bevy_utils", "downcast-rs", "erased-serde", "glam", - "parking_lot", + "once_cell", + "parking_lot 0.12.1", "serde", "smallvec", "thiserror", @@ -447,9 +495,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81c88de8067d19dfde31662ee78e3ee6971e2df27715799f91b515b37a636677" +checksum = "19209a7f0238053802b7de04e6724bd90d4ed7d90e87101dbd1b64cca64ff694" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -460,19 +508,24 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a358da8255b704153913c3499b3693fa5cfe13a48725ac6e76b043fa5633bc8" +checksum = "bb49530388ef17cff3fb8bd5e47372fb3cfeb4befc73e3036f6462ac20f049ef" dependencies = [ "anyhow", "bevy_app", "bevy_asset", "bevy_core", - "bevy_crevice", "bevy_derive", "bevy_ecs", + "bevy_encase_derive", + "bevy_hierarchy", + "bevy_log", "bevy_math", + "bevy_mikktspace", "bevy_reflect", + "bevy_render_macros", + "bevy_time", "bevy_transform", "bevy_utils", "bevy_window", @@ -480,32 +533,49 @@ dependencies = [ "codespan-reporting", "copyless", "downcast-rs", + "encase", "futures-lite", "hex", "hexasphere", "image", "naga", "once_cell", - "parking_lot", + "parking_lot 0.12.1", "regex", "serde", "smallvec", "thiserror", + "thread_local", "wgpu", ] +[[package]] +name = "bevy_render_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d0b7a51fa819c20c64f43856c5aaea40f853050bbb09b9ba3672e5ff2688a5" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "bevy_scene" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ea240f2ffce9f58a5601cc5ead24111f577dc4c656452839eb1fdf4b7a28529" +checksum = "0064d73ebb0de39901478b493604a1a6d448fd337b66803004c60f41f1fa6c37" dependencies = [ "anyhow", "bevy_app", "bevy_asset", + "bevy_derive", "bevy_ecs", "bevy_hierarchy", "bevy_reflect", + "bevy_render", + "bevy_transform", "bevy_utils", "ron", "serde", @@ -513,25 +583,88 @@ dependencies = [ "uuid", ] +[[package]] +name = "bevy_sprite" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f83dfe8897d6c0d9d5ce3818d49a13e58ae2b9b9ecf4f4bb85aa31bb0678f68" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags", + "bytemuck", + "copyless", + "fixedbitset", + "guillotiere", + "rectangle-pack", + "serde", + "thiserror", +] + [[package]] name = "bevy_tasks" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db2b0f0b86c8f78c53a2d4c669522f45e725ed9d9c3d734f54ec30876494e04e" +checksum = "ff874c91a36eaac3ef957c6f3b590fb71332d9d136671cc858847d56fe9f80a3" dependencies = [ "async-channel", "async-executor", "event-listener", "futures-lite", "num_cpus", + "once_cell", "wasm-bindgen-futures", ] +[[package]] +name = "bevy_text" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef05a788c2c04aaa5db95b22a8f0fff0d3a0b08a7bcd1a71f050a628b38eec6e" +dependencies = [ + "ab_glyph", + "anyhow", + "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.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74ec681d641371df81d7bfbcb0eea725ed873f38a094f34b5f7b436f0889e77c" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "crossbeam-channel", +] + [[package]] name = "bevy_transform" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa2f7a77900fb23f24ca312c1f8df3eb47a45161326f41e9b4ef05b039793503" +checksum = "42e1528e35f30bede46a50ee4134f150efc01f5c1002c340b3b2e6a0bfcb8aa5" dependencies = [ "bevy_app", "bevy_ecs", @@ -540,16 +673,43 @@ dependencies = [ "bevy_reflect", ] +[[package]] +name = "bevy_ui" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac181a7b637da61fad72981ff9d2e5b899283ca7d54b2b7ea49c431121331c53" +dependencies = [ + "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", +] + [[package]] name = "bevy_utils" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f354c584812996febd48cc885f36b23004b49d6680e73fc95a69a2bb17a48e5" +checksum = "8bda6dada53e546845887ae7357eec57b8d547ef71627b716b33839b4a98b687" dependencies = [ "ahash", - "bevy_derive", "getrandom", - "hashbrown", + "hashbrown 0.12.3", "instant", "tracing", "uuid", @@ -557,12 +717,13 @@ dependencies = [ [[package]] name = "bevy_window" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04fe33d177e10b2984fa90c1d19496fc6f6e7b36d4442699d359e2b4b507873d" +checksum = "a3bdc3a220a9bb2fad9bd30d5f44c6645725398fe1bc588fc87abf09f092696e" dependencies = [ "bevy_app", "bevy_ecs", + "bevy_input", "bevy_math", "bevy_utils", "raw-window-handle", @@ -571,9 +732,9 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7c0e3b94cc73907f8a9f82945ca006a39ed2ab401aca0974b47a007a468509f" +checksum = "57537a56ac4f4e1ffcad95227bcab37cd17b51770dacff82374a2d88be376322" dependencies = [ "approx", "bevy_app", @@ -582,6 +743,7 @@ dependencies = [ "bevy_math", "bevy_utils", "bevy_window", + "crossbeam-channel", "raw-window-handle", "wasm-bindgen", "web-sys", @@ -590,9 +752,9 @@ dependencies = [ [[package]] name = "bit-set" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" dependencies = [ "bit-vec", ] @@ -617,24 +779,24 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" [[package]] name = "bytemuck" -version = "1.9.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc" +checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e" +checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" dependencies = [ "proc-macro2", "quote", @@ -663,17 +825,6 @@ dependencies = [ "nix", ] -[[package]] -name = "cargo-manifest" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af6d65c7592744998c67947ec771c62687c76f00179a83ffd563c0482046bb98" -dependencies = [ - "serde", - "serde_derive", - "toml", -] - [[package]] name = "cc" version = "1.0.73" @@ -747,9 +898,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "concurrent-queue" -version = "1.2.2" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" dependencies = [ "cache-padded", ] @@ -764,6 +915,12 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "const_panic" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c0358e41e90e443c69b2b2811f6ec9892c228b93620634cf4344fe89967fa9f" + [[package]] name = "copyless" version = "0.1.5" @@ -854,9 +1011,9 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" dependencies = [ "cfg-if 1.0.0", "crossbeam-utils", @@ -864,12 +1021,12 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" dependencies = [ "cfg-if 1.0.0", - "lazy_static", + "once_cell", ] [[package]] @@ -880,9 +1037,9 @@ checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" [[package]] name = "d3d12" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2daefd788d1e96e0a9d66dee4b828b883509bc3ea9ce30665f04c3246372690c" +checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" dependencies = [ "bitflags", "libloading", @@ -939,12 +1096,53 @@ dependencies = [ "libloading", ] +[[package]] +name = "dolly" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ae35fe7c2f8550eb2e84dd8251cbaba660d167315daff50c800aee4013da32" +dependencies = [ + "glam", +] + [[package]] name = "downcast-rs" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" +[[package]] +name = "encase" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a516181e9a36e8982cb37933c5e7dba638c42938cacde46ee4e5b4156f881b9" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror", +] + +[[package]] +name = "encase_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5b802412eea315f29f2bb2da3a5963cd6121f56eaa06aebcdc0c54eea578f22" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2f4de457d974f548d2c2a16f709ebd81013579e543bd1a9b19ced88132c2cf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "env_logger" version = "0.8.4" @@ -957,33 +1155,42 @@ dependencies = [ [[package]] name = "erased-serde" -version = "0.3.20" +version = "0.3.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad132dd8d0d0b546348d7d86cb3191aad14b34e5f979781fc005c80d4ac67ffd" +checksum = "81d013529d5574a60caeda29e179e695125448e5de52e3874f7b4c1d7360e18e" dependencies = [ "serde", ] +[[package]] +name = "euclid" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" +dependencies = [ + "num-traits", +] + [[package]] name = "event-listener" -version = "2.5.2" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] [[package]] name = "fixedbitset" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "fnv" @@ -1044,25 +1251,24 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.6" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if 1.0.0", "js-sys", "libc", - "wasi 0.10.2+wasi-snapshot-preview1", + "wasi", "wasm-bindgen", ] [[package]] name = "glam" -version = "0.20.5" +version = "0.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" +checksum = "781aa11be58ef14b0cd7326618afcbd9cdb5ba686bdab7193d87cdc322cd7033" dependencies = [ "bytemuck", - "mint", "serde", ] @@ -1113,6 +1319,17 @@ dependencies = [ "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.5.3" @@ -1140,7 +1357,7 @@ checksum = "a538f217be4d405ff4719a283ca68323cc2384003eca5baaa87501e821c81dda" dependencies = [ "bitflags", "gpu-descriptor-types", - "hashbrown", + "hashbrown 0.11.2", ] [[package]] @@ -1152,11 +1369,50 @@ dependencies = [ "bitflags", ] +[[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 = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hash32-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d2aba832b60be25c1b169146b27c64115470981b128ed84c8db18c1b03c6ff" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "hashbrown" version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash", "serde", @@ -1185,12 +1441,12 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hexasphere" -version = "7.0.0" +version = "7.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04ab9d20ba513ff1582a7d885e91839f62cf28bef7c56b1b0428ca787315979b" +checksum = "9652f2ed7ee9c6374a061039f60fc6e25d7adac7fa10f83365669af3b24b0bf0" dependencies = [ "glam", - "lazy_static", + "once_cell", ] [[package]] @@ -1207,26 +1463,25 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "image" -version = "0.23.14" +version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +checksum = "7e30ca2ecf7666107ff827a8e481de6a132a9b687ed3bb20bb1c144a36c00964" dependencies = [ "bytemuck", "byteorder", "color_quant", - "num-iter", "num-rational", "num-traits", ] [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", ] [[package]] @@ -1237,9 +1492,9 @@ checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" [[package]] name = "inplace_it" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90953f308a79fe6d62a4643e51f848fbfddcd05975a38e69fdf4ab86a7baf7ca" +checksum = "67f0347836f3f6362c1e7efdadde2b1c4b4556d211310b70631bae7eb692070b" [[package]] name = "instant" @@ -1255,9 +1510,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" [[package]] name = "jni-sys" @@ -1267,9 +1522,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.57" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" dependencies = [ "wasm-bindgen", ] @@ -1282,6 +1537,7 @@ checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" dependencies = [ "libc", "libloading", + "pkg-config", ] [[package]] @@ -1292,9 +1548,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.124" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21a41fed9d98f27ab1c6d161da622a4fa35e8a54a8adc24bbf3ddd0ef70b0e50" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libloading" @@ -1318,9 +1574,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] @@ -1345,9 +1601,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memmap2" @@ -1369,9 +1625,9 @@ dependencies = [ [[package]] name = "metal" -version = "0.23.1" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0514f491f4cc03632ab399ee01e2c1c1b12d3e1cf2d667c1ff5f87d6dcd2084" +checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" dependencies = [ "bitflags", "block", @@ -1387,40 +1643,23 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" -[[package]] -name = "mint" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" - [[package]] name = "mio" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "miow", - "ntapi", - "wasi 0.11.0+wasi-snapshot-preview1", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "wasi", + "windows-sys", ] [[package]] name = "naga" -version = "0.8.5" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3012f2dbcc79e8e0b5825a4836a7106a75dd9b2fe42c528163be0f572538c705" +checksum = "5f50357e1167a3ab92d6b3c7f4bf5f7fd13fde3f4b28bf0d5ea07b5100fdb6c0" dependencies = [ "bit-set", "bitflags", @@ -1433,7 +1672,9 @@ dependencies = [ "pp-rs", "rustc-hash", "spirv", + "termcolor", "thiserror", + "unicode-xid", ] [[package]] @@ -1513,41 +1754,21 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", ] -[[package]] -name = "num-iter" -version = "0.1.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-rational" -version = "0.3.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" dependencies = [ "autocfg", "num-integer", @@ -1556,9 +1777,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -1615,9 +1836,18 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.10.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "owned_ttf_parser" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ef1a404ae479dd6906f4fa2c88b3c94028f1284beb42a47c183a7c27ee9a3e" +dependencies = [ + "ttf-parser", +] [[package]] name = "parking" @@ -1633,7 +1863,17 @@ checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" dependencies = [ "instant", "lock_api", - "parking_lot_core", + "parking_lot_core 0.8.5", +] + +[[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 0.9.3", ] [[package]] @@ -1650,6 +1890,19 @@ dependencies = [ "winapi", ] +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + [[package]] name = "percent-encoding" version = "2.1.0" @@ -1658,9 +1911,9 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -1668,9 +1921,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pkg-config" @@ -1705,28 +1958,34 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.37" +version = "1.0.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9145ac0af1d93c638c98c40cf7d25665f427b2a44ad0a99b1dccf3e2f25bb987" +checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" [[package]] name = "quote" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" 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" @@ -1772,20 +2031,26 @@ dependencies = [ "cty", ] +[[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.2.13" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.5.5" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ "aho-corasick", "memchr", @@ -1803,9 +2068,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "renderdoc-sys" @@ -1815,9 +2080,9 @@ checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157" [[package]] name = "ron" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" +checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ "base64", "bitflags", @@ -1832,15 +2097,15 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustversion" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f" +checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" [[package]] name = "ryu" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "scoped-tls" @@ -1856,18 +2121,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.136" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" dependencies = [ "proc-macro2", "quote", @@ -1876,9 +2141,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" dependencies = [ "itoa", "ryu", @@ -1896,9 +2161,12 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.6" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "slotmap" @@ -1911,9 +2179,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" dependencies = [ "serde", ] @@ -1955,15 +2223,15 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96acfc1b70604b8b2f1ffa4c57e59176c7dbb05d556c71ecd2f5498a1dee7f8" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" [[package]] name = "strum_macros" -version = "0.24.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6878079b17446e4d3eba6192bb0a2950d5b14f0ed8424b852310e5a94345d0ef" +checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" dependencies = [ "heck", "proc-macro2", @@ -1972,15 +2240,34 @@ dependencies = [ "syn", ] +[[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.91" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", +] + +[[package]] +name = "taffy" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec27dea659b100d489dffa57cf0efc6d7bfefb119af817b92cc14006c0b214e3" +dependencies = [ + "arrayvec", + "hash32", + "hash32-derive", + "num-traits", + "typenum", ] [[package]] @@ -1994,18 +2281,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -2027,15 +2314,14 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ - "indexmap", "serde", ] [[package]] name = "tracing" -version = "0.1.34" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -2045,9 +2331,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.20" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" dependencies = [ "proc-macro2", "quote", @@ -2056,19 +2342,19 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.26" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" dependencies = [ - "lazy_static", + "once_cell", "valuable", ] [[package]] name = "tracing-log" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" dependencies = [ "lazy_static", "log", @@ -2077,13 +2363,13 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.11" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" dependencies = [ "ansi_term", - "lazy_static", "matchers", + "once_cell", "regex", "sharded-slab", "smallvec", @@ -2104,6 +2390,24 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "ttf-parser" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicode-ident" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" + [[package]] name = "unicode-width" version = "0.1.9" @@ -2112,15 +2416,15 @@ checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "uuid" -version = "0.8.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" dependencies = [ "getrandom", "serde", @@ -2144,12 +2448,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" -[[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2158,9 +2456,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" dependencies = [ "cfg-if 1.0.0", "wasm-bindgen-macro", @@ -2168,13 +2466,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -2183,9 +2481,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.30" +version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" +checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -2195,9 +2493,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2205,9 +2503,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" dependencies = [ "proc-macro2", "quote", @@ -2218,9 +2516,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.80" +version = "0.2.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" [[package]] name = "wayland-client" @@ -2296,9 +2594,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.57" +version = "0.3.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" dependencies = [ "js-sys", "wasm-bindgen", @@ -2306,15 +2604,15 @@ dependencies = [ [[package]] name = "wgpu" -version = "0.12.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b97cd781ff044d6d697b632a2e212032c2e957d1afaa21dbf58069cbb8f78567" +checksum = "277e967bf8b7820a76852645a6bce8bbd31c32fda2042e82d8e3ea75fda8892d" dependencies = [ "arrayvec", "js-sys", "log", "naga", - "parking_lot", + "parking_lot 0.12.1", "raw-window-handle", "smallvec", "wasm-bindgen", @@ -2327,11 +2625,12 @@ dependencies = [ [[package]] name = "wgpu-core" -version = "0.12.2" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4688c000eb841ca55f7b35db659b78d6e1cd77d7caf8fb929f4e181f754047d" +checksum = "89b92788dec9d0c1bed849a1b83f01b2ee12819bf04a79c90f68e4173f7b5ba2" dependencies = [ "arrayvec", + "bit-vec", "bitflags", "cfg_aliases", "codespan-reporting", @@ -2339,21 +2638,23 @@ dependencies = [ "fxhash", "log", "naga", - "parking_lot", + "parking_lot 0.12.1", "profiling", "raw-window-handle", "smallvec", "thiserror", + "web-sys", "wgpu-hal", "wgpu-types", ] [[package]] name = "wgpu-hal" -version = "0.12.4" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93b1a9400e8d7f32dd4dd909bb9a391015d70633d639775ddd3f14d1104bc970" +checksum = "20cbdfc3d0637dba3d5536b93adef3d26023a0b96f0e1ee5ee9560a401d9f646" dependencies = [ + "android_system_properties", "arrayvec", "ash", "bit-set", @@ -2374,7 +2675,7 @@ dependencies = [ "metal", "naga", "objc", - "parking_lot", + "parking_lot 0.12.1", "profiling", "range-alloc", "raw-window-handle", @@ -2388,9 +2689,9 @@ dependencies = [ [[package]] name = "wgpu-types" -version = "0.12.0" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "549533d9e1cdd4b4cda7718d33ff500fc4c34b5467b71d76b547ae0324f3b2a2" +checksum = "1f762cbc08e1a51389859cf9c199c7aef544789cf3510889aab12c607f701604" dependencies = [ "bitflags", ] @@ -2426,6 +2727,49 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + [[package]] name = "winit" version = "0.26.1" @@ -2447,7 +2791,7 @@ dependencies = [ "ndk-glue", "ndk-sys", "objc", - "parking_lot", + "parking_lot 0.11.2", "percent-encoding", "raw-window-handle", "smithay-client-toolkit", @@ -2479,6 +2823,12 @@ dependencies = [ "nom", ] +[[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.4" diff --git a/Cargo.toml b/Cargo.toml index b864604..647cf3e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_config_cam" -version = "0.3.0" +version = "0.4.0" authors = ["Black Phlox <bphlox@gmail.com>"] license = "MIT OR Apache-2.0" edition = "2021" @@ -22,16 +22,17 @@ resolver = "2" name = "bevy_config_cam" [dependencies] -rand = "0.8.0" -strum = "0.24.0" -strum_macros = "0.24.0" +rand = "0.8" +strum = "0.24" +strum_macros = "0.24" +bevy_dolly = { path="../bevy_dolly" } [dependencies.bevy] -version = "0.7" +version = "0.8.0" features = ["bevy_render","bevy_pbr"] default-features = false [dev-dependencies.bevy] -version = "0.7" -features = ["bevy_core_pipeline", "bevy_pbr", "bevy_gltf", "x11", "wayland"] +version = "0.8.0" +features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] default-features = false \ No newline at end of file diff --git a/examples/minimal.rs b/examples/minimal.rs index 2b1ed9d..25b75d4 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -1,13 +1,15 @@ //Base use bevy::prelude::*; +use bevy::render::camera::ScalingMode; use bevy_config_cam::*; +use bevy_dolly::prelude::*; fn main() { App::new() - .insert_resource(Msaa { samples: 4 }) .add_plugins(DefaultPlugins) .add_plugin(ConfigCam) .add_startup_system(setup) + .add_system(update_yaw_driver) .run(); } @@ -16,7 +18,6 @@ fn setup( mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>, mut materials: ResMut<Assets<StandardMaterial>>, - mut cl: ResMut<CamLogic>, ) { // plane commands.spawn_bundle(PbrBundle { @@ -25,21 +26,63 @@ fn setup( ..Default::default() }); - // cube, set as target - cl.target = Some( - commands - .spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..Default::default() - }) - .id(), - ); + // cube + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }); // light commands.spawn_bundle(PointLightBundle { transform: Transform::from_xyz(4.0, 8.0, 4.0), ..Default::default() }); + + commands.spawn().insert( + Rig::builder() + .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-30.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(Vec3::Z * 4.0)) + .build(), + ); + + commands.spawn_bundle(Camera3dBundle { + transform: Transform::from_xyz(0.0, 5.0, 0.01).looking_at(Vec3::ZERO, Vec3::Y), + camera: Camera { + is_active: true, + ..Default::default() + }, + projection: OrthographicProjection { + scale: 3.0, + scaling_mode: ScalingMode::FixedVertical(1.0), + ..default() + } + .into(), + ..Default::default() + }); + + commands.spawn_bundle(Camera3dBundle { + transform: Transform::from_xyz(5., 2.0, 0.).looking_at(Vec3::ZERO, Vec3::Y), + camera: Camera { + is_active: false, + ..Default::default() + }, + ..Default::default() + }); + //.insert(FlyCam); +} + +fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { + for mut rig in &mut query { + if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { + if keys.just_pressed(KeyCode::Z) { + camera_driver.rotate_yaw_pitch(-90.0, 0.0); + } + if keys.just_pressed(KeyCode::X) { + camera_driver.rotate_yaw_pitch(90.0, 0.0); + } + } + } } diff --git a/src/lib.rs b/src/lib.rs index aeb0dde..dd48622 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,709 +1,28 @@ -use bevy::{ - ecs::{ - event::{Events, ManualEventReader}, - schedule::SystemSet, - }, - input::mouse::{MouseMotion, MouseWheel}, - prelude::*, - render::{ - camera::Camera, - camera::CameraProjection, - camera::{ActiveCamera, Camera3d, PerspectiveProjection}, - }, - window::Windows, -}; - -use strum::IntoEnumIterator; -use strum_macros::EnumIter; - -#[macro_export] -macro_rules! next_enum { - ($l:ident, $k:expr) => { - $l::iter() - .enumerate() - .nth( - $l::iter() - .enumerate() - .find(|a| a.1 == *$k.current()) - .map(|(i, _)| { - if i + 1 > $l::iter().count() - 1 { - 0usize - } else { - i + 1 - } - }) - .unwrap(), - ) - .unwrap() - .1 - }; -} - -#[derive(Component)] -pub struct PlayerMove; -#[derive(Clone, Eq, PartialEq, Debug, Hash)] -enum PluginState { - Enabled, - //Disabled, -} - -#[derive(Clone, Eq, PartialEq, Debug, Hash, EnumIter)] -enum ScrollType { - MovementSpeed, - Zoom, - Sensitivity, - Lerp, - CamFwd, -} -#[derive(Clone, Eq, PartialEq, Debug, Hash, EnumIter)] -pub enum CameraState { - //Look at player and other targets if set - LookAt, - //Follow the player only - FollowStatic, - //Camera is moved above and pointed down, rotation bound to one axis - TopDown, - TopDownDirection, - //Follows behind the player a certain distance - FollowBehind, - //Camera at same position as player, enables to use the mouse to look (WIP) - Fps, - //Use the mouse to look and move the camera freely - Free, -} - -pub struct PlayerKeyMap { - pub forward: &'static [KeyCode], - pub backward: &'static [KeyCode], - pub left: &'static [KeyCode], - pub right: &'static [KeyCode], - pub up: &'static [KeyCode], - pub down: &'static [KeyCode], - pub rot_left: &'static [KeyCode], - pub rot_right: &'static [KeyCode], -} - -pub struct PlayerSettings { - pub player_asset: &'static str, - pub speed: f32, - pub map: PlayerKeyMap, - pub pos: Vec3, - pub cam_fwd: bool, -} - -impl Default for PlayerKeyMap { - fn default() -> Self { - Self { - forward: &[KeyCode::Up], - backward: &[KeyCode::Down], - left: &[KeyCode::Comma], - right: &[KeyCode::Period], - up: &[KeyCode::RShift], - down: &[KeyCode::Minus], - rot_left: &[KeyCode::Left], - rot_right: &[KeyCode::Right], - } - } -} - -impl Default for PlayerSettings { - fn default() -> Self { - Self { - player_asset: "", - speed: 12.0, - map: PlayerKeyMap::default(), - pos: Default::default(), - cam_fwd: false, - } - } -} - -#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemLabel)] -struct MovementUpdate; +use bevy::prelude::{App, Camera, Changed, Entity, Plugin, Query, Res, Time, Transform}; +use bevy_dolly::prelude::*; pub struct ConfigCam; impl Plugin for ConfigCam { fn build(&self, app: &mut App) { - app.init_resource::<CamLogic>() - .add_plugin(NoCameraPlayerPlugin) - .init_resource::<PlayerSettings>() - .add_state(PluginState::Enabled) - .add_state(CameraState::FollowBehind) - .add_state(ScrollType::MovementSpeed) - .add_system(toggle_camera_parent.after(MovementUpdate)) - .add_system(switch_scroll_type.after(MovementUpdate)) - .add_system(scroll.after(MovementUpdate)) - .add_system(cycle_cam_state.after(MovementUpdate)) - .add_system_set(SystemSet::on_enter(PluginState::Enabled).with_system(setup)) - .add_system_set( - SystemSet::on_update(PluginState::Enabled) - .with_system(move_player.after(MovementUpdate)) - .with_system(move_camera.label(MovementUpdate)), - ); + app.add_system(config_cam_change_detection); } } -#[derive(Default)] -pub struct Player { - entity: Option<Entity>, -} - -#[derive(Default)] -pub struct CamLogic { - player: Player, - camera_should_focus: Vec3, - camera_is_focus: Vec3, - pub target: Option<Entity>, -} - -const RESET_FOCUS: [f32; 3] = [0., 0., 0.]; - -#[allow(unused_must_use)] -fn cycle_cam_state( - mut cam_state: ResMut<State<CameraState>>, - settings: Res<MovementSettings>, - keyboard_input: Res<Input<KeyCode>>, -) { - if keyboard_input - .get_just_pressed() - .any(|m| settings.map.next_cam.iter().any(|nc| m == nc)) - { - let result = next_enum!(CameraState, cam_state); - - println!("Camera: {:?}", result); - cam_state.set(result); - } -} - -fn setup( - mut commands: Commands, - asset_server: Res<AssetServer>, - mut _cl: ResMut<CamLogic>, - settings: Res<PlayerSettings>, - mut meshes: ResMut<Assets<Mesh>>, - mut materials: ResMut<Assets<StandardMaterial>>, -) { - let mut a = if settings.player_asset.is_empty() { - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.7, 0.3, 0.3).into()), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..Default::default() - }) - } else { - commands.spawn_bundle(( - Transform { - translation: settings.pos, - rotation: Quat::from_rotation_y(-std::f32::consts::FRAC_PI_2), - ..Default::default() - }, - GlobalTransform::identity(), - )) - }; - - let b = if settings.player_asset.is_empty() { - a.with_children(|_| {}) - } else { - a.with_children(|cell| { - cell.spawn_scene(asset_server.load(settings.player_asset)); - }) - }; - - _cl.player.entity = Some( - b.insert(PlayerMove) - .with_children(|parent| { - parent - .spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(-2.0, 5.0, 5.0) - .looking_at(Vec3::ZERO, Vec3::Y), - ..Default::default() - }) - .insert(PlayerCam); - }) - .id(), - ); - - // camera - commands - .spawn_bundle(PerspectiveCameraBundle { - camera: Camera { - ..Default::default() - }, - transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), - ..Default::default() - }) - .insert(FlyCam); -} - -// control the cam logic character -fn move_player( - keys: Res<Input<KeyCode>>, +fn config_cam_change_detection( + mut cameras: Query<(&mut Transform, &Camera)>, time: Res<Time>, - settings: Res<PlayerSettings>, - mut transforms: Query<(&PlayerMove, &mut Transform)>, + mut query: Query<(Entity, &mut Rig), Changed<Rig>>, ) { - for (_player, mut transform) in transforms.iter_mut() { - let (_, mut rotation) = transform.rotation.to_axis_angle(); - let mut velocity = Vec3::ZERO; - let local_z = transform.local_z(); - //Forward should be togglable either xyz or cam direction xyz - let forward = if settings.cam_fwd { - Vec3::new(local_z.x, 0., local_z.z) - } else { - -Vec3::new(local_z.x, 0., local_z.z) - }; + for (entity, mut rig) in &mut query { + //let d = rig.drivers.iter().map(|f| format!("{:?}", f)).collect::<Vec<String>>().join(", "); + //info!("{:?} changed: {:?}", entity, d); - let right = Vec3::new(local_z.z, 0., -local_z.x); + let transform = rig.update(time.delta_seconds()); - for key in keys.get_pressed() { - if validate_key(settings.map.forward, key) { - velocity += forward + cameras.for_each_mut(|(mut t, camera)| { + if camera.is_active { + t.transform_2_bevy(transform); } - if validate_key(settings.map.backward, key) { - velocity -= forward - } - if validate_key(settings.map.left, key) { - velocity -= right - } - if validate_key(settings.map.right, key) { - velocity += right - } - if validate_key(settings.map.up, key) { - velocity += Vec3::Y - } - if validate_key(settings.map.down, key) { - velocity -= Vec3::Y - } - if validate_key(settings.map.rot_left, key) { - //Wrapping around - if rotation > std::f32::consts::FRAC_PI_2 * 4.0 - 0.05 { - rotation = 0.0; - } - rotation += 0.1 - } - if validate_key(settings.map.rot_right, key) { - //Wrapping around - if rotation < 0.05 { - rotation = std::f32::consts::FRAC_PI_2 * 4.0; - } - rotation -= 0.1 - } - } - - velocity = velocity.normalize(); - - transform.rotation = Quat::from_rotation_y(rotation); - - if !velocity.is_nan() { - transform.translation += velocity * time.delta_seconds() * 4.0; - } - } -} - -// change the focus of the camera -#[allow(clippy::type_complexity)] -fn move_camera( - time: Res<Time>, - state: Res<State<CameraState>>, - mut cl: ResMut<CamLogic>, - mut settings: ResMut<MovementSettings>, - mut transforms: ParamSet<(Query<&mut Transform, With<Camera3d>>, Query<&Transform>)>, -) { - let mut delta_trans = Transform::identity(); - settings.disable_look = true; - settings.disable_move = false; - settings.locked_to_player = false; - - match *state.current() { - CameraState::Free => { - settings.disable_look = false; - return; - } - CameraState::LookAt => { - // if there is both a player and a bonus, target the mid-point of them - if let (Some(player_entity), Some(bonus_entity)) = (cl.player.entity, cl.target) { - let transform_query = transforms.p1(); - if let (Ok(player_transform), Ok(bonus_transform)) = ( - transform_query.get(player_entity), - transform_query.get(bonus_entity), - ) { - cl.camera_should_focus = player_transform - .translation - .lerp(bonus_transform.translation, settings.lerp); - } - // otherwise, if there is only a player, target the player - } else if let Some(player_entity) = cl.player.entity { - if let Ok(player_transform) = transforms.p1().get(player_entity) { - cl.camera_should_focus = player_transform.translation; - } - // otherwise, target the middle - } else { - cl.camera_should_focus = Vec3::from(RESET_FOCUS); - } - } - _ => { - if let Some(player_entity) = cl.player.entity { - if let Ok(player_transform) = transforms.p1().get(player_entity) { - match *state.current() { - CameraState::Fps => { - delta_trans.translation = player_transform.translation; - settings.disable_move = true; - - settings.disable_look = false; - delta_trans.rotation = player_transform.rotation; - delta_trans.translation += Vec3::new(/*-4.*/ 0., 1., 0.); - } - CameraState::TopDown => { - delta_trans.translation = player_transform.translation; - settings.disable_move = true; - - delta_trans.translation += - Vec3::new(/*-4.*/ 0., settings.dist, 0.); - delta_trans.rotation = - Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2) - } - CameraState::TopDownDirection => { - settings.disable_move = true; - settings.locked_to_player = true; - - delta_trans.translation += - Vec3::new(/*-4.*/ 0., settings.dist, 0.); - delta_trans.rotation = - Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2); - } - CameraState::FollowBehind => { - settings.disable_move = true; - - settings.locked_to_player = true; - - delta_trans.translation += Vec3::new(/*-4.*/ 0., 1., 4.); - } - _ => {} - } - cl.camera_should_focus = player_transform.translation; - } - // otherwise, target the middle - } else { - cl.camera_should_focus = Vec3::from(RESET_FOCUS); - } - } - } - - const SPEED: f32 = 2.0; - - // calculate the camera motion based on the difference between where the camera is looking - // and where it should be looking; the greater the distance, the faster the motion; - // smooth out the camera movement using the frame time - let mut camera_motion = cl.camera_should_focus - cl.camera_is_focus; - if camera_motion.length() > 0.2 { - camera_motion *= SPEED * time.delta_seconds(); - // set the new camera's actual focus - cl.camera_is_focus += camera_motion; - } - // look at that new camera's actual focus - for mut transform in transforms.p0().iter_mut() { - if delta_trans.translation != Vec3::ZERO { - *transform = delta_trans - } else { - *transform = transform.looking_at(cl.camera_is_focus, Vec3::Y) - } - } -} - -#[allow(clippy::type_complexity)] -fn toggle_camera_parent( - mut act_cams: ResMut<ActiveCamera<Camera3d>>, - mut settings: ResMut<MovementSettings>, - mut query: ParamSet<(Query<(&FlyCam, Entity)>, Query<(&PlayerCam, Entity)>)>, -) { - if settings.locked_to_player && !settings.ltp { - let p1 = query.p1(); - let (_, b) = p1.single(); - act_cams.set(b); - - settings.ltp = true; - } else if !settings.locked_to_player && settings.ltp { - let pr = query.p0(); - let (_, b) = pr.single(); - act_cams.set(b); - settings.ltp = false; - } -} - -// Listens for Z key being pressed and toggles between the scroll-type states -#[allow(unused_must_use)] -fn switch_scroll_type( - mut scroll_type: ResMut<State<ScrollType>>, - keyboard_input: Res<Input<KeyCode>>, -) { - if keyboard_input.just_pressed(KeyCode::E) { - let result = next_enum!(ScrollType, scroll_type); - - println!("{:?}", result); - scroll_type.set(result); - } -} - -// Depending on the state, the mouse-scroll changes either the movement speed or the field-of-view of the camera -fn scroll( - mut settings: ResMut<MovementSettings>, - mut p_settings: ResMut<PlayerSettings>, - scroll_type: Res<State<ScrollType>>, - mut mouse_wheel_events: EventReader<MouseWheel>, - windows: Res<Windows>, - mut query: Query<(&FlyCam, &mut Camera, &mut PerspectiveProjection)>, -) { - for event in mouse_wheel_events.iter() { - match *scroll_type.current() { - ScrollType::MovementSpeed => { - settings.speed = (settings.speed + event.y * 0.1).abs(); - println!("Speed: {:?}", settings.speed); - } - ScrollType::Sensitivity => { - settings.sensitivity = (settings.sensitivity + event.y * 0.000001).abs(); - println!("Sensitivity: {:?}", settings.sensitivity); - } - ScrollType::Zoom => { - for (_camera, mut camera, mut project) in query.iter_mut() { - project.fov = (project.fov - event.y * 0.01).abs(); - let prim = windows.get_primary().unwrap(); - - //Calculate projection with new fov - project.update(prim.width(), prim.height()); - - //Update camera with the new fov - camera.projection_matrix = project.get_projection_matrix(); - camera.depth_calculation = project.depth_calculation(); - - println!("FOV: {:?}", project.fov); - } - } - ScrollType::Lerp => { - settings.lerp = (settings.lerp + event.y * 0.01).abs(); - println!("Lerp: {:?}", settings.lerp); - } - ScrollType::CamFwd => { - if event.y > 0.01 { - p_settings.cam_fwd = !p_settings.cam_fwd; - } - println!("CamFwd: {:?}", p_settings.cam_fwd); - } - } - } -} - -//bevy_flycam by sburris0 - https://github.com/sburris0/bevy_flycam - -/// Keeps track of mouse motion events, pitch, and yaw -#[derive(Default)] -struct InputState { - reader_motion: ManualEventReader<MouseMotion>, - pitch: f32, - yaw: f32, -} - -pub struct CamKeyMap { - pub forward: &'static [KeyCode], - pub backward: &'static [KeyCode], - pub left: &'static [KeyCode], - pub right: &'static [KeyCode], - pub up: &'static [KeyCode], - pub down: &'static [KeyCode], - pub next_cam: &'static [KeyCode], - pub next_setting: &'static [KeyCode], -} - -impl Default for CamKeyMap { - fn default() -> Self { - Self { - forward: &[KeyCode::W], - backward: &[KeyCode::S], - left: &[KeyCode::A], - right: &[KeyCode::D], - up: &[KeyCode::Space], - down: &[KeyCode::LShift], - next_cam: &[KeyCode::C], - next_setting: &[KeyCode::E], - } - } -} - -/// Mouse sensitivity and movement speed -pub struct MovementSettings { - pub sensitivity: f32, - pub speed: f32, - pub dist: f32, - pub map: CamKeyMap, - //pub force_cam: &'static[CameraState], - pub disable_move: bool, - pub disable_look: bool, - pub locked_to_player: bool, - pub lerp: f32, - - pub ltp: bool, -} - -impl Default for MovementSettings { - fn default() -> Self { - Self { - sensitivity: 0.00012, - speed: 12., - dist: 10., - map: CamKeyMap::default(), - disable_move: false, - disable_look: false, - locked_to_player: false, - lerp: 0.5, - ltp: false, - } - } -} - -/// Used in queries when you want flycams and not other cameras - -#[derive(Component)] -struct FlyCam; -#[derive(Component)] -struct PlayerCam; - -/// Grabs/ungrabs mouse cursor -fn toggle_grab_cursor(window: &mut Window) { - window.set_cursor_lock_mode(!window.cursor_locked()); - window.set_cursor_visibility(!window.cursor_visible()); -} - -/// Grabs the cursor when game first starts -fn initial_grab_cursor(mut windows: ResMut<Windows>) { - toggle_grab_cursor(windows.get_primary_mut().unwrap()); -} - -/// Spawns the `Camera3dBundle` to be controlled -fn setup_player(mut commands: Commands) { - commands - .spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), - ..Default::default() - }) - .insert(FlyCam); -} - -/// Handles keyboard input and movement -fn player_move( - keys: Res<Input<KeyCode>>, - time: Res<Time>, - windows: Res<Windows>, - settings: Res<MovementSettings>, - mut query: Query<(&FlyCam, &mut Transform)>, -) { - if settings.disable_move { - return; - } - let window = windows.get_primary().unwrap(); - for (_camera, mut transform) in query.iter_mut() { - let mut velocity = Vec3::ZERO; - let local_z = transform.local_z(); - let forward = -Vec3::new(local_z.x, 0., local_z.z); - let right = Vec3::new(local_z.z, 0., -local_z.x); - - for key in keys.get_pressed() { - if window.cursor_locked() { - if validate_key(settings.map.forward, key) { - velocity += forward - } - if validate_key(settings.map.backward, key) { - velocity -= forward - } - if validate_key(settings.map.left, key) { - velocity -= right - } - if validate_key(settings.map.right, key) { - velocity += right - } - if validate_key(settings.map.up, key) { - velocity += Vec3::Y - } - if validate_key(settings.map.down, key) { - velocity -= Vec3::Y - } - } - } - - velocity = velocity.normalize(); - - if !velocity.is_nan() { - transform.translation += velocity * time.delta_seconds() * settings.speed - } - } -} - -pub fn validate_key<T>(codes: &'static [T], key: &T) -> bool -where - T: PartialEq<T>, -{ - codes.iter().any(|m| m == key) -} - -/// Handles looking around if cursor is locked -fn player_look( - settings: Res<MovementSettings>, - windows: Res<Windows>, - mut state: ResMut<InputState>, - motion: Res<Events<MouseMotion>>, - mut query: Query<(&FlyCam, &mut Transform)>, -) { - if settings.disable_look { - return; - } - let window = windows.get_primary().unwrap(); - let mut state_delta = state.as_mut(); - for (_camera, mut transform) in query.iter_mut() { - for ev in state_delta.reader_motion.iter(&motion) { - if window.cursor_locked() { - state_delta.pitch -= - (settings.sensitivity * ev.delta.y * window.height()).to_radians(); - state_delta.yaw -= - (settings.sensitivity * ev.delta.x * window.width()).to_radians(); - } - - state_delta.pitch = state_delta.pitch.clamp(-1.54, 1.54); - - // Order is important to prevent unintended roll - transform.rotation = Quat::from_axis_angle(Vec3::Y, state_delta.yaw) - * Quat::from_axis_angle(Vec3::X, state_delta.pitch); - } - } -} - -fn cursor_grab(keys: Res<Input<KeyCode>>, mut windows: ResMut<Windows>) { - let window = windows.get_primary_mut().unwrap(); - if keys.just_pressed(KeyCode::Escape) { - toggle_grab_cursor(window); - } -} - -/// Contains everything needed to add first-person fly camera behavior to your game -pub struct PlayerPlugin; -impl Plugin for PlayerPlugin { - fn build(&self, app: &mut App) { - app.init_resource::<InputState>() - .init_resource::<MovementSettings>() - .add_startup_system(setup_player) - .add_startup_system(initial_grab_cursor) - .add_system(player_move.before(MovementUpdate)) - .add_system(player_look.after(MovementUpdate)) - .add_system(cursor_grab.after(MovementUpdate)); - } -} - -/// Same as `PlayerPlugin` but does not spawn a camera -pub struct NoCameraPlayerPlugin; -impl Plugin for NoCameraPlayerPlugin { - fn build(&self, app: &mut App) { - app.init_resource::<InputState>() - .init_resource::<MovementSettings>() - .add_startup_system(initial_grab_cursor) - .add_system(player_move.before(MovementUpdate)) - .add_system(player_look.after(MovementUpdate)) - .add_system(cursor_grab.after(MovementUpdate)); + }); } } diff --git a/src/lib2.rs b/src/lib2.rs new file mode 100644 index 0000000..aeb0dde --- /dev/null +++ b/src/lib2.rs @@ -0,0 +1,709 @@ +use bevy::{ + ecs::{ + event::{Events, ManualEventReader}, + schedule::SystemSet, + }, + input::mouse::{MouseMotion, MouseWheel}, + prelude::*, + render::{ + camera::Camera, + camera::CameraProjection, + camera::{ActiveCamera, Camera3d, PerspectiveProjection}, + }, + window::Windows, +}; + +use strum::IntoEnumIterator; +use strum_macros::EnumIter; + +#[macro_export] +macro_rules! next_enum { + ($l:ident, $k:expr) => { + $l::iter() + .enumerate() + .nth( + $l::iter() + .enumerate() + .find(|a| a.1 == *$k.current()) + .map(|(i, _)| { + if i + 1 > $l::iter().count() - 1 { + 0usize + } else { + i + 1 + } + }) + .unwrap(), + ) + .unwrap() + .1 + }; +} + +#[derive(Component)] +pub struct PlayerMove; +#[derive(Clone, Eq, PartialEq, Debug, Hash)] +enum PluginState { + Enabled, + //Disabled, +} + +#[derive(Clone, Eq, PartialEq, Debug, Hash, EnumIter)] +enum ScrollType { + MovementSpeed, + Zoom, + Sensitivity, + Lerp, + CamFwd, +} +#[derive(Clone, Eq, PartialEq, Debug, Hash, EnumIter)] +pub enum CameraState { + //Look at player and other targets if set + LookAt, + //Follow the player only + FollowStatic, + //Camera is moved above and pointed down, rotation bound to one axis + TopDown, + TopDownDirection, + //Follows behind the player a certain distance + FollowBehind, + //Camera at same position as player, enables to use the mouse to look (WIP) + Fps, + //Use the mouse to look and move the camera freely + Free, +} + +pub struct PlayerKeyMap { + pub forward: &'static [KeyCode], + pub backward: &'static [KeyCode], + pub left: &'static [KeyCode], + pub right: &'static [KeyCode], + pub up: &'static [KeyCode], + pub down: &'static [KeyCode], + pub rot_left: &'static [KeyCode], + pub rot_right: &'static [KeyCode], +} + +pub struct PlayerSettings { + pub player_asset: &'static str, + pub speed: f32, + pub map: PlayerKeyMap, + pub pos: Vec3, + pub cam_fwd: bool, +} + +impl Default for PlayerKeyMap { + fn default() -> Self { + Self { + forward: &[KeyCode::Up], + backward: &[KeyCode::Down], + left: &[KeyCode::Comma], + right: &[KeyCode::Period], + up: &[KeyCode::RShift], + down: &[KeyCode::Minus], + rot_left: &[KeyCode::Left], + rot_right: &[KeyCode::Right], + } + } +} + +impl Default for PlayerSettings { + fn default() -> Self { + Self { + player_asset: "", + speed: 12.0, + map: PlayerKeyMap::default(), + pos: Default::default(), + cam_fwd: false, + } + } +} + +#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemLabel)] +struct MovementUpdate; + +pub struct ConfigCam; +impl Plugin for ConfigCam { + fn build(&self, app: &mut App) { + app.init_resource::<CamLogic>() + .add_plugin(NoCameraPlayerPlugin) + .init_resource::<PlayerSettings>() + .add_state(PluginState::Enabled) + .add_state(CameraState::FollowBehind) + .add_state(ScrollType::MovementSpeed) + .add_system(toggle_camera_parent.after(MovementUpdate)) + .add_system(switch_scroll_type.after(MovementUpdate)) + .add_system(scroll.after(MovementUpdate)) + .add_system(cycle_cam_state.after(MovementUpdate)) + .add_system_set(SystemSet::on_enter(PluginState::Enabled).with_system(setup)) + .add_system_set( + SystemSet::on_update(PluginState::Enabled) + .with_system(move_player.after(MovementUpdate)) + .with_system(move_camera.label(MovementUpdate)), + ); + } +} + +#[derive(Default)] +pub struct Player { + entity: Option<Entity>, +} + +#[derive(Default)] +pub struct CamLogic { + player: Player, + camera_should_focus: Vec3, + camera_is_focus: Vec3, + pub target: Option<Entity>, +} + +const RESET_FOCUS: [f32; 3] = [0., 0., 0.]; + +#[allow(unused_must_use)] +fn cycle_cam_state( + mut cam_state: ResMut<State<CameraState>>, + settings: Res<MovementSettings>, + keyboard_input: Res<Input<KeyCode>>, +) { + if keyboard_input + .get_just_pressed() + .any(|m| settings.map.next_cam.iter().any(|nc| m == nc)) + { + let result = next_enum!(CameraState, cam_state); + + println!("Camera: {:?}", result); + cam_state.set(result); + } +} + +fn setup( + mut commands: Commands, + asset_server: Res<AssetServer>, + mut _cl: ResMut<CamLogic>, + settings: Res<PlayerSettings>, + mut meshes: ResMut<Assets<Mesh>>, + mut materials: ResMut<Assets<StandardMaterial>>, +) { + let mut a = if settings.player_asset.is_empty() { + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.7, 0.3, 0.3).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }) + } else { + commands.spawn_bundle(( + Transform { + translation: settings.pos, + rotation: Quat::from_rotation_y(-std::f32::consts::FRAC_PI_2), + ..Default::default() + }, + GlobalTransform::identity(), + )) + }; + + let b = if settings.player_asset.is_empty() { + a.with_children(|_| {}) + } else { + a.with_children(|cell| { + cell.spawn_scene(asset_server.load(settings.player_asset)); + }) + }; + + _cl.player.entity = Some( + b.insert(PlayerMove) + .with_children(|parent| { + parent + .spawn_bundle(PerspectiveCameraBundle { + transform: Transform::from_xyz(-2.0, 5.0, 5.0) + .looking_at(Vec3::ZERO, Vec3::Y), + ..Default::default() + }) + .insert(PlayerCam); + }) + .id(), + ); + + // camera + commands + .spawn_bundle(PerspectiveCameraBundle { + camera: Camera { + ..Default::default() + }, + transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), + ..Default::default() + }) + .insert(FlyCam); +} + +// control the cam logic character +fn move_player( + keys: Res<Input<KeyCode>>, + time: Res<Time>, + settings: Res<PlayerSettings>, + mut transforms: Query<(&PlayerMove, &mut Transform)>, +) { + for (_player, mut transform) in transforms.iter_mut() { + let (_, mut rotation) = transform.rotation.to_axis_angle(); + let mut velocity = Vec3::ZERO; + let local_z = transform.local_z(); + //Forward should be togglable either xyz or cam direction xyz + let forward = if settings.cam_fwd { + Vec3::new(local_z.x, 0., local_z.z) + } else { + -Vec3::new(local_z.x, 0., local_z.z) + }; + + let right = Vec3::new(local_z.z, 0., -local_z.x); + + for key in keys.get_pressed() { + if validate_key(settings.map.forward, key) { + velocity += forward + } + if validate_key(settings.map.backward, key) { + velocity -= forward + } + if validate_key(settings.map.left, key) { + velocity -= right + } + if validate_key(settings.map.right, key) { + velocity += right + } + if validate_key(settings.map.up, key) { + velocity += Vec3::Y + } + if validate_key(settings.map.down, key) { + velocity -= Vec3::Y + } + if validate_key(settings.map.rot_left, key) { + //Wrapping around + if rotation > std::f32::consts::FRAC_PI_2 * 4.0 - 0.05 { + rotation = 0.0; + } + rotation += 0.1 + } + if validate_key(settings.map.rot_right, key) { + //Wrapping around + if rotation < 0.05 { + rotation = std::f32::consts::FRAC_PI_2 * 4.0; + } + rotation -= 0.1 + } + } + + velocity = velocity.normalize(); + + transform.rotation = Quat::from_rotation_y(rotation); + + if !velocity.is_nan() { + transform.translation += velocity * time.delta_seconds() * 4.0; + } + } +} + +// change the focus of the camera +#[allow(clippy::type_complexity)] +fn move_camera( + time: Res<Time>, + state: Res<State<CameraState>>, + mut cl: ResMut<CamLogic>, + mut settings: ResMut<MovementSettings>, + mut transforms: ParamSet<(Query<&mut Transform, With<Camera3d>>, Query<&Transform>)>, +) { + let mut delta_trans = Transform::identity(); + settings.disable_look = true; + settings.disable_move = false; + settings.locked_to_player = false; + + match *state.current() { + CameraState::Free => { + settings.disable_look = false; + return; + } + CameraState::LookAt => { + // if there is both a player and a bonus, target the mid-point of them + if let (Some(player_entity), Some(bonus_entity)) = (cl.player.entity, cl.target) { + let transform_query = transforms.p1(); + if let (Ok(player_transform), Ok(bonus_transform)) = ( + transform_query.get(player_entity), + transform_query.get(bonus_entity), + ) { + cl.camera_should_focus = player_transform + .translation + .lerp(bonus_transform.translation, settings.lerp); + } + // otherwise, if there is only a player, target the player + } else if let Some(player_entity) = cl.player.entity { + if let Ok(player_transform) = transforms.p1().get(player_entity) { + cl.camera_should_focus = player_transform.translation; + } + // otherwise, target the middle + } else { + cl.camera_should_focus = Vec3::from(RESET_FOCUS); + } + } + _ => { + if let Some(player_entity) = cl.player.entity { + if let Ok(player_transform) = transforms.p1().get(player_entity) { + match *state.current() { + CameraState::Fps => { + delta_trans.translation = player_transform.translation; + settings.disable_move = true; + + settings.disable_look = false; + delta_trans.rotation = player_transform.rotation; + delta_trans.translation += Vec3::new(/*-4.*/ 0., 1., 0.); + } + CameraState::TopDown => { + delta_trans.translation = player_transform.translation; + settings.disable_move = true; + + delta_trans.translation += + Vec3::new(/*-4.*/ 0., settings.dist, 0.); + delta_trans.rotation = + Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2) + } + CameraState::TopDownDirection => { + settings.disable_move = true; + settings.locked_to_player = true; + + delta_trans.translation += + Vec3::new(/*-4.*/ 0., settings.dist, 0.); + delta_trans.rotation = + Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2); + } + CameraState::FollowBehind => { + settings.disable_move = true; + + settings.locked_to_player = true; + + delta_trans.translation += Vec3::new(/*-4.*/ 0., 1., 4.); + } + _ => {} + } + cl.camera_should_focus = player_transform.translation; + } + // otherwise, target the middle + } else { + cl.camera_should_focus = Vec3::from(RESET_FOCUS); + } + } + } + + const SPEED: f32 = 2.0; + + // calculate the camera motion based on the difference between where the camera is looking + // and where it should be looking; the greater the distance, the faster the motion; + // smooth out the camera movement using the frame time + let mut camera_motion = cl.camera_should_focus - cl.camera_is_focus; + if camera_motion.length() > 0.2 { + camera_motion *= SPEED * time.delta_seconds(); + // set the new camera's actual focus + cl.camera_is_focus += camera_motion; + } + // look at that new camera's actual focus + for mut transform in transforms.p0().iter_mut() { + if delta_trans.translation != Vec3::ZERO { + *transform = delta_trans + } else { + *transform = transform.looking_at(cl.camera_is_focus, Vec3::Y) + } + } +} + +#[allow(clippy::type_complexity)] +fn toggle_camera_parent( + mut act_cams: ResMut<ActiveCamera<Camera3d>>, + mut settings: ResMut<MovementSettings>, + mut query: ParamSet<(Query<(&FlyCam, Entity)>, Query<(&PlayerCam, Entity)>)>, +) { + if settings.locked_to_player && !settings.ltp { + let p1 = query.p1(); + let (_, b) = p1.single(); + act_cams.set(b); + + settings.ltp = true; + } else if !settings.locked_to_player && settings.ltp { + let pr = query.p0(); + let (_, b) = pr.single(); + act_cams.set(b); + settings.ltp = false; + } +} + +// Listens for Z key being pressed and toggles between the scroll-type states +#[allow(unused_must_use)] +fn switch_scroll_type( + mut scroll_type: ResMut<State<ScrollType>>, + keyboard_input: Res<Input<KeyCode>>, +) { + if keyboard_input.just_pressed(KeyCode::E) { + let result = next_enum!(ScrollType, scroll_type); + + println!("{:?}", result); + scroll_type.set(result); + } +} + +// Depending on the state, the mouse-scroll changes either the movement speed or the field-of-view of the camera +fn scroll( + mut settings: ResMut<MovementSettings>, + mut p_settings: ResMut<PlayerSettings>, + scroll_type: Res<State<ScrollType>>, + mut mouse_wheel_events: EventReader<MouseWheel>, + windows: Res<Windows>, + mut query: Query<(&FlyCam, &mut Camera, &mut PerspectiveProjection)>, +) { + for event in mouse_wheel_events.iter() { + match *scroll_type.current() { + ScrollType::MovementSpeed => { + settings.speed = (settings.speed + event.y * 0.1).abs(); + println!("Speed: {:?}", settings.speed); + } + ScrollType::Sensitivity => { + settings.sensitivity = (settings.sensitivity + event.y * 0.000001).abs(); + println!("Sensitivity: {:?}", settings.sensitivity); + } + ScrollType::Zoom => { + for (_camera, mut camera, mut project) in query.iter_mut() { + project.fov = (project.fov - event.y * 0.01).abs(); + let prim = windows.get_primary().unwrap(); + + //Calculate projection with new fov + project.update(prim.width(), prim.height()); + + //Update camera with the new fov + camera.projection_matrix = project.get_projection_matrix(); + camera.depth_calculation = project.depth_calculation(); + + println!("FOV: {:?}", project.fov); + } + } + ScrollType::Lerp => { + settings.lerp = (settings.lerp + event.y * 0.01).abs(); + println!("Lerp: {:?}", settings.lerp); + } + ScrollType::CamFwd => { + if event.y > 0.01 { + p_settings.cam_fwd = !p_settings.cam_fwd; + } + println!("CamFwd: {:?}", p_settings.cam_fwd); + } + } + } +} + +//bevy_flycam by sburris0 - https://github.com/sburris0/bevy_flycam + +/// Keeps track of mouse motion events, pitch, and yaw +#[derive(Default)] +struct InputState { + reader_motion: ManualEventReader<MouseMotion>, + pitch: f32, + yaw: f32, +} + +pub struct CamKeyMap { + pub forward: &'static [KeyCode], + pub backward: &'static [KeyCode], + pub left: &'static [KeyCode], + pub right: &'static [KeyCode], + pub up: &'static [KeyCode], + pub down: &'static [KeyCode], + pub next_cam: &'static [KeyCode], + pub next_setting: &'static [KeyCode], +} + +impl Default for CamKeyMap { + fn default() -> Self { + Self { + forward: &[KeyCode::W], + backward: &[KeyCode::S], + left: &[KeyCode::A], + right: &[KeyCode::D], + up: &[KeyCode::Space], + down: &[KeyCode::LShift], + next_cam: &[KeyCode::C], + next_setting: &[KeyCode::E], + } + } +} + +/// Mouse sensitivity and movement speed +pub struct MovementSettings { + pub sensitivity: f32, + pub speed: f32, + pub dist: f32, + pub map: CamKeyMap, + //pub force_cam: &'static[CameraState], + pub disable_move: bool, + pub disable_look: bool, + pub locked_to_player: bool, + pub lerp: f32, + + pub ltp: bool, +} + +impl Default for MovementSettings { + fn default() -> Self { + Self { + sensitivity: 0.00012, + speed: 12., + dist: 10., + map: CamKeyMap::default(), + disable_move: false, + disable_look: false, + locked_to_player: false, + lerp: 0.5, + ltp: false, + } + } +} + +/// Used in queries when you want flycams and not other cameras + +#[derive(Component)] +struct FlyCam; +#[derive(Component)] +struct PlayerCam; + +/// Grabs/ungrabs mouse cursor +fn toggle_grab_cursor(window: &mut Window) { + window.set_cursor_lock_mode(!window.cursor_locked()); + window.set_cursor_visibility(!window.cursor_visible()); +} + +/// Grabs the cursor when game first starts +fn initial_grab_cursor(mut windows: ResMut<Windows>) { + toggle_grab_cursor(windows.get_primary_mut().unwrap()); +} + +/// Spawns the `Camera3dBundle` to be controlled +fn setup_player(mut commands: Commands) { + commands + .spawn_bundle(PerspectiveCameraBundle { + transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), + ..Default::default() + }) + .insert(FlyCam); +} + +/// Handles keyboard input and movement +fn player_move( + keys: Res<Input<KeyCode>>, + time: Res<Time>, + windows: Res<Windows>, + settings: Res<MovementSettings>, + mut query: Query<(&FlyCam, &mut Transform)>, +) { + if settings.disable_move { + return; + } + let window = windows.get_primary().unwrap(); + for (_camera, mut transform) in query.iter_mut() { + let mut velocity = Vec3::ZERO; + let local_z = transform.local_z(); + let forward = -Vec3::new(local_z.x, 0., local_z.z); + let right = Vec3::new(local_z.z, 0., -local_z.x); + + for key in keys.get_pressed() { + if window.cursor_locked() { + if validate_key(settings.map.forward, key) { + velocity += forward + } + if validate_key(settings.map.backward, key) { + velocity -= forward + } + if validate_key(settings.map.left, key) { + velocity -= right + } + if validate_key(settings.map.right, key) { + velocity += right + } + if validate_key(settings.map.up, key) { + velocity += Vec3::Y + } + if validate_key(settings.map.down, key) { + velocity -= Vec3::Y + } + } + } + + velocity = velocity.normalize(); + + if !velocity.is_nan() { + transform.translation += velocity * time.delta_seconds() * settings.speed + } + } +} + +pub fn validate_key<T>(codes: &'static [T], key: &T) -> bool +where + T: PartialEq<T>, +{ + codes.iter().any(|m| m == key) +} + +/// Handles looking around if cursor is locked +fn player_look( + settings: Res<MovementSettings>, + windows: Res<Windows>, + mut state: ResMut<InputState>, + motion: Res<Events<MouseMotion>>, + mut query: Query<(&FlyCam, &mut Transform)>, +) { + if settings.disable_look { + return; + } + let window = windows.get_primary().unwrap(); + let mut state_delta = state.as_mut(); + for (_camera, mut transform) in query.iter_mut() { + for ev in state_delta.reader_motion.iter(&motion) { + if window.cursor_locked() { + state_delta.pitch -= + (settings.sensitivity * ev.delta.y * window.height()).to_radians(); + state_delta.yaw -= + (settings.sensitivity * ev.delta.x * window.width()).to_radians(); + } + + state_delta.pitch = state_delta.pitch.clamp(-1.54, 1.54); + + // Order is important to prevent unintended roll + transform.rotation = Quat::from_axis_angle(Vec3::Y, state_delta.yaw) + * Quat::from_axis_angle(Vec3::X, state_delta.pitch); + } + } +} + +fn cursor_grab(keys: Res<Input<KeyCode>>, mut windows: ResMut<Windows>) { + let window = windows.get_primary_mut().unwrap(); + if keys.just_pressed(KeyCode::Escape) { + toggle_grab_cursor(window); + } +} + +/// Contains everything needed to add first-person fly camera behavior to your game +pub struct PlayerPlugin; +impl Plugin for PlayerPlugin { + fn build(&self, app: &mut App) { + app.init_resource::<InputState>() + .init_resource::<MovementSettings>() + .add_startup_system(setup_player) + .add_startup_system(initial_grab_cursor) + .add_system(player_move.before(MovementUpdate)) + .add_system(player_look.after(MovementUpdate)) + .add_system(cursor_grab.after(MovementUpdate)); + } +} + +/// Same as `PlayerPlugin` but does not spawn a camera +pub struct NoCameraPlayerPlugin; +impl Plugin for NoCameraPlayerPlugin { + fn build(&self, app: &mut App) { + app.init_resource::<InputState>() + .init_resource::<MovementSettings>() + .add_startup_system(initial_grab_cursor) + .add_system(player_move.before(MovementUpdate)) + .add_system(player_look.after(MovementUpdate)) + .add_system(cursor_grab.after(MovementUpdate)); + } +} From 4c2c931c925879b81bd9f6d24c5492dc120052de Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:17:57 +0200 Subject: [PATCH 06/63] Delete Cargo.lock --- Cargo.lock | 2836 ---------------------------------------------------- 1 file changed, 2836 deletions(-) delete mode 100644 Cargo.lock diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index e41890d..0000000 --- a/Cargo.lock +++ /dev/null @@ -1,2836 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "ab_glyph" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" - -[[package]] -name = "ahash" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" -dependencies = [ - "getrandom", - "once_cell", - "version_check", -] - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - -[[package]] -name = "android_log-sys" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" - -[[package]] -name = "android_logger" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9ed09b18365ed295d722d0b5ed59c01b79a826ff2d2a8f73d5ecca8e6fb2f66" -dependencies = [ - "android_log-sys", - "env_logger", - "lazy_static", - "log", -] - -[[package]] -name = "android_system_properties" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e" -dependencies = [ - "libc", -] - -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - -[[package]] -name = "anyhow" -version = "1.0.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704" - -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - -[[package]] -name = "ash" -version = "0.37.0+1.3.209" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "006ca68e0f2b03f22d6fa9f2860f85aed430d257fec20f8879b2145e7c7ae1a6" -dependencies = [ - "libloading", -] - -[[package]] -name = "async-channel" -version = "1.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" -dependencies = [ - "concurrent-queue", - "event-listener", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "once_cell", - "slab", -] - -[[package]] -name = "async-task" -version = "4.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "base64" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" - -[[package]] -name = "bevy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55f08528a4e59d607460513a823b40f602d013c1a00f57b824f1075d5d48c3cd" -dependencies = [ - "bevy_internal", -] - -[[package]] -name = "bevy_app" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d26d6ffdf493609d2fedc1018a2ef0cb4d8e48f6d3bcea56fa2df81867e464" -dependencies = [ - "bevy_derive", - "bevy_ecs", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "bevy_asset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d8fb95306d5f18fa70df40632cd984993aeb71e91ce059ae99699098a4f9ce9" -dependencies = [ - "anyhow", - "bevy_app", - "bevy_diagnostic", - "bevy_ecs", - "bevy_log", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "crossbeam-channel", - "downcast-rs", - "fastrand", - "js-sys", - "ndk-glue", - "parking_lot 0.12.1", - "serde", - "thiserror", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "bevy_config_cam" -version = "0.4.0" -dependencies = [ - "bevy", - "bevy_dolly", - "rand", - "strum", - "strum_macros", -] - -[[package]] -name = "bevy_core" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6712146d54fff9e1865362e9f39a7b63c7b037ddb72a3d7bb05b959213fb61e" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_math", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "bytemuck", -] - -[[package]] -name = "bevy_core_pipeline" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080bb00399b6d7697e505f871d67c6de8b52eb06b47b0cda2be80c2396805983" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_derive", - "bevy_ecs", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "radsort", - "serde", -] - -[[package]] -name = "bevy_derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b8f0786d1fc7e0d35297917be463db3d0886f7bd8d4221ca3d565502579ffb" -dependencies = [ - "bevy_macro_utils", - "quote", - "syn", -] - -[[package]] -name = "bevy_diagnostic" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adab74ee5375fbf5d2b1d3da41de8d1491a8a706d17441b5e31214b65349d692" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_log", - "bevy_time", - "bevy_utils", -] - -[[package]] -name = "bevy_dolly" -version = "0.0.1" -dependencies = [ - "bevy", - "dolly", -] - -[[package]] -name = "bevy_ecs" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5643dc27b7d6778e3a66c8e0f6ad1fd33309aa2fa61d935f360ccc85b7be6a2" -dependencies = [ - "async-channel", - "bevy_ecs_macros", - "bevy_ptr", - "bevy_reflect", - "bevy_tasks", - "bevy_utils", - "downcast-rs", - "fixedbitset", - "fxhash", - "serde", - "thread_local", -] - -[[package]] -name = "bevy_ecs_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5f2f12677f8725d40930d0a19652f007fe0ef5ac38e23817cfc4930c61f5680" -dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "bevy_encase_derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a767adc36ce1fc917a736843b026d4de7069d90ed5e669c852481ef69fd5aa" -dependencies = [ - "bevy_macro_utils", - "encase_derive_impl", -] - -[[package]] -name = "bevy_gltf" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150cc6782c4472600c2ade5d78c6ce481c992690f0499e63765aba752d7e0f04" -dependencies = [ - "anyhow", - "base64", - "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", - "thiserror", -] - -[[package]] -name = "bevy_hierarchy" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2e4c20d7c843cd26ef3c5d7b4c20e3e32c275943e2437ecaca1cfd6cfe3b30" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_utils", - "smallvec", -] - -[[package]] -name = "bevy_input" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a11c70573fb4d4c056ba32cfa553daa7e6e1245cb876ccfbe322640928b7ee1c" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_math", - "bevy_utils", -] - -[[package]] -name = "bevy_internal" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d603b597772130782eab6e604706cbb764fb037f9cf0a1904b6f342845b6f44" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_core", - "bevy_core_pipeline", - "bevy_derive", - "bevy_diagnostic", - "bevy_ecs", - "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", - "ndk-glue", -] - -[[package]] -name = "bevy_log" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cafb12fc84734236e36f407ab62c72d5d4279fa4777e40a95d7cc973cbabcd1" -dependencies = [ - "android_log-sys", - "bevy_app", - "bevy_utils", - "console_error_panic_hook", - "tracing-log", - "tracing-subscriber", - "tracing-wasm", -] - -[[package]] -name = "bevy_macro_utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d081af83b701e16cad209255ba6b383744dfa49efa99eb6505989f293305ab3" -dependencies = [ - "quote", - "syn", - "toml", -] - -[[package]] -name = "bevy_math" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db5394e86c5708d3aa506c6e98ec4ed2a4083a7a018c6693d9ac0e77ebfabfc2" -dependencies = [ - "glam", -] - -[[package]] -name = "bevy_mikktspace" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40b299a61175a6f7e7398f83cd5b50920fd8bad4df674e614ad94f25f8426509" -dependencies = [ - "glam", -] - -[[package]] -name = "bevy_pbr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9a81bbd02f5e0a57899a41aec37d9cb14965e1e4d510547f3f680323d05c0f" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_core_pipeline", - "bevy_ecs", - "bevy_math", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bitflags", - "bytemuck", - "radsort", -] - -[[package]] -name = "bevy_ptr" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d92d5679e89602a18682a37846573dcd1979410179e14204280460ba9fb8713a" - -[[package]] -name = "bevy_reflect" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08798e67f2d4e6898ef117d8c99cf3b50a8eebc8da4159e6dad2657a0fbe9a4e" -dependencies = [ - "bevy_ptr", - "bevy_reflect_derive", - "bevy_utils", - "downcast-rs", - "erased-serde", - "glam", - "once_cell", - "parking_lot 0.12.1", - "serde", - "smallvec", - "thiserror", -] - -[[package]] -name = "bevy_reflect_derive" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19209a7f0238053802b7de04e6724bd90d4ed7d90e87101dbd1b64cca64ff694" -dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", - "uuid", -] - -[[package]] -name = "bevy_render" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb49530388ef17cff3fb8bd5e47372fb3cfeb4befc73e3036f6462ac20f049ef" -dependencies = [ - "anyhow", - "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_time", - "bevy_transform", - "bevy_utils", - "bevy_window", - "bitflags", - "codespan-reporting", - "copyless", - "downcast-rs", - "encase", - "futures-lite", - "hex", - "hexasphere", - "image", - "naga", - "once_cell", - "parking_lot 0.12.1", - "regex", - "serde", - "smallvec", - "thiserror", - "thread_local", - "wgpu", -] - -[[package]] -name = "bevy_render_macros" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d0b7a51fa819c20c64f43856c5aaea40f853050bbb09b9ba3672e5ff2688a5" -dependencies = [ - "bevy_macro_utils", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "bevy_scene" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0064d73ebb0de39901478b493604a1a6d448fd337b66803004c60f41f1fa6c37" -dependencies = [ - "anyhow", - "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.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f83dfe8897d6c0d9d5ce3818d49a13e58ae2b9b9ecf4f4bb85aa31bb0678f68" -dependencies = [ - "bevy_app", - "bevy_asset", - "bevy_core_pipeline", - "bevy_ecs", - "bevy_log", - "bevy_math", - "bevy_reflect", - "bevy_render", - "bevy_transform", - "bevy_utils", - "bitflags", - "bytemuck", - "copyless", - "fixedbitset", - "guillotiere", - "rectangle-pack", - "serde", - "thiserror", -] - -[[package]] -name = "bevy_tasks" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff874c91a36eaac3ef957c6f3b590fb71332d9d136671cc858847d56fe9f80a3" -dependencies = [ - "async-channel", - "async-executor", - "event-listener", - "futures-lite", - "num_cpus", - "once_cell", - "wasm-bindgen-futures", -] - -[[package]] -name = "bevy_text" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef05a788c2c04aaa5db95b22a8f0fff0d3a0b08a7bcd1a71f050a628b38eec6e" -dependencies = [ - "ab_glyph", - "anyhow", - "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.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74ec681d641371df81d7bfbcb0eea725ed873f38a094f34b5f7b436f0889e77c" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_reflect", - "bevy_utils", - "crossbeam-channel", -] - -[[package]] -name = "bevy_transform" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42e1528e35f30bede46a50ee4134f150efc01f5c1002c340b3b2e6a0bfcb8aa5" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_hierarchy", - "bevy_math", - "bevy_reflect", -] - -[[package]] -name = "bevy_ui" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac181a7b637da61fad72981ff9d2e5b899283ca7d54b2b7ea49c431121331c53" -dependencies = [ - "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", -] - -[[package]] -name = "bevy_utils" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bda6dada53e546845887ae7357eec57b8d547ef71627b716b33839b4a98b687" -dependencies = [ - "ahash", - "getrandom", - "hashbrown 0.12.3", - "instant", - "tracing", - "uuid", -] - -[[package]] -name = "bevy_window" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3bdc3a220a9bb2fad9bd30d5f44c6645725398fe1bc588fc87abf09f092696e" -dependencies = [ - "bevy_app", - "bevy_ecs", - "bevy_input", - "bevy_math", - "bevy_utils", - "raw-window-handle", - "web-sys", -] - -[[package]] -name = "bevy_winit" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57537a56ac4f4e1ffcad95227bcab37cd17b51770dacff82374a2d88be376322" -dependencies = [ - "approx", - "bevy_app", - "bevy_ecs", - "bevy_input", - "bevy_math", - "bevy_utils", - "bevy_window", - "crossbeam-channel", - "raw-window-handle", - "wasm-bindgen", - "web-sys", - "winit", -] - -[[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" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "block" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" - -[[package]] -name = "bumpalo" -version = "3.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" - -[[package]] -name = "bytemuck" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" -dependencies = [ - "bytemuck_derive", -] - -[[package]] -name = "bytemuck_derive" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "byteorder" -version = "1.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" - -[[package]] -name = "cache-padded" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" - -[[package]] -name = "calloop" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82" -dependencies = [ - "log", - "nix", -] - -[[package]] -name = "cc" -version = "1.0.73" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" - -[[package]] -name = "cfg-if" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" - -[[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 = "cocoa" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" -dependencies = [ - "bitflags", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types", - "libc", - "objc", -] - -[[package]] -name = "cocoa-foundation" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" -dependencies = [ - "bitflags", - "block", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", - "objc", -] - -[[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 = "concurrent-queue" -version = "1.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" -dependencies = [ - "cache-padded", -] - -[[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 1.0.0", - "wasm-bindgen", -] - -[[package]] -name = "const_panic" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c0358e41e90e443c69b2b2811f6ec9892c228b93620634cf4344fe89967fa9f" - -[[package]] -name = "copyless" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" - -[[package]] -name = "core-foundation" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" -dependencies = [ - "core-foundation-sys 0.7.0", - "libc", -] - -[[package]] -name = "core-foundation" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" -dependencies = [ - "core-foundation-sys 0.8.3", - "libc", -] - -[[package]] -name = "core-foundation-sys" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" - -[[package]] -name = "core-foundation-sys" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" - -[[package]] -name = "core-graphics" -version = "0.19.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" -dependencies = [ - "bitflags", - "core-foundation 0.7.0", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" -dependencies = [ - "bitflags", - "core-foundation 0.9.3", - "core-graphics-types", - "foreign-types", - "libc", -] - -[[package]] -name = "core-graphics-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" -dependencies = [ - "bitflags", - "core-foundation 0.9.3", - "foreign-types", - "libc", -] - -[[package]] -name = "core-video-sys" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" -dependencies = [ - "cfg-if 0.1.10", - "core-foundation-sys 0.7.0", - "core-graphics 0.19.2", - "libc", - "objc", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" -dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" -dependencies = [ - "cfg-if 1.0.0", - "once_cell", -] - -[[package]] -name = "cty" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" - -[[package]] -name = "d3d12" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" -dependencies = [ - "bitflags", - "libloading", - "winapi", -] - -[[package]] -name = "darling" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" -dependencies = [ - "darling_core", - "darling_macro", -] - -[[package]] -name = "darling_core" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn", -] - -[[package]] -name = "darling_macro" -version = "0.13.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" -dependencies = [ - "darling_core", - "quote", - "syn", -] - -[[package]] -name = "dispatch" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" - -[[package]] -name = "dlib" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794" -dependencies = [ - "libloading", -] - -[[package]] -name = "dolly" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ae35fe7c2f8550eb2e84dd8251cbaba660d167315daff50c800aee4013da32" -dependencies = [ - "glam", -] - -[[package]] -name = "downcast-rs" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" - -[[package]] -name = "encase" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a516181e9a36e8982cb37933c5e7dba638c42938cacde46ee4e5b4156f881b9" -dependencies = [ - "const_panic", - "encase_derive", - "glam", - "thiserror", -] - -[[package]] -name = "encase_derive" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5b802412eea315f29f2bb2da3a5963cd6121f56eaa06aebcdc0c54eea578f22" -dependencies = [ - "encase_derive_impl", -] - -[[package]] -name = "encase_derive_impl" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2f4de457d974f548d2c2a16f709ebd81013579e543bd1a9b19ced88132c2cf" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "env_logger" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "erased-serde" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d013529d5574a60caeda29e179e695125448e5de52e3874f7b4c1d7360e18e" -dependencies = [ - "serde", -] - -[[package]] -name = "euclid" -version = "0.22.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" -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.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" -dependencies = [ - "instant", -] - -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - -[[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", -] - -[[package]] -name = "foreign-types-shared" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" - -[[package]] -name = "futures-core" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" - -[[package]] -name = "futures-io" -version = "0.3.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" - -[[package]] -name = "futures-lite" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "memchr", - "parking", - "pin-project-lite", - "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 = "getrandom" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi", - "wasm-bindgen", -] - -[[package]] -name = "glam" -version = "0.21.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "781aa11be58ef14b0cd7326618afcbd9cdb5ba686bdab7193d87cdc322cd7033" -dependencies = [ - "bytemuck", - "serde", -] - -[[package]] -name = "glow" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "gltf" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00e0a0eace786193fc83644907097285396360e9e82e30f81a21e9b1ba836a3e" -dependencies = [ - "byteorder", - "gltf-json", - "lazy_static", -] - -[[package]] -name = "gltf-derive" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdd53d6e284bb2bf02a6926e4cc4984978c1990914d6cd9deae4e31cf37cd113" -dependencies = [ - "inflections", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "gltf-json" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9949836a9ec5e7f83f76fb9bbcbc77f254a577ebbdb0820867bc11979ef97cad" -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.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d" -dependencies = [ - "bitflags", - "gpu-alloc-types", -] - -[[package]] -name = "gpu-alloc-types" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" -dependencies = [ - "bitflags", -] - -[[package]] -name = "gpu-descriptor" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a538f217be4d405ff4719a283ca68323cc2384003eca5baaa87501e821c81dda" -dependencies = [ - "bitflags", - "gpu-descriptor-types", - "hashbrown 0.11.2", -] - -[[package]] -name = "gpu-descriptor-types" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" -dependencies = [ - "bitflags", -] - -[[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 = "hash32" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hash32-derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59d2aba832b60be25c1b169146b27c64115470981b128ed84c8db18c1b03c6ff" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash", - "serde", -] - -[[package]] -name = "heck" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "hex" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" - -[[package]] -name = "hexasphere" -version = "7.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9652f2ed7ee9c6374a061039f60fc6e25d7adac7fa10f83365669af3b24b0bf0" -dependencies = [ - "glam", - "once_cell", -] - -[[package]] -name = "hexf-parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" - -[[package]] -name = "ident_case" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" - -[[package]] -name = "image" -version = "0.24.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e30ca2ecf7666107ff827a8e481de6a132a9b687ed3bb20bb1c144a36c00964" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - -[[package]] -name = "indexmap" -version = "1.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - -[[package]] -name = "inflections" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" - -[[package]] -name = "inplace_it" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67f0347836f3f6362c1e7efdadde2b1c4b4556d211310b70631bae7eb692070b" - -[[package]] -name = "instant" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "itoa" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" - -[[package]] -name = "jni-sys" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" - -[[package]] -name = "js-sys" -version = "0.3.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" -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", - "pkg-config", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.126" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" - -[[package]] -name = "libloading" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" -dependencies = [ - "cfg-if 1.0.0", - "winapi", -] - -[[package]] -name = "lock_api" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" -dependencies = [ - "autocfg", - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if 1.0.0", -] - -[[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", -] - -[[package]] -name = "memchr" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memmap2" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357" -dependencies = [ - "libc", -] - -[[package]] -name = "memoffset" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" -dependencies = [ - "autocfg", -] - -[[package]] -name = "metal" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" -dependencies = [ - "bitflags", - "block", - "core-graphics-types", - "foreign-types", - "log", - "objc", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - -[[package]] -name = "mio" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys", -] - -[[package]] -name = "naga" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f50357e1167a3ab92d6b3c7f4bf5f7fd13fde3f4b28bf0d5ea07b5100fdb6c0" -dependencies = [ - "bit-set", - "bitflags", - "codespan-reporting", - "hexf-parse", - "indexmap", - "log", - "num-traits", - "petgraph", - "pp-rs", - "rustc-hash", - "spirv", - "termcolor", - "thiserror", - "unicode-xid", -] - -[[package]] -name = "ndk" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" -dependencies = [ - "bitflags", - "jni-sys", - "ndk-sys", - "num_enum", - "thiserror", -] - -[[package]] -name = "ndk-context" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" - -[[package]] -name = "ndk-glue" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" -dependencies = [ - "android_logger", - "lazy_static", - "libc", - "log", - "ndk", - "ndk-context", - "ndk-macro", - "ndk-sys", -] - -[[package]] -name = "ndk-macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" -dependencies = [ - "darling", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "ndk-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" - -[[package]] -name = "nix" -version = "0.22.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" -dependencies = [ - "bitflags", - "cc", - "cfg-if 1.0.0", - "libc", - "memoffset", -] - -[[package]] -name = "nom" -version = "7.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[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.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" -dependencies = [ - "autocfg", -] - -[[package]] -name = "num_cpus" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" -dependencies = [ - "hermit-abi", - "libc", -] - -[[package]] -name = "num_enum" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" -dependencies = [ - "num_enum_derive", -] - -[[package]] -name = "num_enum_derive" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" -dependencies = [ - "proc-macro-crate", - "proc-macro2", - "quote", - "syn", -] - -[[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_exception" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" -dependencies = [ - "cc", -] - -[[package]] -name = "once_cell" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" - -[[package]] -name = "owned_ttf_parser" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07ef1a404ae479dd6906f4fa2c88b3c94028f1284beb42a47c183a7c27ee9a3e" -dependencies = [ - "ttf-parser", -] - -[[package]] -name = "parking" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" - -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", -] - -[[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 0.9.3", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" -dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall", - "smallvec", - "windows-sys", -] - -[[package]] -name = "percent-encoding" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" - -[[package]] -name = "petgraph" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" -dependencies = [ - "fixedbitset", - "indexmap", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" - -[[package]] -name = "pkg-config" -version = "0.3.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" - -[[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.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" - -[[package]] -name = "proc-macro-crate" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a" -dependencies = [ - "thiserror", - "toml", -] - -[[package]] -name = "proc-macro2" -version = "1.0.42" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c278e965f1d8cf32d6e0e96de3d3e79712178ae67986d9cf9151f51e95aac89b" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "profiling" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" - -[[package]] -name = "quote" -version = "1.0.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" -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.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" -dependencies = [ - "getrandom", -] - -[[package]] -name = "range-alloc" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6" - -[[package]] -name = "raw-window-handle" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" -dependencies = [ - "cty", -] - -[[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.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" -dependencies = [ - "bitflags", -] - -[[package]] -name = "regex" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.6.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" - -[[package]] -name = "renderdoc-sys" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157" - -[[package]] -name = "ron" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" -dependencies = [ - "base64", - "bitflags", - "serde", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustversion" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24c8ad4f0c00e1eb5bc7614d236a7f1300e3dbd76b68cac8e06fb00b015ad8d8" - -[[package]] -name = "ryu" -version = "1.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" - -[[package]] -name = "scoped-tls" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2" - -[[package]] -name = "scopeguard" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" - -[[package]] -name = "serde" -version = "1.0.140" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc855a42c7967b7c369eb5860f7164ef1f6f81c20c7cc1141f2a604e18723b03" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.140" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2122636b9fe3b81f1cb25099fcf2d3f542cdb1d45940d56c713158884a05da" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82c2c1fdcd807d1098552c5b9a36e425e42e9fbd7c6a37a8425f390f781f7fa7" -dependencies = [ - "itoa", - "ryu", - "serde", -] - -[[package]] -name = "sharded-slab" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "slab" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" -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.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" -dependencies = [ - "serde", -] - -[[package]] -name = "smithay-client-toolkit" -version = "0.15.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" -dependencies = [ - "bitflags", - "calloop", - "dlib", - "lazy_static", - "log", - "memmap2", - "nix", - "pkg-config", - "wayland-client", - "wayland-cursor", - "wayland-protocols", -] - -[[package]] -name = "spirv" -version = "0.2.0+1.5.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" -dependencies = [ - "bitflags", - "num-traits", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "strum" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" - -[[package]] -name = "strum_macros" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4faebde00e8ff94316c01800f9054fd2ba77d30d9e922541913051d1d978918b" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "rustversion", - "syn", -] - -[[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.98" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "taffy" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec27dea659b100d489dffa57cf0efc6d7bfefb119af817b92cc14006c0b214e3" -dependencies = [ - "arrayvec", - "hash32", - "hash32-derive", - "num-traits", - "typenum", -] - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "thiserror" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "1.0.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" -dependencies = [ - "once_cell", -] - -[[package]] -name = "toml" -version = "0.5.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" -dependencies = [ - "serde", -] - -[[package]] -name = "tracing" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" -dependencies = [ - "cfg-if 1.0.0", - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" -dependencies = [ - "lazy_static", - "log", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" -dependencies = [ - "ansi_term", - "matchers", - "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.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" - -[[package]] -name = "typenum" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" - -[[package]] -name = "unicode-ident" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7" - -[[package]] -name = "unicode-width" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" - -[[package]] -name = "unicode-xid" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" - -[[package]] -name = "uuid" -version = "1.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" -dependencies = [ - "getrandom", - "serde", -] - -[[package]] -name = "valuable" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" - -[[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.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" - -[[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.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" -dependencies = [ - "cfg-if 1.0.0", - "wasm-bindgen-macro", -] - -[[package]] -name = "wasm-bindgen-backend" -version = "0.2.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" -dependencies = [ - "bumpalo", - "log", - "once_cell", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] - -[[package]] -name = "wasm-bindgen-macro" -version = "0.2.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] - -[[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] - -[[package]] -name = "wasm-bindgen-shared" -version = "0.2.82" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" - -[[package]] -name = "wayland-client" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f" -dependencies = [ - "bitflags", - "downcast-rs", - "libc", - "nix", - "scoped-tls", - "wayland-commons", - "wayland-scanner", - "wayland-sys", -] - -[[package]] -name = "wayland-commons" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e" -dependencies = [ - "nix", - "once_cell", - "smallvec", - "wayland-sys", -] - -[[package]] -name = "wayland-cursor" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd" -dependencies = [ - "nix", - "wayland-client", - "xcursor", -] - -[[package]] -name = "wayland-protocols" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741" -dependencies = [ - "bitflags", - "wayland-client", - "wayland-commons", - "wayland-scanner", -] - -[[package]] -name = "wayland-scanner" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0" -dependencies = [ - "proc-macro2", - "quote", - "xml-rs", -] - -[[package]] -name = "wayland-sys" -version = "0.29.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4" -dependencies = [ - "dlib", - "pkg-config", -] - -[[package]] -name = "web-sys" -version = "0.3.59" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "wgpu" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277e967bf8b7820a76852645a6bce8bbd31c32fda2042e82d8e3ea75fda8892d" -dependencies = [ - "arrayvec", - "js-sys", - "log", - "naga", - "parking_lot 0.12.1", - "raw-window-handle", - "smallvec", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "wgpu-core", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-core" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b92788dec9d0c1bed849a1b83f01b2ee12819bf04a79c90f68e4173f7b5ba2" -dependencies = [ - "arrayvec", - "bit-vec", - "bitflags", - "cfg_aliases", - "codespan-reporting", - "copyless", - "fxhash", - "log", - "naga", - "parking_lot 0.12.1", - "profiling", - "raw-window-handle", - "smallvec", - "thiserror", - "web-sys", - "wgpu-hal", - "wgpu-types", -] - -[[package]] -name = "wgpu-hal" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cbdfc3d0637dba3d5536b93adef3d26023a0b96f0e1ee5ee9560a401d9f646" -dependencies = [ - "android_system_properties", - "arrayvec", - "ash", - "bit-set", - "bitflags", - "block", - "core-graphics-types", - "d3d12", - "foreign-types", - "fxhash", - "glow", - "gpu-alloc", - "gpu-descriptor", - "inplace_it", - "js-sys", - "khronos-egl", - "libloading", - "log", - "metal", - "naga", - "objc", - "parking_lot 0.12.1", - "profiling", - "range-alloc", - "raw-window-handle", - "renderdoc-sys", - "thiserror", - "wasm-bindgen", - "web-sys", - "wgpu-types", - "winapi", -] - -[[package]] -name = "wgpu-types" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f762cbc08e1a51389859cf9c199c7aef544789cf3510889aab12c607f701604" -dependencies = [ - "bitflags", -] - -[[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.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -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-sys" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" -dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" - -[[package]] -name = "windows_i686_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" - -[[package]] -name = "winit" -version = "0.26.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" -dependencies = [ - "bitflags", - "cocoa", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "core-video-sys", - "dispatch", - "instant", - "lazy_static", - "libc", - "log", - "mio", - "ndk", - "ndk-glue", - "ndk-sys", - "objc", - "parking_lot 0.11.2", - "percent-encoding", - "raw-window-handle", - "smithay-client-toolkit", - "wasm-bindgen", - "wayland-client", - "wayland-protocols", - "web-sys", - "winapi", - "x11-dl", -] - -[[package]] -name = "x11-dl" -version = "2.19.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" -dependencies = [ - "lazy_static", - "libc", - "pkg-config", -] - -[[package]] -name = "xcursor" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7" -dependencies = [ - "nom", -] - -[[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.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" From a8ed595ca3e9366d198a2c761e867d5febb9f8bd Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:29:41 +0200 Subject: [PATCH 07/63] Temp fix compile errors, fmt & clippy fix --- examples/minimal.rs | 1 - examples/multiple_targets.rs | 7 +++-- examples/simple.rs | 53 ++++++++++++++++++------------------ examples/switch.rs | 3 ++ src/lib.rs | 5 +--- 5 files changed, 36 insertions(+), 33 deletions(-) diff --git a/examples/minimal.rs b/examples/minimal.rs index d9454ee..e6bf744 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -70,7 +70,6 @@ fn setup( }, ..Default::default() }); - //.insert(FlyCam); } fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index c5ecf57..9f36c63 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -1,7 +1,8 @@ -//Base +fn main() {} + +/* use bevy::prelude::*; use bevy_config_cam::*; - fn main() { App::new() .insert_resource(Msaa { samples: 4 }) @@ -97,3 +98,5 @@ fn set_closest_target( cl.target = None; } } + +*/ diff --git a/examples/simple.rs b/examples/simple.rs index 878574f..d4b2eee 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -1,7 +1,7 @@ -//Base +fn main() {} +/* use bevy::prelude::*; use bevy_config_cam::*; - fn main() { App::new() .insert_resource(Msaa { samples: 4 }) @@ -19,25 +19,25 @@ fn main() { }) .add_startup_system(setup) .run(); -} + } -/// set up a simple 3D scene -fn setup( - mut commands: Commands, - mut meshes: ResMut<Assets<Mesh>>, - mut materials: ResMut<Assets<StandardMaterial>>, - mut cl: ResMut<CamLogic>, -) { - // plane - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), - material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), - ..Default::default() - }); + /// set up a simple 3D scene + fn setup( + mut commands: Commands, + mut meshes: ResMut<Assets<Mesh>>, + mut materials: ResMut<Assets<StandardMaterial>>, + mut cl: ResMut<CamLogic>, + ) { + // plane + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + ..Default::default() + }); - // cube, set as target - cl.target = Some( - commands + // cube, set as target + cl.target = Some( + commands .spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), @@ -45,11 +45,12 @@ fn setup( ..Default::default() }) .id(), - ); + ); - // light - commands.spawn_bundle(PointLightBundle { - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..Default::default() - }); -} + // light + commands.spawn_bundle(PointLightBundle { + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..Default::default() + }); + } +*/ diff --git a/examples/switch.rs b/examples/switch.rs index 44c460b..8d309ed 100644 --- a/examples/switch.rs +++ b/examples/switch.rs @@ -1,3 +1,5 @@ +fn main() {} +/* use bevy::{ prelude::*, render::camera::{ActiveCamera, Camera3d}, @@ -93,3 +95,4 @@ fn cycle_camera_state( keys.reset(KeyCode::E); } } +*/ diff --git a/src/lib.rs b/src/lib.rs index f43b3d2..b969039 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,4 @@ -use bevy::{ - math::Vec3, - prelude::{App, Camera, Changed, Entity, Plugin, Query, Res, Time, Transform}, -}; +use bevy::prelude::{App, Camera, Changed, Entity, Plugin, Query, Res, Time, Transform}; use bevy_dolly::prelude::*; pub struct ConfigCam; From c4275906a28cbc1fef14363b569e68877668e2a9 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:33:55 +0200 Subject: [PATCH 08/63] CI Update --- .github/workflows/master.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 938fafc..83fb843 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -3,19 +3,19 @@ on: [push, pull_request] name: CI jobs: - update: - name: Update - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - override: true - - uses: actions-rs/cargo@v1 - with: - command: update + #update: + # name: Update + # runs-on: ubuntu-latest + # steps: + # - uses: actions/checkout@v2 + # - uses: actions-rs/toolchain@v1 + # with: + # profile: minimal + # toolchain: stable + # override: true + # - uses: actions-rs/cargo@v1 + # with: + # command: update check: name: Check From 14c4fed239d6fa26a54a2e21157e5fc2b4533f58 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:34:59 +0200 Subject: [PATCH 09/63] Removed update CI --- .github/workflows/master.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 83fb843..7edcedf 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -20,7 +20,7 @@ jobs: check: name: Check runs-on: ubuntu-latest - needs: update + #needs: update steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 @@ -35,7 +35,7 @@ jobs: test: name: Test Suite runs-on: ubuntu-latest - needs: update + #needs: update steps: - uses: actions/checkout@v2 - name: Update apt @@ -74,7 +74,7 @@ jobs: clippy: name: Clippy runs-on: ubuntu-latest - needs: update + #needs: update steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 From 18c07a79c5c4a0adfaa186b9c18428baf72aeec7 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:44:26 +0200 Subject: [PATCH 10/63] Added clean ci --- .github/workflows/master.yml | 41 ++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 7edcedf..9e56e71 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -3,24 +3,33 @@ on: [push, pull_request] name: CI jobs: - #update: - # name: Update - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v2 - # - uses: actions-rs/toolchain@v1 - # with: - # profile: minimal - # toolchain: stable - # override: true - # - uses: actions-rs/cargo@v1 - # with: - # command: update + clean: + name: Clean + runs-on: ubuntu-latest + steps: + - name: Remove cargo registry + run: | + rm ~/.cargo/registry/index + + update: + name: Update + runs-on: ubuntu-latest + needs: clean + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + profile: minimal + toolchain: stable + override: true + - uses: actions-rs/cargo@v1 + with: + command: update check: name: Check runs-on: ubuntu-latest - #needs: update + needs: update steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 @@ -35,7 +44,7 @@ jobs: test: name: Test Suite runs-on: ubuntu-latest - #needs: update + needs: update steps: - uses: actions/checkout@v2 - name: Update apt @@ -74,7 +83,7 @@ jobs: clippy: name: Clippy runs-on: ubuntu-latest - #needs: update + needs: update steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 From 5c24fbc2591b1bf032aa99c247815a9ee974b2e0 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:46:13 +0200 Subject: [PATCH 11/63] ... --- .github/workflows/master.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 9e56e71..17289bf 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -6,6 +6,7 @@ jobs: clean: name: Clean runs-on: ubuntu-latest + continue-on-error: true steps: - name: Remove cargo registry run: | From efa8b3081d4721f2e9766398034c6e29e01a453e Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 31 Jul 2022 17:47:50 +0200 Subject: [PATCH 12/63] .. --- .github/workflows/master.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 17289bf..20499ee 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -3,19 +3,10 @@ on: [push, pull_request] name: CI jobs: - clean: - name: Clean - runs-on: ubuntu-latest - continue-on-error: true - steps: - - name: Remove cargo registry - run: | - rm ~/.cargo/registry/index - update: name: Update runs-on: ubuntu-latest - needs: clean + continue-on-error: true steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 From 3b28c46137e5a083602b8855861c468d9364c360 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 01:35:17 +0200 Subject: [PATCH 13/63] Mad camera science --- Cargo.toml | 1 + driver_marker_derive/Cargo.toml | 13 +++++ driver_marker_derive/src/lib.rs | 40 ++++++++++++++ examples/minimal.rs | 31 ++++++++--- src/lib.rs | 96 ++++++++++++++++++++++++++++----- 5 files changed, 159 insertions(+), 22 deletions(-) create mode 100644 driver_marker_derive/Cargo.toml create mode 100644 driver_marker_derive/src/lib.rs diff --git a/Cargo.toml b/Cargo.toml index 647cf3e..4d0bea7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,6 +26,7 @@ rand = "0.8" strum = "0.24" strum_macros = "0.24" bevy_dolly = { path="../bevy_dolly" } +driver_marker_derive = { path = "driver_marker_derive" } [dependencies.bevy] version = "0.8.0" diff --git a/driver_marker_derive/Cargo.toml b/driver_marker_derive/Cargo.toml new file mode 100644 index 0000000..f341d4f --- /dev/null +++ b/driver_marker_derive/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "driver_marker_derive" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +proc-macro = true + +[dependencies] +syn = "1.0" +quote = "1.0" \ No newline at end of file diff --git a/driver_marker_derive/src/lib.rs b/driver_marker_derive/src/lib.rs new file mode 100644 index 0000000..747277a --- /dev/null +++ b/driver_marker_derive/src/lib.rs @@ -0,0 +1,40 @@ +extern crate proc_macro; + +use proc_macro::TokenStream; +use quote::quote; +use syn; + +#[proc_macro_derive(DriverMarker)] +pub fn driver_marker_derive(input: TokenStream) -> TokenStream { + // Construct a representation of Rust code as a syntax tree + // that we can manipulate + let ast = syn::parse(input).unwrap(); + + // Build the trait implementation + impl_driver_marker_macro(&ast) +} + +fn impl_driver_marker_macro(ast: &syn::DeriveInput) -> TokenStream { + let name = &ast.ident; + let f = format!("{}", name); + let gen = quote! { + impl DriverMarker for #name { + fn get_component(&self) -> &str { + #f + } + + fn add_component(&self, commands: &mut Commands, entity: Entity){ + commands + .entity(entity) + .insert(#name); + } + + fn remove_component(&self, commands: &mut Commands, entity: Entity){ + commands + .entity(entity) + .remove::<#name>(); + } + } + }; + gen.into() +} \ No newline at end of file diff --git a/examples/minimal.rs b/examples/minimal.rs index e6bf744..df102a8 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -39,16 +39,29 @@ fn setup( ..Default::default() }); - commands.spawn().insert( - Rig::builder() - .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-30.0)) - .with(Smooth::new_rotation(1.5)) - .with(Arm::new(glam::Vec3::Z * 4.0)) - .build(), - ); + commands + .spawn() + .insert( + Rig::builder() + .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(glam::Vec3::Z * 4.0)) + .build(), + ) + .insert(FPV); + + commands + .spawn() + .insert( + Rig::builder() + .with(YawPitch::new().yaw_degrees(0.0).pitch_degrees(-90.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(glam::Vec3::Z * 4.0)) + .build(), + ) + .insert(FPV2); commands.spawn_bundle(Camera3dBundle { - transform: Transform::from_xyz(0.0, 5.0, 0.01).looking_at(Vec3::ZERO, Vec3::Y), camera: Camera { is_active: true, ..Default::default() @@ -62,6 +75,7 @@ fn setup( ..Default::default() }); + /* commands.spawn_bundle(Camera3dBundle { transform: Transform::from_xyz(5., 2.0, 0.).looking_at(Vec3::ZERO, Vec3::Y), camera: Camera { @@ -70,6 +84,7 @@ fn setup( }, ..Default::default() }); + */ } fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { diff --git a/src/lib.rs b/src/lib.rs index b969039..a942fa5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,28 +1,96 @@ -use bevy::prelude::{App, Camera, Changed, Entity, Plugin, Query, Res, Time, Transform}; +use bevy::{ + ecs::component::TableStorage, + input::Input, + prelude::{ + App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, ReflectComponent, Res, + ResMut, + }, + reflect::{reflect_trait, Reflect, TypeRegistry}, + render::camera, +}; use bevy_dolly::prelude::*; +use driver_marker_derive::DriverMarker; pub struct ConfigCam; impl Plugin for ConfigCam { fn build(&self, app: &mut App) { - app.add_system(config_cam_change_detection); + app.init_resource::<DriverIndex>() + .init_resource::<Drivers>() + .add_dolly_component(FPV) + .add_dolly_component(FPV2) + .add_system(change_driver_system) + .add_system(update_driver_system); //.add_dolly_component(FPV) } } -fn config_cam_change_detection( - mut cameras: Query<(&mut Transform, &Camera)>, - time: Res<Time>, - mut query: Query<(Entity, &mut Rig), Changed<Rig>>, +#[derive(Component, DriverMarker, Clone, Copy, Debug)] +pub struct FPV; + +#[derive(Component, DriverMarker, Clone, Copy, Debug)] +pub struct FPV2; + +pub struct Drivers(Vec<Box<dyn DriverMarker>>); + +impl Default for Drivers { + fn default() -> Self { + Self(vec![Box::new(FPV), Box::new(FPV2)]) + } +} + +pub trait DriverMarker: Sync + Send + 'static { + fn get_component(&self) -> &str; + fn add_component(&self, commands: &mut Commands, entity: Entity); + fn remove_component(&self, commands: &mut Commands, entity: Entity); +} + +#[derive(Default)] +pub struct DriverIndex(usize); + +//Use collection with and keeping an index component or the like +fn change_driver_system( + mut index: ResMut<DriverIndex>, + drivers: Res<Drivers>, + keys: Res<Input<KeyCode>>, ) { - for (_entity, mut rig) in &mut query { - //let d = rig.drivers.iter().map(|f| format!("{:?}", f)).collect::<Vec<String>>().join(", "); - //info!("{:?} changed: {:?}", entity, d); + if keys.just_pressed(KeyCode::T) { + if index.0 >= drivers.0.len() - 1 { + index.0 = 0; + } else { + index.0 += 1; + } + } +} - let transform = rig.update(time.delta_seconds()); +fn update_driver_system( + q: Query<(Entity, &Camera)>, + mut commands: Commands, + index: Res<DriverIndex>, + drivers: Res<Drivers>, +) { + if index.is_changed() { + for component in &drivers.0 { + let a = component.as_ref(); + let b = a.get_component(); - cameras.for_each_mut(|(mut t, camera)| { - if camera.is_active { - t.transform_2_bevy(transform); + if let Some(h) = drivers.0.get(index.0) { + if b.eq(h.get_component()) { + //Add new driver component + //Remove old driver component + for (entity, camera) in q.iter() { + if camera.is_active { + a.add_component(&mut commands, entity); + println!("Adding {:?} to Camera {:?}", b, entity); + } + } + } else { + for (entity, camera) in q.iter() { + if camera.is_active { + a.remove_component(&mut commands, entity); + println!("Remove {:?} from Camera {:?}", b, entity); + } + } + } } - }); + } } } From 5da8e9f4d5195f624e500b5cdc5b6d99214fa407 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 02:10:50 +0200 Subject: [PATCH 14/63] Made ergonomic --- driver_marker_derive/src/lib.rs | 6 +-- examples/minimal.rs | 35 +------------- examples/orbit.rs | 84 +++++++++++++++++++++++++++++++++ src/lib.rs | 76 +++++++++++++++++------------ 4 files changed, 134 insertions(+), 67 deletions(-) create mode 100644 examples/orbit.rs diff --git a/driver_marker_derive/src/lib.rs b/driver_marker_derive/src/lib.rs index 747277a..e554d46 100644 --- a/driver_marker_derive/src/lib.rs +++ b/driver_marker_derive/src/lib.rs @@ -19,17 +19,17 @@ fn impl_driver_marker_macro(ast: &syn::DeriveInput) -> TokenStream { let f = format!("{}", name); let gen = quote! { impl DriverMarker for #name { - fn get_component(&self) -> &str { + fn get_name(&self) -> &str { #f } - fn add_component(&self, commands: &mut Commands, entity: Entity){ + fn add_to(&self, commands: &mut Commands, entity: Entity){ commands .entity(entity) .insert(#name); } - fn remove_component(&self, commands: &mut Commands, entity: Entity){ + fn remove_from(&self, commands: &mut Commands, entity: Entity){ commands .entity(entity) .remove::<#name>(); diff --git a/examples/minimal.rs b/examples/minimal.rs index df102a8..9fbe95d 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -1,7 +1,7 @@ //Base use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; -use bevy_dolly::{dolly::glam, prelude::*}; +use bevy_dolly::prelude::*; fn main() { App::new() @@ -39,28 +39,6 @@ fn setup( ..Default::default() }); - commands - .spawn() - .insert( - Rig::builder() - .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) - .with(Smooth::new_rotation(1.5)) - .with(Arm::new(glam::Vec3::Z * 4.0)) - .build(), - ) - .insert(FPV); - - commands - .spawn() - .insert( - Rig::builder() - .with(YawPitch::new().yaw_degrees(0.0).pitch_degrees(-90.0)) - .with(Smooth::new_rotation(1.5)) - .with(Arm::new(glam::Vec3::Z * 4.0)) - .build(), - ) - .insert(FPV2); - commands.spawn_bundle(Camera3dBundle { camera: Camera { is_active: true, @@ -74,17 +52,6 @@ fn setup( .into(), ..Default::default() }); - - /* - commands.spawn_bundle(Camera3dBundle { - transform: Transform::from_xyz(5., 2.0, 0.).looking_at(Vec3::ZERO, Vec3::Y), - camera: Camera { - is_active: false, - ..Default::default() - }, - ..Default::default() - }); - */ } fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { diff --git a/examples/orbit.rs b/examples/orbit.rs new file mode 100644 index 0000000..b9f89d4 --- /dev/null +++ b/examples/orbit.rs @@ -0,0 +1,84 @@ +use bevy::{prelude::*, render::camera::ScalingMode}; +use bevy_config_cam::*; +use bevy_dolly::{dolly::glam, prelude::*}; +use driver_marker_derive::DriverMarker; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_plugin(ConfigCam) + .add_dolly_component(OrbitTopDown) + .insert_resource(Drivers::new(vec![Box::new(Orbit), Box::new(OrbitTopDown)])) + .add_startup_system(setup) + .add_system(update_yaw_driver) + .run(); +} + +#[derive(Component, DriverMarker, Clone, Copy, Debug)] +pub struct OrbitTopDown; + +/// set up a simple 3D scene +fn setup( + mut commands: Commands, + mut meshes: ResMut<Assets<Mesh>>, + mut materials: ResMut<Assets<StandardMaterial>>, +) { + // plane + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + ..Default::default() + }); + + // cube + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }); + + // light + commands.spawn_bundle(PointLightBundle { + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..Default::default() + }); + + commands + .spawn() + .insert( + Rig::builder() + .with(YawPitch::new().yaw_degrees(0.0).pitch_degrees(-90.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(glam::Vec3::Z * 4.0)) + .build(), + ) + .insert(OrbitTopDown); + + commands.spawn_bundle(Camera3dBundle { + camera: Camera { + is_active: true, + ..Default::default() + }, + projection: OrthographicProjection { + scale: 3.0, + scaling_mode: ScalingMode::FixedVertical(1.0), + ..default() + } + .into(), + ..Default::default() + }); +} + +fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { + for mut rig in &mut query { + if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { + if keys.just_pressed(KeyCode::Z) { + camera_driver.rotate_yaw_pitch(-90.0, 0.0); + } + if keys.just_pressed(KeyCode::X) { + camera_driver.rotate_yaw_pitch(90.0, 0.0); + } + } + } +} diff --git a/src/lib.rs b/src/lib.rs index a942fa5..2c56cf8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,14 +1,8 @@ use bevy::{ - ecs::component::TableStorage, input::Input, - prelude::{ - App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, ReflectComponent, Res, - ResMut, - }, - reflect::{reflect_trait, Reflect, TypeRegistry}, - render::camera, + prelude::{App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut}, }; -use bevy_dolly::prelude::*; +use bevy_dolly::{dolly::glam, prelude::*}; use driver_marker_derive::DriverMarker; pub struct ConfigCam; @@ -16,36 +10,62 @@ impl Plugin for ConfigCam { fn build(&self, app: &mut App) { app.init_resource::<DriverIndex>() .init_resource::<Drivers>() - .add_dolly_component(FPV) - .add_dolly_component(FPV2) + .add_dolly_component(Orbit) + .add_startup_system(default_setup) .add_system(change_driver_system) .add_system(update_driver_system); //.add_dolly_component(FPV) } } #[derive(Component, DriverMarker, Clone, Copy, Debug)] -pub struct FPV; +pub struct Orbit; -#[derive(Component, DriverMarker, Clone, Copy, Debug)] -pub struct FPV2; +fn default_setup(mut commands: Commands) { + commands + .spawn() + .insert( + Rig::builder() + .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(glam::Vec3::Z * 4.0)) + .build(), + ) + .insert(Orbit); +} pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { fn default() -> Self { - Self(vec![Box::new(FPV), Box::new(FPV2)]) + Self(vec![Box::new(Orbit)]) + } +} + +impl Drivers { + pub fn new(driver_markers: Vec<Box<dyn DriverMarker>>) -> Self { + Self(driver_markers) } } pub trait DriverMarker: Sync + Send + 'static { - fn get_component(&self) -> &str; - fn add_component(&self, commands: &mut Commands, entity: Entity); - fn remove_component(&self, commands: &mut Commands, entity: Entity); + fn get_name(&self) -> &str; + fn add_to(&self, commands: &mut Commands, entity: Entity); + fn remove_from(&self, commands: &mut Commands, entity: Entity); } #[derive(Default)] pub struct DriverIndex(usize); +impl DriverIndex { + pub fn next(&mut self, len: usize) { + if self.0 >= len - 1 { + self.0 = 0; + } else { + self.0 += 1; + } + } +} + //Use collection with and keeping an index component or the like fn change_driver_system( mut index: ResMut<DriverIndex>, @@ -53,11 +73,7 @@ fn change_driver_system( keys: Res<Input<KeyCode>>, ) { if keys.just_pressed(KeyCode::T) { - if index.0 >= drivers.0.len() - 1 { - index.0 = 0; - } else { - index.0 += 1; - } + index.next(drivers.0.len()); } } @@ -68,25 +84,25 @@ fn update_driver_system( drivers: Res<Drivers>, ) { if index.is_changed() { - for component in &drivers.0 { - let a = component.as_ref(); - let b = a.get_component(); + for box_component in &drivers.0 { + let component = box_component.as_ref(); + let component_name = component.get_name(); if let Some(h) = drivers.0.get(index.0) { - if b.eq(h.get_component()) { + if component_name.eq(h.get_name()) { //Add new driver component //Remove old driver component for (entity, camera) in q.iter() { if camera.is_active { - a.add_component(&mut commands, entity); - println!("Adding {:?} to Camera {:?}", b, entity); + component.add_to(&mut commands, entity); + println!("Adding {:?} to Camera {:?}", component_name, entity); } } } else { for (entity, camera) in q.iter() { if camera.is_active { - a.remove_component(&mut commands, entity); - println!("Remove {:?} from Camera {:?}", b, entity); + component.remove_from(&mut commands, entity); + println!("Remove {:?} from Camera {:?}", component_name, entity); } } } From ef8eeffe4fe93bad6bade1b503afb689018bd2d7 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 02:17:36 +0200 Subject: [PATCH 15/63] fmt --- driver_marker_derive/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver_marker_derive/src/lib.rs b/driver_marker_derive/src/lib.rs index e554d46..1ebef03 100644 --- a/driver_marker_derive/src/lib.rs +++ b/driver_marker_derive/src/lib.rs @@ -37,4 +37,4 @@ fn impl_driver_marker_macro(ast: &syn::DeriveInput) -> TokenStream { } }; gen.into() -} \ No newline at end of file +} From bfb59c0d150cc7b2b0bb581d95d82fd698b18157 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 03:02:39 +0200 Subject: [PATCH 16/63] Updated examples --- Cargo.toml | 2 +- examples/minimal.rs | 15 --------------- examples/orbit.rs | 13 ------------- src/lib.rs | 34 ++++++++++++++++++++++++++++++++-- 4 files changed, 33 insertions(+), 31 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 4d0bea7..9f5e100 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ name = "bevy_config_cam" rand = "0.8" strum = "0.24" strum_macros = "0.24" -bevy_dolly = { path="../bevy_dolly" } +bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "0.8" } driver_marker_derive = { path = "driver_marker_derive" } [dependencies.bevy] diff --git a/examples/minimal.rs b/examples/minimal.rs index 9fbe95d..4df5154 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -1,14 +1,12 @@ //Base use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; -use bevy_dolly::prelude::*; fn main() { App::new() .add_plugins(DefaultPlugins) .add_plugin(ConfigCam) .add_startup_system(setup) - .add_system(update_yaw_driver) .run(); } @@ -53,16 +51,3 @@ fn setup( ..Default::default() }); } - -fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { - for mut rig in &mut query { - if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { - if keys.just_pressed(KeyCode::Z) { - camera_driver.rotate_yaw_pitch(-90.0, 0.0); - } - if keys.just_pressed(KeyCode::X) { - camera_driver.rotate_yaw_pitch(90.0, 0.0); - } - } - } -} diff --git a/examples/orbit.rs b/examples/orbit.rs index b9f89d4..471d41e 100644 --- a/examples/orbit.rs +++ b/examples/orbit.rs @@ -69,16 +69,3 @@ fn setup( ..Default::default() }); } - -fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { - for mut rig in &mut query { - if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { - if keys.just_pressed(KeyCode::Z) { - camera_driver.rotate_yaw_pitch(-90.0, 0.0); - } - if keys.just_pressed(KeyCode::X) { - camera_driver.rotate_yaw_pitch(90.0, 0.0); - } - } - } -} diff --git a/src/lib.rs b/src/lib.rs index 2c56cf8..8fa0ff5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,17 +10,47 @@ impl Plugin for ConfigCam { fn build(&self, app: &mut App) { app.init_resource::<DriverIndex>() .init_resource::<Drivers>() + .add_dolly_component(LookAt) .add_dolly_component(Orbit) .add_startup_system(default_setup) .add_system(change_driver_system) - .add_system(update_driver_system); //.add_dolly_component(FPV) + .add_system(update_driver_system) + .add_system(update_yaw_driver); } } +fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { + for mut rig in &mut query { + if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { + if keys.just_pressed(KeyCode::Z) { + camera_driver.rotate_yaw_pitch(-90.0, 0.0); + } + if keys.just_pressed(KeyCode::X) { + camera_driver.rotate_yaw_pitch(90.0, 0.0); + } + } + } +} + +#[derive(Component, DriverMarker, Clone, Copy, Debug)] +pub struct LookAt; + #[derive(Component, DriverMarker, Clone, Copy, Debug)] pub struct Orbit; fn default_setup(mut commands: Commands) { + commands + .spawn() + .insert( + Rig::builder() + .with(Position::new(glam::Vec3::new(1., 1., 1.) * 3.0)) + .with(bevy_dolly::prelude::LookAt::new( + glam::Vec3::new( + 0., 0., 0.,))) + .build(), + ) + .insert(LookAt); + commands .spawn() .insert( @@ -37,7 +67,7 @@ pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { fn default() -> Self { - Self(vec![Box::new(Orbit)]) + Self(vec![Box::new(LookAt), Box::new(Orbit)]) } } From 8fb3358d2b3bdf9598b3e94ebaba4cd86b9ed9b6 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 03:12:27 +0200 Subject: [PATCH 17/63] Impl. TypeId for check --- driver_marker_derive/src/lib.rs | 4 ++++ src/lib.rs | 11 +++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/driver_marker_derive/src/lib.rs b/driver_marker_derive/src/lib.rs index 1ebef03..aa7f32a 100644 --- a/driver_marker_derive/src/lib.rs +++ b/driver_marker_derive/src/lib.rs @@ -19,6 +19,10 @@ fn impl_driver_marker_macro(ast: &syn::DeriveInput) -> TokenStream { let f = format!("{}", name); let gen = quote! { impl DriverMarker for #name { + fn get_id(&self) -> TypeId { + TypeId::of::<#name>() + } + fn get_name(&self) -> &str { #f } diff --git a/src/lib.rs b/src/lib.rs index 8fa0ff5..d541ed4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,5 @@ +use std::any::TypeId; + use bevy::{ input::Input, prelude::{App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut}, @@ -78,6 +80,7 @@ impl Drivers { } pub trait DriverMarker: Sync + Send + 'static { + fn get_id(&self) -> TypeId; fn get_name(&self) -> &str; fn add_to(&self, commands: &mut Commands, entity: Entity); fn remove_from(&self, commands: &mut Commands, entity: Entity); @@ -116,23 +119,23 @@ fn update_driver_system( if index.is_changed() { for box_component in &drivers.0 { let component = box_component.as_ref(); - let component_name = component.get_name(); + let component_id = component.get_id(); if let Some(h) = drivers.0.get(index.0) { - if component_name.eq(h.get_name()) { + if component_id.eq(&h.get_id()) { //Add new driver component //Remove old driver component for (entity, camera) in q.iter() { if camera.is_active { component.add_to(&mut commands, entity); - println!("Adding {:?} to Camera {:?}", component_name, entity); + println!("Adding {:?} to Camera {:?}", component.get_name(), entity); } } } else { for (entity, camera) in q.iter() { if camera.is_active { component.remove_from(&mut commands, entity); - println!("Remove {:?} from Camera {:?}", component_name, entity); + println!("Remove {:?} from Camera {:?}", component.get_name(), entity); } } } From bd0a0ef2afc06f6e5d53fcc1cef82f0718604a59 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 03:12:48 +0200 Subject: [PATCH 18/63] fmt --- src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index d541ed4..c80269c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,9 +46,9 @@ fn default_setup(mut commands: Commands) { .insert( Rig::builder() .with(Position::new(glam::Vec3::new(1., 1., 1.) * 3.0)) - .with(bevy_dolly::prelude::LookAt::new( - glam::Vec3::new( - 0., 0., 0.,))) + .with(bevy_dolly::prelude::LookAt::new(glam::Vec3::new( + 0., 0., 0., + ))) .build(), ) .insert(LookAt); From 6817c4ef0f52e0cc0fff3cadb04cd5666ed2bb5f Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 03:40:56 +0200 Subject: [PATCH 19/63] Added FPV --- examples/minimal.rs | 1 - examples/orbit.rs | 2 +- src/lib.rs | 51 ++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/examples/minimal.rs b/examples/minimal.rs index 4df5154..30dfdaa 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -1,4 +1,3 @@ -//Base use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; diff --git a/examples/orbit.rs b/examples/orbit.rs index 471d41e..5477ce9 100644 --- a/examples/orbit.rs +++ b/examples/orbit.rs @@ -2,6 +2,7 @@ use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; use bevy_dolly::{dolly::glam, prelude::*}; use driver_marker_derive::DriverMarker; +use std::any::TypeId; fn main() { App::new() @@ -10,7 +11,6 @@ fn main() { .add_dolly_component(OrbitTopDown) .insert_resource(Drivers::new(vec![Box::new(Orbit), Box::new(OrbitTopDown)])) .add_startup_system(setup) - .add_system(update_yaw_driver) .run(); } diff --git a/src/lib.rs b/src/lib.rs index c80269c..91ff351 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,7 +2,10 @@ use std::any::TypeId; use bevy::{ input::Input, - prelude::{App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut}, + prelude::{ + App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, + With, + }, }; use bevy_dolly::{dolly::glam, prelude::*}; use driver_marker_derive::DriverMarker; @@ -13,15 +16,37 @@ impl Plugin for ConfigCam { app.init_resource::<DriverIndex>() .init_resource::<Drivers>() .add_dolly_component(LookAt) + .add_dolly_component(Follow) .add_dolly_component(Orbit) + .add_dolly_component(FPV) .add_startup_system(default_setup) .add_system(change_driver_system) .add_system(update_driver_system) + .add_system(update_look_at) .add_system(update_yaw_driver); } } -fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { +#[derive(Component)] +pub struct Target; + +pub(crate) fn update_look_at( + mut targets: Query<(&mut Transform, With<Target>)>, + mut query: Query<&mut Rig, With<LookAt>>, +) { + for mut rig in &mut query { + if let Some(camera_driver) = rig.try_driver_mut::<bevy_dolly::prelude::LookAt>() { + for (t, _b) in &mut targets { + camera_driver.target = t.translation; + } + } + } +} + +pub(crate) fn update_yaw_driver( + keys: Res<Input<KeyCode>>, + mut query: Query<&mut Rig, With<Orbit>>, +) { for mut rig in &mut query { if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { if keys.just_pressed(KeyCode::Z) { @@ -37,10 +62,19 @@ fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut query: Query<&mut Rig>) { #[derive(Component, DriverMarker, Clone, Copy, Debug)] pub struct LookAt; +#[derive(Component, DriverMarker, Clone, Copy, Debug)] +pub struct Follow; + #[derive(Component, DriverMarker, Clone, Copy, Debug)] pub struct Orbit; +#[derive(Component, DriverMarker, Clone, Copy, Debug)] +pub struct FPV; + fn default_setup(mut commands: Commands) { + //Should be default player entity + commands.spawn().insert(Target); + commands .spawn() .insert( @@ -53,6 +87,9 @@ fn default_setup(mut commands: Commands) { ) .insert(LookAt); + //Missing Follow + commands.spawn().insert(Follow); + commands .spawn() .insert( @@ -63,13 +100,21 @@ fn default_setup(mut commands: Commands) { .build(), ) .insert(Orbit); + + //Missing FPV + commands.spawn().insert(FPV); } pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { fn default() -> Self { - Self(vec![Box::new(LookAt), Box::new(Orbit)]) + Self(vec![ + Box::new(LookAt), + Box::new(Follow), + Box::new(Orbit), + Box::new(FPV), + ]) } } From 487a65be74f3ddd6af92d00690cf8faa83b0f94c Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 2 Aug 2022 21:00:50 +0200 Subject: [PATCH 20/63] Changed to from 0.8.0 to 0.8 --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9f5e100..0035131 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,11 +29,11 @@ bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "0.8" driver_marker_derive = { path = "driver_marker_derive" } [dependencies.bevy] -version = "0.8.0" +version = "0.8" features = ["bevy_render","bevy_pbr"] default-features = false [dev-dependencies.bevy] -version = "0.8.0" +version = "0.8" features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] default-features = false \ No newline at end of file From d005ba131d86e2d33fddcd93efbb48c959c5803c Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 3 Aug 2022 00:54:21 +0200 Subject: [PATCH 21/63] Mad generic 1.63 science --- examples/orbit.rs | 71 ---------------------- examples/simple.rs | 132 ++++++++++++++++++++++++++++------------- examples/simple_old.rs | 56 +++++++++++++++++ src/lib.rs | 105 ++++++++++++++++---------------- 4 files changed, 202 insertions(+), 162 deletions(-) delete mode 100644 examples/orbit.rs create mode 100644 examples/simple_old.rs diff --git a/examples/orbit.rs b/examples/orbit.rs deleted file mode 100644 index 5477ce9..0000000 --- a/examples/orbit.rs +++ /dev/null @@ -1,71 +0,0 @@ -use bevy::{prelude::*, render::camera::ScalingMode}; -use bevy_config_cam::*; -use bevy_dolly::{dolly::glam, prelude::*}; -use driver_marker_derive::DriverMarker; -use std::any::TypeId; - -fn main() { - App::new() - .add_plugins(DefaultPlugins) - .add_plugin(ConfigCam) - .add_dolly_component(OrbitTopDown) - .insert_resource(Drivers::new(vec![Box::new(Orbit), Box::new(OrbitTopDown)])) - .add_startup_system(setup) - .run(); -} - -#[derive(Component, DriverMarker, Clone, Copy, Debug)] -pub struct OrbitTopDown; - -/// set up a simple 3D scene -fn setup( - mut commands: Commands, - mut meshes: ResMut<Assets<Mesh>>, - mut materials: ResMut<Assets<StandardMaterial>>, -) { - // plane - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), - material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), - ..Default::default() - }); - - // cube - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..Default::default() - }); - - // light - commands.spawn_bundle(PointLightBundle { - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..Default::default() - }); - - commands - .spawn() - .insert( - Rig::builder() - .with(YawPitch::new().yaw_degrees(0.0).pitch_degrees(-90.0)) - .with(Smooth::new_rotation(1.5)) - .with(Arm::new(glam::Vec3::Z * 4.0)) - .build(), - ) - .insert(OrbitTopDown); - - commands.spawn_bundle(Camera3dBundle { - camera: Camera { - is_active: true, - ..Default::default() - }, - projection: OrthographicProjection { - scale: 3.0, - scaling_mode: ScalingMode::FixedVertical(1.0), - ..default() - } - .into(), - ..Default::default() - }); -} diff --git a/examples/simple.rs b/examples/simple.rs index d4b2eee..e7c7479 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -1,56 +1,108 @@ -fn main() {} -/* -use bevy::prelude::*; +use std::f32::consts::PI; + +use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; +use bevy_dolly::prelude::Rig; + fn main() { App::new() - .insert_resource(Msaa { samples: 4 }) .add_plugins(DefaultPlugins) .add_plugin(ConfigCam) - .insert_resource(MovementSettings { - sensitivity: 0.00015, // default: 0.00012 - speed: 12.0, // default: 12.0 - ..Default::default() - }) - .insert_resource(PlayerSettings { - pos: Vec3::new(2., 0., 0.), - player_asset: "models/craft_speederA.glb#Scene0", - ..Default::default() - }) .add_startup_system(setup) + .add_system(rotator_system) + .add_system(add_target_system) + .add_system(remove_target_system) .run(); - } +} - /// set up a simple 3D scene - fn setup( - mut commands: Commands, - mut meshes: ResMut<Assets<Mesh>>, - mut materials: ResMut<Assets<StandardMaterial>>, - mut cl: ResMut<CamLogic>, - ) { - // plane - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), - material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), - ..Default::default() - }); +/// set up a simple 3D scene +fn setup( + mut commands: Commands, + mut meshes: ResMut<Assets<Mesh>>, + mut materials: ResMut<Assets<StandardMaterial>>, +) { + // plane + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + ..Default::default() + }); - // cube, set as target - cl.target = Some( - commands - .spawn_bundle(PbrBundle { + // cube + + commands + .spawn_bundle(SpatialBundle::from_transform(Transform { + rotation: Quat::IDENTITY, + translation: Vec3::new(2.,0.,0.), + ..default() + })) + .with_children(|cell| { + cell.spawn_bundle(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(0.0, 0.5, 0.0), ..Default::default() - }) - .id(), - ); + }); + }) + .insert(Rotates).insert(Target); - // light - commands.spawn_bundle(PointLightBundle { - transform: Transform::from_xyz(4.0, 8.0, 4.0), + // light + commands.spawn_bundle(PointLightBundle { + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..Default::default() + }); + + commands.spawn_bundle(Camera3dBundle { + camera: Camera { + is_active: true, ..Default::default() - }); + }, + projection: OrthographicProjection { + scale: 3.0, + scaling_mode: ScalingMode::FixedVertical(1.0), + ..default() + } + .into(), + ..Default::default() + }); +} + + +#[derive(Component)] +struct Rotates; + +fn rotator_system(time: Res<Time>, mut query: Query<&mut Transform, With<Rotates>>) { + for mut transform in query.iter_mut() { + *transform = Transform::from_rotation(Quat::from_rotation_y( + (4.0 * PI / 20.0) * time.delta_seconds(), + )) * *transform; + } +} + +fn remove_target_system( + keys: Res<Input<KeyCode>>, + mut commands: Commands, + q: Query<Entity, (With<Rotates>, With<Target>)> +) { + if keys.just_pressed(KeyCode::G) { + for e in &q { + commands + .entity(e) + .remove::<Target>(); + } + } +} + +fn add_target_system( + keys: Res<Input<KeyCode>>, + mut commands: Commands, + q: Query<Entity, (With<Rotates>, Without<Target>)> +) { + if keys.just_pressed(KeyCode::G) { + for e in &q { + commands + .entity(e) + .insert(Target); + } } -*/ +} diff --git a/examples/simple_old.rs b/examples/simple_old.rs new file mode 100644 index 0000000..d4b2eee --- /dev/null +++ b/examples/simple_old.rs @@ -0,0 +1,56 @@ +fn main() {} +/* +use bevy::prelude::*; +use bevy_config_cam::*; +fn main() { + App::new() + .insert_resource(Msaa { samples: 4 }) + .add_plugins(DefaultPlugins) + .add_plugin(ConfigCam) + .insert_resource(MovementSettings { + sensitivity: 0.00015, // default: 0.00012 + speed: 12.0, // default: 12.0 + ..Default::default() + }) + .insert_resource(PlayerSettings { + pos: Vec3::new(2., 0., 0.), + player_asset: "models/craft_speederA.glb#Scene0", + ..Default::default() + }) + .add_startup_system(setup) + .run(); + } + + /// set up a simple 3D scene + fn setup( + mut commands: Commands, + mut meshes: ResMut<Assets<Mesh>>, + mut materials: ResMut<Assets<StandardMaterial>>, + mut cl: ResMut<CamLogic>, + ) { + // plane + commands.spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + ..Default::default() + }); + + // cube, set as target + cl.target = Some( + commands + .spawn_bundle(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }) + .id(), + ); + + // light + commands.spawn_bundle(PointLightBundle { + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..Default::default() + }); + } +*/ diff --git a/src/lib.rs b/src/lib.rs index 91ff351..89d5e56 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,8 @@ use bevy::{ input::Input, prelude::{ App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, - With, - }, + With, Vec3, + }, ecs::system::SystemParam, }; use bevy_dolly::{dolly::glam, prelude::*}; use driver_marker_derive::DriverMarker; @@ -15,9 +15,7 @@ impl Plugin for ConfigCam { fn build(&self, app: &mut App) { app.init_resource::<DriverIndex>() .init_resource::<Drivers>() - .add_dolly_component(LookAt) - .add_dolly_component(Follow) - .add_dolly_component(Orbit) + .add_dolly_component(Pinned) .add_dolly_component(FPV) .add_startup_system(default_setup) .add_system(change_driver_system) @@ -27,68 +25,57 @@ impl Plugin for ConfigCam { } } -#[derive(Component)] -pub struct Target; - pub(crate) fn update_look_at( mut targets: Query<(&mut Transform, With<Target>)>, - mut query: Query<&mut Rig, With<LookAt>>, + mut rigs: DriverRigs ) { - for mut rig in &mut query { - if let Some(camera_driver) = rig.try_driver_mut::<bevy_dolly::prelude::LookAt>() { - for (t, _b) in &mut targets { - camera_driver.target = t.translation; - } - } + let mut avg = Vec3::ONE; + + for (t, _b) in &mut targets { + avg = t.translation; } + + rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la | + { + la.target = avg; + }); } pub(crate) fn update_yaw_driver( keys: Res<Input<KeyCode>>, - mut query: Query<&mut Rig, With<Orbit>>, + mut rigs: DriverRigs ) { - for mut rig in &mut query { - if let Some(camera_driver) = rig.try_driver_mut::<YawPitch>() { - if keys.just_pressed(KeyCode::Z) { - camera_driver.rotate_yaw_pitch(-90.0, 0.0); - } - if keys.just_pressed(KeyCode::X) { - camera_driver.rotate_yaw_pitch(90.0, 0.0); - } + //Waiting for 1.63 for stable + //https://github.com/rust-lang/rust/issues/83701 + rigs.try_for_each_driver_mut::<YawPitch>(|yp| + { + if keys.just_pressed(KeyCode::Z) { + yp.rotate_yaw_pitch(-90.0, 0.0); } - } + if keys.just_pressed(KeyCode::X) { + yp.rotate_yaw_pitch(90.0, 0.0); + } + }); } -#[derive(Component, DriverMarker, Clone, Copy, Debug)] -pub struct LookAt; - -#[derive(Component, DriverMarker, Clone, Copy, Debug)] -pub struct Follow; +// Target at is just a valid option for Follow, Orbit and FPV +// Have the camera point at one or the summed vector direction +// of all entities with the Target Component +#[derive(Component)] +pub struct Target; #[derive(Component, DriverMarker, Clone, Copy, Debug)] -pub struct Orbit; +pub struct Pinned; +//Substates: +//Locked Rotation +//Free #[derive(Component, DriverMarker, Clone, Copy, Debug)] pub struct FPV; fn default_setup(mut commands: Commands) { //Should be default player entity - commands.spawn().insert(Target); - - commands - .spawn() - .insert( - Rig::builder() - .with(Position::new(glam::Vec3::new(1., 1., 1.) * 3.0)) - .with(bevy_dolly::prelude::LookAt::new(glam::Vec3::new( - 0., 0., 0., - ))) - .build(), - ) - .insert(LookAt); - - //Missing Follow - commands.spawn().insert(Follow); + //commands.spawn().insert(Target); commands .spawn() @@ -97,22 +84,38 @@ fn default_setup(mut commands: Commands) { .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) .with(Smooth::new_rotation(1.5)) .with(Arm::new(glam::Vec3::Z * 4.0)) + .with(bevy_dolly::prelude::LookAt::new(glam::Vec3::new( + 0., 0., 0., + ))) .build(), ) - .insert(Orbit); + .insert(Pinned); //Missing FPV commands.spawn().insert(FPV); } +#[derive(SystemParam)] +struct DriverRigs<'w, 's> { + rigs: Query<'w, 's, &'static mut Rig>, +} + +impl<'w, 's> DriverRigs<'w, 's> { + fn try_for_each_driver_mut<T>(&mut self, f: impl FnOnce(&mut T) -> () + std::marker::Copy) where T: bevy_dolly::prelude::RigDriver<bevy_dolly::prelude::RightHanded> { + for mut rig in &mut self.rigs { + if let Some(camera_driver) = rig.try_driver_mut::<T>() { + f(camera_driver); + } + } + } +} + pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { fn default() -> Self { Self(vec![ - Box::new(LookAt), - Box::new(Follow), - Box::new(Orbit), + Box::new(Pinned), Box::new(FPV), ]) } From c80ebaa9d2db22a08aaa6d34f50a5f18a3357066 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 3 Aug 2022 00:54:52 +0200 Subject: [PATCH 22/63] Removed old simple example --- examples/simple_old.rs | 56 ------------------------------------------ 1 file changed, 56 deletions(-) delete mode 100644 examples/simple_old.rs diff --git a/examples/simple_old.rs b/examples/simple_old.rs deleted file mode 100644 index d4b2eee..0000000 --- a/examples/simple_old.rs +++ /dev/null @@ -1,56 +0,0 @@ -fn main() {} -/* -use bevy::prelude::*; -use bevy_config_cam::*; -fn main() { - App::new() - .insert_resource(Msaa { samples: 4 }) - .add_plugins(DefaultPlugins) - .add_plugin(ConfigCam) - .insert_resource(MovementSettings { - sensitivity: 0.00015, // default: 0.00012 - speed: 12.0, // default: 12.0 - ..Default::default() - }) - .insert_resource(PlayerSettings { - pos: Vec3::new(2., 0., 0.), - player_asset: "models/craft_speederA.glb#Scene0", - ..Default::default() - }) - .add_startup_system(setup) - .run(); - } - - /// set up a simple 3D scene - fn setup( - mut commands: Commands, - mut meshes: ResMut<Assets<Mesh>>, - mut materials: ResMut<Assets<StandardMaterial>>, - mut cl: ResMut<CamLogic>, - ) { - // plane - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), - material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), - ..Default::default() - }); - - // cube, set as target - cl.target = Some( - commands - .spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..Default::default() - }) - .id(), - ); - - // light - commands.spawn_bundle(PointLightBundle { - transform: Transform::from_xyz(4.0, 8.0, 4.0), - ..Default::default() - }); - } -*/ From d7cdc6ddf7df4e9e8f74e71e0f334dcdacea7a69 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 3 Aug 2022 00:58:26 +0200 Subject: [PATCH 23/63] fmt & clippy --- examples/simple.rs | 19 +++++++------------ src/lib.rs | 30 +++++++++++++----------------- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/examples/simple.rs b/examples/simple.rs index e7c7479..8044871 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -2,7 +2,6 @@ use std::f32::consts::PI; use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; -use bevy_dolly::prelude::Rig; fn main() { App::new() @@ -33,7 +32,7 @@ fn setup( commands .spawn_bundle(SpatialBundle::from_transform(Transform { rotation: Quat::IDENTITY, - translation: Vec3::new(2.,0.,0.), + translation: Vec3::new(2., 0., 0.), ..default() })) .with_children(|cell| { @@ -44,7 +43,8 @@ fn setup( ..Default::default() }); }) - .insert(Rotates).insert(Target); + .insert(Rotates) + .insert(Target); // light commands.spawn_bundle(PointLightBundle { @@ -67,7 +67,6 @@ fn setup( }); } - #[derive(Component)] struct Rotates; @@ -82,13 +81,11 @@ fn rotator_system(time: Res<Time>, mut query: Query<&mut Transform, With<Rotates fn remove_target_system( keys: Res<Input<KeyCode>>, mut commands: Commands, - q: Query<Entity, (With<Rotates>, With<Target>)> + q: Query<Entity, (With<Rotates>, With<Target>)>, ) { if keys.just_pressed(KeyCode::G) { for e in &q { - commands - .entity(e) - .remove::<Target>(); + commands.entity(e).remove::<Target>(); } } } @@ -96,13 +93,11 @@ fn remove_target_system( fn add_target_system( keys: Res<Input<KeyCode>>, mut commands: Commands, - q: Query<Entity, (With<Rotates>, Without<Target>)> + q: Query<Entity, (With<Rotates>, Without<Target>)>, ) { if keys.just_pressed(KeyCode::G) { for e in &q { - commands - .entity(e) - .insert(Target); + commands.entity(e).insert(Target); } } } diff --git a/src/lib.rs b/src/lib.rs index 89d5e56..9f0ad5d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,11 +1,12 @@ use std::any::TypeId; use bevy::{ + ecs::system::SystemParam, input::Input, prelude::{ App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, - With, Vec3, - }, ecs::system::SystemParam, + Vec3, With, + }, }; use bevy_dolly::{dolly::glam, prelude::*}; use driver_marker_derive::DriverMarker; @@ -27,28 +28,23 @@ impl Plugin for ConfigCam { pub(crate) fn update_look_at( mut targets: Query<(&mut Transform, With<Target>)>, - mut rigs: DriverRigs + mut rigs: DriverRigs, ) { let mut avg = Vec3::ONE; - + for (t, _b) in &mut targets { avg = t.translation; } - rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la | - { + rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la| { la.target = avg; }); } -pub(crate) fn update_yaw_driver( - keys: Res<Input<KeyCode>>, - mut rigs: DriverRigs -) { +pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) { //Waiting for 1.63 for stable //https://github.com/rust-lang/rust/issues/83701 - rigs.try_for_each_driver_mut::<YawPitch>(|yp| - { + rigs.try_for_each_driver_mut::<YawPitch>(|yp| { if keys.just_pressed(KeyCode::Z) { yp.rotate_yaw_pitch(-90.0, 0.0); } @@ -101,7 +97,10 @@ struct DriverRigs<'w, 's> { } impl<'w, 's> DriverRigs<'w, 's> { - fn try_for_each_driver_mut<T>(&mut self, f: impl FnOnce(&mut T) -> () + std::marker::Copy) where T: bevy_dolly::prelude::RigDriver<bevy_dolly::prelude::RightHanded> { + fn try_for_each_driver_mut<T>(&mut self, f: impl FnOnce(&mut T) + std::marker::Copy) + where + T: bevy_dolly::prelude::RigDriver<bevy_dolly::prelude::RightHanded>, + { for mut rig in &mut self.rigs { if let Some(camera_driver) = rig.try_driver_mut::<T>() { f(camera_driver); @@ -114,10 +113,7 @@ pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { fn default() -> Self { - Self(vec![ - Box::new(Pinned), - Box::new(FPV), - ]) + Self(vec![Box::new(Pinned), Box::new(FPV)]) } } From 39889103e5869f0a582ec6a483153177eeecd21e Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 3 Aug 2022 01:11:02 +0200 Subject: [PATCH 24/63] Avg the look_at dir vector --- src/lib.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9f0ad5d..60fb982 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -30,11 +30,15 @@ pub(crate) fn update_look_at( mut targets: Query<(&mut Transform, With<Target>)>, mut rigs: DriverRigs, ) { - let mut avg = Vec3::ONE; + let mut avg = Vec3::ZERO; for (t, _b) in &mut targets { - avg = t.translation; + avg += t.translation; } + + //https://math.stackexchange.com/questions/80923/average-of-multiple-vectors + let total_targets = targets.iter().count(); + avg = avg / total_targets as f32; rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la| { la.target = avg; From 154896a3011908ea21adbb201eff11a905730042 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 3 Aug 2022 01:13:27 +0200 Subject: [PATCH 25/63] clippy & CI --- .github/workflows/master.yml | 4 ++-- src/lib.rs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 20499ee..d81eaf2 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -12,7 +12,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: stable + toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: @@ -27,7 +27,7 @@ jobs: - uses: actions-rs/toolchain@v1 with: profile: minimal - toolchain: stable + toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: diff --git a/src/lib.rs b/src/lib.rs index 60fb982..3fd8285 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -35,10 +35,10 @@ pub(crate) fn update_look_at( for (t, _b) in &mut targets { avg += t.translation; } - + //https://math.stackexchange.com/questions/80923/average-of-multiple-vectors let total_targets = targets.iter().count(); - avg = avg / total_targets as f32; + avg /= total_targets as f32; rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la| { la.target = avg; From d387f18aab13415cef181594f99fca0cd9a538a0 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Thu, 4 Aug 2022 02:33:12 +0200 Subject: [PATCH 26/63] Added derive_alias --- Cargo.toml | 1 + driver_marker_derive/Cargo.toml | 5 ++++- driver_marker_derive/src/lib.rs | 1 + examples/simple.rs | 14 ++++++++++++++ src/lib.rs | 21 +++++++++++++++------ 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 0035131..9c4d822 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,6 +25,7 @@ name = "bevy_config_cam" rand = "0.8" strum = "0.24" strum_macros = "0.24" +macro_rules_attribute = "0.1.2" bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "0.8" } driver_marker_derive = { path = "driver_marker_derive" } diff --git a/driver_marker_derive/Cargo.toml b/driver_marker_derive/Cargo.toml index f341d4f..c3d72ed 100644 --- a/driver_marker_derive/Cargo.toml +++ b/driver_marker_derive/Cargo.toml @@ -10,4 +10,7 @@ proc-macro = true [dependencies] syn = "1.0" -quote = "1.0" \ No newline at end of file +quote = "1.0" +#bevy_ecs = "0.8" +#bevy_ecs_macros = "0.8" +#macro_rules_attribute = "0.1.2" \ No newline at end of file diff --git a/driver_marker_derive/src/lib.rs b/driver_marker_derive/src/lib.rs index aa7f32a..78e9a27 100644 --- a/driver_marker_derive/src/lib.rs +++ b/driver_marker_derive/src/lib.rs @@ -6,6 +6,7 @@ use syn; #[proc_macro_derive(DriverMarker)] pub fn driver_marker_derive(input: TokenStream) -> TokenStream { + // Construct a representation of Rust code as a syntax tree // that we can manipulate let ast = syn::parse(input).unwrap(); diff --git a/examples/simple.rs b/examples/simple.rs index 8044871..5a3297c 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -3,6 +3,9 @@ use std::f32::consts::PI; use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; +use std::any::TypeId; +use driver_marker_derive::DriverMarker; + fn main() { App::new() .add_plugins(DefaultPlugins) @@ -14,6 +17,17 @@ fn main() { .run(); } +#[macro_use] +extern crate macro_rules_attribute; + +derive_alias! { + #[derive(ConfigMarker!)] = #[derive(Component, DriverMarker)]; +} + +#[derive(ConfigMarker!, Clone, Copy, Debug)] +pub struct Pinned2; + + /// set up a simple 3D scene fn setup( mut commands: Commands, diff --git a/src/lib.rs b/src/lib.rs index 3fd8285..744e5c5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ use std::any::TypeId; use bevy::{ - ecs::system::SystemParam, + ecs::{system::SystemParam, component::TableStorage}, input::Input, prelude::{ App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, @@ -58,25 +58,34 @@ pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) }); } +#[macro_use] +extern crate macro_rules_attribute; + +derive_alias! { + #[derive(ConfigMarker!)] = #[derive(Component, DriverMarker)]; +} + // Target at is just a valid option for Follow, Orbit and FPV // Have the camera point at one or the summed vector direction // of all entities with the Target Component #[derive(Component)] pub struct Target; -#[derive(Component, DriverMarker, Clone, Copy, Debug)] +#[derive(ConfigMarker!, Clone, Copy, Debug)] pub struct Pinned; //Substates: //Locked Rotation //Free -#[derive(Component, DriverMarker, Clone, Copy, Debug)] +#[derive(ConfigMarker!, Clone, Copy, Debug)] pub struct FPV; fn default_setup(mut commands: Commands) { //Should be default player entity + //Default player entity : Cone //commands.spawn().insert(Target); + commands .spawn() .insert( @@ -113,7 +122,7 @@ impl<'w, 's> DriverRigs<'w, 's> { } } -pub struct Drivers(Vec<Box<dyn DriverMarker>>); +pub struct Drivers(Vec<Box<dyn DriverMarker<Storage=TableStorage>>>); impl Default for Drivers { fn default() -> Self { @@ -122,12 +131,12 @@ impl Default for Drivers { } impl Drivers { - pub fn new(driver_markers: Vec<Box<dyn DriverMarker>>) -> Self { + pub fn new(driver_markers: Vec<Box<dyn DriverMarker<Storage=TableStorage>>>) -> Self { Self(driver_markers) } } -pub trait DriverMarker: Sync + Send + 'static { +pub trait DriverMarker: Component + Sync + Send + 'static { fn get_id(&self) -> TypeId; fn get_name(&self) -> &str; fn add_to(&self, commands: &mut Commands, entity: Entity); From dc5854a7f86b7aa25884eb5bbb477b0f1b7339ae Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Thu, 4 Aug 2022 02:38:48 +0200 Subject: [PATCH 27/63] Removed traits from DriverMarker --- examples/simple.rs | 3 +-- src/lib.rs | 9 ++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/examples/simple.rs b/examples/simple.rs index 5a3297c..d4718d8 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -3,8 +3,8 @@ use std::f32::consts::PI; use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; -use std::any::TypeId; use driver_marker_derive::DriverMarker; +use std::any::TypeId; fn main() { App::new() @@ -27,7 +27,6 @@ derive_alias! { #[derive(ConfigMarker!, Clone, Copy, Debug)] pub struct Pinned2; - /// set up a simple 3D scene fn setup( mut commands: Commands, diff --git a/src/lib.rs b/src/lib.rs index 744e5c5..0339499 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ use std::any::TypeId; use bevy::{ - ecs::{system::SystemParam, component::TableStorage}, + ecs::system::SystemParam, input::Input, prelude::{ App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, @@ -85,7 +85,6 @@ fn default_setup(mut commands: Commands) { //Default player entity : Cone //commands.spawn().insert(Target); - commands .spawn() .insert( @@ -122,7 +121,7 @@ impl<'w, 's> DriverRigs<'w, 's> { } } -pub struct Drivers(Vec<Box<dyn DriverMarker<Storage=TableStorage>>>); +pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { fn default() -> Self { @@ -131,12 +130,12 @@ impl Default for Drivers { } impl Drivers { - pub fn new(driver_markers: Vec<Box<dyn DriverMarker<Storage=TableStorage>>>) -> Self { + pub fn new(driver_markers: Vec<Box<dyn DriverMarker>>) -> Self { Self(driver_markers) } } -pub trait DriverMarker: Component + Sync + Send + 'static { +pub trait DriverMarker: Sync + Send + 'static { fn get_id(&self) -> TypeId; fn get_name(&self) -> &str; fn add_to(&self, commands: &mut Commands, entity: Entity); From 135346161bce1a69b1cf25bcdc178bd553d713b4 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Thu, 4 Aug 2022 21:39:19 +0200 Subject: [PATCH 28/63] fixed fmt --- driver_marker_derive/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/driver_marker_derive/src/lib.rs b/driver_marker_derive/src/lib.rs index 78e9a27..aa7f32a 100644 --- a/driver_marker_derive/src/lib.rs +++ b/driver_marker_derive/src/lib.rs @@ -6,7 +6,6 @@ use syn; #[proc_macro_derive(DriverMarker)] pub fn driver_marker_derive(input: TokenStream) -> TokenStream { - // Construct a representation of Rust code as a syntax tree // that we can manipulate let ast = syn::parse(input).unwrap(); From 7b80041c227700b5d35e8ef3cc2cbb6410609baf Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Thu, 4 Aug 2022 23:12:44 +0200 Subject: [PATCH 29/63] Reverted to using traits instead of alias derive --- Cargo.toml | 2 +- examples/simple.rs | 10 +--------- src/lib.rs | 24 +++++++++--------------- 3 files changed, 11 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9c4d822..ec1ed84 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ name = "bevy_config_cam" rand = "0.8" strum = "0.24" strum_macros = "0.24" -macro_rules_attribute = "0.1.2" +macro_rules_attribute = { path = "../macro_rules_attribute-rs" } bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "0.8" } driver_marker_derive = { path = "driver_marker_derive" } diff --git a/examples/simple.rs b/examples/simple.rs index d4718d8..4a22bbb 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -4,7 +4,6 @@ use bevy::{prelude::*, render::camera::ScalingMode}; use bevy_config_cam::*; use driver_marker_derive::DriverMarker; -use std::any::TypeId; fn main() { App::new() @@ -17,14 +16,7 @@ fn main() { .run(); } -#[macro_use] -extern crate macro_rules_attribute; - -derive_alias! { - #[derive(ConfigMarker!)] = #[derive(Component, DriverMarker)]; -} - -#[derive(ConfigMarker!, Clone, Copy, Debug)] +#[derive(DriverMarker, Component, Clone, Copy, Debug)] pub struct Pinned2; /// set up a simple 3D scene diff --git a/src/lib.rs b/src/lib.rs index 0339499..37d911c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,5 @@ -use std::any::TypeId; - use bevy::{ - ecs::system::SystemParam, + ecs::{component::TableStorage, system::SystemParam}, input::Input, prelude::{ App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, @@ -11,6 +9,8 @@ use bevy::{ use bevy_dolly::{dolly::glam, prelude::*}; use driver_marker_derive::DriverMarker; +pub use std::any::TypeId; + pub struct ConfigCam; impl Plugin for ConfigCam { fn build(&self, app: &mut App) { @@ -46,8 +46,9 @@ pub(crate) fn update_look_at( } pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) { - //Waiting for 1.63 for stable - //https://github.com/rust-lang/rust/issues/83701 + // Waiting for 1.63 for stable, use nightly until August 11 2022 + // https://forge.rust-lang.org/#current-release-versions + // https://github.com/rust-lang/rust/issues/83701 rigs.try_for_each_driver_mut::<YawPitch>(|yp| { if keys.just_pressed(KeyCode::Z) { yp.rotate_yaw_pitch(-90.0, 0.0); @@ -58,26 +59,19 @@ pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) }); } -#[macro_use] -extern crate macro_rules_attribute; - -derive_alias! { - #[derive(ConfigMarker!)] = #[derive(Component, DriverMarker)]; -} - // Target at is just a valid option for Follow, Orbit and FPV // Have the camera point at one or the summed vector direction // of all entities with the Target Component #[derive(Component)] pub struct Target; -#[derive(ConfigMarker!, Clone, Copy, Debug)] +#[derive(DriverMarker, Component, Clone, Copy, Debug)] pub struct Pinned; //Substates: //Locked Rotation //Free -#[derive(ConfigMarker!, Clone, Copy, Debug)] +#[derive(DriverMarker, Component, Clone, Copy, Debug)] pub struct FPV; fn default_setup(mut commands: Commands) { @@ -135,7 +129,7 @@ impl Drivers { } } -pub trait DriverMarker: Sync + Send + 'static { +pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'static { fn get_id(&self) -> TypeId; fn get_name(&self) -> &str; fn add_to(&self, commands: &mut Commands, entity: Entity); From e590a8ec0c3a1a1b301ee843f218e6c2de8b3c9d Mon Sep 17 00:00:00 2001 From: hellzbellz <31550512+Hellzbellz123@users.noreply.github.com> Date: Wed, 24 Aug 2022 19:34:07 -0700 Subject: [PATCH 30/63] Update Cargo.toml change bevy_dolly branch cuz 0.8 doesnt exist on github --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ec1ed84..24e63e2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ rand = "0.8" strum = "0.24" strum_macros = "0.24" macro_rules_attribute = { path = "../macro_rules_attribute-rs" } -bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "0.8" } +bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly"} driver_marker_derive = { path = "driver_marker_derive" } [dependencies.bevy] @@ -37,4 +37,4 @@ default-features = false [dev-dependencies.bevy] version = "0.8" features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] -default-features = false \ No newline at end of file +default-features = false From 18618f4b31bfa76e09f03f6438ebfcfe3f7cddb9 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 29 Aug 2022 23:56:00 +0200 Subject: [PATCH 31/63] Update --- assets/models/cam.blend | Bin 0 -> 795204 bytes assets/models/cam.blend1 | Bin 0 -> 795204 bytes assets/models/cam.gltf | 122 +++++++++++++++++++++++++++++++++++++++ examples/simple.rs | 85 ++++++++++++++++++++++++++- src/lib.rs | 6 +- 5 files changed, 209 insertions(+), 4 deletions(-) create mode 100644 assets/models/cam.blend create mode 100644 assets/models/cam.blend1 create mode 100644 assets/models/cam.gltf diff --git a/assets/models/cam.blend b/assets/models/cam.blend new file mode 100644 index 0000000000000000000000000000000000000000..3ae275dfd668ff788f7ef429f475db166fd6bf0f GIT binary patch literal 795204 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%0AOtC(uF}A-7sQl`Dj8gxL<% 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 SC4cJ$7Ase@FgO4D_kRF3FWj>L literal 0 HcmV?d00001 diff --git a/assets/models/cam.blend1 b/assets/models/cam.blend1 new file mode 100644 index 0000000000000000000000000000000000000000..4fc2cdf8cba6ba557ee674c9e3078e8d396e4021 GIT binary patch literal 795204 zcmeEv31C&lx&KLmaulgpD<X@=4I?0iHGz=aY{1pJARy4Xuq7H431v~#E}?3@)w;Yc ziq?f<msne?KDB6RK%n*ZsnzbhF4k82N?oe$YyYKvZSVj4otfXgb0%}{l0?Cf11I14 zX1?#6neR8-IcLt?`ZK1V)i{0jDVI+uA3s|z<DTce^ys}Ov<Ssfq|bi{owKxgMKc1s zc+8zXXRe>{y!h&)zrPcP<p61uvr*1bqei95%F0qFpL}xalv7Sg9ewoCsSzVa<UEf* z{`l0`v10>0=;DN}T)M{{cU-ExygYT%NhbyJ&>1skOzPNUkIku@%XVLUZrtc2-~|jv zjvSe)si{eyu~;m{6XCoDwfWlG+N|-mJbCJoH`CZ#*LGgsZa!N%kv7jMQ>FxMWBBml z0Y!W1sS|aew6rvZHi`4ZlTS^ZdTM#lKG8-`J@wS!`kkOm1L>M+zui33eWz$XWkY{R zOhAu0=9r*wJmG{B(%8^1-JvKm@JFAIv*N6ksqu{$24M(CK0tY5eBd?uYm-MlO?mV! zqeqWU%cGxReS-~@1!Dm1VGP1a9(5c#<YCLyN4zPIyqNMR8`7XY{ABaUBjQn(2@@uy zWg%yl<-`+D4E#=8;ORSrAs?nMP%cv+@yIXrQ4W)bu2~l7A`Rm5cH$2oATKEM_}X(* zr%ru;FfJe*c>+b8DF+@W^~j@Kye8fz4}0X{Bb-q@WX*WkHub>+1Ed2R<HwH=c=!_Y z65xq=@UVlt!lz6R^@%(vc*en|&6{OKyvfr(^}*8@urqGlxFCPX3;2l>CkA2QaUve| zlRU~|^6)*zZP@Qld$)DrpX%!B)T&jhg8X63nK5HVYWno)f&V5=nv|-ms|&)Qi?Jvk zj|Xw5pMH93=FFKX$k=w@DSp|qWvPmaiXiWoU3OWjwY4?X($bRp(1$*hTE2XF>dGsx zOhKlqs%o$05&k;ooO4q1=g$x5```cm)OqKf7w{KecwuVs;>AJuym|9dvu4c-&gSOk z6!=Ap7NtJ;!4C%Id%N&QokKm~3G8^CjpmZ;N*zEuh&m@uE{}|h(&=t^zGXl<rmX2V zGaT1;o=n-OYxH|>7yjsL&>!(cd&WuLq>Rf(Cr_T7D&$1_&G)RTnUuF|zBcof%T^}X z$Q4f++jpjaqpmR@c&G439#9t60Xx4gK3m!CxP1NXlB<eM?u373Wo62BLLcEKb=mA{ z7|UhbXI>Z&>hhT#7KJ^+P5jYbd+J1gWVe6j1Ld;wX!B+nvt4)9$Mh|IIxQxcPI2Q+ zneNbR`Lyj~E@XyfD?j6G|G9Yj-=rq~cy4goX{V*;%$XC+8!%_UTw(6qxxu^*^SOLZ zJcB{{F8rCVs5-#%WTV-9>54ObneBR7?c|W(v&nWf4%iZ3^V*efgdrWqW%CK+=-+HK z3je87r>397VZJ_X+O*J#xo$ou^pFPblbDvBA3ML~vr+mXAKDdsrqwEccSYCMA-16K zD^B8W%aV7M3p#dqHXkw0_P5Ow7rXuAzU$00&kWjsK5gA4gZnz<gZSHNlZOn-#ym$+ zyZli+{a6S!ahevZ6r5E1G{du96I+{_I)&tivMeL)@Y<$P{xZYqYZpZwF!2YLz#siT z`h3&_T%UdR*`a>G?iXwx;|S6N{;qTxhJ2#DW`50UySy%*{>q1%m_%Jy*Hr}V)Q-3D zML)<kZOi83^T{h^V9Ql*GtBgv>ze*{QQV_*{*N-5{XTF+ov`uEhiCuqN)usbK2cVa zH_H}vP5<Pgxv;R~tLxAQsQ%g<>loHm%<XhcK3f?e$M`5;Fx>Q^>)M5di9hhhv$u24 zJvX&r!GgTzdanK-^FO5TYX7c$Aq-_?Iie{2kc*nW&2~*pO`NM^Q&Lsa6#k4alx9ma zSDaZk$eKK_qx{40C?6x-t^+3i@B`{VV`F2gzP>)y(9n<qmZpF5y|&wbwmcDkl#gXF zDa##2bNQ6`*?DKUO>62ieSjU;9X?k+UGY(6j`Ef1w`@LVJuvY{TSoiGb7b5Ho^{q) zL0!nFzc*#r{!s_)zTVE0nO~NbVdSHz?JpY};%$fL;%n+NbM{=a-HEsJZ}YH?u&DAg zoc?lA+utS+Y)t&k{vUHbyjyVf@43Qw{}24l^z3U_e)B0WWK6#kXP5s>xqPpyYo?^8 z)l3cgJ?PLrsLeAjU)xb~cHUV=Gn{z4sLPiOv;A)Jz&}2ATx#OzF+thPcHEt7)U9mz zGjBFU+2A8kv+TCt%sBJfmdnKxKbyv+53s|!!sklgj<?HV^1OE8&oJAcCU4@-YrN0q z{GaU~&-`%Thv$E}+PW*=?EjgLNzFX*+Qb_^fv-_sGo0mjQQMDEe7+dg)Q8)BzIwUj zqVi>jqm1-{tGvY9Md?!)HF3Z-@Q;m_bq!@F2kBwXhw&fJ0q`6rS9x6Vs1s=WuJ&){ zm*q0Ucx}e<I*Qu9bMdZxW(%v1$-QuGRbKbL+3aMCbLG<vgKkur5l&yZs0(|9x$r-s z^w?m%3i^A@{eeB!X`nyo$`}CrIln}j%pdaX$`|8pN?%0zfbmfj{zF_g3>fDsXKlmO zE|s6QXge3pmH(*n_e32)`yV=SZ0h*Ys{P}>4|6|^0et?4=K)x|<Lc|9!tC+ig}Yfd zZ0y0KeDIyC{82t*crKq4qii(RkYD@HW`l9L@`HHhozxC<`JuaY0QetwqO4Dob!td2 z3eQ5r+5Xwz6pFuDR^*F3eG^3?o9!eX`B01jvAUkC157hp{>*Yg&g5}TKiJgOei#<z zdyfBQW2dCbMvaZcA9Dh<f4mdmxp3ja)TNhRn&uIXc>~s@VeByRk4m5Uv#DJ+@Gf82 zzRBiS`o0i~I$zt^xlPc9*(MlP2#v}w%9X9WF8?6R_M^#1VSx63;>qJ>{2v*KKj!nm z6!!!?vCgomsVU7P9M6m}cfcHi_(!E{=8e};<s$x3K8f-p!gJwaV(7Yd;qQ{m7M3j! zQF(_>RC%-Y1KH|<3k%?X><MM5k!7Pg;g5Ggz!YsCm=b$X;J;+al291hKk5me|DX=I z(j?wCjl!SpoW3H@cEWI*X7hVCyv(?o*tAq_{j?q#7qjKZm3M@hWwo!P{1sIPTv!C{ zf7FCj*~zDL!XG%IKgWrAA)XEM#IpgcJ0=f`dV;Y6vQh2d#+-b%vY6$D56Rm;Gx;cA zo7m=iUFR4B^3}EFqVk1sJO9L=l;t*Ql;7xAo7!~%_#aa$-)BY4|8Nh0djXUKdBigT zV2riKSUb!U-z*?4$eH86ot~W^@=@h5%gSrpSEk=^9pz&ii+uUo#-3^aW_nS1WLfMo zvg|gE@*BeG+i8MJta6GvE94rd<|pDimPs?E{g3I?{+VC&1Dpc@TbyX?ye386K-<T- zQAqpGRtCGg;E6GPWzs0WvMgPpHL>bcozwx83n$9h6+5<0R9>UX=kf)@VpFE3YOS-* z;Hv~{)&)?rO``oz9w*;vjP2b2GrzzU7@Oli`u-1m-~*vBjQ^M?M9u%qJeb!}_(zqO z{;}Igls{RHLMX8&t(&g!KSTOMd^^K%(n4&TvaUR{d;yjItiEbmaMn$&O7X0hYo1kt zb(9ZHKl9qeAK!(X(@>F`IDTB#_V2<U-w&B}!gc>=riE+f!K6`n&xSvJWYz(fFBxX~ zJli$#v?=gMy}t75t5ZvtE=|=`XTGDhWwY659P<^EF|}b@wRK8b2-CPvlRAL%M)@Pk zf2NPkYZDW+|KsI5Q+xbJ9|vqP_G29Y`g`8{gJOLU?g7j&;E($S)D>6%Z|1?gj>>;j zdEpD5@TXZ9=vR}{=eekjqsil0_{z1HrPg0_O>o~^Bk7v)=CzqloyavxUCEpVFBsR! zY39|uW*JGN{DE+n4^1DN*EarBPad5bBXc>VW9FUL82d2>0AHSGoN-19CwWk`4|Duy zduMuP9?WZ3-Vqj6UiyO+`854zU$Y!G1!iWLiJ^VHMB4oN^=+x^K5>2U{bx+$-zYYw z*TlkSweW&D&N?~GG|X!|pX4FKve`7sCoUhFJ~pq32Ppb~tO3S69%-5R<F#x2N83OD z{PR2Y|MvKgd?9Vt1v4MKcICYg{NXp`mHx9S%VE=8_{TK1^XHzM`qa%gr#^S{jj6kC z-;ny$O*aSa8Mw#fwCjp#*SxmVxARFJayIVd-wyootrqG)6#kt1n`1rjzu<xkI^l0W z|0V9M2gKZ@-NoO`H+^VQ+wbIS1>a1++_@b$2KY)FmcFlb<;v8Z8}3Mb{_}UG?!4>n z)LGK^<ueBC%lO0Z82{lv+`pTCL_dykAMgHL<3F&+H|DPK-!=aS-l)4K?zoP^9^p}S z9r?6R;0;_&+|}5N@s?*8?|Q3mcC}+OZ1(IqLE8uZ7o2}VB>t>l`BF2_EQeh_@=-pC z@}uo<n+N{bUnN`rk8;2dXb0I&%#m2;sQDlAY33m+-}&HQC-s2$Mh$u%jrPp>bWG+} z%ul}5#M^b<FrzlLYR#(DC6`><Blz3czZ3YQPlkU%fj^$zVhjL&xW>9qw0q3y^7Wf3 zhw%dM7EuR~22bKn%x#|GpjC3#8uz=Q`(Eq5h;4(uL|)8mGjF-BU6|WpxEDO*j5C90 zVrE<}+pc)#)1;7NnQZE6|EAyUYx>wli9es=;(J|uvjJ-FB~d7kd1Vy-$jdZ&W`So^ zcn)bkyFyqHE@OqOtO&DxLf-Zvd6(aFg#lN{nE3KqJqrxS<+A6BXZ~E2Win}$KWxm& zyD&!>;@KwA{(%!PN1I0(v5ydBAlucw6R}Uxv`LdwHS(;PXMi>EmUEh%NCRbJeqA)G z%%)$=Yx<J@wt0qkhsNZ6Af5?##|HCdQ<Mc^W|?^H@`cN140GX+IAYKC&-K4-;}{FN zd!qeg{U^TxGt;#5m8}lA%FHnO#isNr@Zq&dP23P}^7&k&ji3+6N0u^X`cc;`2jY3n zvPMy2ZByIF<X!k9J>ZS!+DI2`IB){9uG9mh0qju+#!r#&0H&#Rr>q0ai%D5NyBy#d z=c4qJP3dF!pVu}u<A_tfw9t2gcG@=2{3D##psq4A%;hVD!LP13=rNwY2fmp9qrb)& zfU_%@+d4sCBDSg;YEt7SP6+0M#2=LDn-qCt9_{?I%r0vB%e<zKO`I8K(|mEKT&z~c z06EFKsGUX>Z|B+M&GJTtn=-hzF=l-LH8H?7aN_qKHiqOeN5B|ipQtmGu_?YQLfE29 zno~9P>VCjZ+r*yNU9AHsx9K1A8h!^pQT{i>T{zldl#f~)#`vyKGoNM|aBbpjw-564 zqfHTS`yV{|XgvFgI=MF{?-6Vor3X3KUa;uA)F_!x+V=uT+s-5TuGRtDUnUPMOy3rQ zO(gzV)`#0VHqZ3UJmMPRpeEM#HL<oS{TD@T{Be&CjDT@ZpTHmOf8vzMsZ&msH3pKF zoqj%b0A;t!Y5T+EZGW14SMeuSHiog<YFQud9s{UjQZp~vuFdk8*R~&QJ_>i(aQUA2 zN44SZgrh#8ZefkU*z(TL0+^quJR=<CWBKi}GCYb#`4<?Pam2^Q*2PoSq`AHkGSkX- z&2m77*Cw^gZ}U-pgdBZsQecl0ZL~W$N9h88%q1~*z!}y4k*BD<=c)rJo9QE7yZmfo z25iaOvJB6c#_GfC4Q+ebc;?rnkT-c7XPeLFJNVXxKd}cz8@0#up5QSzgl+7Xj67oe z&sGPr)dS*e`-Xn9eavu^nli-J4D0Ikv}$}O8a?-nvTNqeyoNk^8*7`-g+1cUHjis! z4_kQ0hxU)>eLa1mUjY8d11Pa4jl$b5BYD`tHT}bIlhSXwC^11j;B|Lsw!H$F7v`IM z6os5wrl{*&*weoz{=}Xb;N2~->FK#2>~a2&J=5_F5NQ%a=H1MjdChnig+J)KDBqYe zly%W4{2^ONeTdpCz?Eh`VcE*%@`)=9HtcZI$G`*YcYuG?7~Y+5&i{}mp8>P}F<-2Q zX1>g8%DE^p&gLu1Wb--dK(_dN;;O2qrmAZ*^)eqF%9!~_m@ChwOw=`eMBmY0;OTRl zqTE=+fw@_CaE{U?{#Y-7XTco*&3u^oWZqqrayF%}qI}{Cr{7JQZ{KX{*w;12zJZLh z`w)glQRajBw##etE?*%Ga-gQK?Q6v2_bY&ZPt5mh8<_vWHr|!s8KY}25ah|sFRr6b zyX+<pf6`}#Qer{hleejjrOnsWg~tq2Ki@n-2eM|_T-Q-PGJR>|ZSs8Ii*?$-sHf+C zu!nwu^FLg(4{-GZ$Q#R<t!ykGWlc&SGmN}VO<c@t;%SEEdmW@9`vznGU^~5hdE^_i z%zqTk$3G_4_BH%Z3|7jT#<#ouV=W-CH}PlscHY3}Dj(zNAKSmc%nY+JG~?`RTi1@y z#ZRj(41bn^6!v*-Q<gi5(swSOB8<3`VorwpKj0rVhIc0%<3FDNR0#Iy|Cz2ynO9et zviSnOF?DQT<<iZDBl>}C@!8_?Y5#U!P2QDnvz$@a#NPG`<mqG5`ZLF+&RJ8Hnp`<G zh<iJq|DkTx%lJQKVy4ewKJuX~FJyV0jpp*D8E;>kxOS%>!0(8-aJ18N@krMd?h3R0 z02$k-W?RE`wXDago<1&hW^-B49?z?+PK^_c?73S{@R<KisG5<gJ7Y<z=8VOuNflFq z@5V76;2SYetTp9+A^5(G*LFEr)_m&$<%y}wf7!yiqDP&4`T)v;+WBDKqp0m0@{s4X zjXU{IOsq|vF<I8%)yn=XlP9LmnmjdCF8BX$*Zi;Q?B%ITuYV{t=kl+nDyr%O+<`ex z>>q)3#@Jr~;}A~FN4a*GWg(?M$b&L08>N3C!)u$Gcy#reHmj;J2gv?ALQ(mJji@-Y z-1aqe5JsG{QOv_mUDlqODr*=ahyK4O+PiH7?Z0yR{M4C?Kbo4k@ERF!rls+pJ$rT< zf3*3i{MzLNPyaBEyh(`#DKRCVFYT&cRZV{T+1q(Gd0exM*(l|re28$)zc~k=7&|jv zU-<kFaWmyz_Gyi^!MicELxf=tc+%wYdCw8CHwZ9=?=Z)Njj6TrP4ETl<z3LK0C)T@ zCBG|1{!qSb`KOHO2l~p^HD&B;`pORPX}&_%Ja*M)E<f1uNXHJ##sd#LlLNkx<NP0M zzh|8$V{&6Gop;2Kub7+~SpfdP9N42?AuZULQq!1fICo|Gdog@Rh&}*gK4f?@-{ft| zc#{@dep{Y6(I(?b5zcE{mT`<v^A*rhb6$plnkQ{#qo%xhO}{XV{6v}GO_aHIz)zAr z9kg#Dr@|y&WH8S}y0|aHIz9B=7hQBwP%nTVPU_&=?%Q+mxc5W<5BtCxX=A@Yq>H`* zbr17D_7SL$_?8@LV((GR579^CyF=(;j(~8qUzYjpqR1E0M%~0Sa*U72C)*6Zd&N8j z_qJ#==<nc5`t0q>SCn1&7JD%u{Y7mLrKUE{NsXU8Ep_e2XHw%QR0Q)Xyn}=PultWp zshjWodTPar6~T$J;k#dy7ybv2J>AfDfiW<I&+T=e;PG9ESr33Y`~qFPSHd-Z%Nlh6 zdrRPiJ@cBsuZ?inq71I_d(<c!zDdJ9IqYMeiu#HZ@fe%Xe}RWCWDtfjK^8K+MjWn@ zChXgGXd8K<ZG=GwJoKT1@*o^?phzDS>6$hvk1*)7thny!lfR=ra@6?L2_u#7P8u^Y zNC$pFc>^Dh5?n{C`5x*EutL6YLJsS|VG9%|%7FIA@<JZ*Ob<3qd0b;{4f_n#C$u5d zUBm%T<OM!Nn}KhU2I?Q`8R`^d;4{=QP>$Km56gmh))(Xhzh_S#Hjy5}AWt9Q8ozf> zIh31raE*B60ci#P5*`#X#1L`_gB_$nImFv}BaeI_9(MMX6a5z27V0g0jCzcGnkT~W zju2Qu4tqX<a{PcE%5UnRe}r9NF!PMF>u2@zyobJV?+GoQ=S?Z{Jo)dHmX4eF9&b$1 zXt~DWw?FXQPKk(@-XBo^2F0sb`8&uf#`R;%{;&je$<m9OmW-2;th~7beBaUMfj$rH zzaE%>rsuUEApOV#YdX-6TrRx@`k8!>`De~ww&KjiEAo}kC0F8=rbVt!Ulo3l_?GGi zqiBgXnK<>dXHo9tn%bcMv{P!IHZh3bRjz2M2%tj^I#pY^0N!s|75F=Gk)q_|7l*?W zpT6k7kUyIyfB3~ve&esShxigH;GhXb1z}l0_WMNpJn(MvK<v3^&q$w{jJL%y*Xb*S z$%(i&=v4D$SRwsm+G@@VXI|1;)pB+4&yJtwc~>=>={MHRt(%4ZLHBo8MD*Wn>s0^l zKR7t(cW9XNM)LEPHD7VY;wzh1F`z)YVC1Brzua)5rlS>&k5Y8kDT*fktorBVpA_Xh zR+Vj}6!wAxyrL56zf@0Mqzm10*TNwG@#jAjDu@3k#giuPYzp$>e@XR=Ef%$lm3VH? z_t4MUhrfPP(67SJr4q^VN!EhCHF59Pg7{?1j37N*A9}t7(*C#Q+DwLa>95feiTFzG zKii(?)yrt@dDNpE_2SyUw3pF8Kcq)F>Q#<axX>Q;QU`_gC`Y|@<r-g|ZbmPhPs&lR zeVR^Br%OFjmXC7OON>!^v`2Z*dtY!#J<3sUgRY0PN4?ZRVLi%Gk8-p}K6Q|~LV9I# z$@)D;<G1c4l~2mkuQo2!r#$tCoS^-x+YR-J8|_k`^3;!OecGiS@w4?QPyKaTpLUt= zD1FLPzf9vqyTr@(Kl4v{>JOQqan|{u|D*INPkr_?v`buR$1XqRsn2-Yr9R8Sc;tVx zFznAJYy8=-Q7-L2-L9kXfIRBfG-<79c}E-}0S6x&m`SB%o_^g?LBF^A`Rbs**`w`| z#+T^+=t4yU#XSC?&%uH693qtVC+hMH_3%#}kZG52rd6qB5{n#ZzVy{btyUk<mEQCa zubC)vAUaPuj=`UYW{GaHE=~0qji_R;q(mN<^gGz=@0SLr_)+{7b--@5_OUGk3z#_v zKJi&<@%=T*_x_<Xf<B+r)-RNge^HH5iTlEH_$WK=v9p|GO_V&tD>th#iue&P;+NEQ zhPW!dJq=o4;n()hFi+zVbWh+!ji2{ju_5@SshVR!HG|*Zi%LD5(fIWj?9fJ{@Pjtc zJHhMceYVJf-)N1Wrjk^*j^rkVo3CjuV`ZbdhTnpR!}t*|;>UD}tKv6`zj1JWS*qI~ zc@-P=m*ZRz|JFRw6+KdC`|}PK$Z=+Ef9&JX&viOP8~VZF%Y;@R{<W(8k?$!Q|ANA= zY-4`yFWyD`m|wI%%o*5cA1H-QmzP2gilG1p^fBgejNzCQM9LqIMI5U*W^(M~SVnnJ z;ygsI2M?A%2Oovt07L(J<@cl>b2jTaKB<3!>i0<l#XSD7%qS1W9NOoY^FHwkP8{sB zn1)^F1EKVv7Cq*muff4OPhN#a{WX1|>iUMdG>xe9;;q1A*~XlZT|05nPS<*0%}F8R ze?pHrQ(|h&(bQHilyA9L)%Es!@~iXhqr28;ZGJM-XQ9rs&h!^piGQ}dqblN<KSxj$ zh4_7{uBD_~$VXpkL%(jtvdb2)S=PG3lm9(>e7GCdc3-6YL%R7?HSZ<O$8@b0I?xb? zZ&Grg-7Ju6+W%LC-~1=leRyN@MT^%iUt?G*>=Nk(IO}rY_T7aO@1vP7$`EINQ&(|r zXuWJ@>*{4|maVwh8(UsJuCV-Plm1Ay$Q*ILem+22sqaTgbEt=+W%`poY@BI766Z&I z7Uy*SbKuN;**GURb`|HD&8?R;uUU0v=~=B!&8yQ6>4A%ncEd*d#i~7%?$Y<Kq=lH4 zDQ^0(ai;w!oD*N`S)9}P&w(@ZW#i1}WQF(J@-(t_?Hcdmo^8u;?8nmHE&L*>+cT+O zruuDC+oG?ZbH?9NxY+UJZJcR83THky?Wuk{o&Ov-Ghf6xn4d`@Sk8ayamFt1lC{g0 zOV>Phb@TG(rE3;0X<f&X=SjP(uScW!e<{2YYhMkX`!fH`FZ0h_v0VE?{@){+YDwz) zc2y?-2?=Mp2FW$CVHrR%N0@)+!Zod}%U55ydQJ0X3s*H?v~cCB)|Jhx)+}pYy|8)3 z>b0wy7cOf;Snh7M{d+1Oq)f|B8~#Q9D3>jN4j(ryym(dX+Lg4PKlOF~NU0f>Kgwmx z-@MbN&!5n^@a(w@jauBr{4qbdDE&v=v*oWR@l8Ih@FitFqx?s?Z29X+e9LtHNOR?n za@q2?H}K`WH-1l7=R;@8G-x>{y*+-kb;Dwd9w$kYdfrQ#k7?F5Qt05?yuYFSsBtoJ zU(e2m()rIZPBLH2J8|~!?kdi+n^!b7uL96LJtbP74;T?LiDhcuOS(?Kw<3*Da|ZV} zLT#LBKN9DSJ&SWX|2c4GzHFS6pYJNpbC#}JwlcVj?a6ysxc1|Qe+#`V(>RkZ(C_(3 z3$b^wA#CGJ`;j=`-Lp8S^PdA}=F7%8ac9?YUc3D5!TB1)zlC1LFH!B8v|YcCCC$g4 z+yVp#DHt1P+K<Hf_MXK#o&Ov-Gha5&@jJSVbIanUo_{6<pI(bUT|9Q{_Dt&Q^%$gu zm^EMJ*f`UEB+j4hS)9}P&w(@ZW#jB`=qk>0o7b(8JE+oGi<hnF`g2s5->-88<{4JD zT(xJ?7X7?}G#@jVGvko=?CHbCnf9Y__HXT3oYVQwfiv@E<D9&$t2m!KuXK8odd%E| z&zRxZPo%wD_(k$kg)`}H{jQEQAB*&nxHNs(IMaS4&NuZe&guN;z?u1C8Rnejd9}ju z{l+M{W?Z^(SuW<x&b&98m_@EDQP+1xN$c!BUfq`uIabl#rHYn~P&DzT@_+I*MYAPk zzBkGyXU5@qM5zQYA6zfDS?9}?Ro90HgnE>tUP9~99`#!XhV>{%y#-p2_NeE1b-{4N z^e9KYGOb5@)N36W)}tKt_8h1DOMBECHURl7O0UbL9QBe~kM=TpNH3#DIqGfDdbF3( zn<w3HMvrpTYteeNN4?g8(95hJr5yDtwI1zJ&-4BxXg2gG<*4UtJ=&w*umRA^<dbsL z+okI-?NQJ3#)?)ZpOm9syVj#U>J1wJy-a$Pqux5LM|;$J=73?rCCf)S>czDl?Pc^D zg6S>wC`Y{^T95Xq_hw1hpOm8><!F!mn<bh0iTA8*_guHQS@#2!XMMBV2l5Mj%2Pj~ z^=WsH#?`Lx)Tcc47ifLjO=^ASgZZL9<*8q$^=X&-%!jQ{dFt;uMz>FGXG4zsQ=a-s ztxvnukMbYoslP$%(=PQ{4m<ypr+$mpr`;Bv|Af`A(tnhvex=r@-Ab*$M^ig}%2VIh z`m{@Z=EK&fJoR@St^7~BzD{>{ME)sH{dTQSyVQ?LpYqgSr}b%fmu`P7hn;`QQ$Mct zX_xv@^_TM0AENbXm-;M+oj&EMzgv&rw9ED%Res7-f3w!7UFt`bpYqgCXnopczZ6yf zC{O(bTAy~QA65S-PyI5jPrKA-Ic)z?p8AZZUE=1de^^7uc@o#qCI1+nFHt|K>+uFn z?fzi+0MBb3sJ=otS4P-=a?UNT?}stWwI<AeWrF%XMbr3s>OLenUs0ALUyA-9Sd*>o zaD80j11@{Z8<gD_>J&YqG0bOAb&h_Z6RZ$yyH0G$x;oNM>*EfQHQ95EhX$wH7f6l% zn<jpP|Lg-6Fpq#gd*ea;h!^o=ePI1iW#29Ser-p_55jxb?ac7muZHXBlN^4QsF<9! zZSoMl$m?J7Ua86ldLz8DemJw^S1D}(D;KLAc9r%)vK)+05p*Vc2_b&Oi}<m4#5Lfz z4Q%wb9h$)lyvFY=so?W<B_AR8x;U^_631bRc$0Pe%ZA^_6@H$=ucElDAI@m}rWpN~ z3qPf;GtdhO@Y^HhV!!;FTx+*yEv=)fXO(~FBTJ;s;XBIkk-DtJ+ZYZCaqtJmM~;Ua zAALPOa@^#&$nl-`2^=SBl>PgBaagU~@#6dRxy7#r`EreqiOp&pCiUm3aV$R9HJ&k* zXv+3UJ8Yj$du=z%n1-VV#z(J0Y{~eTrugnceS4w4c`0msJV|^9|Jld>GCmS7;zvIa zSH-u8&tKfmIQfcB`qx=Iz`r5qzvYyE(Ysqt9GuT^y(RhQRkZb2;diI>ufWgq4w3P3 zZt)Aj8Qs5{^?#%jzZa}@dKZiK7ne?m?fG>np4}(8N-Pe3R~?C)z7c$<;jL~iowF2g zc6%oKi@Za{P`cs>BOU1xGiTE}{EL|t)4x!h3;&`{<GfYp3v#y_`~@O}csvWj!TkV6 zDmL`DMCKj-6Y6_-M8JOHuU}B*)x3Xg=Kcxs=1~Zbd}93Jc*F50{)V#8af$cEyg!Y) zUqn9sD3$5ck_q&m*iYcil5a>zk^BDaP&Ll@nkHr|KJotUjX$)*{wq1lW$#q!uW;z` zXWP|bUPVU!MLBT<_h*YfExI!PkUH<r-Ygj^-oPD}Yb*|o$sgE_8h?~_@4r7IUc}Eo zTh|L+Ka{VQHYnNy__YCh!H={Pe)#4&fBXhY-FJ;Y3co`_eX`wNSr6Wg6#WUFj}R~7 z7e7<sM_g6e7S(&+gF7<i6n@)<JHg{s?^GRem2PMEXrA|H+*ptCI+`T7zc%jAWKDLZ zcXbKQ?ClQ*(0?709tLO<y%^9sAT-nOjrb8S;>Z4&xGIlKZ15J{6X2!z;}zd_^N#x@ z;87Lm{Y2xpN%O>yJmYmVNr2zM;#_$?63inH6pKGCxlhh${LpuD{E5b|pN#4m)G}90 z`rS*}{)iXxV~L0>`MpJRjelr=?*8+0x;E{toEMg^|3a*wJtTnNMkyinek;kLe%^7% zQMGo;zx-NRr?5Ng+P2Dlubk?L7oFLGtB-CtH8$jTU+TE-*^y{hZK?Rw*fERls+m4@ zgqCd^|K-Z&*xmnlxd!onIksraC!SwhJ^84KPYD}?K6K=IJmO*NXwip`@E+_oimkhp zzBk~*uhkyD@mJff`072i(Er!tKa6d@>w{a1k2`6r$Zmb+hF{0#A9hyk=QoUqNgiTS zz6pQne`M|2)>k?t4;?rD_0BD$|KG7SAFUf#CwZtFJNMHycTf9#&FPizdF+w?k3MqS z)BpGF|C{?p_4$APdd&r8r%$-M|KZy&Ty$`~cieZMO8)fTZBKu5Q2pZZ{`O6O+g|rr z*~Z#Gp7`0=t3P=&w&K(;eEWwF{JNv@%^%cEc=)-F&G(!W<bTE$%VM{jKBMONF;4{k z+BEkATfTg3b8J-gEAU79IQECFfj=Jq-eIwdi<fU*b^keA#m3fw$8L%}{JWQH?w<4n zY}DNJ`fXd150upIioen!HUgV4a?AtE>%>M~+F&ogxc2b}1OJ-E%r^}6#?&kPx-Itj zb2DQHfBJ777e9V($I7d|)?xbo>^B#1iV>K;<c){xxc?c`LO*qWO+~Eo$(K6bc;>Sm zC9l8Qf%a%0Xt%iE;eE{SMZhIz>t$r@vX<7#et0#-MsJ64(0x#s)GbwLXeMvaEb{t! zzTPn*F7vjw828Bw*_DmtN=gnGG|0oM^Gtq<<tYvh?D2Q!9Y@vRiOyl;WHu$i-TkIA zF#In5v%i<WylL^$@+IYy7B^3v*i_zBIeGGgrR5W+ENyCPo>IPK{L<#8isp+ZO`5WB z+`>ua<?G}ed&$a+-^GA;&U$*!OlcoRpBJ<rgAWunkGOYk-^@~3yjU9>B<=TE*&_3$ zTFHr#FO?V7-fM$=sUjjAZT?w|p$tcuK2<zqq7L+{cs|AFQG7m?cwIf8;&UrsuNUBR zs!Gl8((6)8`$Od&+^G_9t8{RO$c8w>1}q7>I@g@k|E5ky)8uLTIYguDd6Jom`<nA} z+Tr}%k2~ybJ4K#J;Ly)E9vU}2#49H9FUpA{cs{l5`|9}yY0x(-|7Z3D8#Z95cq7;I zDcHS2JO=;Shtlr-&!>nN@r%#U&o^}aP=1Lwc;3qG+DG!Z0{j<u*ghlww7%f`5%Mz~ zepYR*E#`}kdOuPu??;keya;FX{V|e&UDW@}9d?zrScG6NJlOt-7x7Ez_Do#&cF|pZ z5%Pq#$NtNOpK5vG=No&wEIpY%@grWuk7*EB*_Hh%`2y2uf8<sBJ6)!ybL7N+Xl!4z zF=dqlVK~S$9$_z~K6Y9v^|6nsxo^DwbOcHhl%M~QrD$^wM%%*?g<n$Qvf-Dp5SZz8 ze}EtM(dM}NA-UEr%UV`ql2vFQh~#^{w<{}rb{eujtE8m(W1*1r-i4eeP1b(qcPgAu zalIzzPn<7tJ*H_D^%m>SPLWg1n=n&w*Y(6>YTiVetk?6Ve||On9y3tR^AFoS?XcbZ zb*_2Slzn#IME}{v-f!kj8ZY7(|F^0S#8vqP^CX}1CJDm)_k4p7doP&ZN)YEw<R^#4 zG>18_J#QN7RmiT(c%Ky2Z_^aMJ_3gJp~hXzoAT++Z0&uYXZs^w#4n-Sv$GxUg<?hF z$9YqB{Pu%+lg5kq5hCK6nKw1+_QrXWw+*uIl`&wLoEVQ;)8Shj9HYrI9&y>{O~VEh zLr9J&{16AbQTSynK(hB8oHubi?VC3hhB4<&W}WnA9T+)p;yj7-CZ@*u6u*<<Iw-Eo z<#Q*>za=-)sJD2Z$@Ng9`(r(nyRQ4bn$M6X|Dngn|Lx|yN!ww&_y6v)H#a<QTJ*ax z&q77eQT<g!{_CMe_aExvbo&C<=)b7-P)d70c;2M(B7X6|>3X4YRi3xjLv;tgT3|2h zp-7$23-iY>YCV*~ulKKqB3{HV@mGakxE=0$>!Hy8aH9W;UQg5e*FzC6;+NF@F>zJx zZ{J%Fg|Ua@Pc(kvd2eWpR0Vt2{^flO@gjaK5OF2Hw`kP7m*XGWpKCqT=>G4r^-#}t zaXpmQ`>g<k`Z@gRhw%<EbiDEFakZfUVcLVWP?_~mm;da(Es*K%`kxuHekd+$h8~f1 zLSn9MlB^}VRn`x+%bFqZPs+NY6J#yX7`1+=Ew-?+Zo;~+Z(H-iPipb}0qciWzIOB0 zXYS3cA4+}qpxEG3GV6yPns`j@yqfU(p_S`fgY`pgC*5B2@X)f@+1Cx<@<jdfk6hxv zuj8>tZ?1m*H(#uIqW<j1{<Zw5ou?+QZ@7QpS9UBciEqDf%2AECeen7ntAFz4hUR{1 z{RZ+Oc@2*4`lD|>6g`=XW_+HJ>`oZ1*fv~zTg+a|WUhxg@|$Od)<eOvYdsWG%tq1g z2J4~p{mk!SE1QCj%gEUI-#6DosjsZFtcSuUm?Z}sS;%^*JlxbL(u+ONw;syd=hs7_ z`gLzT6#BQIkHZ+OPrJ|ST*=e>?CIZ^86_QNrqApwZ->m8ZT@bL9os!V(GB%I!}Wf8 zL-oE=q(>^=*Zb@FyVZNesHEVF?(DP2d~koTq|R68^zbBF=8-bal?tUC^)_fd+7prB zu=m-c9Q9hX9_>-j-e-?;)T`8bv`0OApFPS^&)0giM?JOAUZ#AMqu#DzdjBb{pV7<g zn^r1;l%rm|)}y_Q9(F9qq(?dGt<!q6N4?g8VLi%GFRt}yk9tx|f@VYfC`Y{^T95Xq z_qhRKJ<3sUx30IeM?HI=J<3sUv(}?M>ZyJ9GJc^P^%7c-_NeE1cZSMGIqFf4_Q($# zkkP}p$_uo8?)y}xdCIdsC9Qe@ze1n#)ZcSdxP7x8v_$Arp883xPrJJ`PRs}M#q=pp z{S8{5cB#*N*!q;Gev8(pUDm6p{8OI#m0F*6sh^A}Kjo?KYkk_KKFeX}pYqh-HAJ^t zZHM)3Pel5Zr+&NEr`_GUK1BJS^3-3a^=X&-%!i$S%2PkC^=X&sM&+OK)E}btX_vTf zh$uhhslQu~N3_fK6P16;Q-8D8r(NntrB8Y4C$v88Cba)q4%>f}r~U%1PrKA74z@n! zsn2-Yr9R8Sc(lJ@UjaRC^F3Pp)$sUD{8)ckpY8U*eLb-D0z0d!ecu|Q_kDX=@B2pj zXZ5^2@kiHtFXlR$qCCNO&Dsv1BgWry*<0SAEMeUW4(yA9gS_IR{&HWG;5{1mdn4`i z9;UE;ZK}n0YG>MT>if;UHX1MD$NJ!FT$NXLhxUCd@`NufeBU?h1Lim|*YC9N+sU%; z+sPsy^&A-WpZmUH?>_rb+P#0@H{wP7=!Z}{4EA{&x|4Apc#Yq1nH8NF%#38wZtxa9 zdf&Hf_!;{O$h!NA;*(|Hw`};C`@XsGQ`+eq_qq%8pL?WKzV44-lWPq_*0MUPdRF<p z6=|0x-+kXW9&&t4{6T+jq{mH;iyYru^gM;*B+JY3ae+7t&t36-<=o;w1U`24DTzn) z`dm$uuj}{GueruErV>p#KGF``r|+`Yx9?lDBll7a@grWukJ%xvig)e%cJ>a$6|(Q! z_h~#t)pId>-?!(bHa{<NuDT3$v;Mo@lPc{{LcNLse)#r;?fP{oo!uw73ap1fSJXZk z7T?SJzA=4!-?v%TzHj8i`@R)f`@V${Dk(0q_I)d|_I;E1(7tbBeR~yLHXii__h%e$ zIQ}H{^Hq*Zyszf{E$<U~-)2@4tTW;F4Y|G#@gLUXoTl+V=<(;3?u|dR!~QGrdxyPk zecy+exa|wq9Dj%x@k{<r;YVCmUi-ce*%vS~^FaKF7xD9TdnT@?&fd6=nm=%zT-5gk zsxJ+%liM5lf4kBoe#DFTF+Jki_k9RGvTsq~7kpQ%$J4&=Lkh#E;O|59Jc;urzL(~F ziqFIOT%Y&vd|qzm4t>w(Wh#gJcG);dzOVXnFfDiWRf%ut`*uy^zt!`mUpeMEW+D;S zZ1=RocAt33VXy6^MrB4n$KHqbBZ>MxWPkatmUt1r<coUVr0a*mt+v7Qo;1FrJzw~x z!E@3diNG&)9l0^$rtlZp<Adkg#&c0whw)4AQzbZ~@7rUt=K|}$>%LuSW8CeX2iqU< zB7VMZ&%{-g9^Z!?u!Ei`^1v(n#z`O-Z${zA{c<DX9r#rWb~vN)V_wjIx$sl-rr!U3 z2=O9*^b2wIywW;pVGZ(2f`VDHVd5vQ+d1vK-){WT$t!lOIQ@ji$<hwc7Vr%_@u?9W z2fu44uj18nGSB<R44l|k@8F*uUaM3Duwdi**ukGF!I>RD*p0$ZX~SIaJkb6YN!{hR ziuKO&Kj)#={pJ+gYXbH@B)Tf;{N!F|$W?-^tIld|YM#5Qxw(5qvG-zt--Go5);x-- z@HrHpJ8?e6`4gW*Q63cI2==wQLjY9IpDqocbj_pu2lewOP2;~%<E8&o$Gpc(B;uO= zIPI_>Nc^|M-afpqTbp<c{<Dw$W*(*SB7VuADg215@(Z3nS^K)RwePTfMxOh)u^%Uo z`?b!8>eqdVF!yykNA`6)N90{~nKob-_5WiIyGpzF@9Rdqh#%XtvmMfL?;wrBkI$c? z@Y`>mKk5FL_z@c7ntA@j_BZIMV4pYL{>**d*uJ=r8}}z6&v>MfeSeZU2czxbh{7)^ zaU6eK?Jr{?Fw^V)VEhZ7Kk4zb@A*?<5cBy{NXxOW8^8ZZd`-<?3jh9NW^?Oh&1+U& zS&E6>>QH*!WIovq{W7kLJwmNd-u*sBHy@^G{P(K7@mCa$N(#-iJKujWA6zHDXRu1Y zb9&+LKPX4Nq}HQ7>f7IcP>y;Vv>xqI&;I^{a@1?ldbCG9`}+^dQLj?#(H`}N4hWZz za@6y+9_?lH!ry;Tj(WQ^zO+X@&-<jj{Vqy>PeVECwQD`vqu$T~VLi%GZ=KeoJ?h=j zFRVv7>czDl?Pc`B<)a++hG;$7qu$T~-wkfc(NC62Amyk>Ioc!NIxwS$?<v?WxE_16 zZYPu{9(KJ$y3nUQ^%Gj3cB#Kd<4e2Lr#$r+u$^j3TsK7MQ=a-|T90;#Z&dy%PyIcI ztM*B|)K5mFPkHJmwLb0c()h6)cKIn!{S8{5cBxN4+WM5Iev8(pUFx$Owm#*lU#azJ zm-RJDpYqiAwLa}qpZT!Ur#$s{y;u34cGqeDMfsod)Nj}Nv`hUc|5Kj&>$E=YQlI6p z^G|u|$F)A~vi(KjM|tWG(fYJY{iys?p8C5vzG*u{wEv>o59O)P@sW0^zbB&pQ=a<t z5A9N)<zPJ8Kc3fc9Oiqk#Q%iHWBQHyv}flBdkD4;RO^MlBRwO&=Qy|ckrIsGt~s{< zTm3zUrtu%E`|{)qj^``PbQX&8;Cl|*;r&M9hc0{8_Z+o_ea|tsSY;&t?>Wvb9xC3* zwl5m}_ciey{AV9ZTirF<alL^je#DFTu|5!2Ro3wL95Ra5dEQ0Ad#`+aF<cAX?(nlj zIlt%FP%^^XAo8xd40FJ*LQbrgd%$5=Y4`r`IfxhWgKuyU*MJGW=h(14xRyWvN)2rM zzf^O8Uq0V+ROt4X4L{?(rF_p(S-hbHXEc8J7Ki<p3qPgJ9Cx3#|JT=peY2C_Q?&aQ zyJrFIZ<m;0zQ##kioQE4e`ijg6JL1l84EAJcvb7#m8%zaC-syZ&?oJVt$cM^UY3vL zr9S;Yp5<NLvUp|l!b_X4>_(B_$#OFPDDNI&IPShC*T6T|vG2d9KUjX5?BGsi$@hC5 z&UZNfN&Zehm(b5Ac;CYL_bxr3<Gjf9-%+~%Pe}iSbw5J~tPOf9*O=iypwdax=k@&O zd#?G4nTq?G<EO9fu>Xxe=df4nH!3T7-Ot9teuoI<#1YJYUiyyMO4fO#oxW$q?<^0M z-yp&n-Twym&<Bgh;6M9N+P#1NL%fJz;u(b>aaDf7I-f_kXM6<yH#;(X_A9RYdCJ`Z zIM$8)(%W8yGa5hC3D*A=4*d3)_Z`HG_$76FCaxO4dUM@RDz#94Cwp)(|H+P=isibW z4?6rT5)S+-z4MB3M&rkHF@KH5ulKL}Azs9fej%=&_f=_UUzPTD^LE5Nc*Ey*%GvnR zk3X_Q&W6LJ9pJqY-VGBU_LqELOkTyS_ruxO{R|y&UNO$>_+@K<N}HwWeH7#0BI%zv zp7xe?KQ>Z)=c&R`cd{RRJCt7a^ER#f;k=3SC|}Q`IKOJw^QLv0@_8EPQ!K@uGT}r$ zzCr3b_t$Sb@SDPUMb3Ftk=|dQG^xkSryTPhCX$7w=TX`Y`+@j(UG}W~^}QFu^QtWA zAnIfK#a1wn^3GH9s5E82pw^9uTVx*9cHq$9jP3{Mzo_-ouz;Drd+5)R;dena@grWu zFR@eC3yrHPinYIfckpYwSm8(NoCoKRU)28k3cudJzdrFIe#z|$KjNzJ3-7NVte@Ui zx)X8c`st6O_i!AXM@7Ut=TX<lJnEV(<1pIa59CDu<=UTJX=5IhIeJrDWcwpt#Lw6L zF>%e5e(zkl#uDTNV-Lq47k;k$nBIsV@gjaiiMW#ATQmwkj(=!>uJ0Gx4!k>}H`rSx z$)2vC?Bf3VTJN`F9`)0;zy5cQyr9-jJ!*gbYS|xuyzGg;MfSmm&S|n&{*|&n{&BJ= zKKL=RZ~pzVSN?Hoe|*m?pEXH#(SQ7^S8jO<`{GuK{tVH1ZjRbt{}izW{jV7N>mMz) zw0_%1zI18b4^Dnz+b>V^>Y)Fy?5}^=mmc2wyzH+pdDwdBv72I#){c%HA^Yn~9%`yy zzirF8FHf&MOZL|n8y&+xbL*rJZX5p1x-GZVNgnF{I_mbCWk;38ZfhC7W%;mwOc*ux zkKZ13S9A3*zjAHO|85!i*kMB}cYg2-n;K$kk~?;J@$DP_r=s!Y)th!qo|bI*RZ+Yi zc~B=x+js0Q9yqV2B3AX}OC4`M^VyCAUw^fu^z~b%KC0s%KVLGn?YBRx_8zVIws**- z)d<CXr+r-g+(R|>FU32i9JRY+Q~Zpr4v}D;RItCkzK<z<e|<Yu&y#P6YWAJZuE>*V zk$-EDP1T;%Z!TZe*g5B3Ui<40l9x6vUpnmd1@(ELH+vx4{`z*ggYlc=8NM^*$*{Mp zP1Wj@Wp#dSI8z*3K_La|kxD=IYz^~<@QW_G2=RFxxE~3=OViJz_<V}%j``e*@Ar~= zofV%`@wt_m*am%nhyMD=Bjx+5ep#MR#p|BkDGv2Djo0Y+ixuH@R;K-I*Sx=?9nQ}a z(_Hp$ljqbp^n1S2&*;8Z^C~j(FUpA{cs^BIF1qrbkJOkC;kzagmFH7;^cxzS(a)z~ z4|b!TPr<_e@O+AR5x?YAT`zR~fS<fJ_#DT+hac{*?sH5o6n+EbTeseMu>BD);^$9M z_z_oC`g5fHUAQCT3E}ngDSTh_1050Z{K<PEYdreMwiwnqsqYH$ox~61*%Z#~?GJXp zC^D}5W2GH_KBcqKD+uu;Uc@i1`(xs|w+kEfd;@(a&M5p`&!_fwS$Z;k;zzuQAJZVN zia%Z2-(;ixt!iZZ+g9Rv-;)#XWG|DpFj#0(cpQ9B`?TiW?NhZse21^wpR6-XmRwVe zGrIku&1b_;X(JcC^8kJ=QZ&wo-Xn9PeCC@n%?gf$USChDgVSVzjwcl;LI={vcQe#K zC?frJ&+Yjh=55l{f+O*Kbuf>EzAqt+_qBez5s!DY<e`l6t!!PrY|XOP72b>YJO~?* zq0LS*vOo|rr4qq%42Z}lbaD7kYzo$sLN8d?ufMC~d{;?{9M`v5?_v3U!Vn!!d9F)G zTflr5`%s@-d=-l1TnnAJUyp;NlN6tvpeXI;OHm%I>rZGqZ0}BcZ8tY4yL!IVopt@* zm&KOMchgk0ci7L&ck^G@A2r|IU)J>#FXBi1iL2tReW(Nc9@>GpMyUg52DMJ=pr*7z z%I`83I^z|7H>BrFhe&^YZt<cbobI{|yJr1&&6kumbI|)J+F!5_wQkR^OA(#!wTdp? z#JlS7xes*@=X#NMs92PaQys#{h;qct*$jYxWvQ^o^tlhUd`jiv9AxZ6jd?qH>_d%s zjAcNC`vZ;Cd_eS{cXA(U%$-m_I38hsWb(*Ti8Uyj^@-oZ`|WDH7$uQrJoK|2b7r5h z_{!F`YrL`L<>Rvnb|LPDF6dCDOwUW!9jd>7*L2q*ich?(${YVpu5q#`^gVpysIYu# z$Ef4~-^ZA0hN7O83d?-(JLNrtRQef7UJVH@s7E>KCAA*yQ7d&&SdVhl+o1Jmk9wXr zEodZ6k8;#&(R#E;z0^TrJ<3t9QtQzk^&0#kQm-=Kr&Er4zSg6?jNY^ZOg+j`Z<ofE z_A+{(m0>HB9_6UluJve-dZ~jx8+4`g3+1TC`b2xw^SqA)m(-&i^(aSs<Qx2tr2T@v zC9d<u?@Nbhp7QjMT@R2h^eIpM-R}w4f9mhi{-#~(Q=a;pwLb0A&&ddV%2Pj~^=X&- z8zS^6PyGd2pLU5C%VFoA^3*TW`m{@Z=EK&fJoWbsRQ{vgT^f(5{8OI#Nv%)2)ZY_P ze#%pSgVv{A>a!en{wYuW7OhXatbbAUhw{{~)cUkb{bWS`DNlW0>(lN!?Y}7hQ=a<l zuW6V1QTS7y`t%R&QlI5uJnBF0<2WwxJ}&v&aDUHq>3`zU2~W9cP08SlXZfFz9tGcL zZz;Mu{e8AyG@=9dyFC2g=<l;h$E$P`W5elFKKZ2?!Ts@quPDlJnnZbUALna3ybp+% zyX<|gLF?Bm`l7|tx|@DWCwdH``8#{0o!(pE_x83Fl?G?@eL$o3-x~29{AVAqfc_mx zFD=4540ZS&M+JWMN5_Kub5h24mF~W~U41`#m!i4sl$~@|fKM(tJAT(@g(vYNUc`^} zfw(IDLGnGzfjcv{z|S-IOpNR5cpdmbho2=1@BXac+dIKKuLNgy{4N#@QU6yv>_WRp zp8S<~gS-*mH_|gy|JxeB6EuFBCO)Uuos;S;=S_T#+wME_!*6#N@!Rmt41TDb%<rjk zt(!?G&wkyU|1$f5S+mccHGTHn)27c^IBV|06^k!lcJX37$6B~#@v4ww1anqeqqIIh zjn0OC_pemy1PLA{sE|Sm_dkUmzQ&Jwtk<l^tk;ZZeOLUm4YIO0U61>F&o=nFUQZEc z)@z5ptZPqy&2ulX+clr9UWdP1-%xa32~J5p#T<oci_x#U>NT`=vfhj$qh4=S^*V8s zs@I9q89{#%|E#Ll@ejMccaWVHlInYPU(;}I<o-g}XaA1;>UB#=*ZQR)PloF?^UZqg ze@2yq`SWL~@{$kN>!qzL)-<nM!^k{nL%|xIjs8fU^KKAuPLU{5NQJ-g>8$4pA%2WQ zy+#A4ALy6le`tI)&i?ufLhb$R`qQU3%tc$*K3Ukh<dWv4g}8=U=ra9s4!=m1&-?I4 zsCrEW`h|X=U*fkYztCTPb(CM$tXjNc^+m0#E~Cl3=-e)8WlZBa%8Y-fQr8NmF*!j? z<;21I!uM7POWdl;Ly9o-@O`&mC{MqbI=J?yM){?wdHI^f3k&s5BeY7p?j6%F$RGTo zj(*<2^eE1-+%$2L+b^si^oxJ9@-OR=UlHY(Rn5zT5wozZ8E1D%D^ouB<wRXy5Ni76 z5bYPp<a_vo-F~4T=$GWDbpOKkG%?CAOIw#OmySi|5`}oCp-WnsQliZLa`;6)0m=JF z^mF@#exP3xH|qXH*BgIalwX#uSiNTPilxg|T%30%MDVmOX=PG?UtX4Z7V8Nqo>#NJ zu%F3jMPDWQsd)t@*zeL0^h^8(-Hvp<@kdAb<+9db-nnw|nwA18%$b2!>8!%Em}^gV z7V*68Is8({Jk%fW_6z+$zxbb2exbko<D&d>`Lfl^mMmMoY|WLKT<5-;*CnltUHIh- zIsEdTjCjtg#7S<y&=2%W@_OCB=z8Oy80D9yWvf>%UtEw=B$xA+HD9r^b=8{E#xAJ` z^`$L`U+_jK-y<>B?HBrieo1^n_b<BM_{T)~W%;rd&5KtRI-xs5v`Xs=R!bKX^<`lW zzu-MszDHu3+b{G3{Sv=U_b<BM_`{?8vUKh0HLaH|T)C=sWdZ$5L!ebUOSGC-tyxy^ z2F&nFO@v=Kf8qUOKEC1o9A(+>(hu~Df35CcbiJWG>70h?XHCa#!0M&VE1DUaKb_Mx zwR8gT%S^csz&LcNT$82+<RU%QGXo>8{ib=Jy3Uvn(l7J_{gV8+?q77hvCXCZvUbI? zLfa5*ohxbuR4+UEpnn;u{ennyoR)<t!C@3r1!Vc_uX6i^exP3x>vjL4>y2$P?U$7; zSFT>RwBRDnTqO^R3LC;gSwMX`z~Ps}@xEO<#PQfKWW!_<7rXsJKhQ79kE-V+^p|M^ z*J;1VmT@wrTe!NpF!<jesFltsP%WJe_~n&|`7Zq;9?JVj%y#>QexP3xA5ngxzw89k zep$S>X<4fso13renp)a0{IVm5U(%~K(pu3M{-6Kv->&|JexP6YT#f#+EvEglYT3oh zniei;ZMt&d6|Jk5H`#&_{A{R|){9!{`~uX{*5H>-Is8({e*AvY?HBrieqjdaFY=^m zzjSSw_IhHRUZ2A+va~GkBeAoyUv`N$pRaO1%Bbh8+>i3zzW*l6$MVvF^aFX8_g%mL zrhcFLniMRb`AZ>vGkx{W(h_-RR+27D%c*mM_l&8_ioA_RMk-(XU9g^d_kHmo9`i4} z-{$*lzTfus`)$7W=6h|vpWmS0^YcA7li>T=&&eQPB^@``DQ_wIO7J;0zNPSw4!_?{ zd|AKG)-*Xr@&0Jn`)FCut>0@`-k<&bHtp~|lG9$>e>UiR*DKnM_uF2D*upwxQhS|p zVehwxi|^n+`-ptMJzV)U@m_U5Mr!L9%EvdT_eY7_^Lvlf-qrU=U&y>i3f3oR{D~j) zO<V)M?RxR~hqp7%^8~-P9Xr6kA?Ls4e6O5$%ZX!-o`3TBJl7|D!r1{R{O$~`Q{GZ^ zeGyJ&&-K@=|HGX4U7y~XU}+KFR;t4vq44uZDEvqn-&NXjS5wf={oC@xZ+E}0y$3AY zn87btr>xs^Z&{~YHhpBUeuOmf!WV=0wBG9G(m6}lE??P|n@|U+YMpXALLS}8$Rq2N zlamxK=&$j7hUs&iGR7yIx9WUBuGZkOP8soKa$>~eI^}?qUkKtlVHI2CCI0#aRlY!4 z;;&WxF~<vz4;(MJUY6qs*O75O71vjBofOjHQLop7d{_eT`=SkgQ!tJN<HaN4_r?B~ z^!T7@{AA6a;2tj$dYst&K=$#1cG%w}PIB2>)~NHW#*6ZP(?dK96hTo=9Km|1m$r&6 z881jXt%t&Q+zozda7M4Efj!v0Kq&lYAF#mnP<I7;4k`)%A-(RPRF4;$+WLj^@z1G# zrtGtM_BRJ~t-nd!o9S;bUJx(hmpoD7M_g4o@cW|Xe$C(~8skT}v`=f6;|2LKVKL3A z@d6O5?+}ae9ipr$z!|x0By9=nq0UcpnG3a&O)Tn}9S02m8{u}5(Rg=Vp+5nB#Eba( zx;+!uy<MuP?|{+v*ndUi*H8Lhg<KlH2YVNO#EbY5FXEc{ebL)=dmHpr@cW`(BH$~; zj}3C-os2Zf;9!5r_cY`g525V8FWSHj_Omv?Z1}+fF}v%)$tq*=*MIo!!7r)jYi0l8 z?mv^C35T~I)V2PT1ws1@eqU6Nryr8Svb>aW(L&xqyY%0wFms;scBIL7LLr~cKCq<t zW8u^|Z{j?O^Cn7hKE?S`Qr}<mew*_r%7dcbepD##6LC|~;CEn(7kuUB4-4OC`%kFn zz@+ix)c9zBw*-A0{@2v_y6Ztj<8LW>mXrN9?XcY^N*(j2+G~4m-n8h`YTiWJY2JkU z?EL3VQTN%A^QOW2KJ8F_pQfquTG#)!+^X93?wiByJIZ3Ri|u~HJ=VNQ<3;?EN9%c$ zt{*}A>F>F{?$3LJ-#C$ZFKH+I3Y+)-Q);~HK3n0Z_Gjk27j@S^QsY;o@zXTQ&-sRz zY24aBl^=eIBf8dax8EJck9ZM3e}rz=p?3J`dav!rJ2GVve%mcO!B3Mjt|M+2U*fn& z5s!Tv<3FO~bu>v#E^5Q;rBCxd+7GA1$TPpF19s7W{hz}ww2P!CE0OrA!7sk4amgQ| z@$)r)q*v?yP1C3}qr!LJsBlZ(kRN`@W4nf*Z{UZ4*4O#9-@h=Qe%<`gy5M=IO`kuZ z5eov=w6-o^y>PLt+`GJ)(z)qeXyq2mDluQ)znmr#_e=gsp-{;BD<<G;{K#`$VLfKO zjt^7yn)O}D2lrfCsq3k}B;fy_yo2Ug#rRG7g7uo=5j3dRH(+e_`r|pG+|Q{yY1^); zk1?6!va4RJ`?>J_0POikg~w~tW_Par52*g4?1PGS$5uYN#E*CpKh86VtFkpyrt-U= zqTN&q{96IPMFNvLVgv;&%KPz%_yE6fzm)Wj7OO|YPRcTtCkt(P8YVSjptsRe-&hCu z9pT0=d8J;LplP1Tq{Vihqi~CVGQWN)enPlk+OSjYpOZEiaS?wcGp?XtV!k8$rDI~> z-id<i179cA%{_ZIdZty)O$Dzcn7(e!s<lncrL&tamX*k*i&r$2p4loL8_s->-$<Kh zogl?iPp;p}*AC?T!L6b1Fj=ozk6Ev2ll7ha-l9>@DUcubOYZs7Ju=>^<E{fA!LS<~ z{!n+lW_(xa?z`1{iLwEI58g-Gc6KMi^}WTa*Z$7%e(ab_pnN!jd55}8{{?;<rBu}W zt;C?buKn0A8+c4@T2Ws_?Z@7K`Bht2Kl7LBsXsoY1ESxZJ-1`~T|>A2zIZzNAFuyc z#%y`)$<tyt-8LfN5r$*&t5ddNyebj>ouV^P<Pg3>Y;6<$M@0vGrP%!+v2}~mZ#&@X ze|D@p{LtF6S6-3$w%Fyr|N7PmM{cM&`X{H<NFHh~T=kibKOMbo>#HTxk%z6He5Q5F z;0OK@JOB0(TO|)$VH3xf@2jkpJk;(!bK=(3zaG-@@7wo$>-8U<GVy+Idi6~|U)NE+ zU{ej`z8L#X-OD%qdi#%l@W}S-Q!}^!`;{F}6(8_o{jIk@Tz`w#c|Z22N50fi`r??H zg)fx{{&;x$6&)X*x3S~4_PYXmL;w5UZ(a18|ExLVxW@w?Y2ctgM&3Vc>wCWc)0&yT zDTj@kkAL%lj@Y!BTbu5`3pP4_S^VO+esS%>Sk>{5cZiK34d}BxxZWR*Yaf3ws2^ro z^9@t;BvZ4{>$cdGvETak?yJwLj{V<@9oM|lv=w!UR*t`V{8V0(reAvM0Q6Jm%bxC) zvZwnSvZs5A?CH+_hdQ8Wx7hED&n<p0VJ<mS2iF-H%n{9_v@Y0>J>A2p`JE||xuz~@ zCZ;=AnY_UY_G9;bwdOkOe(WVBB?siSANyh0kG)uY*L>09waa_x#bkF1yq9$M_wtuF zEnZr_q<qri=7|%V%9|=DPoA)}eBzX)O-;>H%9o5^+T2vpe9@#yQx=X}IH|mRot$GY zS$XkZ0_*KbHrsyeR=?nB9&No1dhg(V?1QkkdbQq<-N={9i|VgygM2ABAsoLe5#Eno zf)H-VLCSq_f3L)S>b|=0{k_g?l`l;T{5sB^7d!MuJD>o*UGL+yV1U}6r%coML5fej zq{{36TG4E#vA#CkS7(z}aTu>k<&yc}K2Pg(zLb>t_wazB9_6SP*Lt)^&DMcoJ<3sU zh}NS$>UmzBjHYT_Efq>R>g}e#to*hP4C_&jdYiQ#?I8^u!v-8KKFsX5MLFsvv>xp# zE$G#S_V=P3^@uO+W%TCBeM}}j%2AJUv`4;m;Jn}|BycE`z%rdL?iaM@U{!x8&-~iB zP@nSDPilSIrM`_1^(jyN4O*XeS#ILad{LkB)Nj%Hv`c*(FX~gC`juLrb`ue}QJ?bE z_q9IlQlI&-^G|u|@6zp;c8P0L{wYuWcCAml)Q|E%<*C0;>(egvSq?k@l&3!XAKE2u zQT2!N)Te#grQcYO7!Usk`&H?Fj_(<hR)0r5=AY%U{V`lV!furZyYG_(&XpE|{i@~` z*9XrET+bT(m-K#BnkJ7_{cQYwx%*p|!K5fpus%fF;d2*%u*=?Zd47n4zpHUXW0+T5 z)L*U-#af*F_N$s(JXE}aU8Y>VfEoI4n)nU=vk#@Mo(kJ>y@4lw#EbZ`KCphMvhJ?) z+Wvb-rrg4N*X_*k*{_D{=#w0NmMF}Pto^D+cxC-?X2-8m+5qZ*mBX&mR{K@y<a-q% ze#DFTv5>?y;M)c^$__f)8JF5Ruu;Ao-3dOQeVHc9Ju8lE_=TV6R}`1^!x@d=6r=xg z;it4!y1nr)@Y^E=W54{GT<0^VbyW3z%smIoH@F9PD$CZ(O60vv^Z|ba-@EAXkmDoo z2Y7$LagpOJ=NTL)nF9Ow`Qk7<r^5FxbBkXM^5q&6{7q`yB2Bzk@yS81@r<cNQ?^gq zVf%F2ORwYTf$=f@olCawUGg6vqxR+BU&cq`Mf`|3aaFvvFTaQR&8%R&bbasge%;Wy zewp)|=V?4d@l2sD7XIF4Zt)9Jo3Y=yt1d&`tpBck`IUAkp<czH{o#8Tw&&jRy^9S} z;#1#v8^3o69!VfcS?VhtsbgP$rqAzPP^WR;s`CXLZZ&v(?}B*T%VWgjI?%nnFF(g0 zjyD{Cf^5nk-ly@tkoSokhj`ycdC;MHev0u2?^%WoI7ObFxZAA%fL<p>dZ-$A;s<tb z{PDFN_FwUV4ts4}2dc-PhsI4;<=}XvxTwD<CywC$jO#y1rSDSDN%^}lSO+?6z|i1y z`$Ab${)-xaU;*_9{_Kqh=MTh-_$3A?{D^B%_O|=N_t)LQ&-<>7U9t`|O>O+J4m5xK z21?y`jXw%MwGNc{^(HKdAMql7$%Aye4z<HY^<Hh=PWr*~gfG1};KxZIU)t`GE*Qr> zilo<pR%o8_nk5PDuZ{aN`F)H^@9+I^W^aG6i~H+C(!&5v%KC>uJN!F{y%9g+Mf`kU z;YVDRM}ju8HRGKOf1d<Csv~|P_aHbnDU!xdvr#0#55LQ#*E<S+==W6L7d8JwpUm;c zg`d*Stan7>y%9g+Mf^CP5?AH)Pf7o|bVmjN@J#{#H(9&JaJfuhGYs@d?YNiCz|3`k zpV9tgz3PynSAsLT{Z)!S&ZzdM@Kfs@nN)AYk9ZM3mX)}Y-&@pOBUEnK{@ml=;f`K) zZ<Qi<y8b`!Pk(owTUx!x4A%8&z2Axw>Zfa6-~YRzzE+|_N7TB$#y5XZGvVRqIyT>P z4%(GB<BDamTTY)*bNrYmf;DHG=6+zymyd0ZjjDbnw2tlSS8jO<^UxWh9~YfRL{8M( zCW)<EMZaBiz&|N=PY_#Ulzv;=moBaQ`N=PAd+9W<4*HLO@37cgXWzB;nS0OKDtXvC z@YqeU;~yFv8+^(W$V1Iduiv)irDMj{&Z~K)L-LSb2Uox4mO9Bp-ABr9ueo}7S?q6D z58twN{kO+Y`e6T#*wr7euHAlH&DQnRk6k#Ta_8w^+|=-^E0Q}}`^C5a{tp$6KfZj^ zjvvR84QmhRysodi{^)LbfWiK7<hzE?C5L*`Js-8j>@|6)OSD<~bU#iJ85G=arWv`& z)=!yon70P&`t*Hh-?~2R_?E%1SauP>fptiC-f>h7o-6mQ>kC}6->+-zTi56Ht?N@w zq0`^=y1tF-{;}|NeY2ZaG&Qfn!oDe;tamTqQ{7M>qSxOf`>S<W8#LW~fa2pXs`4g( zsc2MEm>U+dZzk<vyebuj`QUo8-F|po809@LygrX|)Z47}XpegKx<1NLFQN5lk9zjH zKFU#Vf!3ov>e=i1C`Y|Atw(#*!@52k^b6&vw@2ecdl|j(Izq}(kNDCa^*rzL;7J72 zqa5`pM|<Rl4an%>T>$G1*HyLXd{UnI-L1>baHI=;%2U76s*lWfB0`_?)c3VM?NXol zu+yhJ^>-bp>L2Yg-Q5xCQ=a<mTAy~A{^kgM%2R)x)~8+O+pgF2ALXeZ*ZQ=(NBbj6 zpYqfnqV;K)`ce6(JoR_8|Il`lI(_=V_CMvR&;EyYsZT%H`jn?W<7t=rEC=J^Kdf6| zKgah*iC=~LJEqJ0Cp3<`Ej;<&7SDY!4_E8@vb;C?wO-e!X`-J>*DngE&-~`1C{M6& zm$t*_F3Dn-y?u9GU(|b}{bt>Q#*6r|KCphMdVqC(uLaLJ)BK`M#(RkDwT0{Y-s^sn z6+HKBQ_rnS)OY$Lyu%N`8GS#B`p<QJuIFY-yZ5i_BVNRhNQBzqHmvI#n!yXa#&5Vx zs7}PBN{+9~Jt_|S_ZGRXFB^X0=hhX)haZ458b5Pgp9?>wt@6_w|DylgBL(wyfBc$U zYZ$T?S6;=vD-OFXsXW*9aXjSs$om0~o19m0eC2q{anp1TpR2ExK<rC8Y`~Hr+Vzaf zzgLfkn#ODNI*Tcans)QK=J-fEY@dl~4tv|CNc+Um1M4cdA1P_@OiDeM!oHSLe+qgp zf4<}j{<Dw$WnBgFB7VuK3P0ki{DOT*GwY^hmM8o>v@dDOMkdT-et2FuDB#q4!OXs- z4v}|t5ZfQ|B7VMZ&%||a7t+-iAy4Le`DpyY@8$P)S$Z;k;zzuQAJZVNnSDuDZdY-G zo>Kdg-Wu@lm3iVYIkDg6Osx#x;y@S<@{C7V_I*i*4TwWXjwt*P$MMI7U&aC?d*1>4 zf_+K#c-prwX<-<1kF(G`YF6~Vq?{*l-o(^6pW=Lp&sF$*f%7NIgQDJEAr#LQ4wQ$j z!v_3UFzs~J_4xET-^V^uX<DJj$8yI!$4n&Rn(aQW?XcY^Cb{el>$!Q;w(pBAS<gt? z&3RMQbA|n8-lXv&e#r^CUT9n+;D5)0U3Hm>qyFQb)OBB~=1o|Sx}M^B-M6KM_wft1 zKjKCF{P7CEa67D(dG0P5Z+V<A{B1kI{YcJV>fmn#y@zHD@{8>8!E+(wxq`g+`K9+z zKb+CyZcJXov;T78r?fF|${e9SHWU1=ydr+Yi}=NLe@t9e;bi@=_mG}9Aq2d_&s<L& zg&)@wN5nhus}$^TM&n1PWBhU9r`jLZ6K7D%Tv7YoONk%xB7Q6paaH_Vjf!61c-UcA zZ~bKAU$Lh@G<@qTmEVW&a~_x%;{YCo9=ZC@DEx*E=t^pZ=5FuF1HY9gXXZoykgViW zKlx7Ee_&H+{baG|H$@g_LK?Znfy`TVAa~wzM@{@USH+-*YtU<kUQ^S4)8yFtHZOFR zKp~$DLavt|H`UIbcK#=>tsd4kWXc^!7Ek%;zlO>ZiniE?&pNqcK;wT_ES^|j`O#y3 zT2XfD(-rsLzOi!Tg+nVBPuyNHW9Tm`eps`)LgXrO{rqJ&1~QPnaOvj){+lQKpyI8Q zpRM@Gq0JQ|FT69jhAw15A-nW|){22gycF<|Z#eD2K(=n(`ZUEgbUu96{S|L4xHpi6 zy}ETpm54)nh=cx<fBjbwe|yWI$~&ffyJEEWmx{X%ezgL8!)aqB@AZ`z6(y#ezHIK) zmmk<Z^?iRjwCXSM)2eQJa%R<>t!Gq~&759UcI0VQJAYGK_54>FgLA|=)2m+GQdf24 zr)#S=zSK~)^LzDGV?J72b;z^Rsy_U5yy}owrdAEPs=n&qpJ=GM^VnEb$8poD{<poZ z>W!kRst??DcGc{*i>fv~ys~QCSFWmR`^zV)-nj4Ds&PNNyz0Hf7gk-dYi5=Bv}(?E zhgTi?!}nHw{gA;`KYR43s;~d$$g1znKd$PH1;<p?|3_KXi-(V_diDNOs(!a=Y}MdD zS60papNUmV&Kp(r`o^QGp1-?))k7oyXX-aU^Pf}aR4$*o^nf?9JihPf^FU4y^tJ!K z_Mfwo^a=D@5A?PFzV_d1D|cVPa(bYz{r9#1oRy?cpw9z+9_aHxukrxDTWpKrQDF4* z#^^$~{R~ekW&b?<5hFi8{-&C~v(E>8b)c^f^wojBI?z`K`szSm9q6kAeRZI(4)oQ5 zzB<rX2YPoMP<tWaxkBIB=YzgFuz%J8JPa)Od17eoYI<p+YzzP&g2##7)?7#M{81v( z`zYP5zUwV~AEh}<S1nt)2Ky*sEp$&FH+92ULhpC7xmfKRlh8DIz4|?FU+<rk_?c@T zj!eSvA=jK{LUUhXeQT+RF(2H&XMxUFXA9wdhA2n9GOb5@)VKFhq8#=1^i$=hJ?h!} zC{d1jNv%hF)U)?dq8#-$Xg%7ap1qF}<*3)9^=L1n7v4vSa@4ETdbF3(!!MC#_HCjZ z^?a>Id(>+k7}ld4^>&r$eTcL^^@a^NCTLQ`opRJ`*Lt)^z1D$YJ<3sUoz|m0>iw}K zTwf?hy|~t+y^LPipOmBC5Uodh)bqSIgG-i=a@5<c+ZXLo?~f&6J<3s!?UVMXCp*!K zKQq5?Njd6Kj`qm^u_U91eXQ8-xew6-olnXqHI8=sKsljLdFq#0{R!*c9;-f3pYqh- zQ>5FYw!`{IJIojLDNp^R)~8+8>!|c8PyG#ApLVIweAwwzp873XpLUsV`q9>>JoPKJ zKJEJ2Z&CV`r@pWCX_xvf5&ow<^>=x?{c1bAbbY5E?EF)n`t4eucBvm#e<)A=U2SUo zp<U{;9G%kF^3<<fuk>k`?b{v~Sbr!_{S8{5`JjH3|0z%XvX86uX?LCWpFK`6eacfm zq4jB(`m9HG`6*BR-CCb^sn2rQ`jn@B{2G;i+GT$g<v+?(zg_Fo?vRLnmgT2B^;>RI z>C-OtnGZYvl&5~>wHklsBck7B`jn@B`=^vX?e5n4QTS1w`f;sKyX=>VgPniMQ=juM z+ND1IVCz$!`i!St>a!e-NBOaj9Orrb-aGz_@O+Q;p6zd!#?x-k=00*q%gChmksDBg z`Jw9@FaJfokDR87vFf`}f3)lSZ00(eqCCMqa@r2RcT0|O+1q#bkvl+q2mjf}ezT99 z#*6r|KCpf$zc}`htDUyf_E{9qedOL!OHFLC;CoYhAGtpjkMRB^@~*lJ1Li(*{T%oy z?fqaMIo*DVADtU&hmL*ZQZa>}xsTk@8lR|r<g(#seD5v4e^OEWr(&GZ_?i32x$slk zEKTpD=s$yf<aB@hniLUzcdjG2iOeOm55(JL$#)+)j)xo{6F=AcyXog6EqY$f`Pm-L z+w*0PkJaKZ?1!R$AGRNUrq9`@_;=}aG>xCE_f0s-HJ;^mFvmyQVf#$D?DhRVY;K3X z!xF@gco9ElgSaZ*_4}}w>_D9B_hI>au=t%!9OVC?SnIEP25<j9?5n}A9lPr?44C!b zwI2h1E4eoxz%TfHSlymqm%`e8lB@iVsf0^xp9%B#^6$ekef#%e2U))lOMYMfeOQh+ z9DkDkt;Pk8OS~`V{W0$o?fZRHkT;|<VIRjo%GqD`N&aKWFM>Mgn$yO$zetlOs&U6Z zp?l*G?XdrH+bgX{e$)GydLtUcyyBw%uGaI$;P+v-4HsSP$E9idJu-hE7W<g4DIOY} z(ft?Fg8$$<oc5vilfmD7TD7gc@ADjgh!^o=&WUTl*IuphI!e(t^5-@D4nEYK+Rv$M zQTQ2$J6?@HfVfCzQ9=bj)MT8w@nijmee+P-W=QY427cvIB(`Uaw)xal=_Z1spQf;b z=SJ*@*f06IUt)j7=S7?!b3V-HN7`I^UQjBSS4kpjUW~gyH<pPzRsTmCKTgk!OS{)E z(GKf%!f6k`(}{z>Q+<T4=j2sv)L+i4f_|y(8nGq)5~;Ia!c!mh<j2)VBOT7GjuYR( zfA+DzJU1d<#E*U;u8N=D;I(~e2jk=i<^{j?0snsKNapHsBe*FOA>w7viy5D>gDcf9 z-5~dN*dJSVg_Y+HbBl|MaJuU<w1^+-|FKT|pxt{9&WqWed+WS7dE+-i`*HOYqKiEA z&{FBtai|Q3QmtpsW&r#<NEoKidGQw{4Cf0vUxAz~h9Qr6G2(GxPGjyT20n3}>W9<u z*M|AT`md+U8|Yte#sBpSq4*#n{l}g|xp@DH%>HJ9eJlN3_7VlA-}0Ssc@hI24CUW1 z3iF9c?cw;*VLnkB=KaB8J~1H7`$b_svGyxr`<I6K#G)|o&kOU3_lJ4EF3cw$3-kU1 zVLq`j%=@>6`NWN3-d`W)6O+QcKRV1OO2fQAILs#ogn7Rx%qJfEa@ao)g!#nAFz??M z<`XxDd4GMFPfQB){^&5DC=K)e;4q&U5a#`&FrRqrOIH5Fd}3pm_iqdHi5tVbzdp<- zCWU!_beK<+hIxN*m`@A{^L|m7PdxTTEB|3Wu`$g1w}tt{jbYwjALbL2!n{8^%qL32 zygxY1CkBLhzbMQn*4`J+|D|C*u_(;@^TK@M{bAm(3-gJ;TK(5+VLtIvnD>7g<`d6^ zdH<;}A1_tEpN&;e=pV`B{>S7`vUv2HL4VrC{#CZD4B4l>Li=0)$?$mLKWg#qVLox6 z#p~a_OsB8cZ>IU%E&0!edH+_6zbVYe@B3P~eryW!iF?C*{GKrH-yP<YpAYkiJHveZ zjxg_U2=mF?!o2^$nhxxz&hq-!_~={Xv63|8E&L0`&$egtc776H3;Q>@(JD`l{Mh#F z^z!9T2n4m`<QhEMgL#;|9pBSD(tRh>%awoL|MPyI_y6%-3O_y<;Pc0Idc6qWk0q^j zXm84W4}aeR@5K(1o2@bZPYEWpu6thp+N+;My(Uc_t?&Pj>fZf7?ePB5AK|dq_KOBp z5A^+h+wU4fyka8%j@A!T)N{#vekWi||DocIp<>bH3nWDUMg2~I(l%>QWcJ>b5vY$? z_d~phUwoLtkGQJBwbd!w1NhYfdwG6C>U@5aKYkdOPjMii@Eah{6nf`D{D>FvOX&7Y zT=#bAquL+(E}UZ}gRb|Qs^#_m-&Z1D#E*Cp*MJXx6Gg7%{lHysUDxoP8Q*VQIr+)D zGghqC{V28El>O(Pex2hF{@L-<JnyQ&j=UFufV>wN)Bo@NaOUnmqwrJOozv?rA!vUa zq;uhT`cElXc(&s%DW8eDV-LYoC^_6uO5Hkrp}o}uvwE;#oPTn@$@wS0Q{%jp>z%o7 zoAXevhc>f>_l+~<#QYOA_Kzk12%3Pa&-cHm<`tyLBlSFEkYm1RCK7SY@sD=cfBJ)6 z_RbCZxAgm`^n2C(-aqlZYB2v?^l7mr^B2-i^Or+{_o_q18`<WcC>HES%|Dg)elY*k zcoDz&`*gj~^+Unm)SxKmpL{Rg1^fc+@%|7tgm%JDy%*0HzkyQsUGo=(AAYAQbC}ne z(0At*+aK{Feu?)g{KD-Jziag14wkei_?@Gd1K#|dqwi=3-J=Eh8+`noBgWH?rop;% zW8JcRS6k_Qw+LtS{Dn5qe;pFsH8Vs})$)4(?;H^?;+NF@F>zJinAqSgx@Tv`L&qz= z?dBc#N#LV8;wR!u9GevJh#z^z>u8byzk>y<B6%l=&&&@Li$5*7PtIuk(06kDiN-H{ z|Ii!TAMql7bSiNrzqhDsF2KAHKX?E6(z^;Se~)@^z_R6{=s!0~9j4xIMF9mK{`AA4 z{TE>8=kK3d3u+$iUfWg~yW~{I<v+V`3$7a9{6Woxho9@%e9t+7of%gwi`{bijGE)e zJkf#pO>;l6<;%x5$3|7ZQUl)GHem9l-}&FISG{t}Qy2?ph<;pj9uYZ-ZJQ*vZWaA@ z(E<OY*gZjPjZyk-U$}T--S+c$Zu`+K!|I^_`1cNrJ^YQ&ZGGn6bGAwzwhlaYQ|yg1 z2E_)S@&xiwbJOd$ZJFOOvUXn0D;<)Dj+ckjPyTB2!`te%+)^ibs2fvud(GToWwBE} zHasZLcjpc4xW6`0U4Pl#H6ML>`eX4M$L?Hz$sG-UJN$ole62XXedqkKjj3sO>^Sk4 ze{T5ClDLdB-0K8|>w-U&ns@9ETLXWfJQWu&-@5AlOnDyu-ODw1Ps)@h`9MkSuDB|X zR`-s1V0oR`5TEQH$F+|?7}PhjwE2c9%uLNfuiIkh*HpwRpM0s~jb}dFQS$n$9al?T zqLqpFd~538f7KAX?gv{s?mqSBL7TDfu(S13v;&HEi~Akk$NXNxicEos>x>NQr+Jjt zJ@@PxHN|@DL=473_d#7!w^X5_nY=->$m{3%{;h!#)t<~}M278>l9B_C92D#XlgUr9 ze&Q-+s=o7%qiV3C>#%V$n<_Rm`!4rO50p18URu7SeA43Pi4&X3n<^(yp0Koh;*_OL zP0drvmyBQ9+*Hwg(WFUJ7LHpusl0rhoMSIpd2z3DRZQAN`plFpXg^lJ;AtLlZP2Oa z$uTb6ZZp=pdsQ17<URN7v(=vWQmxoB@}=^k(ytBjrPBKU?7a(s9YvKs-g$t{`=QHA zcA1E-vx*Q1(X7ba$%AlNd|-lri%N!M!ptUQvNMT*x^nT^!cXyugk2Dc>yG030MWo= zCL|FqLKIykxU4Sg;xZ~Ce_d8!mHg{eov*vPy8GU~eW$}P_jGcns=H5}Q~iC_Ri~?} ztLeB$X_QX^8IO+f&zv{1>3^wSrTNk5k3#<xq|tAM_chQ@g?=f#zX5p)$-jJDg{P?S zVD(_}*o?DuEtFQ*`y0$SY#1J3o@1-~rS&J-R?_2mKK5A;{PT2uhb=T(CZK;qjS-mf zwTbE9I7VSd__<rB^iP2=@CO{gtKQd`Q|u4Q|5VScm!f~_fJOFu8z*J7fmBXuOFwV! zCrWC+xAB_kkIi_EI+#|LwKDYw<^ScW{88$uyV3ne>nv42VAds}+2CpQC5{d3c=B${ z`yo^){Y(|w$01ASE>=6JD`>F}oTIc^n_faso!mb|0C`2&)6>(HA=(j#*Iu%2U}#PD zrM^jlPQP%iL7toTvYdQC^U@_tm#<%K)*3tk2PY`}NE>?Umz%OXeuW92<TZY-=HvDI zO`BEyQ8WiE%UnBa4I&>{BW-}~CvC;oj)NT1ofDYrfIg&m*BXQz(v5z|q=P=BbJrS# z9MWCP>7Wnk+_eTFhjjD!`k)W#+_eTFhjg2mC+LgP#n;Az9MXYb=!?>wMOBcli@H<@ zIi#a=v_YTQ^Sq(`qI6UTqTFDuqfH+(ctRfeb@4?V3VEcje>7emfs>nmq=!7x2Olx% zp%?bu>p*(QBmKo!n)J{MyIJWWkMvLST367E`~zR$0{f6h`gy$8C-efhtn`padY{un zFY=w09`Z>4B&Ua7lyCRG3iHqMNWY2iL+Azmz|p;a$RqvLe19Mxu%DG4@<<Q;&<p!% z`Pc7Eay^G<0-yJx2kBiL!3*T@&KS)Zdy~4e%vxIuW>VXo=12KI;kC9n4EEu%Ex)~I z0_cHHS>G#7-{f6ui&iov{M@Zm-kAhn;Lqps0A39)<7$lgSKA_t)V}xr?a_YY*pYnt zr71Y8Q}kTjTT|VHs;_W{@+;LllYi=U&!k^^StfN<{^zM5mH)JNUQOx_SZj;<0)K=J zZQxb!=(V<vi}=#}hCh3)tw;DNDr>E+M*LZ0)_Se2?wPNe-iSYYt*tcvOlqC`Dfx%m zvnSP+p<e!#ic{U)Y)ij|nx)#E=l567g!?D1CGT2WXb;go;&}ki2WS`3K4<wmXdlm3 zfYBHS_1)9@LYeL3RorLBVRcW_js-K*+Oy_(62CMj9eQwors|WmwweRFn<c;>_yT{( z26#35X=`nrq1(%}wYE;@8y)j!vBtpnpgb0uJ~MZ%t@~7IzE8=e`FfPxF8^tB5=`ot zp((XP{OPr}_<o+MYYGHdQ(&aO%k=zA42{b?wTyrlPA1D-Qvmj{rT~>``hC<|Q-H=_ zu|L_@+CqDS_D5x1Z)lhBT<1O~;<*j-6x#2!(HQ*;_tEdPO-s9H{cBA-gRnlG_b+K} zE)MLY{(>IVU;ea|_N?}2i%dEmv-#@rr^NQ5G$W+zq%HrP;ur37ghHd)oMO_OHK*95 z?tnSP%oq5pzT1=s@T!5YT{Ut1d3P#Z_4!^Hn)Zk6(3&>Nol<kc^YfQAr`Yh<0dtC( zFYp(<%kUS!57nIFuC3cOm--Lwe@5>gr}pRZ3B2=^HK!QoBRx8%pReDes`6+~>OAkM zne@x{A1EcwRi@|bv^l9JHO(oGHg;>G1JB_Y>QC?m{_5{A{NX+{m#FWNvFLK6{f+8i zvpL04y40BF?{d>W!gGqL-ZOPyT3bR|sP07jlg6J(-2roonJ@6?b9)M24dU|_s*#5~ zBJ{h|{uaIe`&|*jD!MC@iDIAO=%LXeJEr-2kGfI#{!{%U*L#QQU-tb+_dNZw?mxqy zuV&Zn7uuSN_aFEIf4ErOhuD9%!t@eha)bLX?fFZMzo{DexwHBI)0!Vj^{1W_&gp)p zE|tn>+MMwJy?jBhIu+Zp=7c|R^II$9@142%my3U|=X|SMvgd!_-{13_mz*_53jU{Z z_RYUqd{O0B?|q*>{|~eGI^l``dj6c%UwUK<&F7-@lt#sGR^qislrBn7X=tDHKCW~< zYSPy}bk}*k7u|cumQOwK8+E=`x$B7ymAfyvd-HMC-%}nozwoZ(D=%DqY{h@+SrwIs z$_?-M)Xh)+;-uaU?|a{7m50rrxxD9u{qB5d&bRk^q*vvkch+Z*s%%-ZsprnxAvf=N z_!YPO<osj5_0S%lKKZblZ|M2s=|360`A5fYd&A(T7ykM3f7$v1H7ERuzdm;1^j%kN zyXrq~TX00mobYz>pzFE$rVnlY_|oWl_O3nF^Yhu!^(?!@>%IB%=z4DY(uO(TeB*!W z>rt3>#FlsdcbXiPoAyAeRX+KOMU`d2A!9E)d)DSRE?lyi$`W*T-8J*o$_AC^6V<Oq z$J?G0&d;NdkS<c#WQ%0nYn_a9!uR#f<usiWeqf$C;RhZ+UC#+$)W5QC{pxj1kea%u zJN^34?;9Che%|rkMQe`jzj)Z|$T{JruG7yyR-LEo1Z!X41A70O4I3)-!+dZGp(CnO zChneDpuDbUV@`NDuaDQ5D=@Ebpl=0zL3sA;ITHtm)^ueX`p)5bVpYs*<M}z`pEUED zf*<m{zV9`j*GF8pGp`T%z<jc9XI@xziSc=TkVCq0p3en+NaxP$gB;TNJdX_ekj|ag z2RWqce!sy9`jF0@*9SSIJBQOjAJVz=`XGmN0jGn$C|!JBALNj3fajS(Uz9GIpVy@h zLJsM!#{4w4i*)w9K1v5Uq^ol}=tDZsJ3~!>j=p&dIi%afcAyXGKDEzwJ-dOPOS;rS z$RXW0r-MGE+jn}ryg)8Y$MesiFG?53bDZUn4)+W6Md{+#2RWpJ9Q0xTh5MWlULVbq z9B}5zJ-~CvA>WO1;M^yK52c4Z=DA(W>7f_pz%74B4|$}Y$Mb!m7xn|ETp&H<k>3A= zxlf=M_OsGM9_hQeK7wA9tE~J(9_a&454}k5-tWji<dOayu2-NJ>9g_=d8FUO>7f_p z&8??kAM!|l7|%0>Uf>TsC>KZ%d8F^gJXa3KnK!rILVCy}eVzG-UhoG!u6@Xd>6w4% z#r>Ui{dJZ{`T^dDUZl^;Kje|V`f;A8%X*M+_ddk+Lmue^zR#c+xM!t@Jkk$v`vSdT z{<&Up@q;|lk23$z3;a>PxalE}^y6Iqp%>*RD?Q|q9{Qmd*PWJrlM;sCfN|LRzsCIs z*blfI;(l`PN6dque$-s^WdEJ#$#Ph|h{xMTTI>J9^-_7z^MF_n`Z0s`Y5HWIEO47F zA@~Dd;IGc*0p-KwSLVr17T%B#@CUxYAI^hUy-)LEYu9bVxtVHzCeL%W=gCe}V>z_R zJXwQ7nSY7DCzS!8>*J|2PnK4fQ2mA)yaPiB^Ujk+dx-YY=k^ipCfY@`^YC-gPQoDC z$K3N|Kf&{45e}PnthzR>J%g3(5cj9gdT@WH>XUi0*+4!^XTTr$0)NO3cs2VnPZqdL zmXP?<^JMvco~rX?tIzU0S=e{y$)4fNlg0jIpC^m<2JKJv2c}&>yM*U*_c;~My>|KE zNA+CM^Vu6zxTop_-gi2!=P)gGZhLj{nct<g4G;!vOuG|Y&|dokJ*dCxt5fvVwySwT zv|+8*8H?ikW-se6T_<hk+mH7vU22|XjYB;~Y{pKbd6xUCZ$Hv6d!7*KBfYOwKf=%5 zOlmV*$UQd|_R;=;FYxED;&Q>|!(8iE=bLaM`1=_1$6=fN9jUmRo5|nQpC=2xz+ZLH z@CRO>?XsFR&x`Io)L$=5;jdHXS%NR{hx!=28vbbQ<gadxxTO8*dY-ercJlL5aHKR? zJ2~S#jVJe7@1d&k#Ce`Soqmn$Ptr~8Pd0xYuy!)HpWu%$p$)v6y&AWF6z)0ZdD|4` zdyILt@9MF9Ba{7iU*`2i8T@9aY|J0-zx4XEh_yyJnOx_n{agDNkw5gb%AV;{Xq?Zi zv3B)JfVUzu=^Q$3ZIA2rRL$Seb1f+y#k12}NhK->2m*qDARq_`0)l`bAP5Kof`A|( z2nYg#fFK|U2m(_c0qU!i{=z9wvs|DcAP5Kof`A|(2nYg#fFK|U2m*qDARq_`0)l`b zFkuL^)}I((uP&TBd2p}FPpv}x^xIqg(zY3Vkmh01x&?R-2Jgkx@8kC+`Tb11|KhHH zfb|SuV?Q-V7VC%7dmU;aI&c5I%y&-H=As85Gj<Tx`}zHcWhw8mz(|8Ie6ND_U|z7l zB2C}9i;OCMui~KtPl@d}utTTz;}2oz_hKHpTIo{n#UM<5uVVkbj!<YcdM^g}WxW?; zQcwN&V!#*ptDevARWPrHnlGyP++W-l(R8BPf5O_2&ZNa?;Yr$l5#BszpZ}V9`7`J~ zdLFM|{dMn`)99ByuiIX~I&EHe+Itl-tIzQr+<)K;`~`eJgI9Bz^d7|?7GG+==5MES z_InkxGUnamy^4(UhQHYQ<MX^1srM>qW_?;+M0V-^qaVFjk<DKRyjQ_|fj`2AHt_0s zUGqKf-_`wgv*Pcnh1b6O;_YW#`t?QMxc<^@=brJIg?p&FaewurDiZvlzT|2%tUt|p ztiAa3V$XYeF|DV#_s-|{n)XZGgzEbZr13@5>DQP)v_EP5nbf3iYHoD@EmQRq+EZFj zSN(6gMJqWp6@69&{P(dxa_bE{=sntfW4WkRg732*f$(G_7jU>#twPy9{Q994{bvsM z_s0?!+IgjuO4obp81k`8#nW&{e)jkiqhL?3Pu)X*nE$%Ib^XJGeXAX{xp&)5Px&W5 z5Pl#0z$&kQ3I8yBFWOyC%~{WjGEVO|y;1$>J9c}h-@elyS9@OicZA??a#(*G`+;vx z^V>*!;|=W)^q?N|-<qcH5XAv)6YzfRL%(4^ki%3zF#r3}S>F-rl=q{-7x=55%YGo2 z55t>oJH||${zm&xszvkD?!!p7Y0UT$s{BTNAbD}dlgsiWpq0vh+IJL8>bM_)G*cnO z{Rh6lU%>Y>cs18b>k(YOHM(xv|9^UahQbf;U!D>P#9~y>&}PnmSl!Eu7I+>)&-Mf9 zJH6`t+I^=l*1v2&g7lHz|5RQ_8h@mLT#{+zmQ2A7{DCj<hf4*oys!AWcN@;Bua>I) z7jLJ1o4+fWr>j{Iejxb6`A84Nj9*AeX?+P5s_)S3JN={6>DQb;y8j+Zp~$3;TbfFH z#NYMmf_!dIX)Urm^`NTecr()eAz#-17LHDIsH$hRMOrD}-Rdg`u=|8MMLAj8_xAp- z`6FEmR`;(_j$GH`!PWgys`g_GU;UOhjr0$Xyk*@$|LXN`Sv0hK{e}H&){S`D+;QHq z^JX9C4Xs%@c)@Yr2z}g4HbFoT5CkFwhK5&-tnFLgKXUB(R7piABqj(50>uze&cPUY z2-u*dS4Di!SKV7P^tU_@<S!$U|DeaSxZeW(7)Xcy4UA)r^E%vEZ`57a8{;wP$DsbS z{rA%S7^!{8{#9Sp{u09a+5EhEMq0lEa+Mvz4~HK3;r>}^`p#TrG)=&G*0PT)U1~fF zVWJ;nU-doR{Nq_!{TLlHp2d8Dzv`J>F1UOc-j>Jvq1qXbT=rS!kHZ9i^gZPK{AGO) z+3+{@*Lee9;4fHW_>13%G@kWk>p7VAkK0b%+T&UOqMk`<yUqmOK^$T{3+MST0=plB z$0O%?x2y52+m$~1843v~#CR6fU)kT&jrT+4c}}!#Oy)T1Pw)l)>Rca#S91+&{CL@Q znlH0|wArtHWZOn{;Ol&$Kbm18H}F3A!#>XQX#|?Ty%o4oKjPQD`)6!azij?6p4^zf z4)`82^9B9@DtN{IvlTYF|A<54FRdSO|Gn;4XP!Ho|9G0;k)40K|Md5CIo;2cDAg}% z-_z}X<iowLrmXMj{_fXa<))oCZocR{r_+7q-TN1Bt$g9Ht39_|^XtvDf7P_PbGsj2 zRoUwocj`6X*53K?%_p35!`SBjkKI9iij@9tmFAgUmAOj1_En{8RHc8ZN<-=2uJqod zbonNI?eIUIKmR=cnJwOzX3VGbS06N|GXFiB$KG?#>0>GnW54{=hRT6|_O{Be|NhsM zhn_q7-#PbZcf6-}|6ks@S><8#H~;OP%{M%K^Og^u{IU5e5A&b=+^s!_{pC@Weg5x- zukx-t?ZnSMbIrGQ-E!i|XKX){@>_fOjmK~A8NPGj>6><J`{Mtdy7k|VI)2elUv=lU z&wg;n!ms|})CH6W^P}9V9`E0Lzh}<Zc5L2s-5YiO7hg13x$>_T_Z)r9ts0LT&V2Lj zpP$uVdD+PiYdlOUH8%f)A&tj3?mnpUstZ<+4S(T{V@k)^ezR_<eC_A|)pPCKTS-UH zhabJ__WF%8dLO7hyjkhcI!VV-H?E$qbSO+ZV@vx^Zr)=yU&YX>RrdScyvmGsJhAy@ zdw+QI9v}SS=661PWr+PZfBd3XpY+W=dtUPw-`_m=+v~>220gFXTUI?~%TS!|TN<~; zbIerzp01hq(Ej&yXR0>*pySo3o~q69J=y+a|7Pt4F0dW2zjA1}e`KBhmTX5}|Lhfg z%V(cIdv0I<i6^d@y`m$(r>o{~(YJB+&lLHvz0&QIbsO-$IZyMx@IxEtRAE-q;?e3% zH7})dpts}Rd)0S)AL><_tb8G_6!xkgg|wMarBQ7t#q~a&<DWUNMKk{3d%FHd&3vVo zsf%mn`j##^v;X3C>xcWh&gdIlvo6C*vBMuNmQ1Ir@^|{?@plHV=J1^N@b`4TYp%C? zuL&EOqBVY7!Gv^Cd)1{v<OAOweSq_&PB~lr`>2pZx_S6+p_AVIo-X8&?rKg4eUZ`l zcU2*WbWd_R=tDa9d%BQAx^wvZjL?U4^gUggV**?thjind4*H^W^Y^gRK@RCI=I=>D zUzF~wnRYtJA>9L<4*HPJ{hlu5kPhVu`jBpLk2rsjLpsPoANB|Lh<Kpy#iE?zdyh|Y zxrID<ba5hFDLv$o{v7_^B=mw87cZoTJkoFC^w0~tE^bH<d89w=Q|5kyUf9h_4|${? z<@C^t{JZ$WKID;p-c`mv^a8)E^pHpT!?>J4FY=w09`Z;(S~K>c7xlqBzQ4e0n17Z> zdjB%cKj#DZ14lPK<dJ@W(<2|S{{ZWA(?cHV>zp2XVLvN9<dObKP7l4f?s-nR#`QxU z=}})pFRnW)J>-!d*9X1GcUpQHrwO=Sz&K5PN4$N&^}FQ&<qG!jJvf@TpX+<65Ayd? z5x&9nYXqma*1rM!geQG3)n`5Er>ed#O`m)(6}U~75d48J@Q3mMUQK?-=X<qZZHw}* z_W668(Xs5<k$mc<$_Gu^$d~M`nfF#`zM`7%_NQL=O!{T_6I1!0r+!raPfF2iQtze4 zN+<hF{}e=W90Gsf3;ZD|c-8y#z0@s(+i}jLedh02_5A)S^`i~^$oEnW9%cR|{%DS( z&-L-t`CjV&9{qElXL5fpmD@wKk3R3C-9)>HcKT}eb1ruL4YZGWzn2<(#I(Z*>!+D^ z%&(@kXU$6n?oa5!{h6vyzL(k@(A_Kn{=gUbLpH#x*_ZF70+-1W5`Xl)RNT)~^?RxQ zv;4hO*mu8|dZ6>YRP0as@1;8J5Bl%$oQCIH_c;^KeRlaDP~%DDpVGJzeJ^!zk5{O^ zrgWdSey90fD#Gew)9zF^x7Yqa59+UAQHs9W&lj3}^E|q)e^&k>ZFoP>>}CC>>!eMu z3$f)$m9{?LLm2fNd(rn&2lqHaq0wkv2+~J-v*yv6)YJnvH8-?B;0yfK7jU`Y@}aN3 z>(g<*+TyR5`Qxxn{<7xL8UCjJJUZ|N{`~odKk#Zw?_1RUw{~k(lGT3i1>0%=U)As5 z`NTh{G1s*1!N%wH^L6}toB!@zJA;1dbrGqfdk^(j_B^_&KMxChfj`v8;MG7+^BzC2 zjcHJU+VA>|=Fgr7`Q*$<!j54cWXAav{^og4&7@y8f25!EQu~v}pGi&gAfs(6)upIE z!58?$)q+>EZ+$Pdt80tb_3B=4nYYDTwx}2Kjlw~0|DMlbBU$%cqxmVg|I+5ssqvr! z)?Dk8cc1v9@1?>YlJBKXUall(f`A|(2nYg#fFK|U2m*qDARq_`0)l`bAP5Kof<UJs zKz->eI_;w6dIbSNKoAfF1OY)n5D)|e0YN|z5CjAPK|l}?1Ox#=pfCdY`V+5K^T=yk zuyzj_qrS*+ZtuapYOlceQh6O4yqBqz=nd~@;{6w_dw};dv7Q0s|3=MP#rNvyy%<`r z?Q8127&@Oe7uLU$*O%rnxZTX3uiu>V9t(^#2r(}hdN41zep`yZ+A|A{D!do-jYYBj z26pJwS9yl6elG^=N+V3XS3&Dbe@(p;L%(z^NGI^idN0PLp8D^_fG_ap-^%Y*aQPst zysn$#e08<K-<H2py6C+o4io&*`qKIN%X%-y@Hh3}iveHYulh~CuVeRNYwuNDr%6}q z5^`9^dlhv5eOCQC{=Ew33;YGQ82-Skp+K)0H^y|RAll!k_P)+1uzvInybu0(H!INZ z#atfy-YwO8rtV8?OGpvcm(JqPq@MckHGwbihxQcrp#goKYX3If5fRX(_P6N$->VN) z;5dD&0&zS14DTFjAB^IfzxT`_-$Z|JTCMwXy?2=YWw(DfsC$oojrsGH#{EJ|q3;tO zdG1Ewzko0BhbscF*nhUd^b!&IFT`Kkdre<^j=k69Kbqn<HUORYyIz%fr2CnYrSh4! zKKQLG@1lDowvBqVF;$PMpV{8NbK~t4E4m)`T|Yim-OshkVzr)jRjr|YlUg@hsjJOZ zYioa0t*1Sz*3hQ?+tfPSFIH=7A7j?juHEvvqv!AZ$Vaz);}tjcQhHiXyZWlGv3ouf zt*8Bgk!yMmc}29I_TiV@R5`0BzMl4f2B*$fd6>WSrJwFO_weq@@^>G3`)U6%@8&!A ze&6O3KlRMXr~JwDE2sU(rduBQ>aK0y`Dx$6i|1Ui?F+k3-Fm@kyB41N-o9-|{omya zzv7woj42-~uX-zrhpZ0{1oMS?*8)$Iv-!$r&6TQE-qQ1`%Dmei+WhN#KDl|uqrcot zWeHNhzWlORBaX1`^}+c$bZV{-?)zr7w5IEWA9|oiU#gGpx9Mti2ij;Y<7+k?-ZMje zrpjF(TnlvIAFPkwftRi?S=I;l!nMI^jqs=(==;ao*JpTNKPyqX-LgJ7S$<a62mi2H zf9++;86tlu@3wTwo6hPwWyRpS!8H^9>4A^s%|wdaCaeQ~g;`&B^aCb*@{gnXdwIb< z=6b7l$Jc*#RS_0@x(9RYlb_k8<d6@n6MfiwO+Jz;;_FL84(TrDbkK+N?)u=6L%Ihz z9rPic=SAyMcd3JrLpuL`CZEuUbng1#kVCo${+~$)eMsl74-Pq`yZVDB9rQ)%;_HJ$ z4(Tq2Jr1LE&ided9_bF_edt3vcYSckAzi@b33ie0T4#N5$RQo%pbz`kI_ra@oML_B z!#)%*FW}L|iOL(T4-R>x_b)f;p%=V7;NXSykVpClcA5JHdSTba4e23|^rM^}dXX;6 zKID=9Vonde$iIs}>_Z;utDGKsfnQd7$Rqt>oF00S|E%<oNBZ$+41Umy`}bm}9zgyf zkMx^3J@f+qEc_sk^Z}=bUf4e@gMY{){W+W-dSO2+J>-$To6|!tt{e9U?gLyu<dGir zHS{7~*7ZXk>7gHbkv=W|dVO$i7ckCN|4zJp!1cT30Obnyu>L9av*cPI{NH$eaD+GU zc*>Vs>)(KV!c(sg&U(;KRsCw3K3N|exJ{N2{DCj<7jSv-nOBovwH|ow$J?U3t9@A? zJc8p{h=D)w1^$o~@T&J|J@DTBw&R?=KKTEtgS+^|AI&4aHx<_h@4oAwwO?Mn(}W=w z&r*c=dqCMnzSO7I^m9>G{$6*=(&~9{dhK~{zhHQ1{o0Z9+Q~M?a}c(pD{op{FRl;Q zi}b(&`?%hbfxfl<=dJ3$q>W47o!5!{)Aj20-?_b=I_tmF*y+r~GyK?vGt|gl_C|P+ z{{w#q{*TZ851yCd_rU*pfc@Bu9e)!3Pww^KuP}aAz+wGM#!vBYO!HT=uLEc3ddUBQ z9@M|7`eglgz&2?@@CUxYA2JAD&AzPv4qPTnNc`#b-}!!?s_VbkFaL`6TfC9}uBFS@ zuU@-uVi;KF9iSAci56y4J2O4+PflHe1B5S)6~Vr{{`-BLFOvJHlEeO_U;mxk8?-;@ zpGCWb{tLGs!F`@5oc@95sbKy0Ya6WpUOn|q-`%d-i!l6xX?LnOwAcPrSr6*3;Ga_T zZ8<MKPxAVk<NI_m4K}(?+Vniv+Ur$XHBS<u9wRj4gwgu%*Qz<L^vj;-L;6T>);w2} z+RWA>*{Qan{Q+O#ul|o*E|^zy-M?L6LY}AG4u4+N@E3+=9E$W8;V)~RtKo0z&vOM| z;Lrb@;SanT-e~>zFK#t)`m6S9@7x~kH;!Tb_g|}dMJXGNC-%DQzdxqde}7ELXU)^1 zdk^(j+WO(0GEWkGfj`v8;ML%*<|)_y)$0F}_1{y<;ch*I`V)MCKV$;Dntf~i_v@d( z#k+oKuearyF>l!^y^wDdUd!!Ykrmmq?mx1J`!8*tq#EyItBrE@+&xG9(faT3huU5L zosd|O3CEn7@l%hh{%g;>X2S;c-E)(U;@Rm*N;W}25D)|e0YN|z5CjAPK|l}?1Ox#= zKoAfF1OY)n5a<*H)KG4N{>Dy0L9SB}5CjAPK|l}?1Ox#=KoAfF1OY)n5D)|e0YN|z z5Crlf(AxY%^Uek7rfK2SAE~#4dsR?i{dZoc2=B!hWojKueqRRfzhHd}yq}5nDj<KI znzib#|NeK4)_)Ip{dW$7>v{hChLrbMV5C8adBM<wdBOGTQuNi{x5%i%dlg@a?>DeR zr{2Xgbn~zO{&(t~82V+;%Ljg0@5PwZQ~$jf@CE+-Yq?x-`OwtVHZIhmHv#<B7Ao%P zy(SJ*-)qXxU)FmuhQF!*UJUpGf7QP?{DD`)n|hC;cm8%0r@xKgtJoduztjEqBlXK# ze|nzx)J%GBlImP+Vcm-Z&*2dDC-?$?0oTXi)m-9<3%zC6S^OPs_G=&6wowUuopH!o z|NRE%JntgV?=|hMz~%MB)jD}!_wJvuQT?*(Pg(!ntV;mCz#l*buh@UK!mRgV(Eic= zm-b%F-#y3Pi}A-({Eh~o)BUH{59f40Q?gXQq^%$RAJr{%kHof#UOyb`Ww*M1c;&oB z^XFXr&s)~r_oH6&M```=kxP$=tsnl@$3GccKm6@Sd?~Sh_}a^c=Bqr+f2UeM{1b<E zSH3xT<n6V)4><9J$AZn<y_r2Hyzj8eS>GJH<z0Vs`1YsY|G|a7+54Zi9qCoK{`8fH zFIsla2e;k!gU>H~(X?{b4{zssVx&#sowRkq^B$ve(;hU*^~0$wLFXIJ`oP4mAI{G) zvVM5e^}{`^9}Yew>`Vk?{cu@7Jgej{RZsX`s>7t(W&EiBRD$FW<=vJpT)Mn}O~1FU z?}C1>Z*WcCbPeUEo3kHRL2&2Xdud&lb~pcn@pWKZ)7Pw>jLsvg6e4ch@~4^g5&ehb ze(R2V@73$n|HWGlIGKKP=FI8Aw;(7yXnL3T*9R~#w!)0~>xUF6ZEQ=|^{rXaH@u<^ z6)I_j3-pXEIduWzlPTPyGE@5(TBC)wc)n?ULuzdsZQz^Uv$r<_(11u1T5koibiDRF z&zm<>Eij_u^gB#{eebVT%=6x;ek6Ms?dT2pLWtuC={SB{v>mfQ%~NYlkt)3n9sFMH zmmRn6!nJR~K?wx`L7<}$I7;=y?%PpUEEg*XBoUx*3gO3Xv?WyQQQhHc+mpW|gZ9;o z0h9cK*PinFMW-w|@03%{I^`5Ar5!c?n|-8lT>Q6me2zOV{kR+z1O$N&KtO#c@xbU& zMy<c7M!Kd=H&t}X<yXIL`VU68$NLe|zmbjSs$@7r+YHyatNd=}+%fw75C5*_?~<it zp#u*^ZDjO33QXg0Ecz1d*D5PNf1~P&s#VPMw>cJ<%-+*wz&hRPzLhjH+WnQqP5PmX zKQJS^C~Do?o;dQ3@Il<NrjB*duFqk33Lgg53rL4Yb4RovvApXQT?_iu3fBvV)~p-u z8);#U>&1hsFC1Ln?yI=9O7#Qr{;qcWf!a;)0_b0E`UepPLF4|ySMPX!1wZP$BYnz; zRO=nqDzvWmG({wB>N~Eg?<I|Kb6)-m0v&`v_?$)0TTQN;&!a6#N|$k0o$nuH=ANmB zs7sl|y{&p@dua_*+Nb-wSN&AiEw6D}qjgT{+Ip0Xstda2n{@RBR1Ng1AFh|uqMlH7 zg-Un5I$d8t^#-L=(pDdCP2;7KP^k3Yr(|^-q4Q>4ze-bIp!cUM0o9-EZm%EeT0MBd zz`CyGeai>>y9U>Ets58|=^D|4H?DB%esAyIJCA;i$*1ShJeoksVSGl{c`50Ne0w!T zP0NQUe>GM2Vw~m2N(13@^{Ml9JKoLVIQxe%uxYV5U*+(DQ_TJVhma#2bU*sEnQFG; zG>`k#r_J)bS!vEF%29BIX$R{cinoW6-o~+D*+%pITmC+Ti?1KV^(tSeM%S&&MvCgg zQ~@RKsL)LJ&Y%GhDnYw#d!9m1bwhe5=<lJ2qb!y9e$CnU+TM>YP~W>DKDc;{hx)hP zV7?C$Ca6`+eV`?0c)hh=eaZoNni|JBTAjG}+m}#1rt<4~&%f%Ex}Ly2q|-TnRQXZc zxr@9l`z~@$rS9IVeU8*qe30g5VWT<*x)GXl({%pXY0-5N(x{d7`~HEhfoSp`Jm55n z>w1xrY~6Iz$#m?&1MXJ8(|YNgy#=2$eslMCPuBMx-IoJO0QcedRh;w$xBQdFdEk3S z&b^1~pKh&OAEGV=)gbA|PuE*&2l|dwG~%2R(;MxZjqsu^8EW>`WOkf)p9iaa9p-$e z|0Vp=eo0)29~$ojen%*v4c4|SbeVRD<WX+6t2mXNV4p9Wda{eZ7e3d7D1WH`-SX#W zlt2Hfc=@Z>8`rCcs`7`s3FV7Ilt1VztNe9K`BP|PLwRvSoR313Kj4?Q{Gr_BDSv@7 z2fyPxDo*7hxZ-oByk2bH*P0b&Nyn<6jF-P%D^`$uqtouCCG2Zc?^me8NB2#QClA<V z&{Hpk=p_12Z?AqYhYz59!d_YBbDZ0QC?B01v$?b5NlZ{afnT2T=_~RBE>~1O?Xne? zyDlz&`~0IWhyGQcH{p#Y4CZop3y1rd`qZCh+HL<TPJe|-ADqs9>OOq@dK3DW@&4(Y z?&Z+K_4Gch|9W#ixPs-TvEExaoXdLF^ZBzlyphApj2sa34`Kb+o8$gfCL}zUDIxg% zJ5-$R760Yt{3w@G_#*?~HuJZFkH_yvl_cRu&@pUBP-8%fdBc4MJ!Rczb-B*~xeD!j z%Z^(j7C%&V0>3=>8Ofu(pdCOt3idJOGMH;Zlsi0UepjW{<?ep-ym8KsC-0_tk0>%I zclD39R_<O%<&J*5q1-`FS>-N}atFv&XqPoRZi!g@P&opAdCDEpi}FI{&MrqNXXwZH z9?l<P>d&fE&eUnW`B%19&W@x^SdKc%8T6D@&IY8MF=G_iWy_9RA{-@tsGI@6yyXn# zB`jxLj!@3fPj;Wut;^w6roNk(QO>F#ZmpdCDV4LCd=V-@IfI_E%2`#)Sp<54at8eJ zmNS%>u$*x@0^jII1>dcX=TqOkx?eK;Zw6L18}GH?nDSA(F0tdu3nzZgREL2d@oliy zeTHiM!1Gl9Y0uxDyf^iQdh0)Nb<d-3+@#}bm-~r4Prd(8!SR##KDz>Ws^e5&y4HiT zfWGviWue*Jj=Ie4AgXw?`M2XZABDuvi`6dhqq2bKC~&Awhn&0IR@F)LANwjHwI^^f zMlUq?r+?Wyb-%JYr8km^#zZK8v?W8zn;Px#pyzo?ztIiZY15`X^|i_#58t)<nf;EW zP?u5UN2}F(r%j`CEVG%?&^gGF9eUTko7;~ERGjii8{HRVlfD#AxS%{^3<u>I@=7F3 zn|4ifo{sZ%EX2OsH|<MXW}wl3iSM+ZCBjkShkPdBm!~b8t>gn9tE0Az$|lC}{At`L z@^TJWao@!u{H(}*A!PS@HBle$jxAONg33e}zf0E3p*oantMa|m{RPt}f<(t1ckHpz z|3&>HtJV#zmHD=SM?yhB5D)|e0YN|z5CjAPL7+ns=$dcl95lXsdTu#KiQsu-5kI%o z*TnnQ77p~SS<}C|i=LI**<cU)Vb5oK$Or5lU(gty$6*ipVJ}#1t`GTuJ(>epWJ8|^ z>_I>5jk7)E1NP<=F{aW`Uj%Ki2mP?uJ!GyA`GCC>O|q8%qB|e<pda?e*&gx%dvja1 zWD@9!j4BFy&<}g{zctr~e8Ao-3)(|}6zoAi><zFz<OB9zRnQ*#TVW6SVQ+kx%O~4~ zy?F)g(U1&num}CH7qC6#1NQ#XBy0IE>K@pGe%KowG1rHDz~1o%D;Ug5hCS$qy(-&7 zK0<p1E0}#45!i!%*z0CIk&n<`!3qXzK)@dK!=As+;E8;M_6k-o`#IMK{jk@)p6@@t z&d^@L3TA)D9`wUrov#o12<;WDV5mQrHsA^UuvdM!NB3DHAECX170iLgTxbvaVQ>7u zj6LKdv{$f#!B`uv5Bg!x|GBY;e1!H2Rxk%U*9ZNuH_CV-AECX170mM;d(aPib-q62 z1NKfRSijKt0Byh%`eAQ??I9nby@K`2pBQtYJ?MwM;J>-Nu-(vJ!TRM8#~$><UN_rA zK0<p1>z6|vd(aPi)kn<rAs?Z=g7piH3D5@qpda?e`TCHL&|bm%MSl;$vIqUJ=a2LK z$JZI!D_Fm%<pK4E>w|vS8)ZAlM`*8L{qjP`9`wUrov#o12<;WDUygL_K|kybus!4> zv{$fx`BTRp^uu283%>u@F6_-ISik(4V-Naaubb^5AECX1^~+I?J?MwM>M!~JW4ocf zg7r(6V-NaaZ=CHQAECX1^~)^B9`wVW|0}-#_&P&-1?!g=Irg9*_D0zb@)6oASic<Y z*n@u9tMm0CAECX1^$X1rpbhm4^uyi&+e1D=dj;#4ml$)QJ?MwM@kjaoW4ocfg7wRv zJNBR-_5!wte1!H2)-Nx0>_I>5jsDtPAMycvCl;(<x*dDa4|`R%hkS(g3f3=w;n;(I z*c*7vTp#ig+ACPUyv(r&{jle=J>(;_SFnD0xnmFdVXyl)=K7G2&|bm%<rv2v^uu1A zuMhbM?G>zFUg6k-e%Kr5>q9<5dj;#4V;y_Y4|@UILq0-#1?v|~nLvF8{jfLsINyJ4 zH?&u<e!*=Ed(aPiRknwGg!T&7FSu=C5Bgzm;Q!<MkL|+VTx68_$Q$6cg+1tpJ)i9% zAE7;DG_N6+!)*(D&<}gvzvcUn?S}S{(H8CDwuL?DhrK%6K|Vrz$Y_i9aNEKj^uyjb zUmx-j+CxTLw1?Xk_Mjj30=9>Ig!Yip7VY7-g+1tpz0u$C{l|7gd&p>u_Hf(69`wUr zmF*!Pp*>`@MSHkyVGsIY&;K93|JZJ54;gLIo?a|krGY)@hrMq0UyzT`9x~dZy^~lT z_Mjj3{6CuOLq1^dl?Ce;J(<|PKGqL=qkk~=kdM$_!TLon7G>Fke%Kqp^>G;5D_Fl^ zay9UTe%Pz-;_|}R8QLpYzwo5nu)IJ&?2SKT>>(eay@K^iuTx&2ANB&ahkS(g3f3?4 z9edCZd!vje@)6oASidZA>_LBMZ;an<<?9UX6|7%);&8~{DC>v4D(@p7p}m6j%OdCc zpda?eH=FB2K0<p1>z7j;d(aPi0oy}9VDD80>zBojJ?MwMZnlSfg!T&7FQ+>8pda?? z-{SJZc0+pw>ld1*PaEnN=!d-lwugL#_6pW7rx|mhJ?Mu$pY0(Zp}m6j%U?P6pda=| zZ#Q@%AECX1^~>pwJ?MwMD%(RoLVE@4m)AP>pda?e|Ap^Awj0_jSiii^u?PLI7qC6# zBeYkretErP5Bg!Ro9!VVp}m6j%Nrbf&<}g{+xY%tyRbK}VEuB2V-NaaZ-DI~AECX1 z^~)O_d(aPiKHEb+LVE@4mnDup=!d=0TlxNDyP>^;^~+Mn9`wUrmF*!Pp}m6j%bAWn z=!d=WO?>~c-Oyga`sGcIJ?MwMfbAh4p}m6j%UO;+=!d;-wugL#_6pW7XFK+wANK0s z<ol29hV}~9FXuS+pda=I*dFo`+ACPUyxFk_{jle=J>&!S{<2{GV!lQcweQdmd!ygr z`;YC0_6pW7=Q`I1{jgVMd&oy<uVDT17RMg+!`}EUeE+fC&|bm%<*klA=!d<4?I9nb zy@K`2+Z=n)4}0Bg5BUh~6|7&*bL>Gs?A5={_aEC0?G>zFmO1vIANB^=9`X^|D_Fnu zIrg9*_I$R7e1!H2)-UHf_Mjj3MsMc(kL`x`3f3>n9edCZdsViFe8ArEvx`+QD;#^! z4}0S`@%_hkBYVXvn106|^uu1j_K=UrUa<;hrDG5JVXvF*As>;wVin8<jy>pyz53Vq z{$sn5y<!#2fMXB(VQ+x#As>;wVinAwV-Naa&u4qcM`W*91@kwKJ?MwM(XaCT$95xo z#VVLpjy>pyy(-&7J|cU?Dwx%dJ?MwM@vrdx$95xo#VVK!9edCZdjZ=+K0<p1C-AOu z>_I>5b+bL>BeGYlei?G?K|k!(zs&a^+l}lMt6$bS_Mjj32G}0*5!owNzx=IZ5Bg!x zXM4y;WUpBLGVIuce%KrRXTJZ~Ze*`m{W9X%gMQenvOVM@vRABrS?Ab;e%KrT65oGp zH?mi(ep&C>gMQcx*dFo`*(+ARyxp+}{jk@~_K=UrUa|V+BF7%|!(RPHzW>;6Xs_S| z-isZ3&<}e9Y!CT}>=mnDE^+KZKkWHz5BZ4f6{}y~;n;(I*c<&K-+yd3vRABrd8cC! z`eCoi_K=UrUa|V+U5-8IhrMxLCj<G2>=mnD{?4%n{je9XJ>(;@SFC<{w_^|bVXvF* zAs>;wV)e_Vjy>pyJwELrACbLc^-ImNceRS+n_su9IK8Xqe*0^6|4LN3oU*mxJam}1 zmMkGn<0X_|<PZ6UAg*JWKHPzW1;X=|6iAekgz_6GK=CantWR{1lEpiN2pg|YM66_Q z<2%eZ0J0^_nd#PQNNKY53DPs#lAi1}<$|1g;@6V4HWAjSic1ndhp9urFVFf!BoCbO z$^(zQ^0@9i@-!D1-_j%bWO?$`^a5NzurYm;RaLC;{jR4~+O$%3)?oidukE{}A3kLq z!RC8-cXS?q*8(9@Vt;%izk}$6yHw@K`KtKVN@YmzJKrh9adkQ2hHuIIvip$U?ycs# zh6qEU35uL^gSieWTQts#>-${>zW00g+gbIJ-%m-;n66vYDO~@7DxSt4y-OQ%*mc^X zuC>EMYx{@S4fexpPuHJybYPpo4<Y1S+sGf}8s%^KCCgVA%nr<lVV(I!h!a`)gIrer zDBb#z{_|G!uNfK~8C-+DBIs>5bn^v$gkMeVpqy^cC_k?qT+_d_zj$j$^##2@i+oVu z;`7wc-Ga-^I_{LOUUd@p>k}FIN`4QJTD|0^zDBAy(o6Lb(w(p3$Wt;^^2n)6meQxW z)E669ukK&IZg2>l7)jBrBQvv3d?M>aj^hK|h9S(6M2mFA1c6fQU`soMFST9B$FdB3 zQU5GZKF~b%;yAtw^O6jnvof(@$@~>7yn$n9&o1`Nru4?@Mcd9N?Va}Hs(n<~`98C* z^0bypU4G-~pWH=zY}#k_O{iYdXxebM&9-IrckXzaV*Gge+KhQ+$hvD6$Do7uX~Vt= z%fu~N57@Tp8(YsdZpcp(mpD#o=joVif`A|(2sB4vnzt_rRgPAFX0peUtRK~y;p+V9 z>bG*`N?QM0O`%5}g;1T$z11o&$dFavGpwZ9x5Rb(YVWK3V2ZtUINRT&%WPsJrYFzN zEG2}Wit7Bp;rQ4)AC2Kf7}`3`KJ{BP`q?SW^EUMb!OuWn5UvZhO)BDuwq$51kNQmZ z-}&ybSAJ{j$rK)|!YZ$wY|?l7UzBw>OyWZR@oaS%_)%X<^gs~u&~w!LS1~ue>bs^J zRXL#z=RFU8vp>yzPqBdCJUD#*@cI!<5-<i@`5P}vR?1IV@d=1(9O~~eesfvhY$v}N z_ehjyo6pJQ|JnJ<7Z=>};biVHTQ({U5)%Xj0YRV%0;(CQRgO`AXR_m*Y*&om+^rPB zZ+`HpXOwSPs~~J*!#SPpH<MtReM<qgukKHurgRw7paWTY^7+m9K6_WM=k>C0Lt4|f zS?Vx;kbuLnLw{RcUGtak>Y*QDh&W-G?l(h=3H=|>iG81j{4(;J;b)}z&C&H!`#@VV zbp7Usc3nDl%z3+RqwvtaUAOt-Hyh|e{0Kw$XNhnWelzgP@|$;VT+7__R<7K-KH)c$ zo^hoU{2#3fRm7_<?=3wuQub(EgPw!!ZO)vVLp{&yGWU6Oog|6x0hv^G9?TJwFaI** z_g0_bZ_oU}g!QNSn>0_Eu=;yG{{)}^9iRU#AAkRi`n$m>=g^CCo<3@lEZ-(?@w_9y zc33SmrfzGPN^!S*V?TL~#1D<106!|{sP`i2C_VT@`6!FeZs9Y6KT%&rd{{y{3O<2f zUOof9&&%S|7d|bjz@HmhA{+&uz%MVKsISZ7bNt?XbF-3HG!>7yJYqk2t>6>*<>k}o zcDF1(>%yl+7Wi{RON67~6Zqxj6aG_Ke2xmA7FjNj*tbL+K7n6eJ_GiH%i=Q-J}t7q zpBq{t4xhj;FQ0XOo+*pZ0pZgk%jFUKmWabA@XO1m&(Ec0@mUo<EwaF$8(Ja`pTMsf zpBRS>=9+hn3XDU(y??mx0=)a3%u&-L$;V?(a#ho$EeYs;rRw9RKSjpV+_IE!UvSHZ zQ`A=o`IgG62nzy&Ku04$^Y>~zf6t6crHwJ{uK9aJ#WZhvW?QXJ^SBL3>doE9@z{7x zcu+<1jYHZgn#X4;5&R&Hi<pRUNa#dJ{TDP22|ok=F}Ne!h?_QoQc@cc51Wlc)<5(W zJsxDzb^2elv2K{eh4`WQd%%zUV}muxhCK8%8;6A7?7zII-@IV;(D_~)uf3!UEAi!i zn!^bSblD6Z6TjJ%54Viv+ZVq%A5KY(C#V#Q8bLr1=l}%B!)n)W_A-6fbO5vG@6mfN z>2q^JO=K(f!+S5}CuYpwi{)=O_|38RUX0(Y^RM!O`Fietqjz5LUW!hm|G;mCpONM_ z`=L0sCA1~OW`1)ZezSot#E&p^f0hVG;Wq=ncKzm{tGM61e%Mp*i=UXxWWFPK{7Xn* zojB6g0bNGxj~c(Z%=ey?xwQG54DY>A4()r@jbk5jQU1%sEqV?If{|T1BJYa>7YPLc zL11blFd5$$pO&nmBNEsL3=h!z>*1XJ@TiJpDcRkAbD8gp!_P?bn<FgH&L%_GZ%(`~ zE`D<aW5QpC-(ZPw6n=A+@yqg?bH6WsNMXNuX#JWMeZyGfHks9CM>7594b4)vc3$7t z{;#CJIr&_Ma@IVQ{^sTwrQ_RLVHIgXKoIC;1fu?CppfQoHlC;9xxOq^WrW%N&6MEJ zGE(tjvgQ8tDe7O%=x^qvCdlVEPyGAhbLNcDS~@53`{5O5-&toVmgU3_`kUcrr1{O! z`li&D(3T8czd7-~xcJQmx)49Y(EV8=9EIQPH}RYE&eI6?De5;bT-|p`IrB8GNnUn4 zM|2sj{zClbWchN-TlT*A&Dq#A#<iWID`^D*L7=k`i2UY#8?3WLYg}iqPwJ_)g8rO+ zvpnc!`^_{@Bbr|TT{XKuS=s3&Tj3A=&E)TA_|37r<@1|iJ6||UiQ%WByKSBZ{ERfe zIl__J655hsGrzeW$oyu59q=Oz-Crbu82o17m(|~#*KhWxwc|H;EnPP}xOT)Vw77p} zfAintVkailWi)t1{N`l&a?4xxzWB}A*fhp<VhXWn5d;K*PC&r&n_q0MH?6;!zNePu zH(#^i@R(m}qxR?<=h;3lpK9zkA8ac~#+8qLC)o>s@SD|VgC>RFeEmhQ*Lc9;D0O}_ z`x$9|GvQ%2YD;KKhRyuuK>TI{U5H;=yKISY6n-=CYu9fM)*FAa_4PEUzq#wof%O-j zpUh>hBPhlR;eSXRY3qP4qxGMQ-`v>0ODliTG4Y!tELy{{t+FeL1pz^zqY$wCX5&Pq z&I_jR;AZ*F>J)s~oXBPS&7|P)##)pusvAR_y1k_&4f>m78tF3Ao(*C`%EsP1kA98k zb@finy8c?b&byhX;qJTd1;%sZ?qQw={ERfec_QX%RK;($pwDWPEfJ2wZw7wt`py2T z;(qhcn*MesYGnG&*CsE!og?}__8&Ia+1c;65sbQy<Is&`A97K->}=eCLlT#`51n?N zj>#qn2m*pY9s~{~p-J~0S(+D;v4wszpYQ1R0^w(*`OOi2XlIk5+u!WI7wC)M9Koo4 z8MMuIXo+wXelzgP@|*L%7Z@yS%WtNM8bhm!E#jQ%H(!^$>~@am`?~rw>2Hqvcy>8! z9+&>+<`|{p+fLDyw1R*j&|wIucCl8WKHhS_BO9;JUeEw!^aV%rb7R8PzPdjxFuD7i zRUdmh-;sSF{X4SoGt&HK;Aq+jf`~YXhpyl3z86^kpv-SJm;twVIgT)mq$mcz8Te)S z&CTXFlb&&<&u9MK@5pA^kGPNLi}qfaJQO=ZV@t^``W7qczAq`D$8ds&jNe=TsR{j` zn6Ubw34<T=`JH_Jem?(0KK}y~LOoqSty2!YDCg;GRVK@~(G%qzdfl*FzT;y-l2*on zttF<S#1DN(7Wh#)Pd;ctpOM$!zvl8$7N5TGX%Pkd-Ov)@DEI_^dHKYBUKXF@_sDlg zBeq-~u^&kw20npbUOrJ@m&IpY_yk2N1b=R5iEtEr0>8X`qTMZv&r#viBFp6w`<95q zC-BS5XPy10viJ;yPm3(@=Z2Pu!zb{|%cswNa9Ml~2%i>NE|1u^L>xYWUtT_|{5(?@ zpH<=0A`ASvp(Wz*3H<W%8SryyS$uX2pB7mzkJz_F96o_xGd{!bVV!0A8H&93GPG_W znUVZQl8?un_A~i)<dM{Uef9gyb;@`e%1~>e;MN*m(X&jRA}TV1fFK|U5CYUJn(tw$ zfk+KW+8D;}T%Ys^or}yr?ieJGtxfj#UZ_6zXs+SOSfA9{FSI@>{0#WV;Eq_Gi1%Is z8HcnAVpf}MiExzq3+X$uz>oZ6b9a$|E(;Xq{*G*LdSSnLxW8|tofls+{pRcGQYLQG z_p$#y@taNg$SP}%kBi^j7@urxC$1oiCP6?DnCb{be)G&di~7y6^+R(2mi@jstxu}o z#L3o@@SCyD68VgswmvERj5NQQo^{L?`f2=(5$!jdzgHE%86c`Kt4+2<I10ZR__gad z`}2$X&5QbmSM{&)X1_9-$$UpL{pQc+OP^Otm(A)9bDd?r_ngd-&Ff_N9xCN9x<`|7 zoP%7H|1xpIGkJtxWS5S~cVr`EBqj(50#g@(J-o^I9odF>v+ozmboBe;@H5i<<`AJ+ z8%#&h?$#=<-<)_~T>Rz;#sYq`&-i8e&AHzfzooF>JluDYckJv!OZw|e&-9ybu#lO6 zsJ^d*d&>8lC%^wkXh!#FGLCbQi~Lvdn}JP)iNVj_PvS;LWD^7g0YM-i0+HYB&Ghsu z+R1js^BT|7KwXv3BGqGA?~7A^bDDii^K;g3ZtZ>X#_N?*f2Mwqmi>%0zd2f~3j8EP z*Kelx#g9F2*KHII_wBl^{sDPkJSuy3+iS-o3B=If4E(bE=4S7Uhx40nY{zfzTHLq1 zziVm#x)J2Bg)q}^-q?bY9HRQZuHS90Q|24k<tu+&aLbQX+@H=-LPbOn5CjAPjQ}-^ zJinO{N%LD9`^}!~%QnF_+i#|XP1b=STkcQWqkLz~)6nPfhkV7fYs7gIPV~C|y(-V< zXXZD%`;GnNc;2k_O4!dx^P4ARezW+^7W6g6VcO3U;VAs(fbnbBZw{_+%Wqyf&^Np` znaf;9GX3Vy<w~Agi0*06uZ!QDUdGbOUGkXt%}Gr1;hDRfil87M2y{FGk>A{CesiPm z$SMeRo0lKT#(r~FUo`6{TkcPvqIDG~uivb*sPbJ?-@#o8ysZ6Velz@xvi#<%_|2L) z^CzoKwnR7zzZv+o>o@yXwdFUT-9LE2z`A5M^Bl?aoBuIS>ijbLo~Yg_esexQFTE^^ z-<*z1b4>FWRFM<}1c8o6Ky|-P&UO7Wn4$L7{b|w3-QTR971~+Xe`m(J{_JO@`OQ(E zI<+OVCBw9N8prTFjYHKu4PX3b16_z;TDxqCa1?$s@GI&!lODaUKlAUd>%ZgP*D|;9 zJVe~bkJH|f$wRRt(Kv;DI9eN@bRUyqfDQ%Qjo(|}YC``G6IP%3{EqEPAozm`>rb1| zf69c_-}Ct=ObE+#{dztU>qR-A=ym;lSyvH|t1zvMqwcW8RFwFkb^U=KmGk6-7W7%; zWL!SV;&c2vvJQO26!3S$NCGkN3H<W%iTk`PKI_6KC{m%zBlay3j)G6%mzPh}*JbfJ zDtuaGfj>92L>xYWUtT`Z?v}-8AbeV6xjbUu5^?whetG$X|5O&A1Hz|87Wi{ROT^(5 z_~qpjesEcQR)tTCESE>@TOtmhz%MVKc%CVX&u-z<A`ASvp(Wz*3H<W%8SryyS$z7! zr$v^_Blay3hfm<wj8DAx5?o>WC0bwC|CH5zBkKm2cP;8)IW&A>GDl61Bp;7C$>*CU zZAn1)3)O#T`cq^)4P~gcP;hGvujtvdrLro*f`A~<(FjnpIJw??`IE+cxMPsvI1G)0 zxbyeu>eR6wTjjI!-b<}AXU<4v@0}Y@!n*#>ezA4^+0TG~jNu`=?r1!T+7jB5VY6|_ z`upX5af2Q3OKX=S3B;)Xm)7+Me∈tf5DTx!3jgFDvXf536PUhr6nM!z+-v)<P;u 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 literal 0 HcmV?d00001 diff --git a/assets/models/cam.gltf b/assets/models/cam.gltf new file mode 100644 index 0000000..9171742 --- /dev/null +++ b/assets/models/cam.gltf @@ -0,0 +1,122 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v3.2.43", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "Camera", + "scale" : [ + 0.5, + 0.5, + 0.5 + ] + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "Material", + "pbrMetallicRoughness" : { + "baseColorFactor" : [ + 0.800000011920929, + 0.800000011920929, + 0.800000011920929, + 1 + ], + "metallicFactor" : 0, + "roughnessFactor" : 0.4000000059604645 + } + } + ], + "meshes" : [ + { + "name" : "Cube", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TEXCOORD_0" : 2 + }, + "indices" : 3, + "material" : 0 + } + ] + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 19, + "max" : [ + 1, + 2, + 1.7000000476837158 + ], + "min" : [ + -1, + -1, + -1.7000000476837158 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 19, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 19, + "type" : "VEC2" + }, + { + "bufferView" : 3, + "componentType" : 5123, + "count" : 21, + "type" : "SCALAR" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 228, + "byteOffset" : 0 + }, + { + "buffer" : 0, + "byteLength" : 228, + "byteOffset" : 228 + }, + { + "buffer" : 0, + "byteLength" : 152, + "byteOffset" : 456 + }, + { + "buffer" : 0, + "byteLength" : 42, + "byteOffset" : 608 + } + ], + "buffers" : [ + { + "byteLength" : 652, + "uri" : "data:application/octet-stream;base64,AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAv2Zmpj+amVm/AACAv2Zmpj+amVk/AACAvwAAAEAAAACA//9/vwAAAAAAAACAMPnkPi/5ZD8AAACAScwlPwAAAAB0DkO///9/vwAAAAAAAACAMPnkPi/5ZL8AAACAScwlPwAAAAB0DkO///9/vwAAAAAAAACAMPnkPi/5ZD8AAACAScwlPwAAAAB0DkM///9/vwAAAAAAAACAMPnkPi/5ZL8AAACAScwlPwAAAAB0DkM/MPnkPi/5ZL8AAACAMPnkPi/5ZD8AAACAScwlPwAAAAB0DkO/ScwlPwAAAAB0DkM/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAgPwAAQD8AACA/AABAPwAAID8AAEA/AADAPgAAQD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAgD8AACA/AACAPwAAID8AAIA/AADAPgAAgD8AAMA+AACAPwAAwD4AAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AACA/AABAPwAAID8AAIA/AAAgPwAAYD8JAAYAAAAJAAAAAwAFAAIADgAKAAQADAAIAAsADwABAAcADQASABEAEAAAAA==" + } + ] +} diff --git a/examples/simple.rs b/examples/simple.rs index 4a22bbb..72ae648 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -1,18 +1,31 @@ use std::f32::consts::PI; -use bevy::{prelude::*, render::camera::ScalingMode}; +use bevy::{ + pbr::wireframe::{Wireframe, WireframePlugin}, + prelude::*, + render::{ + camera::ScalingMode, + settings::{WgpuFeatures, WgpuSettings}, + }, +}; use bevy_config_cam::*; use driver_marker_derive::DriverMarker; fn main() { App::new() + .insert_resource(WgpuSettings { + features: WgpuFeatures::POLYGON_MODE_LINE, + ..default() + }) .add_plugins(DefaultPlugins) + .add_plugin(WireframePlugin) .add_plugin(ConfigCam) .add_startup_system(setup) .add_system(rotator_system) .add_system(add_target_system) .add_system(remove_target_system) + .add_system(switch_camera) .run(); } @@ -24,6 +37,7 @@ fn setup( mut commands: Commands, mut meshes: ResMut<Assets<Mesh>>, mut materials: ResMut<Assets<StandardMaterial>>, + asset_server: Res<AssetServer>, ) { // plane commands.spawn_bundle(PbrBundle { @@ -57,6 +71,35 @@ fn setup( ..Default::default() }); + let cam: Handle<Mesh> = asset_server.load("models/cam.gltf#Mesh0/Primitive0"); + + /*commands.spawn_bundle(SceneBundle { + scene: asset_server.load("models/cam.gltf#Scene0"), + ..default() + }).insert(Wireframe);*/ + + commands + .spawn_bundle(PbrBundle { + mesh: cam.clone(), + material: materials + .add( + Color::Rgba { + red: 0., + green: 0., + blue: 0., + alpha: 0., + } + .into(), + ) + .clone(), + transform: Transform { + scale: Vec3::new(0.5, 0.5, 0.5), + ..Default::default() + }, + ..Default::default() + }) + .insert(Wireframe); + commands.spawn_bundle(Camera3dBundle { camera: Camera { is_active: true, @@ -70,6 +113,28 @@ fn setup( .into(), ..Default::default() }); + + commands.spawn_bundle(Camera3dBundle { + camera: Camera { + is_active: false, + ..Default::default() + }, + projection: OrthographicProjection { + scale: 3.0, + scaling_mode: ScalingMode::FixedVertical(1.0), + ..default() + } + .into(), + ..Default::default() + }); + + commands.spawn().insert(CameraCount { total: 2, index: 0 }); +} + +#[derive(Component)] +struct CameraCount { + total: u16, + index: usize, } #[derive(Component)] @@ -106,3 +171,21 @@ fn add_target_system( } } } + +fn switch_camera( + keys: Res<Input<KeyCode>>, + mut commands: Commands, + mut q: Query<&Camera>, + mut q2: Query<&CameraCount>, +) { + let mut cc = q2.single_mut(); + if keys.just_pressed(KeyCode::V) { + for (i, c) in &mut q.iter_mut().enumerate() { + if i + 1 > (cc.total - 1).into() { + //cc.index = 0; + //c.is_active = true; + } + if i.eq(&(cc.index + 1 as usize)) {} + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 37d911c..7f5411b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,8 +16,8 @@ impl Plugin for ConfigCam { fn build(&self, app: &mut App) { app.init_resource::<DriverIndex>() .init_resource::<Drivers>() - .add_dolly_component(Pinned) - .add_dolly_component(FPV) + .add_rig_component(Pinned) + .add_rig_component(FPV) .add_startup_system(default_setup) .add_system(change_driver_system) .add_system(update_driver_system) @@ -38,7 +38,7 @@ pub(crate) fn update_look_at( //https://math.stackexchange.com/questions/80923/average-of-multiple-vectors let total_targets = targets.iter().count(); - avg /= total_targets as f32; + //avg /= total_targets as f32; rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la| { la.target = avg; From 6d1cb2aadea692b7c1dc8fbc996e887df981c6d1 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 30 Aug 2022 00:13:51 +0200 Subject: [PATCH 32/63] Update README.md --- README.md | 61 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 027bf7e..252bc18 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ <div align="left"> <a href="https://github.com/BlackPhlox/bevy_config_cam"><img src="https://raw.githubusercontent.com/BlackPhlox/BlackPhlox/master/config_cam.svg" width="970" height="200" alt="bevy config cam"></a> </div> -</br> <div align="center"> <a href="https://crates.io/crates/bevy_config_cam"><img src="https://img.shields.io/crates/v/bevy_config_cam" alt="link to crates.io"></a> <a href="https://docs.rs/bevy_config_cam"><img src="https://docs.rs/bevy_config_cam/badge.svg" alt="link to docs.rs"></a> @@ -19,29 +18,55 @@ your player asset or the default red player entity. Inspired and extended on [bevy_flycam](https://github.com/sburris0/bevy_flycam), this plugin is fairly simple but should be a neat help for developers looking for a camera implementation without going the hassle of reinventing the wheel. -# Future Plans +# Backend -The main goal of this plugin is to first and foremost provide the user with a configurable, extendable and easy-to-use API. [`dolly`](https://github.com/h3r2tic/dolly) by @h3r2tic is a crate that provides an framework for which to create, combine and modify camera positioning, exactly what `bevy_config_cam` is looking for. So a migration to `dolly` is in the works in order to improve this plugin main goal. +The main goal of this plugin is to first and foremost provide the user with a configurable, extendable and easy-to-use API. [`dolly`](https://github.com/h3r2tic/dolly) by @h3r2tic is a crate that provides an framework for which to create, combine and modify camera positioning, exactly what `bevy_config_cam` is looking for. +[bevy_dolly](https://github.com/BlackPhlox/bevy_dolly) is the backend for `bevy_config_cam`. # Showcase ## Camera Modes -LookAt | FollowStatic -:-------------------------:|:-------------------------: -<img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="width:700px;height:300px;" alt="LookAt"> | <img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="width:700px;height:300px;" alt="FollowStatic"> - -TopDown | TopDownDirection -:-------------------------:|:-------------------------: -<img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="width:700px;height:300px;" alt="TopDown"> | <img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="width:700px;height:300px;" alt="TopDownDirection"> - -FollowBehind | Fps -:-------------------------:|:-------------------------: -<img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="width:600px;height:300px;" alt="FollowBehind"> | <img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="width:700px;height:300px;" alt="Fps"> - -Free | ? -:-------------------------:|:-------------------------: -<img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" alt="Free" > | Any suggestions on other camera modes you want? Let me know by creating an issue :) +<div align="center"> +<table> + <tr> + <th><h2>Static</h2></th> + <th><h2>Pinned</h2></th> + </tr> + <tr> + <th>LookAt</th> + <th>FollowStatic</th> + </tr> + <tr> + <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:400px;" alt="LookAt"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:400px;" alt="FollowStatic"></td> + </tr> + <tr> + <td align="center">TopDown</td> + <td align="center">TopDownDirection</td> + </tr> + <tr> + <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:400px;" alt="TopDown"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:400px;" alt="TopDownDirection"></td> +</tr> + <tr> + <td align="center">FollowBehind</td> + <td align="center">Fps</td> + </tr> + <tr> + <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:400px;" alt="FollowBehind"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:400px;" alt="Fps"></td> +</tr> + <tr> + <td align="center">Free</td> + <td align="center">?</td> + </tr> + <tr> + <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:400px;" alt="Free" ></td> + <td>Any suggestions on other camera modes you want?</br>Let me know by creating an issue :)</td> +</tr> +</table> +</div> ## Settings From 7bc0f05ceb5056a86c623091fe1d6298f2944394 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 30 Aug 2022 00:54:23 +0200 Subject: [PATCH 33/63] Update README.md --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 252bc18..104c038 100644 --- a/README.md +++ b/README.md @@ -33,38 +33,38 @@ The main goal of this plugin is to first and foremost provide the user with a co <th><h2>Static</h2></th> <th><h2>Pinned</h2></th> </tr> - <tr> - <th>LookAt</th> + <tr> <th>FollowStatic</th> + <th>Fps</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:400px;" alt="LookAt"></td> <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:400px;" alt="FollowStatic"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:400px;" alt="Fps"></td> </tr> <tr> - <td align="center">TopDown</td> - <td align="center">TopDownDirection</td> + <th>LookAt</th> + <th>FollowBehind</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:400px;" alt="TopDown"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:400px;" alt="TopDownDirection"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:400px;" alt="LookAt"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:400px;" alt="FollowBehind"></td></td> + </td> </tr> <tr> - <td align="center">FollowBehind</td> - <td align="center">Fps</td> + <th>Free</th> + <th>TopDown</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:400px;" alt="FollowBehind"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:400px;" alt="Fps"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:400px;" alt="Free" ></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:400px;" alt="TopDown"></td> </tr> <tr> - <td align="center">Free</td> - <td align="center">?</td> + <th>?</th> + <th>TopDownDirection</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:400px;" alt="Free" ></td> <td>Any suggestions on other camera modes you want?</br>Let me know by creating an issue :)</td> -</tr> + <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:400px;" alt="TopDownDirection"></td> </table> </div> From 4b610831187eeb9314da8c797642b599f85c801e Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 30 Aug 2022 00:59:19 +0200 Subject: [PATCH 34/63] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 104c038..095c4cb 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ The main goal of this plugin is to first and foremost provide the user with a co <th>TopDownDirection</th> </tr> <tr> - <td>Any suggestions on other camera modes you want?</br>Let me know by creating an issue :)</td> + <td>Any suggestions on other camera modes you want?</br>Let me know by creating an issue or </br>by creating your own using <a href="/examples/simple.rs">this example</a>.</td> <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:400px;" alt="TopDownDirection"></td> </table> </div> From 114e1c46d2b5121e5880d095b1e3b29c703bb2f4 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 30 Aug 2022 19:27:47 +0200 Subject: [PATCH 35/63] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 095c4cb..679fddb 100644 --- a/README.md +++ b/README.md @@ -38,16 +38,16 @@ The main goal of this plugin is to first and foremost provide the user with a co <th>Fps</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:400px;" alt="FollowStatic"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:400px;" alt="Fps"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:380px;" alt="FollowStatic"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:380px;" alt="Fps"></td> </tr> <tr> <th>LookAt</th> <th>FollowBehind</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:400px;" alt="LookAt"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:400px;" alt="FollowBehind"></td></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:380px;" alt="LookAt"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:380px;" alt="FollowBehind"></td></td> </td> </tr> <tr> @@ -55,8 +55,8 @@ The main goal of this plugin is to first and foremost provide the user with a co <th>TopDown</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:400px;" alt="Free" ></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:400px;" alt="TopDown"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:380px;" alt="Free" ></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:380px;" alt="TopDown"></td> </tr> <tr> <th>?</th> @@ -64,7 +64,7 @@ The main goal of this plugin is to first and foremost provide the user with a co </tr> <tr> <td>Any suggestions on other camera modes you want?</br>Let me know by creating an issue or </br>by creating your own using <a href="/examples/simple.rs">this example</a>.</td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:400px;" alt="TopDownDirection"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:380px;" alt="TopDownDirection"></td> </table> </div> From 7b4cd5c4ed9daa036bb5cd80aa20bb1701fb23b1 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 30 Aug 2022 19:28:47 +0200 Subject: [PATCH 36/63] Updated readme.md [skip ci] --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 679fddb..e5ce5a3 100644 --- a/README.md +++ b/README.md @@ -38,16 +38,16 @@ The main goal of this plugin is to first and foremost provide the user with a co <th>Fps</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:380px;" alt="FollowStatic"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:380px;" alt="Fps"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:350px;" alt="FollowStatic"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:350px;" alt="Fps"></td> </tr> <tr> <th>LookAt</th> <th>FollowBehind</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:380px;" alt="LookAt"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:380px;" alt="FollowBehind"></td></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991088-5fb59700-bfc9-11eb-88d1-44a2b2a47cfa.png" style="height:350px;" alt="LookAt"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991175-7956de80-bfc9-11eb-901c-0164152dd97d.png" style="height:350px;" alt="FollowBehind"></td></td> </td> </tr> <tr> @@ -55,8 +55,8 @@ The main goal of this plugin is to first and foremost provide the user with a co <th>TopDown</th> </tr> <tr> - <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:380px;" alt="Free" ></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:380px;" alt="TopDown"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991199-7fe55600-bfc9-11eb-9ae6-b29cec3a3cd7.png" style="height:350px;" alt="Free" ></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991141-71973a00-bfc9-11eb-90ee-377ffe656ae2.png" style="height:350px;" alt="TopDown"></td> </tr> <tr> <th>?</th> @@ -64,7 +64,7 @@ The main goal of this plugin is to first and foremost provide the user with a co </tr> <tr> <td>Any suggestions on other camera modes you want?</br>Let me know by creating an issue or </br>by creating your own using <a href="/examples/simple.rs">this example</a>.</td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:380px;" alt="TopDownDirection"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991151-7360fd80-bfc9-11eb-9d41-1947c997b98a.png" style="height:350px;" alt="TopDownDirection"></td> </table> </div> From 3fa60f74f6453ecd262681c824033a297a592b59 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 28 Sep 2022 22:25:04 +0200 Subject: [PATCH 37/63] Removed unused resource --- assets/models/cam.blend | Bin 795204 -> 800384 bytes assets/models/cam.blend1 | Bin 795204 -> 0 bytes assets/models/cam.gltf | 28 ++++++++++++++-------------- examples/simple.rs | 9 +++++---- src/lib.rs | 2 +- 5 files changed, 20 insertions(+), 19 deletions(-) delete mode 100644 assets/models/cam.blend1 diff --git a/assets/models/cam.blend b/assets/models/cam.blend index 3ae275dfd668ff788f7ef429f475db166fd6bf0f..20ea36da2eac40d1b3df15c74ca950c23424e17c 100644 GIT binary patch delta 103514 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 XMwgY9^xN~teWT0L`$jiT{`LO=p`}9i delta 100838 zcmcG13w%|@wfEUMCt>GBA|w#V>+nv1K!7CVosjT2@<tR9<mEGhB0kXgz<{;7t1UuC z+0m-tJ3g*Zu{~Vt1?si!skKV`^^t0;*!H%m?X9%;_I}*f>;Bf7S^x7&()RY(FM60W zv)B61T5HzKteL%MpWXjn`NkWS`|?sxzjAP5$Nn+v=h{=g|MnY}PycbUn?CdDGj-}z zudJ-hD=#ni`1|zf)Afh*6%`fxKNvH5!h{Llj2SaD2^S0L{tw1Y8$W)$S6NvZy)<pw zG>rnX$&)8*R-!vP)4IUgf5y(?YYfTPnwy)IN~!j@wzeMqcFGnjr>?Hf8#iv8S5#EQ zscPALuG(D`=whZ|Fz9iG{Fzif)0;W7QdiCb%$zw>fB*lK<|b4?m8kc!i&cMiZt|z= z|C0a-^$(`7l&RljXKR^)X+`Q(#!|I%U0@^|uB4<yf95XV;mw}EQ5{U1<YxnaGp%?e zw+6Qy)A5H|M*ZKk;?e9E{6RVU2Va{utSM*W#EH>zs$1PWY@DCy)E9?MS~O|WBrPxa z7=wH%N<U@F6zya2*BKjmaWFN^u7(a%SVpGddS|y@;LWUGqP>XA8J|<Srj8O%pIxK^ z>ACa?s;cy|Qm&gFc+Q+TS}xAB42(yzs@u|U8996QY%L?(p{lCNn>A~e8kP~QzrCrc z$-Dmg>pi9;uk{u#T<9%Wus~y0S66%U=FQV(+z#x-p-@O)TfBI&w`kEKk7(388MjQk z>Z+@}xpU`goNKPR#=G{~YrT$+4)40_uJf+G`fBf%TW;}~rlFyM=~pn$s#UAJ3opD- zr%RSB@z$?juk#x>ZuGWn*`mwWtXbo&T)9$zF2DS8kMo;1Z}!%$Tc_(PE-u#gc_(8T z`$S4*mD-y%LmkSp)ob*5i$1~Ox$65_RjMF0OHI!%P?gzv@(E<J=~#98sM737RGzCk zN{ZC!j3R=w)v2tYPK$=;5oVUE9G-=y%bZg++pBAu<ISy~qwXJGtPTwis6)9E)yWal z)e&-;Lpeq2WKO`paKU_aVsvp%ZEdYK5vOEIb^kfl-NET97|c~gWAoHW60<0ms-Y?v zsxmiPm2O3Dy_&gmbd@!=RqFl`pQS2-IkjZ<70Z`<i_bk*!yeu|#!oGwKDf3*9Xe;C zIy0tB<&F)i+!47dn43%3w#MEZC{sHE1@y@(<<@00a2@!}t)se{=Xf=>)$0CH*HK-0 z-J|o=%8`NY!axq!xRO3g$q#g!P8_37P0j7Tp+FrPS;duh-#$^b?qPkjE~PCkE#A2# z<LcF`b<1+Aa%-M{{`u^2YQ^Mo9xv5Bxy2c^4OL!!GwEBSUK&xOj%+VeC$|=<%F#um z8yg#S#auamRxDfQH8nP>gKH+KlZ^rOpC!5K%#`VD{qB;=?mY!$RBE>oSvmFf_1eW* z5FVgguB=nRIRQT@tnSMjH>|FyiWII=?+h<DHBO`k*h;*k%L-elYoNweD^^5nZf$8v zsJU|VMAE;EYF4><MTI=;h=+PyE%%sZBrthC>07NTTkOo5ni}1sSd7ENiz#1Cx>r*> zSF6Kgo7Bmu7{Tswd8KXCAt3=ILfYQmuHM;Pu2$X<P<<0~S@Q0wmEB`2RWOeleN<K< zcXt+o8-Wea!tnPMD^{o#85L^thQKiH_S7#}81m(;jJdTnUVRG*)ToY+ZBr+Use4>D zal(T6^P?t#0P*QUYEvT&`9NW<I#WuYoT3S{DrQ7&LY||Wgd3GVY$FnpM5#8-Qc#^) zTVLZfv{LmAHR_$Qvq-5tb!Pl@b*e3(PPGQ6P(6Q94wmWMP)OZRv%;C_HW`PyW?>mM zQ?R=vNFv!&=90$E)pNa;nz`Og8bsrpj0d_4F1Wy3yLPQ^vK?uGOmb6lP2Ftj@Q4a^ zvM4K~zLCYO@oMYT@vS8yC3(R%doDX3e?nyVcnb~no%<A7L%lPnSZ&@JP_5Sn)LYHA zI&(o@_k8Ni7YDn8!MTkjEDPL3A8s=K@C*Rq*|u!Y`P5ErZEYSohsXVEg<YM)eVm6r z{;=O2EUL?BXs+=ZTjy#8rZ%fHQw!Aea$B`tlQm}vb=#qYO)g)ybg9=&O_)<YNgbL{ zt8$kIRj?|zJDAlzmrT}LQ|q<Pt@Y|@)M69zXE5p6QQ7o7FYu_boLZ4IA<vjK66UX( zLnA~rIcI&nI&nL7|6tLuMrs1mLcLQ)bKGJY?90i1*W}GzN;t`){-rz*E8MwR4Kjf` z(^AB?KQo~qyOBg^75Fn(eRxixstjh0WK+Xes5eO$Z_4DMwW+CD56$lk&nI6g>K;8R zy;j@0v1P9Mcw)1vC?7_(6f|H|{Y#P!cCEdwO(e}zr{@%O&#%m6>E_X=v9?xyFq&qz z@mZ>|Y-J7ya@St5)4OohdOdl6Fk%u9>qi>T$!Mtcn&#Dd4b8Rc#PT|IW^GZ+O48)- z6^aLdgB8UpcP4vLfflT_D5rs@zj?KF`cpTzR()JrQOZ#a{1%4fxq*i!nkT5^)#b3K z%$_yd+jEoS&7ZeW9lmJ{wRn~mzO^{Lsn%<5BjKCWjB(>t@Y1qH478k@k>&q;bvSp? zB6V<9@i6X8+$9f|H__k`$ZXLH(0oGk_{Wp#v;r;DC>$#*=jl*)Hg;VeYbk`HPFFXQ zI~{vNLw%!8$?etQU@<FjYU)Iqp6a~DmO9d+&TD9_S2M@ut0NZ#)n+?u2}fZomKimm z&flt1JUzt->hJ~Qc-m7Z=Tzo2P(;^OS5Kb?uc5A9dFy9U$daqonHU_$QKTN1c?@Ay zI5H%&s?zm!Be~bIGo8QcLhA6%+L;b-tzcbfoXyQ?o@aEC(NC3LT0!;Nt9cya-lg>! zM5lOp2YlCj%xgY8Qu1KqRgEKkCT6y1UFyA7)@8vg9(YKftZD3DW2<I(6Q-Hw;qj0= zDf<|vKpx~N`Xyhh$YI^MscL9!<<RhOaEvq)sa7<sg_@|fy@5<wOez&z$Yy~^397Mr z13oeF6M16g%gA%|;4^ESI<+i+IL#gH_2g9aX{v8fA2-cYxn&f@P7h>`pES*zNUcOp zC(~12v}Mi>k##6=(T+B;SO+sl=1)|)Qwm1%Y}?etvo6iR?bK59>QyOKw>cwgJ-75w zqW!()%V}ERj?gllO%@o*orFE3MRaSc=lQN&ot{+1L31XzSlNs^uWafJ)etIf;dKcI zEco#HVC&Yc(L9%PhvRhxHwRj<YECt;$<)Cc$Ee(`dEMg*s0Aq)-jJWsOnx$-x^OF5 zE@RRro@M@C?S|sx;fFu-DKI<SQk=P<vB{g?Kygk(quR8yN#!<E08&aJ=IlV`r1II+ z-zMvp+?1BTh-W$0gvUU9F249;@3PA-i{`nU<>nUSK8im1@E4x)mM>nVTmFNw<5cBN z>XR3f>dW)Go3b)VWvzNsOM}XpSKP&h8%l-$Z8=nqPZus&sD}}DI{uLQ+6?m>n!Lt_ z#(<9b4pvO!DMFo@SwyiJdH3wpD<+nClgp;+5tRc1eAua3ZFUM)8|LAZO?1g6mn4+2 zer!rMDIBA=rBR1VG_9x;TZ@(H7<sC7dJ#EjUPjA2wh?u>X0<VGR2PpD|65Ze)5n`6 z;rmkZ68eM|g}iq15cZNb`mm|EpK#wEx#=9$cooglQ)q!vND;NRP~gf*Q|EYP<rM== z#Hw;%;17>>9Gc*B-g)QgbvE*xvMG6FW?Go&hJ$x|p*71nMpK8W-?A6wPRXJPJ;0u% za;t-?vd->eGqo-tQ^hqAf7he;-)Xl5`$#W}mXWPi(&vID`jh5yeA=uYuPe;tYGr6q z2d5QlhdNYPpn|n|SC$58f6WY)14QNK<;j5g+3Y;wvN>qGL~p}j%ZRsDc>T_F7-o19 zte#t=w_SMQeRyLvjWJ}NI5P!X@{F0<dDu0cyowgU$u9EO@=+5cn?&-f#Vo7IH0)9w zjq_*8;>GG<U9l?IL{T8Q(Wy-Z-HqhvwRxEp)r-i3rfV<5xP!5WRpbwQ2fia^6S23* z45MR#&L{8n7GHdx_L%o*&b+pWLjiS&9EIjdRe51iS942~H;<g9rLEChO^*22H0JAn zO>3sPKr~+|n#XGoE9lkw+ypDga6?0Ib85z{3UB5N-Ir8p%b0f7G=6B|y{d~Yx+tNH zhZY`!;z!^5c}?DIT3K<w`8YU6ohb>Z-)^Gy+j?3@OwUrkZ6t@BMJ8EYq;{m`cD1%O zd*}ZJQ~Wjc<FBtGGqCFTEQ@mjn1NGnIT?=CvvbGroU9H_qm{iLfq4@rD~BVXRqb=V zs@by=ykjuC@P1spt&-<r?j%iZEqcypyR@7`(fis|^<l$ERmqEkd1Rxu`Pv@b@wjuu z>-BeikF$euhggS*w*`Oa-3-_xyhz6=>d=%*J=W$HXLWI>=a^&y?IR}-B5X_6od*zJ zr*dyWoWdz>9q7Hy_%gN+Pho6J%-YTEW?O;mqX!wTQ$Ff&Gr8@yi7Hr;)!kl6X3FbY zL_<3dv459o(5wCzCR(;+skdn1qBt{|g~TD+Z96rA+<IbGA#VZW!{(|lpXN=cZET*x zXmC*%PqbTDb$phR>G^{^r`(m22bTKgM!o&au5++;mY<qRy|aY6*8Eno1#K|42f8q> za=MssHf`E8q-|D_{=ASL)OJZWiMh_u?nAZ-c#A`{x>{7;-DInin`q&-GfRDcB2U#k zx&$(LGmz&Iw#8t>3vYjO^pf0-l82YZmS*i1Y>N|9%Vi@hmluo1H3pi4ciQ*dd6(CD z%dLZ&W&O%!-i68L7{m;JqbWRX4*ExVjkM#@UZmUWgBt2q(*oKixffG_M>gRhhV3H$ zF=)`scG<9D!vMR)hx&RBrbQdCv5j45vyX<|2nE<Y4+k&JQ`2YVsbB+bc&E``Xp+CI zU3-zY`_9jhkv^l-n>%lzIyXlBV>KD)JX$bD{pIg94*5FwBl_6-3$2{h;r3ZMJoa$l zA|Lg^OxnFSj&miKap1uzoSZudk2Sn%9c;{DgYkWo!N#2UxoYu-^SrvYCT+BLCKqd? zo!L$|P8!Qp<CSEv3nr?~lMA{wZrbea-gBpXjFEQl`HXkd&7In5|8~Rtg-#SR4va+0 z;8q@R)RS}dV3Wf(fUUUv@RV^hM)Q0{jk?qxh7PtVZ45VZ3r8t`>BE~uuqoo+(1ulB zCCz#4NG&7ty9;e~YzoCpON+YK=MEEUReE8Co~<sw;!3Y;_a6G(X+H5*qVGF*-t4Vk zw>~-}V`fh5OMk^GgII?4{KPW(D(eEeRk5N<Rt9>wDdec0yBBN7-+2sRZ=oTU_tQp_ zcKZ72t1kBH8|zK9GB#hG-b#BzwUyn~MLL>}s=K<F)XnNzKwCZhSxBSwI_jC%U4Mgj zhgP3WAZCb~;7;$x8+Ur^E?O5=-vlJA?*Cq8>NQz3Q!j{4K?mz-gX97;OG|GViBO&I zXUXk7xwS__PPRRghYGd}_P;q~KQW<Ly|%PcooSrNL2C9q4(~<LX0;`4WEZcnH*VZS zt$9<Ny0I4TB9(8r;YOP4FA~-M2K5GMRURBdG|9pz#n)B%0@@9n$(yJFHUB!kqoQLp z9z;voZ&_PzU5>{2UN7IP<=BDmh0nCANArDQ)_mixZQlG9A#QD+sMQCX@^xH#dUIKK z^>kX!1x7Lif98u3+GvQPn{$`)oVtZp);D+FI?x2<{Ok!FA}5Dd1M+74i*|7t4`~%g zYn19bQZb8E%vD({>E<S>z+%hhu-a5Y+x*$nb6DMKx-V5#Q?1oFF^=w4HIiAz1=Q(v z(`jj1P}odE>U>#F(<Y(TiS;7Ws#5LEbcd`xK=a-T@AAv9@NT{B_9VUbcss7U-n)=D z3Aw2T`wXEA=|ua+bn~v9IwswyIytUv0>?!h6LFKW1M+Qb9?sac_`}WdPDb?zZaSXF zSnt_&G^aJHPp_J+P6zF7x)H$+aAXoKz%QixoV61(+eAy+Fi@p+`F_$+HUa~yx$Cc@ zg+<3zTfN(N-4UnV9`D*6*LiEmVG^_&TASEpRZUyGw0c}a)zf+=m_xm4ZPqYu5c-e; z3r6yynez?p&EBjkvkvmEn$$fmmu`pA`g2<W&B<BWjih@!?F6-x2F+?!#uWCxVd8zH zL&XZV6nBJH8pJQ4R=E0_?cT0Cc56L&%-O#ETJM7MMTfs4J540&Fv)&;4hc@HbGwk% zrM!u<E-*}PHIVRQ{M17G59j--zo={16=$*@o3~z0yYj8^dx)pnY}Gq6FSCWWWl4uN z+R)3HGfU;R=js;NlvccnrRNX!62$kkMm&A5rKKdd!W~_t5q+*9?ap6K_hkQqCOqh~ z&(KFTTw6`r*s3f)%g?vKaxR{vs<syS=`j=4vawjTZZ6P+A^XwV&Fj6XG%WCxR=R7F zIyHT|o=V%L4Vr2DHHRJz*-XzpP%DTIdJ0{^EkOGR9^XRaWfJG18>hU4x%lD@-VHR; z?;<^}zWN$k*{>c{4;sAHJ8k9aOat}NVp{TDTfp1Bs`9dn^>VYSuEwjFIYY~Ncsj{B zbz){SZ4u8SJJUzyRFvzb^X3fNO{fc8Dc+*{cDzjdoi{P!y_=V1E!6*$>3AKriNc$m zH{DEI%G<ovtIkW1orYuT%j4AP_0;Pqe&h{GBRf5`!Lo0@IEQV_OW+xmv=>D8bxLz6 z?wy>a9w9F~S(TekHzd4y^l4JRpD}@=QHm($@tz0;SS{2m=H*R^mueA78ZSA2=bOi* z5#343FIhq!vgMLXX)E}0@4S_(w6ywG2;Fj_8(_ybP3>-_v7Eg7&`2#`CU;35d+5XW zoYcuH=qCC^JDYC+LAHAJ-PtqM>7}{qscPN>4Mam7+8$>)OW6aG<zjE8g^$-huZ^Pp zF@?O7wu)rp@TQ@m-fL{Gqq~acme&2_=$<fbUgj3t>huKCn>-*mHBVJ-T&r839~R;f zpDlPeSdr08ciH$(TXUUyseHUTv$;~WUKvn3$b7wZd}oZ-!*c@DxKj)!7CO?>#k8nw z*Xw)r&a!d(L6F8~z5`1S;?&ov4`$K5k!>_c*U*qq7*L@ca;|fzv2PA!@?gxJl?H6p za>co7<rP^u9E)><%jBd^+&C$xjs|xYl|S|L48S|I`=v+gELsQBw#q8n{#kDN>EU_h zBs#Z#U>ZNPlOXyKeP7>8EiWI|*g|5r)T+bfW7J!d$&!}@Gg%CtTPW05Gq-P<$&X!e zaKm8%PxJUN4b$?6?g|^rlBkELkK>`42SrRSdE4l|L`@lqNjp_@vS#v-!&7Kf)FH%V zi?gUFHjTj~m1*v4n%l}BOq!>DdwZ6jmbq%?)(unHiY(Tk;*#k6Y(q2M#IB#KUYb5x z9a%$S(IXrM6|~x&S*A|67Ia@2P+1qzB)f>F#hC^AsT3{c5EAMjLvIXIKtCZpqn-tu zO9Aj)<=tMc-rAX~J}I;_xi|9iiTevbtGRM>);NBAj|JxOoabk@FAL9)GO(bH>ciXV zSpb?4k5o~wqn?*rN}FnhSu_Gr>(gqK7gn!LVN=tS1T_UDa6s9!veb(eG@{H5OyE%# zPMe(aT+XAu=|csXbq#a9hL*YXSj=4Y0fn!pZ==n{d>U<v0)BeXPR-o7VHEdx9wE8+ z*H=}0{K!aMjoN!ojTr#+zGRkqttQw_>zm(F{B&d{ub0`nxrOt1{2auL^V`~$H#uLu zR?gjpwbQ0dZ=feJnt10*{jPZSFm6&Ban;N#wq&r!ai^)SQpa=0lZdwJE6Gxy-({=F zRvJWS&|nnXBki7I!dw&O1k^89<Z&PB-jGX%qJd+5AfF@Tc+q$Os#m|CTuM*(aBQrn z_RKnZB!?xUMlyq5j-824v17*$HS_unIkTuic|FVxN*{G%#4Pm+-2&o)Gqj5y0_4Zt zNZdI=b$au}Xa_lSA+=;V-%GSd($i-N!tm2*AJBZ!x1&I{63l4|*H4$wgGajpnc80( zsTCS&YxuVD8FTBj@6!mw{Xq}Yb4e0vFnauorjQX-%}rVA$c?$`x206wjYX<;jIDms zL6O%j6S>uXvLQ<?y@85m(WT<7%=Wf+Ee$;<rb_cGy2oX87n8?L;JGS$2HmEpYpC}4 znJNqmoWd&n%-!4tYw4N420aLqOgZdCZRA9C<Unkpk8hr&j*x1<r4YSx7d1UU^+*03 z^>4D&Y~D!DQg3au{R`UXs}Ht~Q^z*vssg$luLsua^5}UWb^6xaDK#WfElD)D);z() zlFVB+)4S|}v0iOsmA86sgSVxwncJ$gs$rowZ|Nmo^U^JJ!=+B&py9UTjUWo3)%_*p zlsC~so1OHC4Z8rv7BtVD-jPe~P+-P5YL00|^c<ZY=wpLE&y>VO{z#j4zsR3Bp@tV0 zBooV4Gq>7XSyS&_Qcd@{TIbVaUUO)goug*nx?xVkimSbC_Z;z7-}F4mYwokLJiOxO zCk!}P;?Wb<CjEH6(1FA0TS>sl1#12-5{{O0g>-v5UNCwNlx8C%q-|O;OC7t6=FRI! zjbd(5+I1aa(%f6=##~-ttQMSB4NcU<t<>Ku*Wd5e(yi{fb!x`#8>iG!>n_`Jhqq|c zXQ(Llj1}J##B;W6%Y#L<vDg_<Z`??myCr$*`yF&^bY!k}C&<L|6?E^UXD#VbI<j5g zZPbs=5TwrV_j9tkq+d~8G+-{f#H%K6<Fd-xG+(Z~-m6=(-CKIW)!vFV+q}>U+OR$E zVy|iOrQXa%S9#@YuJS6||F%zP?M>d2^|yG<E4J$%#dXxTo?GB8*szBlLcU%r$M=Of z)~AM1_ZQF&%{??;QWrZloVpf8a^I&%aB2M1!k^w%px!!%`W21mJYb#bBv<d`F_r>_ zC`~2tGjFhq9g#Qmc?X+gAijygJKH=C@{G|+H$T|9XI55u^OtY-F1lj3w|dQ`-m;Y& zz50b4y!u6(y}E^)yqd)uy|Tp@crzN#|C>HFZ5Mfsi!QGBW;dT7)x55GzSn-ij_3{` zZz*#Na|p~ruyr`CuBN`Pe!qK~I<wpE&ZF6Nw@nWV=c!NbphwNS3RJ;Zieahw**c$` zlcln{s27hdP^Y@8__^8(HGl@Hrd3+IH=ou5yq4uIz%y2e2IeZNgdg?bv5#k>iWwDp zAN-0duF#fY3n2ht!RR}!UuNmE5xi}|Jgfj;<1WQm9FlQ8JWun65A$Do>81LSkX@g9 z#M{>OnAc48^VTRU$}Pez!!mFgcS$Z|gD@Vq6yx!C?gkWT=juwhNx6^~IqKt_iUw|G zjtQBOE9Zqg=XDd)gvp!LyddIrBk#ws8*txerMf<I9X;i3uVxoyWiGkvD_&hIxkzoB zch{kB6V@!v%ZB0STkdtA^X`4{Sy~ug<89lvO$Q(RgeOm@EHKy2E=@s+T6EXAE<Rv_ z-7ii#U}0G}XyF?R{GCsyutE7A7Jt~l@!$D6pGDw3Bz?nT+Dxx}y15C?<!opPMKnIs zu}t*o(u_RM^OV7b3@nEpG#C>z2m|wXzQ*6VQWjW%qBsC&A(@Y{xr})@&-~283Qe0< zJxy!F1S|lj%n%O>1}<X&KJ{_%vlpl%pAB@$NegfC^x5=86<0{snO>z&V6Y-AAPZ7P z7SSJZJGL$>z#pdLV?2z7BRyOvdl1XR{7lc+Q6HDl_pT@dU*KtjP0f{ZGqbC)AM-VK z9WH0B*|pdjTnW1c`!~A*)3B1fZ^kK?Gc60nv`~hxv(QtfbWPFHmC$(_Q!qsna)n&R z46p)!FD)&N(y`_M;_rN&h2YAx#VF6IY~n?&#bu1cbxfH`8D`{W;S>z0l=CbIU8fDr zFLZIoVn^gAX6?Ai`Fi|^%lJkJYtD4MJIN_G2bVD)aKXnNm~q)ki<YivTN&{AjvS`b zW^|~mj!u~IA+um`mU`C7$$Q~DeDo|7d`_oM+b_TMhIRB!XHLL=;l|^9=_Yr}&4HP! z>I)B-8d~S8gQtG?oZ<c{`Mr%*Z!uqAfk}f@S&I9m`_fAHw@zGRcU-SgohwX=eCW!= za;N)>HyI^4jePGZEhvHNztAswDS!0!y`T7p8L@75=Uo>VU9!8=h;P3%N>><V(3-l- zuL~?*vUYN{7PV)Rq|;0qnrhO%3X?j2Fwl|To7C<#Dal8FlYPF74eEY1x_y(bsrT*c z5^C&!)8uU_cOJe>*J?k_qWgRu@u|A*qmil3cg}w64gOYP?|DMg%%6Auydc#Di7mfr zMd#p)`g){e;ai%+-S>lZJ6i(~^uG{`rS?2HG9M~Vqf!>TmQ|)I^4->xDS<9Ja40qC z3q%3Jkk|kK#4CRnr}7u@few7NGmPzk2QDu?kx$dDjH|G-(l7!r#@LonA?Q$HZ=+Pm z6|?c&+}Bg=E);{znQq9y4tSq0Pk)6zpaWlz_y+L6=cOm|flm0yvhoK&<h^wBjVmmp zuW-8Q(n6h6jG&;0A(I;d{GbPa!9?b#`T-1pWWxf$F!+1`2x$PH55V9<%R(^lgC6{y z%-==Y02q=F1)v#-9sp(1Q~*YkB{u;C06q8%=2XAc#XStbXo8^tn1Sg5fc_6)v@LLw zEdYA(({<DS00sawi3d1F84NTvBn18M!+-<2s0C%f8mdW{p8cyawcY3A{+6FlB^l#1 zj_3J&_GicFF{=NaCav*V0Yn<QM8=hkl)8_Xrc6_ZzHeW~md+v&uvLkiV}1Oe`D2=1 zDhEWZ&^Vh7q>!29^z(esng81KzdL*j+^b)<rl-*J4F?{o95&1j`skzP9V$&vvwglM z(&b|J!(wY>1z)oCf5d5{cKZ4mqnb0KU8|;3R-rvR^pqKKohK>fq6w+JEz951U+2uI zJw{_F2@3@vFcgTeEuxC4;a_|>dl-qtc8-aqB3~Sn2MMZ00#1ztktd7<Hm62{vZ+xC z)_y5b0@Mfzw29~+Bbj>pk<or%aDjW|)s*R$r}7`2HO!Ym0%lm+Ud92)3ADY6`4U|; ze|8GK`Ru#MUM$M$?9k&zy0Sx2=|YgMfrnGt5_~$44kt--x40=&)S<`D>5_>NehYB; zGyEML4;={o0rZ?=Tr8mPqejs`8DqHEr``4*)3y<D+ha0;=i`gL!L*T1St;$e!{N7v zPu+d6BpsBstVFST^I%SjFR0!-SV5LdKQt>%SDT?)4+W`U%b~&wE{IytHiJIPW#29S zwtbd%4~J9J+8qatJ$oOE+Ou~WT6@f~S7WWs699A=rp@ZU)f}+ZBahqZp(l+_o(aT$ z@_0{i{}qN6>9Lt+;L<7AJ;j~Air7y+QIrmv|Iu+#n*A!rE^7JD+f0M5Jeryz+&;gL zL%95ML>XX(+g!NX=L=HCej-7lH=gV%wmAUdOOn>gbg5I8Xr}w(_F=T0_C#(vXduxm zi4s*loth!s10(`#vP6+X2@<{d^g~5g8i9Hx?UUI|r&=Jj@0ns-u8JtmiwUB1KbM*z zYy%_#Zn7kZ$fUI%c($iFA~r#4mzmbmDMu>Vw)CIS8LHpi|B6*e!!2!5J&_HCVJjVZ z##)cMV<zArVhx%P^+7~Eu(8KVZJ*E}z}IxGmRk2*cTMO`Bbu}GBU%T@SQsVo`M^R& z`p-bA@z38^91*2%jd40eV-Vd>uMd={{^yqt@BNmcGpYOWpVP;>`)&x>X;PpGofno4 zw}sH8afDJpgr%zd#oN+4bj`6EBHuJMm^6-23ZgZX386{j2&F*RaPHyT(nF6Wc-JR~ zdx|@xO_4^#V|A)~AWxX;^pT=;kif^DOz<%tQ8U4fCXDt#@S+K$J@C;4iGJ~=o?_=J z<M2p3Wf7xO(*yUtD?Jc25b02&NWpMwhHwv%2&~BxMZTCI(OX9!DiVRpBwZ`voK8&- zJn~AhEmtARqlu!hb-*}479c0f;yj!n%PU{*DGqHl)<N1Up`K1nd+qzm#B^MSH10rY zz&St~@Fq(WdMH7fN5V9Ii_%DKSuE+)m}d7e8oHBg^T0r9z&St~@Fq)R_asPj*FX0Z zmtAdagS11&C!HGGY<_iOIxdTC?0o~J0p|c|z?&>h<UoQnSAUg8%WXy)r2R6->(ofY zJ!|D_Md=`cL|+&v5x61I<mlii)j*=v%YD99%9#1l{asH=m0I&J2P*m}n9-zQoJsqG zCM_#Asq-;cN}>91C}r_V-QY)ofV(@8I%0ooiC%=}0|bl7V+^WS-&-F}8D65Zgn`SB z)M?n<?XRbdEkPM*)(VZ`b>DuNXix^4GNCcN?)!wZ24$c*JKpF4UK!YZg_$Gis})_} zgARNV;WK#Z`4eN;pa>*ALITzp^cvcbia~=8d>z7P@Z977N@Al7G_^tlUSRut`*n-* zTo<H5(1FhuK7*(3Jvp`nMIh;umNu;J)Ld(93CcjzD>Q~z{psY`H7Ei}r;vaZ5`H_i zP=AGlpaWk>_za%f`n9oZPy~_!Apt9(KlUdo4?6IH&fuwczc#iD?u;etF>!B@!d;A; zq0|HhI%pMo@H>(R?pd*SvU{=i#NXuu0|3?v00fB$00e;u0^kEZ_{)SJxZsB%iTt!Y z2Lk}kmP&^Zpq{_1fe-ZHj|e|-!9S=4d3yj10O%0_00RJ;Bx>OEfgb!F!VlaIQNWSW zAfCUA+Yk%@s1*PJ*9yQ{N#g;SAN1h2g&(-!hahqMU3%*a3;^gWF--tqTPp4!L<1H8 z^x*Fme&B+Cpa5NF?+pw9=oA0|_eqC?CUF{Q1waq}knjT+`~#f0%X9-D7ywWp000I6 zG)Wc!^x*H8*$KE9L6R-dg>D1}02~tl00Uqs3xFQ{j_?B)Ls60wcIo+r+Yk%@SStVk z2Eb5G2zv0B2|sYb4@HaxssF(OU;qG23}Cd~U{0v_?j#Vv9!TVOCNKaF_#@)XJ)EY~ zWMu{h_tVEx8j5}~$E>0y4XrofQRG5OIk=eP?szLDJzt8kFXUXrWZ}2pOnKfaF&XNW z1kF>S=A|zNE4=;jlqaoX#-lROKt{uR^oegjX{Blr+!+h}Z>dplw={`1(9V{8H2e{* z&^#FLwU(A!@=Qv7v2)B=1gX8oND(?es@<6ae@0%SZ2GDd{@r(3Ig=SExPfx__NLUh zm8Dj}(Usp_V+FW6D)YaW`h~;%b^CMv+d}%Q&$m&`L%VlA{_K--c87g&`3*$J*V#w; z4|mEY@1HeNZT^1h#D6w-X!shD`kX&Lu1$-)eHX`tXXd4krUhYjvKd4FZcGAaLH|TI zN%UGZ;s*^yImSG;q|SLJ?<|QLG51|^5h+FsM^-Y~(N}*!Ml|1JMzmK5gywNe%KW2` zKJ=setP)%RNNAZMGyv}V<^IB>8-9EbHH%yTp%#X$VF296ruiRMn|~NMdg#4?Rg8-u zW=rv(24N@vjJxkEDMf1YPrnm5)nax|r@1?d{Hf`5*URQ2>*&_^kNQ)!3EcPh`rkeJ z$<J;HG>I|cqt0)Qap9{NJYnQo@!38-x~rFe)mSJDVQH0f#W3?JHQn#jcgeO=3<c~E zlO0{xPqsDRW3~+~6q9Kl_fK=J!lO+e-D4Hw0ze$DgH6U@Q7aU5|2lAV_iqE#t>rrC zjm^kvx&n9Ih?JtE$N$~2<SyuSW^eYzv(E+ih9?8ASGS*;)g(57jr6jGs)ZwBbc3yo zZOHxg)ayR>V#=uQ-%l1hIbRk#wHeu+Po7V(lN3W_dmfV=?fyO6Nq>*C)2GBrazr%G z(RKgv1er+6z^~!iM9iCDB1I;8^0hybl~@8I0ZY_M8tUk~|Mk>gGLZYoNh@D{>%WVd zcriyXuo7V4QJ6%~Ju&JTk5c3R)KFv_lh~3*{v`VSN1}<O81mZx&16U4{1cl<e~;-B z`o999c}zEb?i1>!xBw96kA~0ym~MK_r_@bx0fZ42hSW3w+)bZ&`W4G6MmgxB>N9Z6 z@b1+q)^`JM4eX*^WQA|_ThvFj{^63}_?M)*yRxiwGbr=&+C83S9jG{4WMVyMtc2Z2 zN1MDYO=0&_lSH>h-9y<{V?KDXzKJkaY+0?dq#iE!NL7Z-EUQrlnhv2cyu7R~ES4gW z)Jop4>Q!|K%0Ocaje&EUzeuZdl!2zN&}e9Q-Q~2*EkPM*dWFXDx{GrxT4+icXgVbi zUbNP=*%#6>+XOg4N<jy{knkBi_f^J58E6WG2E2^Ne-CD+kzr%lpaWmOw4%Y&Yv?s7 z1I;m^0Wah6Ut#79J(KcG9Hczxzz0t;c<#frKJP*qXoyY!ffxD0%!i|L^NhY$WI)hY zCV9}KT_e(-D31n>hQ2F$%lPb=L^npGcMJgldI%5^ehAVh4FExs1u*m!#sZ*6000aC z2$Bo{dhmA$KLjz}L5sv86wvg1mmdJN0svqDM1}wWJ@{?mhaljGBFPFcy}rv2fW89h zR{{k8Iy-~_pa*}i@Iw&eXEY8E!B6yEI%)?%rvLyL01zZu1JHv%B>WHr6%VCAsG!Se z41fXw05ICVX9x{I5B`1`dm#vV(NGHXcL@Ukj!7QC02oRD(1YI*ehA`7w}c|e7VH88 z0M-fsfB}G}NCp5s_;DS$;D;i(&f@?r{#tyPrVufNJ~9ym2+@Y{VtBRb6}<Qx<?hb6 zCKdf$R)9$VV5Vs2cQW<Parga{LQpBj3>`YdWG=4&pM7nVMKOUchy@RtpL(gS8C_Zh zjtZX{ZGE1C0!F4QfP%yZA^h+dixz`g8oe0Y-<n1XnOrw_p}(vdT0(2**G6kt1KOh9 zI>Z5u_U^q!7D8_4Wy2Zyt&zt54fH+m2rUT{MbsDdlJEtqm<b0F-vIH7uqZsL)N*7s zxbX)m@1~hGpxgYzlv@`LwH{oVv>rr0aXo0sdeHs!hbe`V5|)Bi(o)c(CoNb<xA{jY zi<@C7ST4fh4XFW(qOYUN!Eucr={VdCPOuP(+g}p)UyJ#E0rR=L4-T-O^DCw@fw=h| zYyQZ;8HA8VGJ!bC;377oldzgM77x-|B^ro>1T63>0~P*Lne{hD;$j!rNr!=4wRjpj zBt{l^n(44^+w_=+9TpS)%m{D)lu{Ocj@$ZA15I?Aslp#kw<r>KbSBP5?;D7ah6=wt z!+L^N)lvwJH9kwKncd+z{!wA4l6xGkfHG<ujS!waJ7ycpJPUGYg#S>Q*?DlAzn)s4 z?&vPr-x_d#QDt4#lw_eOnv}zXU?~h`#-rSOtD_dOUlI$wCl>l))IxgKNs1x1^J6Ac zwCsKMCp9$Wn0%a-ek4}Xd|_Jp(wZ(Jg#fX+4z?15CA*UCZmzdJDFF?5q8e(f@U0Co zdkwMdEpu;gwld<E9?i7$D8nq3Z>G=wJd++f$E2ZOi9LQnY0}aIya+hYjv^i`J#vaU zM_S=(MDm8qtUOQ#njWFiNHmo54Ly{BrbB29uUUGa3^cVuV|d+nTPdtZ8E9;w0WT~% zHgjIWGq#`uU!PdY;JJ(E5jM&|(<?OKjbVQ-g`b~7SPwezbqb%sb6;g_lz}EBG~fmH zLxDuOK?lA9;WK#d)HYf&pbRv?0x$B{W`BdWonrgM@DhXy$HZ$u51Yb6P>v;o(8rbx zjsO4{0B5C<k^w*u0oKB8B}HTR48d>c<CY9%!U$lr+)x^T9s-;lX}leRfIl*X0Gd92 z$q*3$0QX6AL6c+)fF1($2tNb?KP;Kd&-4jPh7JJ$FaV%QG63iyK&|jY5cua%{6wF) zWUvJQzyN?C$pU~L0`!eAO#neU#ezdMLEng^B}1<O02ly6H38@$K&S9S5b#5hWCc3A zgaH5{$paYOaHuu}J@^ZRAA*2?C<VH}0Dyjs`T|rSCLF38fgb#rHGm8LvxE17E*}^G z022Wi0MG>2WzFHk^n}pJ`K6hzKnKf#A9zL}w|<e;Q1mldZAcpWzL||9r(`yk`%O}e z3E24_lksY!)cx_zR%5s+WUZh8Ko`da0E|Mjph4v|M^X42=UR7DtRz<e2$2m!c<T}? z)5?1DpEP&mTa=o}pz;a7o!=|vvj~~~_v!2W6s5c4aet&lXQ>>Q0d3gavCFOhld84V zs~PwB3ah0_3<pC-{!Qk6ng1~kqBr-6XBY#!^($i$)C-2wen;&1t*9OKs!fWacIZ1y z7XH~v4l+$9W<BTI2E$;5pFfX-OcVkk!WFQI4bs;0btEc<Ac6@Db9m~SSiBS$U+!<s zbzfX-J=7%H!y2~a;a<I>eW#@8V8$x$ofnZ?S+e<!G$N{ejZzbGYja33<P3d-$--0D zX>;gIoH^bQ49%o>zr*PlTeSV{$Q8guUN@8mj<>%@x%=))NezEzgGD!9a2ez_3q>Z> zFtG^Ktz2aV!nvC*x?=?ru)v@iDvsr?EwmpV8Mq(LMOOITOL#wAo5bDzRoeeP`Rnu% z;l3-Z?9^nNhdAOSnc#`=yoih?u)S#ucl_04^UypUa@vxHn#GCdQfh3jgLo;1Do!Jl zh2OkduXA)JX7fnBU}&ar_jc`FQV0aQ&JYRGc{@1FM<IwpECnmX%yAamaSa*y$n|98 z5|DreMmA94@7+NA5KwNoSr%1h4x_VfGH&aX$ANR!N(s^w*LppLUeQZO7eJiO0HYUn z@<BTiOYf6Yg^rvn;33wgJg(bBL;w4F<F4~L7?XF`-DH)d8D94e`ks!OGr5}5<+f}L zL`QCEUUV@+(tqe`7_rf{dZgJ4beD5S(2$EeaL<YHtHr)^#J+P}eHU1YVbcg-wp_ZG zUK*x>n>vpvi8VPyaWp4ypNtMabc^+c*!IbL0p1zmHeBuQ`(aA?f}|Vj*#yC#+_(*t zQ*n9TK;i4=hWg*RfzswK-DRcci(NAaj+@8W+1<L!njW{-dwUnJ^~5JSb4;KVlC&?& z<ei@z1BN~n0~Wh4-C+&SbH<o*Lf3!6<5MTNr|z(d@_~r;!`WOy(ks9n?+#0Ii@Gek zOP7&kpouUI<-rS7FP%@j#BQg64tzbr2R!ic39ooQ&<S6cuR|CC2u3eGkr8yLuvYj0 z2)=f^fGizb#DNZcw(uD|e!5Nm+U>^Fct#L{u}|6qfHA%Y{PBFC17EN30S|m$`U8G_ z_>TKrkV-)aMmPch!RYht(qF*`I`DxGc*wWgyP}q1*JcMxSYs53q+l>68t4mLF#~`e z;bH&qM9&5PSur_q!B6ywYm8$80AQFpG6VqVA%G+N5Cr@^L-0Gplhzn(1pvTkGiZ{m z0q7w>neamp@I#Pf{<1D%0KnO7V?qG;Ns|nv0qDUW5q<~){<A|^pbHED=n((_0|1&N zYXExicL+al;e^TKiTD8Ze_;SXt>gg=fXEOUfFAs|@B_C~EI4=*Q2z%505IMH7yv{0 z0O-LF3jr7WPz2Z60>^m#!N88WHuAH?0UZ^i3D6`1+LYn}KAOmf5fyC+1t?~C&AN>S zCpnsE6(^kfw?CZo))*e^`HN0xn~I$odWNaB^0J>cCmq&4%c;Bgm{nLKM3}Hcm5I_C z^&X^Cz534_n)SW!ZhP6Pu)gYk_p{clVXs+1l8n#H7G}>Esc$5SmD>N~krjNE2UM2( zQY-G*>~T59xKoZXa>}!Odv^b$<``q-k?1kTvMD&mIHND=*epbb3R+*bgI3L5e2-O> zvgVEbv&!6k_gJ>Ij-)C)@ST+5!zTLH`{|>;_G2UWl_Wb``v&*-_gMK2>&evVbc`d{ zSL{0+J-%xHixJzNXT(P8JZP36I@RHCw$0*`ApH+V)##6^F{USM8iO5&jRSz0?yQ>w z1*!8^)9WbQ5udZ(J5OpN$@CvH@OfwG3B7S0_AvRksOe_CfosEjZ?)Se*SIG>w93<6 z0^vWl$mEPbny<%N@28LZ_`OzPc1N85-M}r`#FvG|x6q0+$q6yZEz*)R%rWH91I8qw z+iAhWfpT_##4NFGPIXBc+lD~xhoUy>@S~|~3gS+zvW<W^lfJVgwlXznH8{VLC2>Ex z&+5+ZA%Y4j)2X`V<A!EO<N`G;4-}wA_KVyizrAMzx5euZTHW~xr~;Iw9)F5n{$QnM z?r+U+w(E@c$+Z9#wS?|BwV-ypN!Rl30jlLLlD&mKoCfK`e_8J1Pgx_goqdK)r)<J; zcFy1xf>Io+Uc>*v6?leZc=H$VWvg*#<}};W2FHT15Z>Nvq<~WPT#cUbkhQmX(x;vW zWTd>}$>Kibt_r0T?r+U&cE$`|6Od6;<nz)PFjtkXY5c?1-f@AyR1;N}xqsHQW@pOa z6#*C(Irm9>h-&sMT~YlPt-WJ@{y#&g<bL-VtE$NwyaphmhS0rYG*QW(rfb;xs1<at zf5h58?)9Onk<lkx>$Al4GHE$|dqejPK}T)&=S*#o!XB?{yYn&9=kcK`a;@hq@`BLd zRR9uIMDCHck*e)Ux{8MnQrqkvstVC1N9!_w@QMJ8ik!QpZA2%#R9E!!A<|{jP!+ke zULakZ+Xt@#kf<W`S!o>6$u81Wy!kkJbn_5ZWNVM!|M|2r`&&m<+cNwOXc$38P4->V zFszh2uF=YKi=Vchbay!X#-eQZw@+JRii8F{kvk2KmNLp?yG_qnUvwjTt?6#yS>h5Z za5;Mnm#)!pEqm5_Qhon>)7_$8qL=HSkKAE)rgUv_wOrFnwVd5&Rk+p9S)+?V1~zAx zY-ll@VcYc_DKzZ1^aASY?$YP2f?^PXNlywi{%Ekcx*mO=>MB!I*X1uzT_6J+jH}@c z+dsWPb)A1%>L_Xi_x2a9F?lk}U`IAO+n5boou!&_8IWdjG8?u!gu+>b;a#DdSLu-I z#5I=h5a=nb{msAW?VSE6L;AW70;wD^A7VgTVnD=(i2V@7_DD30SP)f6G_}z8Aca#6 zwDR^-`kM8u#RIo~KSfDm5a>K3F`uN7=_YSaqm*Zh;k`QcBhjDJG2qyjt+As(g-AkE zQ+)WcRhlBPUiw#Mt|(Re-zgt7<SQci8qBLwhK%`&jJWm+(<yaoV!lw12?QKB8VK}8 z1A!$4kH>-~j(v=T19y?2i8kQwdnop~{dE}A=X<~1xBFjJ>37Sc+T87KdBtLN?y=~j zZ@EW9Shjf~^tnfyoS`nY_>E@f&n`ClIOiFCbZYeJctl>hbs(xwe*l5asIo&beL@6h z+Rdehh29+1ajUt8)H%g(AmfLJ*1CWAiZ!yUnqY{Boh_H-FxO)TOn7gRKl?PFp=*uH z^L`j#FQX5KQ8-}2IX~So$L68AI`FBYF7sHC0p^29@NRg!-qNB<&<n6w#F7b1D6E9I zBK);U41PNmWYLaiyL}l?ZpPVP)^R4i{!IStr^UM^4V6oNBD~$vUQUnnz7X?vP{G@s zDa_^Gddw>IR|d@MfUGw6TgPZ=({2Yz1oJu|7HtF7d^;V)so)D()jX0Gx2icJvG5x4 za8AX;A2c3b_CU-dQsEIZoP#ls(9yk?D(2ylNk%s#z1#Mx^^A2fN#Y*)NlKa;`=1$Z z)>r9a_rp{@SNE?j9~>zXCa7w&VaS|XWhT=nUkb8WHCP^?x$ax95#UQvK)!==wEzGR zEdl9h7xrsD-<{O&4oJU4-qHEFR8c#9a)^<L^dDEue_Y0Y$hW)a9Jk8-?e=`P>9{o^ zJzl_KD%F0$43DJMaH9Y0FNwUXvm??2%l2z~)A~10nHB(XZ@QS@ylcqae8Nf_W-K(= zb3J@oV^$aM*OCe0?7%`NfRjgLNXHNlrw2W!tkE5m^2pBPOS^rXJEo7aKD#h+WVip> zOtSg-5*jaU$s5Kzv~RXwG%nQll1cH}6++g3SU7?cjpzgol8~8X_cQY)-=@>Jo?*Q{ zNY98H{fF!uqhz$aNJdLeWwhL9TBd(*v~NVvICDZhk0tdD5f}<YN{j+f%n1H=)WMP! z_}ae?qQEC)dKvDG0$JL@(7D-&_Gp>DHc02@)F@EKf)h>e=c5WZ`O(hZ`)Hy95Eu&B z#nP5qF}MEfR$<D?``rt_Zq2fGso#IQ+&<TLM}R->*IuRDJs}c?9p}&PhhL|iiaP=p z`3y~0zItB|Ct7m5K%~81q(yq0@g$p5mVQol|9wXK$h}eNBjX_b7&}gSM%Ij!VyEIl zULB`=(|WhYmMT~T{)5LsKj<5hyGh0l?%tPE#=BJ!t1~(fY30<cH}&wA>;5ESW%x-O zmUeZveUY(d**Z$O=u&-1wOBw=3GSqr%H8jM%lf{-pphW!7Gr}5r(%Ou1~v3K*dRYN zk!-*XFMmC6(A_(xo-ii#a;!z!CK@PalhT%dA)7q>ZENwE1)Vouzw@%ogXdj-<yF^i z4{q6hS#a64H(l<#)(w8sn&y_hWi6{3b#1~{9?S*}pb_NI=3_a`!9_hXvc-)1(%ASI zIfVIpB<*GG5S+8eMorlNsEJO>GXLAW__L|sF)ko{zK$f_?Kk+IGOp5A41L8&eTO^i zZL26%Q@C^rtHggzcB%VCzg6CK@9~xs-z+@X{Dbf0pJ3*_ZuyB_N4|P|N#m3j&d=D> z_*&ZT%`N?Z{$n%e@werpx|2TN?iS`}o*>cjHO9Jw_?d_EjJuSuer5P~zxm*gPi*+r zA6i<TdYP{8?rJ$b<+CSde|bU6!*A!e5OK?v`?j6<P3=`DCO1tvK|-AP-LLL^ZSifH zt<(PJkH<-f;|$7w&pcV%N<y?=n4NK=ulhfa=Y4b7YlYR5zA_@y*Ibu5`uLxpf2Fw~ z_p<7r{`tAKoBs7*Uf*#4eXl?M>7v)ieYf}Z|JwOl+t`QiZR_>A7SZUrn<dfGGVr~} zPaOYdVJTVUL0#Ei_qpS{jx>-(p4AqZvFEj~rtLo6-2dmDgIeVDlvGma>&*|p{UBpB zZ@KR`$A44%>*JG~o@I>Vzx!1RDRf`UwEx+8ynp1McMj0Vo%czgU$uT%<{o-AWo_xt zAAk7xJzs2UUO(<Xj<0K6eu9-|Ir(qWZL{6?(yU49%!d`JdII8ubu+AR?w_qmfmHos zDgEXe_rQ<no@cMz+gzI|cO4}SrJKBS+6;5{2b8k^%ByQC>-@F(V8(r~P6nfSE#K9z ztkGHWKU@w;U53p(;fgZQ6bOysHBY#r3^e_aQPY}N)}RbD$AkvF#yEU%Y$Wyl*v(1M zfzJ^>gXcb0?;pDcWuSqrz#GF}L!CH=4Lb0F&fxJoYeu;{-n9Z<Wl||_V4Te`#s`BD zhGr@;4$67ZDWeSN!5<NR;DX;672Ia5C;l!U7y!^C004%jXe~fM0MLWKL->IU{^Zs$ z{9SZ%Oc(%AD|rAr3C)7)qZ;@?4}M$tfeU^J0t77p)$aoX0Q$uL0gSdBTmyQ&h|q(- zSMtCG|6om^U$6oO0CWlffB^ta5;UL;=)sQ;3|utbAU<SXumT1EpaKBHbZ{nIXA|mo zTgXU(C_BO<M%?TJJ}3Z%I<o@o?dIJUr{zAFq><4EBgC&D*K@vJBjrmmCRuwFlZ8KR z@zYr!{XMn_)2t+hfeQcfQ9r%fLf&W&eyAciPkhM7nY0Me2LMO8xlj4an?xt*s7FNt z$0!NiU@Lfw(UsqD(NOe+QOTCn8Da8~+^CBBsT?VWi2AY>E?LAXGAY%HYY^W+h3R=5 z5?{m9vpMu)i_b@2Y_ULpjqN+|ODp)ZPs+J1^@}Ye{|`CHv?SSTkQW{TmxPPLdd6e; z9213_zoEU)7bFTsnq%w`N{gCKKQbuAFi$9($-=MxMn5vBGcnsanFhnwOzs`0{q!u; zzw1W^<qBXT=~A0UaGQVTf0&Nfgin9W52oQFh;7>t8~89q%k*F-3PGghX4lln;n)Ab zPsO1SL@<_Sjs}pw4tyeSY>0d71sBnyk^jYy5NZ>}X8y^6xQCs#do=ME$oLW&X6Bk6 zNspzPeCU0nLF6ZtCLC;O$`e-1YyCE{#HM|nCADz*7+<EmsnJaPC<BcnG=|qq`zQm= zTA?w#=3ooTKvO0(hS!{_M;U0&il&CwoT*0{XkZn?>;B0~8QX<2(4b|&i+o|`P0<j8 zXJ=Rz18axW4|?d(FS4WDOpY`+8v58_kXiu%Fcfr#002D%u!SFjfFFV+3t;GJmIOdw znrTr0qvHM{1OPqwdxal@K!9UI@N4?`!yugk0ANTCr%u)Y^bjB<{1D`<SY#-ErcZoO zO8@{2fT1)f5PAsEk6tF_5fK2ENLGO8lOEI(00093mPiIbw}t??4ne>VMQ|Ond+2?6 z?iW*^^HVcEfDjc!14r7jU#I5q^5)c(Nkt#X6fdcx2PO)@EFNcQfgw+&N->7PND5bH z4lnO`Hibr9T@V|{H9w6q29FOC6o!8=EQQ`^f-8W6#0DXJYdTMtTAG1}m!T!J)}tZS zg3%EU1GB-5#v0}b?(VFV=n>q5#%Q5tnaS#~mto%7CB=}`X=JkSh;04NE}e-f9H}=L z1}psTaGGL@Q3wQ^D`2ZIb9DCLHwL+fes9@s>p3ZOc2bDI6g7~pAxy6g`Ww&T@>D^U z!C1h75n&{B61a*nn)^gPz5gq;VD;OK5l!ccmX)G_oHmhSi0o7|S$Od%vQ)9j#93;N zU@%kE2*GDxDPTX6i$Jnx8)8BH-WWY|OCg9tEDcF%n8V$LOoT!ZL4AW5KChUF(u`hi z$%iSk&#_;Ky%vm#Q`{{drc4Q6R+=)lJUU(1xW_^%4^%kP-;br3q1TZ#a*y1z65BgJ z;%<bugPT|2fEN?jTE>da*E≠BuK%W!TJojWW=j)iFE08%5Ka`5I-Qi3pA1HS;yf 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 diff --git a/assets/models/cam.blend1 b/assets/models/cam.blend1 deleted file mode 100644 index 4fc2cdf8cba6ba557ee674c9e3078e8d396e4021..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795204 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∈tf5DTx!3jgFDvXf536PUhr6nM!z+-v)<P;u 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 diff --git a/assets/models/cam.gltf b/assets/models/cam.gltf index 9171742..558c28f 100644 --- a/assets/models/cam.gltf +++ b/assets/models/cam.gltf @@ -59,14 +59,14 @@ { "bufferView" : 0, "componentType" : 5126, - "count" : 19, + "count" : 58, "max" : [ 1, 2, 1.7000000476837158 ], "min" : [ - -1, + -1.0014973878860474, -1, -1.7000000476837158 ], @@ -75,48 +75,48 @@ { "bufferView" : 1, "componentType" : 5126, - "count" : 19, + "count" : 58, "type" : "VEC3" }, { "bufferView" : 2, "componentType" : 5126, - "count" : 19, + "count" : 58, "type" : "VEC2" }, { "bufferView" : 3, "componentType" : 5123, - "count" : 21, + "count" : 72, "type" : "SCALAR" } ], "bufferViews" : [ { "buffer" : 0, - "byteLength" : 228, + "byteLength" : 696, "byteOffset" : 0 }, { "buffer" : 0, - "byteLength" : 228, - "byteOffset" : 228 + "byteLength" : 696, + "byteOffset" : 696 }, { "buffer" : 0, - "byteLength" : 152, - "byteOffset" : 456 + "byteLength" : 464, + "byteOffset" : 1392 }, { "buffer" : 0, - "byteLength" : 42, - "byteOffset" : 608 + "byteLength" : 144, + "byteOffset" : 1856 } ], "buffers" : [ { - "byteLength" : 652, - "uri" : "data:application/octet-stream;base64,AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAv2Zmpj+amVm/AACAv2Zmpj+amVk/AACAvwAAAEAAAACA//9/vwAAAAAAAACAMPnkPi/5ZD8AAACAScwlPwAAAAB0DkO///9/vwAAAAAAAACAMPnkPi/5ZL8AAACAScwlPwAAAAB0DkO///9/vwAAAAAAAACAMPnkPi/5ZD8AAACAScwlPwAAAAB0DkM///9/vwAAAAAAAACAMPnkPi/5ZL8AAACAScwlPwAAAAB0DkM/MPnkPi/5ZL8AAACAMPnkPi/5ZD8AAACAScwlPwAAAAB0DkO/ScwlPwAAAAB0DkM/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAgPwAAQD8AACA/AABAPwAAID8AAEA/AADAPgAAQD8AAMA+AABAPwAAwD4AAEA/AAAgPwAAgD8AACA/AACAPwAAID8AAIA/AADAPgAAgD8AAMA+AACAPwAAwD4AAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AACA/AABAPwAAID8AAIA/AAAgPwAAYD8JAAYAAAAJAAAAAwAFAAIADgAKAAQADAAIAAsADwABAAcADQASABEAEAAAAA==" + "byteLength" : 2000, + "uri" : "data:application/octet-stream;base64,AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgD+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgL+amdm/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgD+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAvwAAgL+amdk/AACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACA33x/v2Zmpj+amVm/33x/v2Zmpj+amVm/33x/v2Zmpj+amVm/33x/v2Zmpj+amVk/33x/v2Zmpj+amVk/33x/v2Zmpj+amVk/33x/vwAAAEAAAACA33x/vwAAAEAAAACA33x/vwAAAEAAAACAAACAvwAAAEAAAACAAACAvwAAAEAAAACAAACAvwAAAEAAAACAAACAv2Zmpj+amVm/AACAv2Zmpj+amVm/AACAv2Zmpj+amVm/AACAv2Zmpj+amVk/AACAv2Zmpj+amVk/AACAv2Zmpj+amVk/ETGAvwAAgL+amdm/ETGAvwAAgL+amdm/ETGAvwAAgL+amdm/ETGAvwAAgL+amdm/ETGAvwAAgL+amdk/ETGAvwAAgL+amdk/ETGAvwAAgL+amdk/ETGAvwAAgL+amdk/ETGAvwAAgD+amdk/ETGAvwAAgD+amdk/ETGAvwAAgD+amdk/ETGAvwAAgD+amdk/ETGAvwAAgD+amdm/ETGAvwAAgD+amdm/ETGAvwAAgD+amdm/ETGAvwAAgD+amdm/3p1/PwAAAAAAAACA3p1/PwAAAAAAAACA3p1/PwAAAAAAAACA3p1/PwAAAAAAAACAScwlvwAAAAB0DkM/MPnkvi/5ZL8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/ScwlvwAAAAB0DkM/MPnkvi/5ZD8AAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAScwlvwAAAAB0DkO/MPnkvi/5ZL8AAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/ScwlvwAAAAB0DkO/MPnkvi/5ZD8AAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAScwlvwAAAAB0DkO/ScwlvwAAAAB0DkM/MPnkvi/5ZL8AAACAMPnkvi/5ZD8AAACAAACAvwAAAAAAAACAAAAAAHudRb9lvSI/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAHudRb9lvSK/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAHudRb9lvSK/AAAAAHudRb9lvSI/AAAAAHudRb9lvSK/AAAAAHudRb9lvSI/AACAPwAAAAAAAACAAAAAAHudRb9lvSI/AAAAAP//fz8AAACAAACAPwAAAAAAAACAAAAAAHudRb9lvSK/AAAAAP//fz8AAACAAACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAMPnkPi/5ZL8AAACASswlPwAAAAB0DkO/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAMPnkPi/5ZL8AAACASswlPwAAAAB0DkM/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/MPnkPi/5ZD8AAACASswlPwAAAAB0DkM/AAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/MPnkPi/5ZD8AAACASswlPwAAAAB0DkO/MPnkPi/5ZL8AAACAMPnkPi/5ZD8AAACASswlPwAAAAB0DkO/SswlPwAAAAB0DkM/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAgPwAAQD8AAMA+AABAPwAAwD4AAEA/AADAPgAAQD8AAMA+AABAPwAAID8AAIA/AAAgPwAAgD8AACA/AACAPwAAID8AAIA/AADAPgAAgD8AAMA+AACAPwAAwD4AAIA/AADAPgAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAIA/AAAgPwAAgD8AACA/AACAPwAAID8AAGA/AAAgPwAAYD8AACA/AABgPwAAID8AAGA/AAAgPwAAYD8AACA/AABgPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAIA/AAAgPwAAgD8AACA/AACAPwAAwD4AAEA/AADAPgAAQD8AAMA+AABAPwAAwD4AAEA/AADAPgAAgD8AAMA+AACAPwAAwD4AAIA/AADAPgAAgD8AACA/AACAPwAAID8AAIA/AAAgPwAAgD8AACA/AACAPwAAID8AAEA/AAAgPwAAQD8AACA/AABAPwAAID8AAEA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AAAAAAAAgD8EABEAAAANABMABQAIABAADAABABIACQAaABQAFwAfACUAIgAZABYAIQAZACEAJAAbABgAIwAbACMAHQAVABwAHgAVAB4AIAApADUAOAAsACgANgAxAC0AOQA0ADAANwACAAoALgACAC4AMgALAA4AKgALACoALwAGAAMAMwAGADMAJgAPAAcAJwAPACcAKwA=" } ] } diff --git a/examples/simple.rs b/examples/simple.rs index 72ae648..9941d48 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -14,10 +14,6 @@ use driver_marker_derive::DriverMarker; fn main() { App::new() - .insert_resource(WgpuSettings { - features: WgpuFeatures::POLYGON_MODE_LINE, - ..default() - }) .add_plugins(DefaultPlugins) .add_plugin(WireframePlugin) .add_plugin(ConfigCam) @@ -93,6 +89,11 @@ fn setup( ) .clone(), transform: Transform { + translation: Vec3 { + x: 0.0, + y: 0.5, + z: 0.0, + }, scale: Vec3::new(0.5, 0.5, 0.5), ..Default::default() }, diff --git a/src/lib.rs b/src/lib.rs index 7f5411b..0f65014 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -37,7 +37,7 @@ pub(crate) fn update_look_at( } //https://math.stackexchange.com/questions/80923/average-of-multiple-vectors - let total_targets = targets.iter().count(); + //let total_targets = targets.iter().count(); //avg /= total_targets as f32; rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la| { From 6cbcc9e54f331472412006aa02575bee64f71161 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 28 Sep 2022 22:47:02 +0200 Subject: [PATCH 38/63] Removed notice --- src/lib.rs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 0f65014..85568d1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,9 +46,6 @@ pub(crate) fn update_look_at( } pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) { - // Waiting for 1.63 for stable, use nightly until August 11 2022 - // https://forge.rust-lang.org/#current-release-versions - // https://github.com/rust-lang/rust/issues/83701 rigs.try_for_each_driver_mut::<YawPitch>(|yp| { if keys.just_pressed(KeyCode::Z) { yp.rotate_yaw_pitch(-90.0, 0.0); From bd5f6bfe7989bae328c3c325f02174a1c7e4434a Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 28 Sep 2022 22:51:46 +0200 Subject: [PATCH 39/63] Removed unused crate --- Cargo.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 24e63e2..cffdd92 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,6 @@ name = "bevy_config_cam" rand = "0.8" strum = "0.24" strum_macros = "0.24" -macro_rules_attribute = { path = "../macro_rules_attribute-rs" } bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly"} driver_marker_derive = { path = "driver_marker_derive" } From 06e42583f16f5afac68b37f64792e19c3dec4b61 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Wed, 28 Sep 2022 23:01:18 +0200 Subject: [PATCH 40/63] Updated CI --- .github/workflows/{master.yml => main.yml} | 49 +++++++++------------- 1 file changed, 20 insertions(+), 29 deletions(-) rename .github/workflows/{master.yml => main.yml} (60%) diff --git a/.github/workflows/master.yml b/.github/workflows/main.yml similarity index 60% rename from .github/workflows/master.yml rename to .github/workflows/main.yml index d81eaf2..868a79d 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/main.yml @@ -17,42 +17,32 @@ jobs: - uses: actions-rs/cargo@v1 with: command: update - - check: - name: Check - runs-on: ubuntu-latest - needs: update - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: nightly - override: true - - uses: actions-rs/cargo@v1 - with: - command: check - test: name: Test Suite runs-on: ubuntu-latest - needs: update steps: - - uses: actions/checkout@v2 - - name: Update apt - run: sudo apt update - - name: Install libudev - run: sudo apt install libudev-dev - - name: Install libxkbcommon - run: sudo apt install libxkbcommon-dev - - name: Install libwayland - run: sudo apt install libwayland-dev - - uses: actions-rs/toolchain@v1 + - name: Checkout sources + uses: actions/checkout@v2 + - name: Cache + uses: actions/cache@v2 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.toml') }} + - name: Install stable toolchain + uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: stable override: true - - uses: actions-rs/cargo@v1 + - name: Install Dependencies + run: sudo apt-get update; sudo apt-get install pkg-config libx11-dev libwayland-dev libxkbcommon-dev libasound2-dev libudev-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev + - name: Run cargo test + uses: actions-rs/cargo@v1 with: command: test @@ -75,7 +65,6 @@ jobs: clippy: name: Clippy runs-on: ubuntu-latest - needs: update steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 @@ -83,6 +72,8 @@ jobs: profile: minimal toolchain: stable override: true + - name: Install Dependencies + run: sudo apt-get update; sudo apt-get install pkg-config libx11-dev libasound2-dev libudev-dev - run: rustup component add clippy - uses: actions-rs/cargo@v1 with: From 189605d96fa36d745615be3b0672656f76ab7b18 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 15 Nov 2022 23:51:25 +0100 Subject: [PATCH 41/63] Update to bevy 0.9 --- Cargo.toml | 4 ++-- examples/minimal.rs | 8 ++++---- examples/multiple_targets.rs | 19 ++++++------------- examples/simple.rs | 26 ++++++++++++++------------ src/lib.rs | 33 ++++++++++++++++----------------- 5 files changed, 42 insertions(+), 48 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index cffdd92..67eae97 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,11 +29,11 @@ bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly"} driver_marker_derive = { path = "driver_marker_derive" } [dependencies.bevy] -version = "0.8" +version = "0.9" features = ["bevy_render","bevy_pbr"] default-features = false [dev-dependencies.bevy] -version = "0.8" +version = "0.9" features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] default-features = false diff --git a/examples/minimal.rs b/examples/minimal.rs index 30dfdaa..a635639 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -16,14 +16,14 @@ fn setup( mut materials: ResMut<Assets<StandardMaterial>>, ) { // plane - commands.spawn_bundle(PbrBundle { + commands.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); // cube - commands.spawn_bundle(PbrBundle { + commands.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(0.0, 0.5, 0.0), @@ -31,12 +31,12 @@ fn setup( }); // light - commands.spawn_bundle(PointLightBundle { + commands.spawn(PointLightBundle { transform: Transform::from_xyz(4.0, 8.0, 4.0), ..Default::default() }); - commands.spawn_bundle(Camera3dBundle { + commands.spawn(Camera3dBundle { camera: Camera { is_active: true, ..Default::default() diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index 9f36c63..32ce5a1 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -1,6 +1,3 @@ -fn main() {} - -/* use bevy::prelude::*; use bevy_config_cam::*; fn main() { @@ -35,7 +32,7 @@ fn setup( mut materials: ResMut<Assets<StandardMaterial>>, ) { // plane - commands.spawn_bundle(PbrBundle { + commands.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Plane { size: 11.0 })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() @@ -43,26 +40,24 @@ fn setup( //Target 1 commands - .spawn_bundle(PbrBundle { + .spawn((PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(-5.0, 0.5, 0.0), ..Default::default() - }) - .insert(T1); + }, T1)); //Target 2 commands - .spawn_bundle(PbrBundle { + .spawn((PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(5.0, 0.5, 0.0), ..Default::default() - }) - .insert(T2); + }, T2)); // light - commands.spawn_bundle(PointLightBundle { + commands.spawn(PointLightBundle { transform: Transform::from_xyz(4.0, 8.0, 4.0), ..Default::default() }); @@ -98,5 +93,3 @@ fn set_closest_target( cl.target = None; } } - -*/ diff --git a/examples/simple.rs b/examples/simple.rs index 9941d48..b1c90bd 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -36,7 +36,7 @@ fn setup( asset_server: Res<AssetServer>, ) { // plane - commands.spawn_bundle(PbrBundle { + commands.spawn(PbrBundle { mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() @@ -45,21 +45,23 @@ fn setup( // cube commands - .spawn_bundle(SpatialBundle::from_transform(Transform { + .spawn(SpatialBundle::from_transform(Transform { rotation: Quat::IDENTITY, translation: Vec3::new(2., 0., 0.), ..default() })) .with_children(|cell| { - cell.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..Default::default() - }); - }) - .insert(Rotates) - .insert(Target); + cell.spawn(( + Rotates, + Target, + PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }, + )); + }); // light commands.spawn_bundle(PointLightBundle { @@ -129,7 +131,7 @@ fn setup( ..Default::default() }); - commands.spawn().insert(CameraCount { total: 2, index: 0 }); + commands.spawn(CameraCount { total: 2, index: 0 }); } #[derive(Component)] diff --git a/src/lib.rs b/src/lib.rs index 85568d1..6514fcb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,8 +2,8 @@ use bevy::{ ecs::{component::TableStorage, system::SystemParam}, input::Input, prelude::{ - App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Transform, - Vec3, With, + App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Resource, + Transform, Vec3, With, }, }; use bevy_dolly::{dolly::glam, prelude::*}; @@ -76,22 +76,20 @@ fn default_setup(mut commands: Commands) { //Default player entity : Cone //commands.spawn().insert(Target); - commands - .spawn() - .insert( - Rig::builder() - .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) - .with(Smooth::new_rotation(1.5)) - .with(Arm::new(glam::Vec3::Z * 4.0)) - .with(bevy_dolly::prelude::LookAt::new(glam::Vec3::new( - 0., 0., 0., - ))) - .build(), - ) - .insert(Pinned); + commands.spawn(( + Pinned, + Rig::builder() + .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(glam::Vec3::Z * 4.0)) + .with(bevy_dolly::prelude::LookAt::new(glam::Vec3::new( + 0., 0., 0., + ))) + .build(), + )); //Missing FPV - commands.spawn().insert(FPV); + commands.spawn(FPV); } #[derive(SystemParam)] @@ -112,6 +110,7 @@ impl<'w, 's> DriverRigs<'w, 's> { } } +#[derive(Resource)] pub struct Drivers(Vec<Box<dyn DriverMarker>>); impl Default for Drivers { @@ -133,7 +132,7 @@ pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'stati fn remove_from(&self, commands: &mut Commands, entity: Entity); } -#[derive(Default)] +#[derive(Default, Resource)] pub struct DriverIndex(usize); impl DriverIndex { From b26d1383c5f89c568e4abaa47bb5404c4eb7a51c Mon Sep 17 00:00:00 2001 From: Oliver Atkinson <oliveratkinsoneng@gmail.com> Date: Sat, 10 Dec 2022 16:37:41 -0700 Subject: [PATCH 42/63] split up lib.rs into smaller, easier to look thru parts --- src/drive/driver_control.rs | 51 ++++++++++++++++ src/drive/mod.rs | 3 + src/drive/views.rs | 18 ++++++ src/lib.rs | 118 +++--------------------------------- 4 files changed, 79 insertions(+), 111 deletions(-) create mode 100644 src/drive/driver_control.rs create mode 100644 src/drive/mod.rs create mode 100644 src/drive/views.rs diff --git a/src/drive/driver_control.rs b/src/drive/driver_control.rs new file mode 100644 index 0000000..e330e8f --- /dev/null +++ b/src/drive/driver_control.rs @@ -0,0 +1,51 @@ +use bevy::prelude::{ResMut, KeyCode, Input, Res, Camera, Query, Entity, Commands}; + +use super::drivers::{DriverIndex, Drivers}; + +// TODO documentation + + +//Use collection with and keeping an index component or the like +pub fn change_driver_system( + mut index: ResMut<DriverIndex>, + drivers: Res<Drivers>, + keys: Res<Input<KeyCode>>, +) { + if keys.just_pressed(KeyCode::T) { + index.next(drivers.marker.len()); + } +} + +pub fn update_driver_system( + q: Query<(Entity, &Camera)>, + mut commands: Commands, + index: Res<DriverIndex>, + drivers: Res<Drivers>, +) { + if index.is_changed() { + for box_component in &drivers.marker { + let component = box_component.as_ref(); + let component_id = component.get_id(); + + if let Some(h) = drivers.marker.get(index.index) { + if component_id.eq(&h.get_id()) { + //Add new driver component + //Remove old driver component + for (entity, camera) in q.iter() { + if camera.is_active { + component.add_to(&mut commands, entity); + println!("Adding {:?} to Camera {:?}", component.get_name(), entity); + } + } + } else { + for (entity, camera) in q.iter() { + if camera.is_active { + component.remove_from(&mut commands, entity); + println!("Remove {:?} from Camera {:?}", component.get_name(), entity); + } + } + } + } + } + } +} diff --git a/src/drive/mod.rs b/src/drive/mod.rs new file mode 100644 index 0000000..1063db7 --- /dev/null +++ b/src/drive/mod.rs @@ -0,0 +1,3 @@ +pub mod drivers; +pub mod views; +pub mod driver_control; diff --git a/src/drive/views.rs b/src/drive/views.rs new file mode 100644 index 0000000..642f582 --- /dev/null +++ b/src/drive/views.rs @@ -0,0 +1,18 @@ +use driver_marker_derive::DriverMarker; +use super::drivers::DriverMarker; + +use std::any::TypeId; + +use bevy::{ + prelude::Component, + ecs::{system::Commands, entity::Entity} +}; + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct FPV; + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct Pinned; +//Substates: +//Locked Rotation +//Free \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 6514fcb..8d98e82 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,16 +1,19 @@ +mod drive; +// mod lib2; + use bevy::{ - ecs::{component::TableStorage, system::SystemParam}, input::Input, prelude::{ - App, Camera, Commands, Component, Entity, KeyCode, Plugin, Query, Res, ResMut, Resource, + App, Commands, Component, KeyCode, Plugin, Query, Res, Transform, Vec3, With, }, }; use bevy_dolly::{dolly::glam, prelude::*}; -use driver_marker_derive::DriverMarker; - +use drive::{drivers::{DriverIndex, Drivers, DriverRigs}, views::{FPV, Pinned}, driver_control::{change_driver_system, update_driver_system}}; pub use std::any::TypeId; +// TODO documentation + pub struct ConfigCam; impl Plugin for ConfigCam { fn build(&self, app: &mut App) { @@ -62,15 +65,6 @@ pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) #[derive(Component)] pub struct Target; -#[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct Pinned; -//Substates: -//Locked Rotation -//Free - -#[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct FPV; - fn default_setup(mut commands: Commands) { //Should be default player entity //Default player entity : Cone @@ -91,101 +85,3 @@ fn default_setup(mut commands: Commands) { //Missing FPV commands.spawn(FPV); } - -#[derive(SystemParam)] -struct DriverRigs<'w, 's> { - rigs: Query<'w, 's, &'static mut Rig>, -} - -impl<'w, 's> DriverRigs<'w, 's> { - fn try_for_each_driver_mut<T>(&mut self, f: impl FnOnce(&mut T) + std::marker::Copy) - where - T: bevy_dolly::prelude::RigDriver<bevy_dolly::prelude::RightHanded>, - { - for mut rig in &mut self.rigs { - if let Some(camera_driver) = rig.try_driver_mut::<T>() { - f(camera_driver); - } - } - } -} - -#[derive(Resource)] -pub struct Drivers(Vec<Box<dyn DriverMarker>>); - -impl Default for Drivers { - fn default() -> Self { - Self(vec![Box::new(Pinned), Box::new(FPV)]) - } -} - -impl Drivers { - pub fn new(driver_markers: Vec<Box<dyn DriverMarker>>) -> Self { - Self(driver_markers) - } -} - -pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'static { - fn get_id(&self) -> TypeId; - fn get_name(&self) -> &str; - fn add_to(&self, commands: &mut Commands, entity: Entity); - fn remove_from(&self, commands: &mut Commands, entity: Entity); -} - -#[derive(Default, Resource)] -pub struct DriverIndex(usize); - -impl DriverIndex { - pub fn next(&mut self, len: usize) { - if self.0 >= len - 1 { - self.0 = 0; - } else { - self.0 += 1; - } - } -} - -//Use collection with and keeping an index component or the like -fn change_driver_system( - mut index: ResMut<DriverIndex>, - drivers: Res<Drivers>, - keys: Res<Input<KeyCode>>, -) { - if keys.just_pressed(KeyCode::T) { - index.next(drivers.0.len()); - } -} - -fn update_driver_system( - q: Query<(Entity, &Camera)>, - mut commands: Commands, - index: Res<DriverIndex>, - drivers: Res<Drivers>, -) { - if index.is_changed() { - for box_component in &drivers.0 { - let component = box_component.as_ref(); - let component_id = component.get_id(); - - if let Some(h) = drivers.0.get(index.0) { - if component_id.eq(&h.get_id()) { - //Add new driver component - //Remove old driver component - for (entity, camera) in q.iter() { - if camera.is_active { - component.add_to(&mut commands, entity); - println!("Adding {:?} to Camera {:?}", component.get_name(), entity); - } - } - } else { - for (entity, camera) in q.iter() { - if camera.is_active { - component.remove_from(&mut commands, entity); - println!("Remove {:?} from Camera {:?}", component.get_name(), entity); - } - } - } - } - } - } -} From d9b43183a0515bb2bed6201cbe927cbbd7a896f8 Mon Sep 17 00:00:00 2001 From: Oliver Atkinson <oliveratkinsoneng@gmail.com> Date: Sat, 10 Dec 2022 16:38:22 -0700 Subject: [PATCH 43/63] DriverIndex & Drivers, change from tupele struct to normal struct --- src/drive/drivers.rs | 71 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/drive/drivers.rs diff --git a/src/drive/drivers.rs b/src/drive/drivers.rs new file mode 100644 index 0000000..f00ce24 --- /dev/null +++ b/src/drive/drivers.rs @@ -0,0 +1,71 @@ +use std::any::TypeId; + +use bevy::{prelude::{ + Resource, Entity, + Commands, Component, Query}, ecs::{component::TableStorage, system::SystemParam}}; +use bevy_dolly::prelude::Rig; + +use crate::Pinned; + +use super::views::FPV; + +pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'static { + fn get_id(&self) -> TypeId; + fn get_name(&self) -> &str; + fn add_to(&self, commands: &mut Commands, entity: Entity); + fn remove_from(&self, commands: &mut Commands, entity: Entity); +} + +#[derive(Resource)] +pub struct Drivers{ + // access must happen in this folder or children + pub (super) marker: Vec<Box<dyn DriverMarker>>, +} + +impl Default for Drivers { + fn default() -> Self { + Self { + marker: vec![Box::new(Pinned), Box::new(FPV)] + } + } +} + +impl Drivers { + pub fn new(marker: Vec<Box<dyn DriverMarker>>) -> Self { + Self{marker} + } +} + +#[derive(Default, Resource)] +pub struct DriverIndex { + // access must happen in this folder or children + pub (super) index: usize, +} + +impl DriverIndex { + pub fn next(&mut self, len: usize) { + if self.index >= len - 1 { + self.index = 0; + } else { + self.index += 1; + } + } +} + +#[derive(SystemParam)] +pub struct DriverRigs<'w, 's> { + rigs: Query<'w, 's, &'static mut Rig>, +} + +impl<'w, 's> DriverRigs<'w, 's> { + pub fn try_for_each_driver_mut<T>(&mut self, f: impl FnOnce(&mut T) + std::marker::Copy) + where + T: bevy_dolly::prelude::RigDriver<bevy_dolly::prelude::RightHanded>, + { + for mut rig in &mut self.rigs { + if let Some(camera_driver) = rig.try_driver_mut::<T>() { + f(camera_driver); + } + } + } +} From f212268c6d27ca1e06a197eef3e4b52372f8c152 Mon Sep 17 00:00:00 2001 From: Rushmore75 <oliveratkinsoneng@gmail.com> Date: Thu, 15 Dec 2022 22:21:50 -0700 Subject: [PATCH 44/63] changes, based on conversation --- src/drive/mod.rs | 3 - src/drive/views.rs | 18 - .../drivers.rs => driver/driver_core.rs} | 7 +- .../driver_resources.rs} | 3 +- src/driver/mod.rs | 2 + src/drivers/first_person_view.rs | 12 + src/drivers/mod.rs | 2 + src/drivers/pinned.rs | 11 + src/lib.rs | 16 +- src/lib2.rs | 709 ------------------ 10 files changed, 42 insertions(+), 741 deletions(-) delete mode 100644 src/drive/mod.rs delete mode 100644 src/drive/views.rs rename src/{drive/drivers.rs => driver/driver_core.rs} (93%) rename src/{drive/driver_control.rs => driver/driver_resources.rs} (97%) create mode 100644 src/driver/mod.rs create mode 100644 src/drivers/first_person_view.rs create mode 100644 src/drivers/mod.rs create mode 100644 src/drivers/pinned.rs delete mode 100644 src/lib2.rs diff --git a/src/drive/mod.rs b/src/drive/mod.rs deleted file mode 100644 index 1063db7..0000000 --- a/src/drive/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod drivers; -pub mod views; -pub mod driver_control; diff --git a/src/drive/views.rs b/src/drive/views.rs deleted file mode 100644 index 642f582..0000000 --- a/src/drive/views.rs +++ /dev/null @@ -1,18 +0,0 @@ -use driver_marker_derive::DriverMarker; -use super::drivers::DriverMarker; - -use std::any::TypeId; - -use bevy::{ - prelude::Component, - ecs::{system::Commands, entity::Entity} -}; - -#[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct FPV; - -#[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct Pinned; -//Substates: -//Locked Rotation -//Free \ No newline at end of file diff --git a/src/drive/drivers.rs b/src/driver/driver_core.rs similarity index 93% rename from src/drive/drivers.rs rename to src/driver/driver_core.rs index f00ce24..ec8e557 100644 --- a/src/drive/drivers.rs +++ b/src/driver/driver_core.rs @@ -1,3 +1,5 @@ + +use crate::{FPV, Pinned}; use std::any::TypeId; use bevy::{prelude::{ @@ -5,9 +7,6 @@ use bevy::{prelude::{ Commands, Component, Query}, ecs::{component::TableStorage, system::SystemParam}}; use bevy_dolly::prelude::Rig; -use crate::Pinned; - -use super::views::FPV; pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'static { fn get_id(&self) -> TypeId; @@ -43,6 +42,8 @@ pub struct DriverIndex { } impl DriverIndex { + + /// Goes to next index, loops back to index `0` if already at the last index. pub fn next(&mut self, len: usize) { if self.index >= len - 1 { self.index = 0; diff --git a/src/drive/driver_control.rs b/src/driver/driver_resources.rs similarity index 97% rename from src/drive/driver_control.rs rename to src/driver/driver_resources.rs index e330e8f..29adf98 100644 --- a/src/drive/driver_control.rs +++ b/src/driver/driver_resources.rs @@ -1,6 +1,7 @@ use bevy::prelude::{ResMut, KeyCode, Input, Res, Camera, Query, Entity, Commands}; -use super::drivers::{DriverIndex, Drivers}; +use super::driver_core::{DriverIndex, Drivers}; + // TODO documentation diff --git a/src/driver/mod.rs b/src/driver/mod.rs new file mode 100644 index 0000000..4246b72 --- /dev/null +++ b/src/driver/mod.rs @@ -0,0 +1,2 @@ +pub mod driver_core; +pub mod driver_resources; diff --git a/src/drivers/first_person_view.rs b/src/drivers/first_person_view.rs new file mode 100644 index 0000000..30ce8e2 --- /dev/null +++ b/src/drivers/first_person_view.rs @@ -0,0 +1,12 @@ +use bevy::prelude::Component; +use driver_marker_derive::DriverMarker; +use std::any::TypeId; +use crate::Commands; +use bevy::ecs::entity::Entity; + +use crate::driver::driver_core::DriverMarker; + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct FPV; + +// TODO impl \ No newline at end of file diff --git a/src/drivers/mod.rs b/src/drivers/mod.rs new file mode 100644 index 0000000..ed1831f --- /dev/null +++ b/src/drivers/mod.rs @@ -0,0 +1,2 @@ +pub mod pinned; +pub mod first_person_view; \ No newline at end of file diff --git a/src/drivers/pinned.rs b/src/drivers/pinned.rs new file mode 100644 index 0000000..d34adc3 --- /dev/null +++ b/src/drivers/pinned.rs @@ -0,0 +1,11 @@ +use crate::{Commands, driver::driver_core::DriverMarker}; +use bevy::{prelude::Component, ecs::entity::Entity}; +use driver_marker_derive::DriverMarker; +use std::any::TypeId; + + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct Pinned; +//Substates: +//Locked Rotation +//Free \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 8d98e82..970db7b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,15 +1,17 @@ -mod drive; -// mod lib2; +mod driver; +mod drivers; +use crate::drivers::first_person_view::FPV; +use crate::drivers::pinned::Pinned; use bevy::{ input::Input, - prelude::{ - App, Commands, Component, KeyCode, Plugin, Query, Res, - Transform, Vec3, With, - }, + prelude::{App, Commands, Component, KeyCode, Plugin, Query, Res, Transform, Vec3, With,} +}; +use driver::{ + driver_resources::{change_driver_system, update_driver_system}, + driver_core::{DriverIndex, Drivers, DriverRigs}, }; use bevy_dolly::{dolly::glam, prelude::*}; -use drive::{drivers::{DriverIndex, Drivers, DriverRigs}, views::{FPV, Pinned}, driver_control::{change_driver_system, update_driver_system}}; pub use std::any::TypeId; // TODO documentation diff --git a/src/lib2.rs b/src/lib2.rs deleted file mode 100644 index aeb0dde..0000000 --- a/src/lib2.rs +++ /dev/null @@ -1,709 +0,0 @@ -use bevy::{ - ecs::{ - event::{Events, ManualEventReader}, - schedule::SystemSet, - }, - input::mouse::{MouseMotion, MouseWheel}, - prelude::*, - render::{ - camera::Camera, - camera::CameraProjection, - camera::{ActiveCamera, Camera3d, PerspectiveProjection}, - }, - window::Windows, -}; - -use strum::IntoEnumIterator; -use strum_macros::EnumIter; - -#[macro_export] -macro_rules! next_enum { - ($l:ident, $k:expr) => { - $l::iter() - .enumerate() - .nth( - $l::iter() - .enumerate() - .find(|a| a.1 == *$k.current()) - .map(|(i, _)| { - if i + 1 > $l::iter().count() - 1 { - 0usize - } else { - i + 1 - } - }) - .unwrap(), - ) - .unwrap() - .1 - }; -} - -#[derive(Component)] -pub struct PlayerMove; -#[derive(Clone, Eq, PartialEq, Debug, Hash)] -enum PluginState { - Enabled, - //Disabled, -} - -#[derive(Clone, Eq, PartialEq, Debug, Hash, EnumIter)] -enum ScrollType { - MovementSpeed, - Zoom, - Sensitivity, - Lerp, - CamFwd, -} -#[derive(Clone, Eq, PartialEq, Debug, Hash, EnumIter)] -pub enum CameraState { - //Look at player and other targets if set - LookAt, - //Follow the player only - FollowStatic, - //Camera is moved above and pointed down, rotation bound to one axis - TopDown, - TopDownDirection, - //Follows behind the player a certain distance - FollowBehind, - //Camera at same position as player, enables to use the mouse to look (WIP) - Fps, - //Use the mouse to look and move the camera freely - Free, -} - -pub struct PlayerKeyMap { - pub forward: &'static [KeyCode], - pub backward: &'static [KeyCode], - pub left: &'static [KeyCode], - pub right: &'static [KeyCode], - pub up: &'static [KeyCode], - pub down: &'static [KeyCode], - pub rot_left: &'static [KeyCode], - pub rot_right: &'static [KeyCode], -} - -pub struct PlayerSettings { - pub player_asset: &'static str, - pub speed: f32, - pub map: PlayerKeyMap, - pub pos: Vec3, - pub cam_fwd: bool, -} - -impl Default for PlayerKeyMap { - fn default() -> Self { - Self { - forward: &[KeyCode::Up], - backward: &[KeyCode::Down], - left: &[KeyCode::Comma], - right: &[KeyCode::Period], - up: &[KeyCode::RShift], - down: &[KeyCode::Minus], - rot_left: &[KeyCode::Left], - rot_right: &[KeyCode::Right], - } - } -} - -impl Default for PlayerSettings { - fn default() -> Self { - Self { - player_asset: "", - speed: 12.0, - map: PlayerKeyMap::default(), - pos: Default::default(), - cam_fwd: false, - } - } -} - -#[derive(Debug, Hash, PartialEq, Eq, Clone, SystemLabel)] -struct MovementUpdate; - -pub struct ConfigCam; -impl Plugin for ConfigCam { - fn build(&self, app: &mut App) { - app.init_resource::<CamLogic>() - .add_plugin(NoCameraPlayerPlugin) - .init_resource::<PlayerSettings>() - .add_state(PluginState::Enabled) - .add_state(CameraState::FollowBehind) - .add_state(ScrollType::MovementSpeed) - .add_system(toggle_camera_parent.after(MovementUpdate)) - .add_system(switch_scroll_type.after(MovementUpdate)) - .add_system(scroll.after(MovementUpdate)) - .add_system(cycle_cam_state.after(MovementUpdate)) - .add_system_set(SystemSet::on_enter(PluginState::Enabled).with_system(setup)) - .add_system_set( - SystemSet::on_update(PluginState::Enabled) - .with_system(move_player.after(MovementUpdate)) - .with_system(move_camera.label(MovementUpdate)), - ); - } -} - -#[derive(Default)] -pub struct Player { - entity: Option<Entity>, -} - -#[derive(Default)] -pub struct CamLogic { - player: Player, - camera_should_focus: Vec3, - camera_is_focus: Vec3, - pub target: Option<Entity>, -} - -const RESET_FOCUS: [f32; 3] = [0., 0., 0.]; - -#[allow(unused_must_use)] -fn cycle_cam_state( - mut cam_state: ResMut<State<CameraState>>, - settings: Res<MovementSettings>, - keyboard_input: Res<Input<KeyCode>>, -) { - if keyboard_input - .get_just_pressed() - .any(|m| settings.map.next_cam.iter().any(|nc| m == nc)) - { - let result = next_enum!(CameraState, cam_state); - - println!("Camera: {:?}", result); - cam_state.set(result); - } -} - -fn setup( - mut commands: Commands, - asset_server: Res<AssetServer>, - mut _cl: ResMut<CamLogic>, - settings: Res<PlayerSettings>, - mut meshes: ResMut<Assets<Mesh>>, - mut materials: ResMut<Assets<StandardMaterial>>, -) { - let mut a = if settings.player_asset.is_empty() { - commands.spawn_bundle(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), - material: materials.add(Color::rgb(0.7, 0.3, 0.3).into()), - transform: Transform::from_xyz(0.0, 0.5, 0.0), - ..Default::default() - }) - } else { - commands.spawn_bundle(( - Transform { - translation: settings.pos, - rotation: Quat::from_rotation_y(-std::f32::consts::FRAC_PI_2), - ..Default::default() - }, - GlobalTransform::identity(), - )) - }; - - let b = if settings.player_asset.is_empty() { - a.with_children(|_| {}) - } else { - a.with_children(|cell| { - cell.spawn_scene(asset_server.load(settings.player_asset)); - }) - }; - - _cl.player.entity = Some( - b.insert(PlayerMove) - .with_children(|parent| { - parent - .spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(-2.0, 5.0, 5.0) - .looking_at(Vec3::ZERO, Vec3::Y), - ..Default::default() - }) - .insert(PlayerCam); - }) - .id(), - ); - - // camera - commands - .spawn_bundle(PerspectiveCameraBundle { - camera: Camera { - ..Default::default() - }, - transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), - ..Default::default() - }) - .insert(FlyCam); -} - -// control the cam logic character -fn move_player( - keys: Res<Input<KeyCode>>, - time: Res<Time>, - settings: Res<PlayerSettings>, - mut transforms: Query<(&PlayerMove, &mut Transform)>, -) { - for (_player, mut transform) in transforms.iter_mut() { - let (_, mut rotation) = transform.rotation.to_axis_angle(); - let mut velocity = Vec3::ZERO; - let local_z = transform.local_z(); - //Forward should be togglable either xyz or cam direction xyz - let forward = if settings.cam_fwd { - Vec3::new(local_z.x, 0., local_z.z) - } else { - -Vec3::new(local_z.x, 0., local_z.z) - }; - - let right = Vec3::new(local_z.z, 0., -local_z.x); - - for key in keys.get_pressed() { - if validate_key(settings.map.forward, key) { - velocity += forward - } - if validate_key(settings.map.backward, key) { - velocity -= forward - } - if validate_key(settings.map.left, key) { - velocity -= right - } - if validate_key(settings.map.right, key) { - velocity += right - } - if validate_key(settings.map.up, key) { - velocity += Vec3::Y - } - if validate_key(settings.map.down, key) { - velocity -= Vec3::Y - } - if validate_key(settings.map.rot_left, key) { - //Wrapping around - if rotation > std::f32::consts::FRAC_PI_2 * 4.0 - 0.05 { - rotation = 0.0; - } - rotation += 0.1 - } - if validate_key(settings.map.rot_right, key) { - //Wrapping around - if rotation < 0.05 { - rotation = std::f32::consts::FRAC_PI_2 * 4.0; - } - rotation -= 0.1 - } - } - - velocity = velocity.normalize(); - - transform.rotation = Quat::from_rotation_y(rotation); - - if !velocity.is_nan() { - transform.translation += velocity * time.delta_seconds() * 4.0; - } - } -} - -// change the focus of the camera -#[allow(clippy::type_complexity)] -fn move_camera( - time: Res<Time>, - state: Res<State<CameraState>>, - mut cl: ResMut<CamLogic>, - mut settings: ResMut<MovementSettings>, - mut transforms: ParamSet<(Query<&mut Transform, With<Camera3d>>, Query<&Transform>)>, -) { - let mut delta_trans = Transform::identity(); - settings.disable_look = true; - settings.disable_move = false; - settings.locked_to_player = false; - - match *state.current() { - CameraState::Free => { - settings.disable_look = false; - return; - } - CameraState::LookAt => { - // if there is both a player and a bonus, target the mid-point of them - if let (Some(player_entity), Some(bonus_entity)) = (cl.player.entity, cl.target) { - let transform_query = transforms.p1(); - if let (Ok(player_transform), Ok(bonus_transform)) = ( - transform_query.get(player_entity), - transform_query.get(bonus_entity), - ) { - cl.camera_should_focus = player_transform - .translation - .lerp(bonus_transform.translation, settings.lerp); - } - // otherwise, if there is only a player, target the player - } else if let Some(player_entity) = cl.player.entity { - if let Ok(player_transform) = transforms.p1().get(player_entity) { - cl.camera_should_focus = player_transform.translation; - } - // otherwise, target the middle - } else { - cl.camera_should_focus = Vec3::from(RESET_FOCUS); - } - } - _ => { - if let Some(player_entity) = cl.player.entity { - if let Ok(player_transform) = transforms.p1().get(player_entity) { - match *state.current() { - CameraState::Fps => { - delta_trans.translation = player_transform.translation; - settings.disable_move = true; - - settings.disable_look = false; - delta_trans.rotation = player_transform.rotation; - delta_trans.translation += Vec3::new(/*-4.*/ 0., 1., 0.); - } - CameraState::TopDown => { - delta_trans.translation = player_transform.translation; - settings.disable_move = true; - - delta_trans.translation += - Vec3::new(/*-4.*/ 0., settings.dist, 0.); - delta_trans.rotation = - Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2) - } - CameraState::TopDownDirection => { - settings.disable_move = true; - settings.locked_to_player = true; - - delta_trans.translation += - Vec3::new(/*-4.*/ 0., settings.dist, 0.); - delta_trans.rotation = - Quat::from_rotation_x(-std::f32::consts::FRAC_PI_2); - } - CameraState::FollowBehind => { - settings.disable_move = true; - - settings.locked_to_player = true; - - delta_trans.translation += Vec3::new(/*-4.*/ 0., 1., 4.); - } - _ => {} - } - cl.camera_should_focus = player_transform.translation; - } - // otherwise, target the middle - } else { - cl.camera_should_focus = Vec3::from(RESET_FOCUS); - } - } - } - - const SPEED: f32 = 2.0; - - // calculate the camera motion based on the difference between where the camera is looking - // and where it should be looking; the greater the distance, the faster the motion; - // smooth out the camera movement using the frame time - let mut camera_motion = cl.camera_should_focus - cl.camera_is_focus; - if camera_motion.length() > 0.2 { - camera_motion *= SPEED * time.delta_seconds(); - // set the new camera's actual focus - cl.camera_is_focus += camera_motion; - } - // look at that new camera's actual focus - for mut transform in transforms.p0().iter_mut() { - if delta_trans.translation != Vec3::ZERO { - *transform = delta_trans - } else { - *transform = transform.looking_at(cl.camera_is_focus, Vec3::Y) - } - } -} - -#[allow(clippy::type_complexity)] -fn toggle_camera_parent( - mut act_cams: ResMut<ActiveCamera<Camera3d>>, - mut settings: ResMut<MovementSettings>, - mut query: ParamSet<(Query<(&FlyCam, Entity)>, Query<(&PlayerCam, Entity)>)>, -) { - if settings.locked_to_player && !settings.ltp { - let p1 = query.p1(); - let (_, b) = p1.single(); - act_cams.set(b); - - settings.ltp = true; - } else if !settings.locked_to_player && settings.ltp { - let pr = query.p0(); - let (_, b) = pr.single(); - act_cams.set(b); - settings.ltp = false; - } -} - -// Listens for Z key being pressed and toggles between the scroll-type states -#[allow(unused_must_use)] -fn switch_scroll_type( - mut scroll_type: ResMut<State<ScrollType>>, - keyboard_input: Res<Input<KeyCode>>, -) { - if keyboard_input.just_pressed(KeyCode::E) { - let result = next_enum!(ScrollType, scroll_type); - - println!("{:?}", result); - scroll_type.set(result); - } -} - -// Depending on the state, the mouse-scroll changes either the movement speed or the field-of-view of the camera -fn scroll( - mut settings: ResMut<MovementSettings>, - mut p_settings: ResMut<PlayerSettings>, - scroll_type: Res<State<ScrollType>>, - mut mouse_wheel_events: EventReader<MouseWheel>, - windows: Res<Windows>, - mut query: Query<(&FlyCam, &mut Camera, &mut PerspectiveProjection)>, -) { - for event in mouse_wheel_events.iter() { - match *scroll_type.current() { - ScrollType::MovementSpeed => { - settings.speed = (settings.speed + event.y * 0.1).abs(); - println!("Speed: {:?}", settings.speed); - } - ScrollType::Sensitivity => { - settings.sensitivity = (settings.sensitivity + event.y * 0.000001).abs(); - println!("Sensitivity: {:?}", settings.sensitivity); - } - ScrollType::Zoom => { - for (_camera, mut camera, mut project) in query.iter_mut() { - project.fov = (project.fov - event.y * 0.01).abs(); - let prim = windows.get_primary().unwrap(); - - //Calculate projection with new fov - project.update(prim.width(), prim.height()); - - //Update camera with the new fov - camera.projection_matrix = project.get_projection_matrix(); - camera.depth_calculation = project.depth_calculation(); - - println!("FOV: {:?}", project.fov); - } - } - ScrollType::Lerp => { - settings.lerp = (settings.lerp + event.y * 0.01).abs(); - println!("Lerp: {:?}", settings.lerp); - } - ScrollType::CamFwd => { - if event.y > 0.01 { - p_settings.cam_fwd = !p_settings.cam_fwd; - } - println!("CamFwd: {:?}", p_settings.cam_fwd); - } - } - } -} - -//bevy_flycam by sburris0 - https://github.com/sburris0/bevy_flycam - -/// Keeps track of mouse motion events, pitch, and yaw -#[derive(Default)] -struct InputState { - reader_motion: ManualEventReader<MouseMotion>, - pitch: f32, - yaw: f32, -} - -pub struct CamKeyMap { - pub forward: &'static [KeyCode], - pub backward: &'static [KeyCode], - pub left: &'static [KeyCode], - pub right: &'static [KeyCode], - pub up: &'static [KeyCode], - pub down: &'static [KeyCode], - pub next_cam: &'static [KeyCode], - pub next_setting: &'static [KeyCode], -} - -impl Default for CamKeyMap { - fn default() -> Self { - Self { - forward: &[KeyCode::W], - backward: &[KeyCode::S], - left: &[KeyCode::A], - right: &[KeyCode::D], - up: &[KeyCode::Space], - down: &[KeyCode::LShift], - next_cam: &[KeyCode::C], - next_setting: &[KeyCode::E], - } - } -} - -/// Mouse sensitivity and movement speed -pub struct MovementSettings { - pub sensitivity: f32, - pub speed: f32, - pub dist: f32, - pub map: CamKeyMap, - //pub force_cam: &'static[CameraState], - pub disable_move: bool, - pub disable_look: bool, - pub locked_to_player: bool, - pub lerp: f32, - - pub ltp: bool, -} - -impl Default for MovementSettings { - fn default() -> Self { - Self { - sensitivity: 0.00012, - speed: 12., - dist: 10., - map: CamKeyMap::default(), - disable_move: false, - disable_look: false, - locked_to_player: false, - lerp: 0.5, - ltp: false, - } - } -} - -/// Used in queries when you want flycams and not other cameras - -#[derive(Component)] -struct FlyCam; -#[derive(Component)] -struct PlayerCam; - -/// Grabs/ungrabs mouse cursor -fn toggle_grab_cursor(window: &mut Window) { - window.set_cursor_lock_mode(!window.cursor_locked()); - window.set_cursor_visibility(!window.cursor_visible()); -} - -/// Grabs the cursor when game first starts -fn initial_grab_cursor(mut windows: ResMut<Windows>) { - toggle_grab_cursor(windows.get_primary_mut().unwrap()); -} - -/// Spawns the `Camera3dBundle` to be controlled -fn setup_player(mut commands: Commands) { - commands - .spawn_bundle(PerspectiveCameraBundle { - transform: Transform::from_xyz(-2.0, 5.0, 5.0).looking_at(Vec3::ZERO, Vec3::Y), - ..Default::default() - }) - .insert(FlyCam); -} - -/// Handles keyboard input and movement -fn player_move( - keys: Res<Input<KeyCode>>, - time: Res<Time>, - windows: Res<Windows>, - settings: Res<MovementSettings>, - mut query: Query<(&FlyCam, &mut Transform)>, -) { - if settings.disable_move { - return; - } - let window = windows.get_primary().unwrap(); - for (_camera, mut transform) in query.iter_mut() { - let mut velocity = Vec3::ZERO; - let local_z = transform.local_z(); - let forward = -Vec3::new(local_z.x, 0., local_z.z); - let right = Vec3::new(local_z.z, 0., -local_z.x); - - for key in keys.get_pressed() { - if window.cursor_locked() { - if validate_key(settings.map.forward, key) { - velocity += forward - } - if validate_key(settings.map.backward, key) { - velocity -= forward - } - if validate_key(settings.map.left, key) { - velocity -= right - } - if validate_key(settings.map.right, key) { - velocity += right - } - if validate_key(settings.map.up, key) { - velocity += Vec3::Y - } - if validate_key(settings.map.down, key) { - velocity -= Vec3::Y - } - } - } - - velocity = velocity.normalize(); - - if !velocity.is_nan() { - transform.translation += velocity * time.delta_seconds() * settings.speed - } - } -} - -pub fn validate_key<T>(codes: &'static [T], key: &T) -> bool -where - T: PartialEq<T>, -{ - codes.iter().any(|m| m == key) -} - -/// Handles looking around if cursor is locked -fn player_look( - settings: Res<MovementSettings>, - windows: Res<Windows>, - mut state: ResMut<InputState>, - motion: Res<Events<MouseMotion>>, - mut query: Query<(&FlyCam, &mut Transform)>, -) { - if settings.disable_look { - return; - } - let window = windows.get_primary().unwrap(); - let mut state_delta = state.as_mut(); - for (_camera, mut transform) in query.iter_mut() { - for ev in state_delta.reader_motion.iter(&motion) { - if window.cursor_locked() { - state_delta.pitch -= - (settings.sensitivity * ev.delta.y * window.height()).to_radians(); - state_delta.yaw -= - (settings.sensitivity * ev.delta.x * window.width()).to_radians(); - } - - state_delta.pitch = state_delta.pitch.clamp(-1.54, 1.54); - - // Order is important to prevent unintended roll - transform.rotation = Quat::from_axis_angle(Vec3::Y, state_delta.yaw) - * Quat::from_axis_angle(Vec3::X, state_delta.pitch); - } - } -} - -fn cursor_grab(keys: Res<Input<KeyCode>>, mut windows: ResMut<Windows>) { - let window = windows.get_primary_mut().unwrap(); - if keys.just_pressed(KeyCode::Escape) { - toggle_grab_cursor(window); - } -} - -/// Contains everything needed to add first-person fly camera behavior to your game -pub struct PlayerPlugin; -impl Plugin for PlayerPlugin { - fn build(&self, app: &mut App) { - app.init_resource::<InputState>() - .init_resource::<MovementSettings>() - .add_startup_system(setup_player) - .add_startup_system(initial_grab_cursor) - .add_system(player_move.before(MovementUpdate)) - .add_system(player_look.after(MovementUpdate)) - .add_system(cursor_grab.after(MovementUpdate)); - } -} - -/// Same as `PlayerPlugin` but does not spawn a camera -pub struct NoCameraPlayerPlugin; -impl Plugin for NoCameraPlayerPlugin { - fn build(&self, app: &mut App) { - app.init_resource::<InputState>() - .init_resource::<MovementSettings>() - .add_startup_system(initial_grab_cursor) - .add_system(player_move.before(MovementUpdate)) - .add_system(player_look.after(MovementUpdate)) - .add_system(cursor_grab.after(MovementUpdate)); - } -} From ec68cd0e1cfd8a9791b7aa90e6a93e5159a6dd1b Mon Sep 17 00:00:00 2001 From: Rushmore75 <oliveratkinsoneng@gmail.com> Date: Sun, 18 Dec 2022 16:03:23 -0700 Subject: [PATCH 45/63] formatting --- examples/multiple_targets.rs | 16 ++++++++++------ src/driver/driver_core.rs | 26 ++++++++++++-------------- src/driver/driver_resources.rs | 4 +--- src/drivers/first_person_view.rs | 6 +++--- src/drivers/mod.rs | 2 +- src/drivers/pinned.rs | 7 +++---- src/lib.rs | 6 +++--- 7 files changed, 33 insertions(+), 34 deletions(-) diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index 32ce5a1..700f576 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -39,22 +39,26 @@ fn setup( }); //Target 1 - commands - .spawn((PbrBundle { + commands.spawn(( + PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(-5.0, 0.5, 0.0), ..Default::default() - }, T1)); + }, + T1, + )); //Target 2 - commands - .spawn((PbrBundle { + commands.spawn(( + PbrBundle { mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), transform: Transform::from_xyz(5.0, 0.5, 0.0), ..Default::default() - }, T2)); + }, + T2, + )); // light commands.spawn(PointLightBundle { diff --git a/src/driver/driver_core.rs b/src/driver/driver_core.rs index ec8e557..18a716d 100644 --- a/src/driver/driver_core.rs +++ b/src/driver/driver_core.rs @@ -1,13 +1,12 @@ - -use crate::{FPV, Pinned}; +use crate::{Pinned, FPV}; use std::any::TypeId; -use bevy::{prelude::{ - Resource, Entity, - Commands, Component, Query}, ecs::{component::TableStorage, system::SystemParam}}; +use bevy::{ + ecs::{component::TableStorage, system::SystemParam}, + prelude::{Commands, Component, Entity, Query, Resource}, +}; use bevy_dolly::prelude::Rig; - pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'static { fn get_id(&self) -> TypeId; fn get_name(&self) -> &str; @@ -16,33 +15,32 @@ pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'stati } #[derive(Resource)] -pub struct Drivers{ +pub struct Drivers { // access must happen in this folder or children - pub (super) marker: Vec<Box<dyn DriverMarker>>, -} + pub(super) marker: Vec<Box<dyn DriverMarker>>, +} impl Default for Drivers { fn default() -> Self { Self { - marker: vec![Box::new(Pinned), Box::new(FPV)] + marker: vec![Box::new(Pinned), Box::new(FPV)], } } } impl Drivers { pub fn new(marker: Vec<Box<dyn DriverMarker>>) -> Self { - Self{marker} + Self { marker } } } #[derive(Default, Resource)] pub struct DriverIndex { // access must happen in this folder or children - pub (super) index: usize, -} + pub(super) index: usize, +} impl DriverIndex { - /// Goes to next index, loops back to index `0` if already at the last index. pub fn next(&mut self, len: usize) { if self.index >= len - 1 { diff --git a/src/driver/driver_resources.rs b/src/driver/driver_resources.rs index 29adf98..616f486 100644 --- a/src/driver/driver_resources.rs +++ b/src/driver/driver_resources.rs @@ -1,11 +1,9 @@ -use bevy::prelude::{ResMut, KeyCode, Input, Res, Camera, Query, Entity, Commands}; +use bevy::prelude::{Camera, Commands, Entity, Input, KeyCode, Query, Res, ResMut}; use super::driver_core::{DriverIndex, Drivers}; - // TODO documentation - //Use collection with and keeping an index component or the like pub fn change_driver_system( mut index: ResMut<DriverIndex>, diff --git a/src/drivers/first_person_view.rs b/src/drivers/first_person_view.rs index 30ce8e2..29959dc 100644 --- a/src/drivers/first_person_view.rs +++ b/src/drivers/first_person_view.rs @@ -1,12 +1,12 @@ +use crate::Commands; +use bevy::ecs::entity::Entity; use bevy::prelude::Component; use driver_marker_derive::DriverMarker; use std::any::TypeId; -use crate::Commands; -use bevy::ecs::entity::Entity; use crate::driver::driver_core::DriverMarker; #[derive(DriverMarker, Component, Clone, Copy, Debug)] pub struct FPV; -// TODO impl \ No newline at end of file +// TODO impl diff --git a/src/drivers/mod.rs b/src/drivers/mod.rs index ed1831f..475e252 100644 --- a/src/drivers/mod.rs +++ b/src/drivers/mod.rs @@ -1,2 +1,2 @@ +pub mod first_person_view; pub mod pinned; -pub mod first_person_view; \ No newline at end of file diff --git a/src/drivers/pinned.rs b/src/drivers/pinned.rs index d34adc3..efe9bcd 100644 --- a/src/drivers/pinned.rs +++ b/src/drivers/pinned.rs @@ -1,11 +1,10 @@ -use crate::{Commands, driver::driver_core::DriverMarker}; -use bevy::{prelude::Component, ecs::entity::Entity}; +use crate::{driver::driver_core::DriverMarker, Commands}; +use bevy::{ecs::entity::Entity, prelude::Component}; use driver_marker_derive::DriverMarker; use std::any::TypeId; - #[derive(DriverMarker, Component, Clone, Copy, Debug)] pub struct Pinned; //Substates: //Locked Rotation -//Free \ No newline at end of file +//Free diff --git a/src/lib.rs b/src/lib.rs index 970db7b..89cd77a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -5,13 +5,13 @@ use crate::drivers::first_person_view::FPV; use crate::drivers::pinned::Pinned; use bevy::{ input::Input, - prelude::{App, Commands, Component, KeyCode, Plugin, Query, Res, Transform, Vec3, With,} + prelude::{App, Commands, Component, KeyCode, Plugin, Query, Res, Transform, Vec3, With}, }; +use bevy_dolly::{dolly::glam, prelude::*}; use driver::{ + driver_core::{DriverIndex, DriverRigs, Drivers}, driver_resources::{change_driver_system, update_driver_system}, - driver_core::{DriverIndex, Drivers, DriverRigs}, }; -use bevy_dolly::{dolly::glam, prelude::*}; pub use std::any::TypeId; // TODO documentation From 5eb94518813e058d42914446d3e1cef109cff621 Mon Sep 17 00:00:00 2001 From: Oliver A <76796612+Rushmore75@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:53:30 -0700 Subject: [PATCH 46/63] FPV -> Fpv Co-authored-by: Mikkel Rasmussen <theluja@gmail.com> --- src/drivers/first_person_view.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/drivers/first_person_view.rs b/src/drivers/first_person_view.rs index 29959dc..40dce78 100644 --- a/src/drivers/first_person_view.rs +++ b/src/drivers/first_person_view.rs @@ -7,6 +7,6 @@ use std::any::TypeId; use crate::driver::driver_core::DriverMarker; #[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct FPV; +pub struct Fpv; // TODO impl From c7a2857a2955d5cf3dd03cdef69e74bd5e061fcb Mon Sep 17 00:00:00 2001 From: Oliver A <76796612+Rushmore75@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:53:43 -0700 Subject: [PATCH 47/63] Update src/lib.rs Co-authored-by: Mikkel Rasmussen <theluja@gmail.com> --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 89cd77a..84a5021 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -85,5 +85,5 @@ fn default_setup(mut commands: Commands) { )); //Missing FPV - commands.spawn(FPV); + commands.spawn(Fpv); } From 2cb647a437e7d2a76e383b23694bff3323f92311 Mon Sep 17 00:00:00 2001 From: Oliver A <76796612+Rushmore75@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:54:00 -0700 Subject: [PATCH 48/63] Update src/driver/driver_core.rs Co-authored-by: Mikkel Rasmussen <theluja@gmail.com> --- src/driver/driver_core.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/driver_core.rs b/src/driver/driver_core.rs index 18a716d..aedb578 100644 --- a/src/driver/driver_core.rs +++ b/src/driver/driver_core.rs @@ -1,4 +1,4 @@ -use crate::{Pinned, FPV}; +use crate::{Pinned, Fpv}; use std::any::TypeId; use bevy::{ From a2e66350b1d5ec684b1bf675bece0a68c7214e60 Mon Sep 17 00:00:00 2001 From: Oliver A <76796612+Rushmore75@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:54:10 -0700 Subject: [PATCH 49/63] Update src/driver/driver_core.rs Co-authored-by: Mikkel Rasmussen <theluja@gmail.com> --- src/driver/driver_core.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/driver/driver_core.rs b/src/driver/driver_core.rs index aedb578..856c8aa 100644 --- a/src/driver/driver_core.rs +++ b/src/driver/driver_core.rs @@ -23,7 +23,7 @@ pub struct Drivers { impl Default for Drivers { fn default() -> Self { Self { - marker: vec![Box::new(Pinned), Box::new(FPV)], + marker: vec![Box::new(Pinned), Box::new(Fpv)], } } } From 40725c6aeae6eb4d8d2bbc787a192b83747244c8 Mon Sep 17 00:00:00 2001 From: Oliver A <76796612+Rushmore75@users.noreply.github.com> Date: Sun, 18 Dec 2022 21:54:34 -0700 Subject: [PATCH 50/63] make `driver` & `drivers` pub Co-authored-by: Mikkel Rasmussen <theluja@gmail.com> --- src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 84a5021..592ee24 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ -mod driver; -mod drivers; +pub mod driver; +pub mod drivers; use crate::drivers::first_person_view::FPV; use crate::drivers::pinned::Pinned; From 46413a4aeeaa964579bb0f92cfcb61cbd3f78d37 Mon Sep 17 00:00:00 2001 From: Oliver A <76796612+Rushmore75@users.noreply.github.com> Date: Mon, 19 Dec 2022 08:41:04 -0700 Subject: [PATCH 51/63] Update src/lib.rs Co-authored-by: Mikkel Rasmussen <theluja@gmail.com> --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 592ee24..f0d995f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ pub mod driver; pub mod drivers; -use crate::drivers::first_person_view::FPV; +use crate::drivers::first_person_view::Fpv; use crate::drivers::pinned::Pinned; use bevy::{ input::Input, From bd43cf78dab299dadd5f8a7492042af07dc25d6a Mon Sep 17 00:00:00 2001 From: Rushmore75 <oliveratkinsoneng@gmail.com> Date: Tue, 20 Dec 2022 15:28:09 -0700 Subject: [PATCH 52/63] fixed renaming issue --- src/driver/driver_core.rs | 2 +- src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/driver/driver_core.rs b/src/driver/driver_core.rs index 856c8aa..3350404 100644 --- a/src/driver/driver_core.rs +++ b/src/driver/driver_core.rs @@ -1,4 +1,4 @@ -use crate::{Pinned, Fpv}; +use crate::{Fpv, Pinned}; use std::any::TypeId; use bevy::{ diff --git a/src/lib.rs b/src/lib.rs index f0d995f..dffb6c3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -22,7 +22,7 @@ impl Plugin for ConfigCam { app.init_resource::<DriverIndex>() .init_resource::<Drivers>() .add_rig_component(Pinned) - .add_rig_component(FPV) + .add_rig_component(Fpv) .add_startup_system(default_setup) .add_system(change_driver_system) .add_system(update_driver_system) From d7a0beb8697056c9be6c887e9a36e178883b7a38 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 6 Mar 2023 00:26:23 +0100 Subject: [PATCH 53/63] Updated ergonomics for using bevy_dolly --- Cargo.toml | 4 +- .../Cargo.toml | 2 +- .../src/driver_marker.rs | 3 +- config_cam_derive/src/lib.rs | 10 ++ examples/minimal.rs | 16 +- examples/multiple_targets.rs | 28 +-- examples/simple.rs | 76 +++++--- examples/yp.rs | 81 +++++++++ src/driver/driver_core.rs | 57 ++++-- src/driver/driver_resources.rs | 23 +-- src/drivers/first_person_view.rs | 12 -- src/drivers/fpv.rs | 114 ++++++++++++ src/drivers/mod.rs | 4 +- src/drivers/orbit.rs | 123 +++++++++++++ src/drivers/pinned.rs | 10 -- src/lib.rs | 164 ++++++++++++------ 16 files changed, 566 insertions(+), 161 deletions(-) rename {driver_marker_derive => config_cam_derive}/Cargo.toml (90%) rename driver_marker_derive/src/lib.rs => config_cam_derive/src/driver_marker.rs (94%) create mode 100644 config_cam_derive/src/lib.rs create mode 100644 examples/yp.rs delete mode 100644 src/drivers/first_person_view.rs create mode 100644 src/drivers/fpv.rs create mode 100644 src/drivers/orbit.rs delete mode 100644 src/drivers/pinned.rs diff --git a/Cargo.toml b/Cargo.toml index 67eae97..028d5e9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,8 +25,8 @@ name = "bevy_config_cam" rand = "0.8" strum = "0.24" strum_macros = "0.24" -bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly"} -driver_marker_derive = { path = "driver_marker_derive" } +bevy_dolly = { path = "../bevy_dolly" }#{ git = "https://github.com/BlackPhlox/bevy_dolly", branch = "map_fork" } +config_cam_derive = { path = "config_cam_derive" } [dependencies.bevy] version = "0.9" diff --git a/driver_marker_derive/Cargo.toml b/config_cam_derive/Cargo.toml similarity index 90% rename from driver_marker_derive/Cargo.toml rename to config_cam_derive/Cargo.toml index c3d72ed..87adaa2 100644 --- a/driver_marker_derive/Cargo.toml +++ b/config_cam_derive/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "driver_marker_derive" +name = "config_cam_derive" version = "0.1.0" edition = "2021" diff --git a/driver_marker_derive/src/lib.rs b/config_cam_derive/src/driver_marker.rs similarity index 94% rename from driver_marker_derive/src/lib.rs rename to config_cam_derive/src/driver_marker.rs index aa7f32a..6caef6b 100644 --- a/driver_marker_derive/src/lib.rs +++ b/config_cam_derive/src/driver_marker.rs @@ -1,10 +1,9 @@ -extern crate proc_macro; + use proc_macro::TokenStream; use quote::quote; use syn; -#[proc_macro_derive(DriverMarker)] pub fn driver_marker_derive(input: TokenStream) -> TokenStream { // Construct a representation of Rust code as a syntax tree // that we can manipulate diff --git a/config_cam_derive/src/lib.rs b/config_cam_derive/src/lib.rs new file mode 100644 index 0000000..ea53f9a --- /dev/null +++ b/config_cam_derive/src/lib.rs @@ -0,0 +1,10 @@ +use proc_macro::TokenStream; + +extern crate proc_macro; + +mod driver_marker; + +#[proc_macro_derive(DriverMarker)] +pub fn driver_marker_derive(input: TokenStream) -> TokenStream { + driver_marker::driver_marker_derive(input) +} \ No newline at end of file diff --git a/examples/minimal.rs b/examples/minimal.rs index a635639..43491e2 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -1,4 +1,4 @@ -use bevy::{prelude::*, render::camera::ScalingMode}; +use bevy::prelude::*; use bevy_config_cam::*; fn main() { @@ -35,18 +35,4 @@ fn setup( transform: Transform::from_xyz(4.0, 8.0, 4.0), ..Default::default() }); - - commands.spawn(Camera3dBundle { - camera: Camera { - is_active: true, - ..Default::default() - }, - projection: OrthographicProjection { - scale: 3.0, - scaling_mode: ScalingMode::FixedVertical(1.0), - ..default() - } - .into(), - ..Default::default() - }); } diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index 700f576..c5a7d87 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -1,29 +1,35 @@ use bevy::prelude::*; -use bevy_config_cam::*; +use bevy_config_cam::{driver::driver_core::DriverMarker, *}; +use bevy_dolly::prelude::*; +use config_cam_derive::DriverMarker; + fn main() { App::new() .insert_resource(Msaa { samples: 4 }) .add_plugins(DefaultPlugins) .add_plugin(ConfigCam) - .insert_resource(MovementSettings { + .add_rig_component(T1) + .add_dolly_component(MainCamera) + /*.insert_resource(MovementSettings { sensitivity: 0.00015, // default: 0.00012 speed: 12.0, // default: 12.0 ..Default::default() - }) - .insert_resource(PlayerSettings { + })*/ + /*.insert_resource(PlayerSettings { pos: Vec3::new(2., 0., 0.), player_asset: "models/craft_speederA.glb#Scene0", ..Default::default() - }) + })*/ .add_startup_system(setup) - .add_system(set_closest_target) + //.add_system(set_closest_target) .run(); } #[derive(Component)] +struct MainCamera; + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] struct T1; -#[derive(Component)] -struct T2; /// set up a simple 3D scene fn setup( @@ -46,7 +52,7 @@ fn setup( transform: Transform::from_xyz(-5.0, 0.5, 0.0), ..Default::default() }, - T1, + Target, )); //Target 2 @@ -57,7 +63,7 @@ fn setup( transform: Transform::from_xyz(5.0, 0.5, 0.0), ..Default::default() }, - T2, + Target, )); // light @@ -67,6 +73,7 @@ fn setup( }); } +/* fn set_closest_target( mut cl: ResMut<CamLogic>, mut transforms: Query<(&PlayerMove, &Transform)>, @@ -97,3 +104,4 @@ fn set_closest_target( cl.target = None; } } +*/ diff --git a/examples/simple.rs b/examples/simple.rs index b1c90bd..95a9123 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -3,14 +3,11 @@ use std::f32::consts::PI; use bevy::{ pbr::wireframe::{Wireframe, WireframePlugin}, prelude::*, - render::{ - camera::ScalingMode, - settings::{WgpuFeatures, WgpuSettings}, - }, }; use bevy_config_cam::*; - -use driver_marker_derive::DriverMarker; +use bevy_config_cam::{driver::driver_core::DriverMarker, drivers::fpv::CCFpv}; +use bevy_dolly::prelude::{Fpv, Rig}; +use config_cam_derive::DriverMarker; fn main() { App::new() @@ -63,8 +60,26 @@ fn setup( )); }); + commands + .spawn(SpatialBundle::from_transform(Transform { + rotation: Quat::IDENTITY, + translation: Vec3::new(-2., 0., 0.), + ..default() + })) + .with_children(|cell| { + cell.spawn(( + Target, + PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }, + )); + }); + // light - commands.spawn_bundle(PointLightBundle { + commands.spawn(PointLightBundle { transform: Transform::from_xyz(4.0, 8.0, 4.0), ..Default::default() }); @@ -77,7 +92,7 @@ fn setup( }).insert(Wireframe);*/ commands - .spawn_bundle(PbrBundle { + .spawn(PbrBundle { mesh: cam.clone(), material: materials .add( @@ -103,21 +118,28 @@ fn setup( }) .insert(Wireframe); - commands.spawn_bundle(Camera3dBundle { - camera: Camera { - is_active: true, + /* + commands.spawn(( + Camera3dBundle { + camera: Camera { + is_active: true, + ..Default::default() + }, + projection: OrthographicProjection { + scale: 3.0, + scaling_mode: ScalingMode::FixedVertical(1.0), + ..default() + } + .into(), ..Default::default() }, - projection: OrthographicProjection { - scale: 3.0, - scaling_mode: ScalingMode::FixedVertical(1.0), - ..default() - } - .into(), - ..Default::default() - }); + Rig::builder() + .with(Fpv::from_position_target(Transform::default())) + .build(), + CCFpv, + )); - commands.spawn_bundle(Camera3dBundle { + commands.spawn(Camera3dBundle { camera: Camera { is_active: false, ..Default::default() @@ -130,6 +152,7 @@ fn setup( .into(), ..Default::default() }); + */ commands.spawn(CameraCount { total: 2, index: 0 }); } @@ -143,6 +166,9 @@ struct CameraCount { #[derive(Component)] struct Rotates; +#[derive(Component)] +struct Selected; + fn rotator_system(time: Res<Time>, mut query: Query<&mut Transform, With<Rotates>>) { for mut transform in query.iter_mut() { *transform = Transform::from_rotation(Quat::from_rotation_y( @@ -154,11 +180,13 @@ fn rotator_system(time: Res<Time>, mut query: Query<&mut Transform, With<Rotates fn remove_target_system( keys: Res<Input<KeyCode>>, mut commands: Commands, - q: Query<Entity, (With<Rotates>, With<Target>)>, + q: Query<Entity, (With<Selected>, Without<Target>)>, ) { if keys.just_pressed(KeyCode::G) { for e in &q { commands.entity(e).remove::<Target>(); + commands.entity(e).remove::<Rotates>(); + println!("Removed Target"); } } } @@ -166,11 +194,13 @@ fn remove_target_system( fn add_target_system( keys: Res<Input<KeyCode>>, mut commands: Commands, - q: Query<Entity, (With<Rotates>, Without<Target>)>, + q: Query<Entity, (Without<Selected>, With<Target>)>, ) { - if keys.just_pressed(KeyCode::G) { + if keys.just_pressed(KeyCode::H) { for e in &q { commands.entity(e).insert(Target); + commands.entity(e).insert(Rotates); + println!("Added Target"); } } } diff --git a/examples/yp.rs b/examples/yp.rs new file mode 100644 index 0000000..a15b6e0 --- /dev/null +++ b/examples/yp.rs @@ -0,0 +1,81 @@ +use bevy::{input::Input, prelude::*, DefaultPlugins}; +use bevy_config_cam::driver::driver_core::DriverMarker; +use bevy_config_cam::{ + driver::driver_core::{DriverRigs, Drivers}, + drivers::{fpv::CCFpv, orbit::CCOrbit}, + ConfigCam, +}; +use bevy_dolly::prelude::*; +use config_cam_derive::DriverMarker; + +pub use std::any::TypeId; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_plugin(ConfigCam) + .add_dolly_component(YP) + .insert_resource(Drivers::new(vec![ + Box::new(CCOrbit), + Box::new(CCFpv), + Box::new(YP), + ])) + .add_startup_system(setup) + .add_system(update_yaw_driver) + .run(); +} + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct YP; + +fn setup( + mut commands: Commands, + mut meshes: ResMut<Assets<Mesh>>, + mut materials: ResMut<Assets<StandardMaterial>>, +) { + //Should be default player entity + //Default player entity : Cone + //commands.spawn().insert(Target); + + commands.spawn(( + Rig::builder() + .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) + .with(Smooth::new_rotation(1.5)) + .with(Arm::new(Vec3::Z * 4.0)) + .with(LookAt::new(Vec3::new(0., 0., 0.))) + .build(), + YP, + )); + + // plane + commands.spawn(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), + ..Default::default() + }); + + // cube + commands.spawn(PbrBundle { + mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })), + material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()), + transform: Transform::from_xyz(0.0, 0.5, 0.0), + ..Default::default() + }); + + // light + commands.spawn(PointLightBundle { + transform: Transform::from_xyz(4.0, 8.0, 4.0), + ..Default::default() + }); +} + +pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) { + rigs.try_for_each_driver_mut::<YawPitch>(|yp| { + if keys.just_pressed(KeyCode::Z) { + yp.rotate_yaw_pitch(-90.0, 0.0); + } + if keys.just_pressed(KeyCode::X) { + yp.rotate_yaw_pitch(90.0, 0.0); + } + }); +} diff --git a/src/driver/driver_core.rs b/src/driver/driver_core.rs index 3350404..9b3b1de 100644 --- a/src/driver/driver_core.rs +++ b/src/driver/driver_core.rs @@ -1,11 +1,15 @@ -use crate::{Fpv, Pinned}; use std::any::TypeId; use bevy::{ ecs::{component::TableStorage, system::SystemParam}, prelude::{Commands, Component, Entity, Query, Resource}, }; -use bevy_dolly::prelude::Rig; +use bevy_dolly::prelude::*; + +use crate::{ + drivers::{fpv::CCFpv, orbit::CCOrbit}, + MainCamera, +}; pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'static { fn get_id(&self) -> TypeId; @@ -17,38 +21,45 @@ pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'stati #[derive(Resource)] pub struct Drivers { // access must happen in this folder or children - pub(super) marker: Vec<Box<dyn DriverMarker>>, + pub enabled_drivers: Vec<Box<dyn DriverMarker>>, + pub current: TypeId, + index: usize, } impl Default for Drivers { fn default() -> Self { Self { - marker: vec![Box::new(Pinned), Box::new(Fpv)], + enabled_drivers: vec![Box::new(CCOrbit), Box::new(CCFpv)], + index: Default::default(), + current: TypeId::of::<MainCamera>(), } } } impl Drivers { pub fn new(marker: Vec<Box<dyn DriverMarker>>) -> Self { - Self { marker } + Self { + enabled_drivers: marker, + index: Default::default(), + current: TypeId::of::<MainCamera>(), + } } -} -#[derive(Default, Resource)] -pub struct DriverIndex { - // access must happen in this folder or children - pub(super) index: usize, -} - -impl DriverIndex { - /// Goes to next index, loops back to index `0` if already at the last index. - pub fn next(&mut self, len: usize) { - if self.index >= len - 1 { + pub fn next(&mut self) { + if self.index >= self.enabled_drivers.len() - 1 { self.index = 0; } else { self.index += 1; } } + + pub fn change_camera<T: 'static>(&mut self) { + self.current = TypeId::of::<T>(); + } + + pub fn index(&self) -> usize { + self.index + } } #[derive(SystemParam)] @@ -59,7 +70,7 @@ pub struct DriverRigs<'w, 's> { impl<'w, 's> DriverRigs<'w, 's> { pub fn try_for_each_driver_mut<T>(&mut self, f: impl FnOnce(&mut T) + std::marker::Copy) where - T: bevy_dolly::prelude::RigDriver<bevy_dolly::prelude::RightHanded>, + T: RigDriver, { for mut rig in &mut self.rigs { if let Some(camera_driver) = rig.try_driver_mut::<T>() { @@ -67,4 +78,16 @@ impl<'w, 's> DriverRigs<'w, 's> { } } } + + pub fn driver_exists<T>(self) -> bool + where + T: RigDriver, + { + for rig in &self.rigs { + if rig.try_driver::<T>().is_some() { + return true; + } + } + false + } } diff --git a/src/driver/driver_resources.rs b/src/driver/driver_resources.rs index 616f486..2cccf71 100644 --- a/src/driver/driver_resources.rs +++ b/src/driver/driver_resources.rs @@ -1,46 +1,41 @@ -use bevy::prelude::{Camera, Commands, Entity, Input, KeyCode, Query, Res, ResMut}; +use bevy::prelude::{Camera, Commands, Component, Entity, Input, KeyCode, Query, Res, ResMut}; -use super::driver_core::{DriverIndex, Drivers}; +use super::driver_core::Drivers; // TODO documentation //Use collection with and keeping an index component or the like -pub fn change_driver_system( - mut index: ResMut<DriverIndex>, - drivers: Res<Drivers>, - keys: Res<Input<KeyCode>>, -) { +pub fn change_driver_system(mut drivers: ResMut<Drivers>, keys: Res<Input<KeyCode>>) { if keys.just_pressed(KeyCode::T) { - index.next(drivers.marker.len()); + drivers.next(); } } pub fn update_driver_system( q: Query<(Entity, &Camera)>, mut commands: Commands, - index: Res<DriverIndex>, drivers: Res<Drivers>, ) { - if index.is_changed() { - for box_component in &drivers.marker { + if drivers.is_changed() { + for box_component in &drivers.enabled_drivers { let component = box_component.as_ref(); let component_id = component.get_id(); - if let Some(h) = drivers.marker.get(index.index) { + if let Some(h) = drivers.enabled_drivers.get(drivers.index()) { if component_id.eq(&h.get_id()) { //Add new driver component //Remove old driver component for (entity, camera) in q.iter() { if camera.is_active { component.add_to(&mut commands, entity); - println!("Adding {:?} to Camera {:?}", component.get_name(), entity); + println!("Adding {} to Camera {:?}", component.get_name(), entity); } } } else { for (entity, camera) in q.iter() { if camera.is_active { component.remove_from(&mut commands, entity); - println!("Remove {:?} from Camera {:?}", component.get_name(), entity); + println!("Remove {} from Camera {:?}", component.get_name(), entity); } } } diff --git a/src/drivers/first_person_view.rs b/src/drivers/first_person_view.rs deleted file mode 100644 index 40dce78..0000000 --- a/src/drivers/first_person_view.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::Commands; -use bevy::ecs::entity::Entity; -use bevy::prelude::Component; -use driver_marker_derive::DriverMarker; -use std::any::TypeId; - -use crate::driver::driver_core::DriverMarker; - -#[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct Fpv; - -// TODO impl diff --git a/src/drivers/fpv.rs b/src/drivers/fpv.rs new file mode 100644 index 0000000..e8fe63c --- /dev/null +++ b/src/drivers/fpv.rs @@ -0,0 +1,114 @@ +use crate::Commands; +use bevy::ecs::entity::Entity; +use bevy::prelude::Component; +use config_cam_derive::DriverMarker; +use std::any::TypeId; + +use crate::driver::driver_core::{DriverMarker, DriverRigs}; +use bevy::input::mouse::MouseMotion; +use bevy::prelude::*; +use bevy_dolly::prelude::*; + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct CCFpv; +impl Plugin for CCFpv { + fn build(&self, app: &mut App) { + app.add_rig_component(CCFpv) + .add_startup_system(setup_fpv) + .add_state(MovementType::FirstPerson) + .add_system(update_fpv_camera); + } +} + +fn setup_fpv(mut commands: Commands) { + commands.spawn(( + Rig::builder() + .with(Fpv::from_position_target( + Transform::from_xyz(2.0, 2.0, 2.0).looking_at(Vec3::ZERO, Vec3::Y), + )) + .build(), + CCFpv, + )); +} + +#[derive(Clone, Debug, Eq, PartialEq, Hash)] +pub enum MovementType { + FirstPerson, + Free, +} + +/* +Example : +commands.spawn(( + MainCamera, + Rig::builder() + .with(Fpv::from_position_target(transform)) + .build(), + Camera3dBundle { + transform, + ..default() + }, +)); +*/ + +pub fn update_fpv_camera( + time: Res<Time>, + keys: Res<Input<KeyCode>>, + windows: Res<Windows>, + fps_state: Res<State<MovementType>>, + mut mouse_motion_events: EventReader<MouseMotion>, + mut rigs: DriverRigs, +) { + let time_delta_seconds: f32 = time.delta_seconds(); + let boost_mult = 5.0f32; + let sensitivity = Vec2::splat(1.0); + + let mut move_vec = Vec3::ZERO; + + // Q: Is dolly left-handed so z is flipped? + if keys.pressed(KeyCode::W) { + move_vec.z -= 1.0; + } + if keys.pressed(KeyCode::S) { + move_vec.z += 1.0; + } + if keys.pressed(KeyCode::A) { + move_vec.x -= 1.0; + } + if keys.pressed(KeyCode::D) { + move_vec.x += 1.0; + } + + if keys.pressed(KeyCode::E) || keys.pressed(KeyCode::Space) { + move_vec.y += 1.0; + } + if keys.pressed(KeyCode::Q) { + move_vec.y -= 1.0; + } + + let boost: f32 = if keys.pressed(KeyCode::LShift) { + 1. + } else { + 0. + }; + + let mut delta = Vec2::ZERO; + for event in mouse_motion_events.iter() { + delta += event.delta; + } + + rigs.try_for_each_driver_mut::<Fpv>(|r| { + let move_vec = r.set_position( + move_vec, + boost, + boost_mult, + fps_state.current().eq(&MovementType::FirstPerson), + ); + + let window = windows.get_primary(); + + if window.is_some() && !window.unwrap().cursor_visible() { + r.set_rotation(delta, sensitivity, move_vec, time_delta_seconds); + } + }); +} diff --git a/src/drivers/mod.rs b/src/drivers/mod.rs index 475e252..669eaf9 100644 --- a/src/drivers/mod.rs +++ b/src/drivers/mod.rs @@ -1,2 +1,2 @@ -pub mod first_person_view; -pub mod pinned; +pub mod fpv; +pub mod orbit; diff --git a/src/drivers/orbit.rs b/src/drivers/orbit.rs new file mode 100644 index 0000000..7aa7f22 --- /dev/null +++ b/src/drivers/orbit.rs @@ -0,0 +1,123 @@ +use crate::{CCSetupLabel, Commands, MainCamera, PerspectiveCamera}; +use bevy::ecs::entity::Entity; +use bevy::prelude::Component; +use config_cam_derive::DriverMarker; +use std::any::TypeId; + +use crate::driver::driver_core::DriverMarker; +use bevy::input::mouse::{MouseMotion, MouseWheel}; +use bevy::prelude::*; +use bevy_dolly::prelude::*; + +#[derive(DriverMarker, Component, Clone, Copy, Debug)] +pub struct CCOrbit; +impl Plugin for CCOrbit { + fn build(&self, app: &mut App) { + app.add_rig_component(CCOrbit) + .add_state(Pan::Mouse) + .add_startup_system(setup_orbit.after(CCSetupLabel)) + .add_system(handle_mouse_scroll) + .add_system(update_orbit_camera); + } +} + +fn setup_orbit(mut commands: Commands) { + commands.spawn(( + Rig::builder() + .with(Position::new(Vec3::ZERO)) + .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-30.0)) + .with(Smooth::new_position(0.3)) + .with(Smooth::new_rotation(0.3)) + .with(Arm::new(Vec3::Z * 4.0)) + .build(), + CCOrbit, + )); +} + +#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)] +enum Pan { + Mouse, + Keys, +} + +fn handle_mouse_scroll( + mut mouse_wheel_events: EventReader<MouseWheel>, + mut q_main: Query<&mut Projection, With<MainCamera>>, +) { + for mouse_wheel_event in mouse_wheel_events.iter() { + for mut projection in &mut q_main.iter_mut() { + match &mut projection.as_mut() { + Projection::Perspective(pers) => { + pers.fov = (pers.fov - mouse_wheel_event.y * 0.01).abs(); + } + Projection::Orthographic(orth) => { + orth.scale = (orth.scale - mouse_wheel_event.y * 0.1).abs(); + } + } + } + } +} + +#[allow(unused_must_use)] +fn update_orbit_camera( + keys: Res<Input<KeyCode>>, + mut pan: ResMut<State<Pan>>, + mut mouse_motion_events: EventReader<MouseMotion>, + mut rig_q: Query<&mut Rig, With<CCOrbit>>, + transform: Query<Option<&Transform>, With<DollyPosCtrlMove>>, + mut config: ResMut<DollyPosCtrlConfig>, + grab_config: Res<DollyCursorGrabConfig>, +) { + if let Ok(mut rig) = rig_q.get_single_mut() { + let camera_driver = rig.driver_mut::<YawPitch>(); + let sensitivity = Vec2::splat(2.0); + + let mut delta = Vec2::ZERO; + for event in mouse_motion_events.iter() { + delta += event.delta; + } + + config.rotation = Quat::from_rotation_y(delta.x); + + if pan.current().eq(&Pan::Keys) { + if keys.just_pressed(KeyCode::Z) { + camera_driver.rotate_yaw_pitch(-90.0, 0.0); + } + if keys.just_pressed(KeyCode::X) { + camera_driver.rotate_yaw_pitch(90.0, 0.0); + } + } else { + if !grab_config.visible { + camera_driver.rotate_yaw_pitch( + -0.1 * delta.x * sensitivity.x, + -0.1 * delta.y * sensitivity.y, + ); + } + } + + if keys.just_pressed(KeyCode::E) { + let result = if pan.current().eq(&Pan::Keys) { + Pan::Mouse + } else { + Pan::Keys + }; + pan.overwrite_set(result); + println!("State:{result:?}"); + } + + if keys.just_pressed(KeyCode::P) { + config.pin = !config.pin; + println!("Pinned:{:?}", config.pin); + } + + if config.pin { + let camera_driver_2 = rig.driver_mut::<Position>(); + + for opt_transform in transform.iter() { + if let Some(t) = opt_transform { + camera_driver_2.position = t.translation; + } + } + } + } +} diff --git a/src/drivers/pinned.rs b/src/drivers/pinned.rs deleted file mode 100644 index efe9bcd..0000000 --- a/src/drivers/pinned.rs +++ /dev/null @@ -1,10 +0,0 @@ -use crate::{driver::driver_core::DriverMarker, Commands}; -use bevy::{ecs::entity::Entity, prelude::Component}; -use driver_marker_derive::DriverMarker; -use std::any::TypeId; - -#[derive(DriverMarker, Component, Clone, Copy, Debug)] -pub struct Pinned; -//Substates: -//Locked Rotation -//Free diff --git a/src/lib.rs b/src/lib.rs index dffb6c3..8c894fa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,17 +1,23 @@ pub mod driver; pub mod drivers; -use crate::drivers::first_person_view::Fpv; -use crate::drivers::pinned::Pinned; use bevy::{ + ecs::component::TableStorage, input::Input, - prelude::{App, Commands, Component, KeyCode, Plugin, Query, Res, Transform, Vec3, With}, + prelude::{ + default, App, Bundle, Camera, Camera2dBundle, Camera3d, Camera3dBundle, Commands, + Component, IntoSystemDescriptor, KeyCode, OrthographicProjection, PerspectiveProjection, + Plugin, Query, Res, ResMut, Resource, SystemLabel, Transform, Vec3, With, + }, + reflect::Reflect, + render::camera::{CameraProjection, CameraProjectionPlugin, ScalingMode}, }; -use bevy_dolly::{dolly::glam, prelude::*}; +use bevy_dolly::prelude::*; use driver::{ - driver_core::{DriverIndex, DriverRigs, Drivers}, + driver_core::{DriverRigs, Drivers}, driver_resources::{change_driver_system, update_driver_system}, }; +use drivers::{fpv::CCFpv, orbit::CCOrbit}; pub use std::any::TypeId; // TODO documentation @@ -19,47 +25,94 @@ pub use std::any::TypeId; pub struct ConfigCam; impl Plugin for ConfigCam { fn build(&self, app: &mut App) { - app.init_resource::<DriverIndex>() - .init_resource::<Drivers>() - .add_rig_component(Pinned) - .add_rig_component(Fpv) - .add_startup_system(default_setup) + app.init_resource::<Drivers>() + .init_resource::<CCConfig>() + .add_plugin(DollyPosCtrl) + .add_plugin(DollyCursorGrab) + .insert_resource(DollyPosCtrlConfig { + default_player: false, + ..Default::default() + }) + .add_startup_system(camera_setup.label(CCSetupLabel)) + .add_plugin(CCFpv) + .add_plugin(CCOrbit) .add_system(change_driver_system) .add_system(update_driver_system) - .add_system(update_look_at) - .add_system(update_yaw_driver); + .add_system(update_look_at); } } -pub(crate) fn update_look_at( - mut targets: Query<(&mut Transform, With<Target>)>, - mut rigs: DriverRigs, -) { - let mut avg = Vec3::ZERO; +#[derive(Resource)] +pub struct CCConfig { + pub init_cameras: bool, + pub features: Vec<String>, +} - for (t, _b) in &mut targets { - avg += t.translation; +impl Default for CCConfig { + fn default() -> Self { + Self { + init_cameras: true, + features: vec![], + } } +} - //https://math.stackexchange.com/questions/80923/average-of-multiple-vectors - //let total_targets = targets.iter().count(); - //avg /= total_targets as f32; +pub fn bind_perspective<T: Bundle>(bundle: T) {} - rigs.try_for_each_driver_mut::<bevy_dolly::prelude::LookAt>(|la| { - la.target = avg; - }); +fn camera_setup(mut commands: Commands, config: Res<CCConfig>) { + if !config.init_cameras { + return; + } + commands.spawn(( + MainCamera, + PerspectiveCamera, + Camera3dBundle { + transform: Transform::from_xyz(2.0, 2.0, 2.0).looking_at(Vec3::ZERO, Vec3::Y), + ..Default::default() + }, + )); + commands.spawn(( + OrthographicCamera, + Camera3dBundle { + projection: OrthographicProjection { + scale: 3.0, + scaling_mode: ScalingMode::FixedVertical(2.0), + ..default() + } + .into(), + camera: Camera { + is_active: false, + ..Default::default() + }, + ..Default::default() + }, + )); + commands.spawn(( + TwoDimensionalCamera, + Camera2dBundle { + camera: Camera { + is_active: false, + ..Default::default() + }, + ..Default::default() + }, + )); } -pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) { - rigs.try_for_each_driver_mut::<YawPitch>(|yp| { - if keys.just_pressed(KeyCode::Z) { - yp.rotate_yaw_pitch(-90.0, 0.0); - } - if keys.just_pressed(KeyCode::X) { - yp.rotate_yaw_pitch(90.0, 0.0); - } - }); -} +#[derive(Debug, Clone, PartialEq, Eq, Hash, SystemLabel)] +pub struct CCSetupLabel; + +#[derive(Component)] +pub struct MainCamera; + +#[derive(Component)] +pub struct PerspectiveCamera; + +#[derive(Component)] +pub struct OrthographicCamera; + +#[derive(Component)] +pub struct TwoDimensionalCamera; // Target at is just a valid option for Follow, Orbit and FPV // Have the camera point at one or the summed vector direction @@ -67,23 +120,28 @@ pub(crate) fn update_yaw_driver(keys: Res<Input<KeyCode>>, mut rigs: DriverRigs) #[derive(Component)] pub struct Target; -fn default_setup(mut commands: Commands) { - //Should be default player entity - //Default player entity : Cone - //commands.spawn().insert(Target); - - commands.spawn(( - Pinned, - Rig::builder() - .with(YawPitch::new().yaw_degrees(45.0).pitch_degrees(-45.0)) - .with(Smooth::new_rotation(1.5)) - .with(Arm::new(glam::Vec3::Z * 4.0)) - .with(bevy_dolly::prelude::LookAt::new(glam::Vec3::new( - 0., 0., 0., - ))) - .build(), - )); +pub(crate) fn update_look_at(targets: Query<(&Transform, With<Target>)>, mut rigs: DriverRigs) { + rigs.try_for_each_driver_mut::<LookAt>(|la| { + let it = targets.iter(); + if it.len().eq(&0) { + } else if it.len().eq(&1) { + la.target = it.last().unwrap().0.translation; + } else { + la.target = get_center_point(it.map(|f| f.0.translation).collect()); + } + }); +} - //Missing FPV - commands.spawn(Fpv); +fn get_center_point(targets: Vec<Vec3>) -> Vec3 { + if targets.len() == 0 { + Vec3::ONE + } else if targets.len() == 1 { + *targets.first().unwrap() + } else { + let mut a = Vec3::ONE; + for t in targets { + a += t + } + a * 0.5 + } } From e126e28b1f94fcb6df8c77f485755f083889d5c9 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 6 Mar 2023 00:31:20 +0100 Subject: [PATCH 54/63] clippy --- examples/simple.rs | 34 ++++++++++++++++------------------ src/driver/driver_resources.rs | 2 +- src/drivers/orbit.rs | 20 ++++++++------------ src/lib.rs | 15 +++++---------- 4 files changed, 30 insertions(+), 41 deletions(-) diff --git a/examples/simple.rs b/examples/simple.rs index 95a9123..2cbc1ce 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -4,9 +4,9 @@ use bevy::{ pbr::wireframe::{Wireframe, WireframePlugin}, prelude::*, }; +use bevy_config_cam::driver::driver_core::DriverMarker; use bevy_config_cam::*; -use bevy_config_cam::{driver::driver_core::DriverMarker, drivers::fpv::CCFpv}; -use bevy_dolly::prelude::{Fpv, Rig}; + use config_cam_derive::DriverMarker; fn main() { @@ -93,18 +93,16 @@ fn setup( commands .spawn(PbrBundle { - mesh: cam.clone(), - material: materials - .add( - Color::Rgba { - red: 0., - green: 0., - blue: 0., - alpha: 0., - } - .into(), - ) - .clone(), + mesh: cam, + material: materials.add( + Color::Rgba { + red: 0., + green: 0., + blue: 0., + alpha: 0., + } + .into(), + ), transform: Transform { translation: Vec3 { x: 0.0, @@ -207,18 +205,18 @@ fn add_target_system( fn switch_camera( keys: Res<Input<KeyCode>>, - mut commands: Commands, + _commands: Commands, mut q: Query<&Camera>, mut q2: Query<&CameraCount>, ) { - let mut cc = q2.single_mut(); + let cc = q2.single_mut(); if keys.just_pressed(KeyCode::V) { - for (i, c) in &mut q.iter_mut().enumerate() { + for (i, _c) in &mut q.iter_mut().enumerate() { if i + 1 > (cc.total - 1).into() { //cc.index = 0; //c.is_active = true; } - if i.eq(&(cc.index + 1 as usize)) {} + if i.eq(&(cc.index + 1_usize)) {} } } } diff --git a/src/driver/driver_resources.rs b/src/driver/driver_resources.rs index 2cccf71..1713836 100644 --- a/src/driver/driver_resources.rs +++ b/src/driver/driver_resources.rs @@ -1,4 +1,4 @@ -use bevy::prelude::{Camera, Commands, Component, Entity, Input, KeyCode, Query, Res, ResMut}; +use bevy::prelude::{Camera, Commands, Entity, Input, KeyCode, Query, Res, ResMut}; use super::driver_core::Drivers; diff --git a/src/drivers/orbit.rs b/src/drivers/orbit.rs index 7aa7f22..978ae61 100644 --- a/src/drivers/orbit.rs +++ b/src/drivers/orbit.rs @@ -1,4 +1,4 @@ -use crate::{CCSetupLabel, Commands, MainCamera, PerspectiveCamera}; +use crate::{CCSetupLabel, Commands, MainCamera}; use bevy::ecs::entity::Entity; use bevy::prelude::Component; use config_cam_derive::DriverMarker; @@ -86,13 +86,11 @@ fn update_orbit_camera( if keys.just_pressed(KeyCode::X) { camera_driver.rotate_yaw_pitch(90.0, 0.0); } - } else { - if !grab_config.visible { - camera_driver.rotate_yaw_pitch( - -0.1 * delta.x * sensitivity.x, - -0.1 * delta.y * sensitivity.y, - ); - } + } else if !grab_config.visible { + camera_driver.rotate_yaw_pitch( + -0.1 * delta.x * sensitivity.x, + -0.1 * delta.y * sensitivity.y, + ); } if keys.just_pressed(KeyCode::E) { @@ -113,10 +111,8 @@ fn update_orbit_camera( if config.pin { let camera_driver_2 = rig.driver_mut::<Position>(); - for opt_transform in transform.iter() { - if let Some(t) = opt_transform { - camera_driver_2.position = t.translation; - } + for opt_transform in transform.iter().flatten() { + camera_driver_2.position = opt_transform.translation; } } } diff --git a/src/lib.rs b/src/lib.rs index 8c894fa..f492dba 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2,15 +2,12 @@ pub mod driver; pub mod drivers; use bevy::{ - ecs::component::TableStorage, - input::Input, prelude::{ - default, App, Bundle, Camera, Camera2dBundle, Camera3d, Camera3dBundle, Commands, - Component, IntoSystemDescriptor, KeyCode, OrthographicProjection, PerspectiveProjection, - Plugin, Query, Res, ResMut, Resource, SystemLabel, Transform, Vec3, With, + default, App, Camera, Camera2dBundle, Camera3dBundle, Commands, Component, + IntoSystemDescriptor, OrthographicProjection, Plugin, Query, Res, Resource, SystemLabel, + Transform, Vec3, With, }, - reflect::Reflect, - render::camera::{CameraProjection, CameraProjectionPlugin, ScalingMode}, + render::camera::ScalingMode, }; use bevy_dolly::prelude::*; use driver::{ @@ -57,8 +54,6 @@ impl Default for CCConfig { } } -pub fn bind_perspective<T: Bundle>(bundle: T) {} - fn camera_setup(mut commands: Commands, config: Res<CCConfig>) { if !config.init_cameras { return; @@ -133,7 +128,7 @@ pub(crate) fn update_look_at(targets: Query<(&Transform, With<Target>)>, mut rig } fn get_center_point(targets: Vec<Vec3>) -> Vec3 { - if targets.len() == 0 { + if targets.is_empty() { Vec3::ONE } else if targets.len() == 1 { *targets.first().unwrap() From 7380352855199409f6cb505b41c469bdbde90c5e Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 6 Mar 2023 00:34:29 +0100 Subject: [PATCH 55/63] more fmt & clippy --- Cargo.toml | 2 +- config_cam_derive/src/driver_marker.rs | 2 -- config_cam_derive/src/lib.rs | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 028d5e9..9dcb05e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,7 @@ name = "bevy_config_cam" rand = "0.8" strum = "0.24" strum_macros = "0.24" -bevy_dolly = { path = "../bevy_dolly" }#{ git = "https://github.com/BlackPhlox/bevy_dolly", branch = "map_fork" } +bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "map_fork_v2" }#{ path = "../bevy_dolly" } config_cam_derive = { path = "config_cam_derive" } [dependencies.bevy] diff --git a/config_cam_derive/src/driver_marker.rs b/config_cam_derive/src/driver_marker.rs index 6caef6b..f2fcbe3 100644 --- a/config_cam_derive/src/driver_marker.rs +++ b/config_cam_derive/src/driver_marker.rs @@ -1,5 +1,3 @@ - - use proc_macro::TokenStream; use quote::quote; use syn; diff --git a/config_cam_derive/src/lib.rs b/config_cam_derive/src/lib.rs index ea53f9a..74bebda 100644 --- a/config_cam_derive/src/lib.rs +++ b/config_cam_derive/src/lib.rs @@ -7,4 +7,4 @@ mod driver_marker; #[proc_macro_derive(DriverMarker)] pub fn driver_marker_derive(input: TokenStream) -> TokenStream { driver_marker::driver_marker_derive(input) -} \ No newline at end of file +} From b9bace9813b6abc29d647436afe4232b59c79c43 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Mon, 6 Mar 2023 01:39:51 +0100 Subject: [PATCH 56/63] Added macro_rules! --- examples/yp.rs | 10 +++++----- src/driver/driver_core.rs | 39 ++++++++++++++++++++++++++------------- src/lib.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 18 deletions(-) diff --git a/examples/yp.rs b/examples/yp.rs index a15b6e0..9891557 100644 --- a/examples/yp.rs +++ b/examples/yp.rs @@ -5,6 +5,7 @@ use bevy_config_cam::{ drivers::{fpv::CCFpv, orbit::CCOrbit}, ConfigCam, }; +use bevy_config_cam::{driver_vec, type_vec, MainCamera}; use bevy_dolly::prelude::*; use config_cam_derive::DriverMarker; @@ -15,11 +16,10 @@ fn main() { .add_plugins(DefaultPlugins) .add_plugin(ConfigCam) .add_dolly_component(YP) - .insert_resource(Drivers::new(vec![ - Box::new(CCOrbit), - Box::new(CCFpv), - Box::new(YP), - ])) + .insert_resource(Drivers::new( + driver_vec![CCOrbit, CCFpv, YP], + type_vec![MainCamera], + )) .add_startup_system(setup) .add_system(update_yaw_driver) .run(); diff --git a/src/driver/driver_core.rs b/src/driver/driver_core.rs index 9b3b1de..1e641c0 100644 --- a/src/driver/driver_core.rs +++ b/src/driver/driver_core.rs @@ -22,43 +22,56 @@ pub trait DriverMarker: Component<Storage = TableStorage> + Sync + Send + 'stati pub struct Drivers { // access must happen in this folder or children pub enabled_drivers: Vec<Box<dyn DriverMarker>>, - pub current: TypeId, - index: usize, + driver_index: usize, + pub cameras: Vec<TypeId>, + camera_index: usize, } impl Default for Drivers { fn default() -> Self { Self { enabled_drivers: vec![Box::new(CCOrbit), Box::new(CCFpv)], - index: Default::default(), - current: TypeId::of::<MainCamera>(), + cameras: vec![TypeId::of::<MainCamera>()], + driver_index: Default::default(), + camera_index: Default::default(), } } } impl Drivers { - pub fn new(marker: Vec<Box<dyn DriverMarker>>) -> Self { + pub fn new(enabled_drivers: Vec<Box<dyn DriverMarker>>, cameras: Vec<TypeId>) -> Self { Self { - enabled_drivers: marker, - index: Default::default(), - current: TypeId::of::<MainCamera>(), + enabled_drivers, + driver_index: Default::default(), + cameras, + camera_index: Default::default(), } } pub fn next(&mut self) { - if self.index >= self.enabled_drivers.len() - 1 { - self.index = 0; + if self.driver_index >= self.enabled_drivers.len() - 1 { + self.driver_index = 0; } else { - self.index += 1; + self.driver_index += 1; } } pub fn change_camera<T: 'static>(&mut self) { - self.current = TypeId::of::<T>(); + let type_id = TypeId::of::<T>(); + self.cameras.push(type_id); + self.cameras.dedup(); + if let Some((x, _)) = self + .cameras + .iter() + .enumerate() + .find(|(_, id)| (*id).clone().eq(&type_id)) + { + self.camera_index = x; + } } pub fn index(&self) -> usize { - self.index + self.driver_index } } diff --git a/src/lib.rs b/src/lib.rs index f492dba..5108a8b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,6 +39,32 @@ impl Plugin for ConfigCam { } } +#[macro_export] +macro_rules! type_vec { + ( $( $x:ident ),* ) => { + { + let mut temp_vec = Vec::new(); + $( + temp_vec.push(TypeId::of::<$x>()); + )* + temp_vec + } + }; +} + +#[macro_export] +macro_rules! driver_vec { + ( $( $x:ident ),* ) => { + { + let mut temp_vec: Vec<Box<dyn DriverMarker>> = Vec::new(); + $( + temp_vec.push(Box::new($x)); + )* + temp_vec + } + }; +} + #[derive(Resource)] pub struct CCConfig { pub init_cameras: bool, From dde7a6bffb6055360e2e49b6d4b130a205dca737 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Tue, 7 Mar 2023 00:40:45 +0100 Subject: [PATCH 57/63] Updated to bevy 0.10 --- Cargo.toml | 7 +++++-- examples/minimal.rs | 2 +- examples/multiple_targets.rs | 4 ++-- examples/simple.rs | 2 +- examples/yp.rs | 2 +- src/driver/driver_resources.rs | 2 +- src/drivers/fpv.rs | 19 +++++++++++-------- src/drivers/orbit.rs | 11 ++++++----- src/lib.rs | 8 ++++---- 9 files changed, 32 insertions(+), 25 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9dcb05e..1ceea8c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,11 +29,14 @@ bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "map_f config_cam_derive = { path = "config_cam_derive" } [dependencies.bevy] -version = "0.9" +version = "0.10" features = ["bevy_render","bevy_pbr"] default-features = false [dev-dependencies.bevy] -version = "0.9" +version = "0.10" features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] default-features = false + +[patch.crates-io] +leafwing-input-manager = { git = "https://github.com/TimJentzsch/leafwing-input-manager", branch = "bevy-0.10" } \ No newline at end of file diff --git a/examples/minimal.rs b/examples/minimal.rs index 43491e2..219bf18 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -17,7 +17,7 @@ fn setup( ) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0, ..Default::default() })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index c5a7d87..3de4315 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -5,7 +5,7 @@ use config_cam_derive::DriverMarker; fn main() { App::new() - .insert_resource(Msaa { samples: 4 }) + .insert_resource(Msaa::default()) .add_plugins(DefaultPlugins) .add_plugin(ConfigCam) .add_rig_component(T1) @@ -39,7 +39,7 @@ fn setup( ) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 11.0 })), + mesh: meshes.add(Mesh::from(shape::Plane { size: 11.0, ..Default::default() })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/examples/simple.rs b/examples/simple.rs index 2cbc1ce..307d069 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -34,7 +34,7 @@ fn setup( ) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0, ..Default::default() })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/examples/yp.rs b/examples/yp.rs index 9891557..6a71b0c 100644 --- a/examples/yp.rs +++ b/examples/yp.rs @@ -49,7 +49,7 @@ fn setup( // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })), + mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0, ..Default::default() })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/src/driver/driver_resources.rs b/src/driver/driver_resources.rs index 1713836..179da88 100644 --- a/src/driver/driver_resources.rs +++ b/src/driver/driver_resources.rs @@ -1,4 +1,4 @@ -use bevy::prelude::{Camera, Commands, Entity, Input, KeyCode, Query, Res, ResMut}; +use bevy::prelude::{Camera, Commands, Entity, Input, KeyCode, Query, Res, ResMut, DetectChanges}; use super::driver_core::Drivers; diff --git a/src/drivers/fpv.rs b/src/drivers/fpv.rs index e8fe63c..6a1c2ff 100644 --- a/src/drivers/fpv.rs +++ b/src/drivers/fpv.rs @@ -1,6 +1,7 @@ use crate::Commands; use bevy::ecs::entity::Entity; use bevy::prelude::Component; +use bevy::window::PrimaryWindow; use config_cam_derive::DriverMarker; use std::any::TypeId; @@ -15,7 +16,7 @@ impl Plugin for CCFpv { fn build(&self, app: &mut App) { app.add_rig_component(CCFpv) .add_startup_system(setup_fpv) - .add_state(MovementType::FirstPerson) + .add_state::<MovementType>() .add_system(update_fpv_camera); } } @@ -31,8 +32,9 @@ fn setup_fpv(mut commands: Commands) { )); } -#[derive(Clone, Debug, Eq, PartialEq, Hash)] +#[derive(States, Default, Clone, Debug, Eq, PartialEq, Hash)] pub enum MovementType { + #[default] FirstPerson, Free, } @@ -54,7 +56,7 @@ commands.spawn(( pub fn update_fpv_camera( time: Res<Time>, keys: Res<Input<KeyCode>>, - windows: Res<Windows>, + windows: Query<&Window, With<PrimaryWindow>>, fps_state: Res<State<MovementType>>, mut mouse_motion_events: EventReader<MouseMotion>, mut rigs: DriverRigs, @@ -102,13 +104,14 @@ pub fn update_fpv_camera( move_vec, boost, boost_mult, - fps_state.current().eq(&MovementType::FirstPerson), + fps_state.0.eq(&MovementType::FirstPerson), ); - let window = windows.get_primary(); - - if window.is_some() && !window.unwrap().cursor_visible() { - r.set_rotation(delta, sensitivity, move_vec, time_delta_seconds); + if let Ok(window) = windows.get_single() { + if !window.cursor.visible { + r.driver_mut::<Fpv>() + .set_rotation(delta, sensitivity, move_vec, time_delta_seconds); + } } }); } diff --git a/src/drivers/orbit.rs b/src/drivers/orbit.rs index 978ae61..2c09b02 100644 --- a/src/drivers/orbit.rs +++ b/src/drivers/orbit.rs @@ -14,7 +14,7 @@ pub struct CCOrbit; impl Plugin for CCOrbit { fn build(&self, app: &mut App) { app.add_rig_component(CCOrbit) - .add_state(Pan::Mouse) + .add_state::<Pan>() .add_startup_system(setup_orbit.after(CCSetupLabel)) .add_system(handle_mouse_scroll) .add_system(update_orbit_camera); @@ -34,8 +34,9 @@ fn setup_orbit(mut commands: Commands) { )); } -#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)] +#[derive(States, Default, PartialEq, Eq, Debug, Clone, Copy, Hash)] enum Pan { + #[default] Mouse, Keys, } @@ -79,7 +80,7 @@ fn update_orbit_camera( config.rotation = Quat::from_rotation_y(delta.x); - if pan.current().eq(&Pan::Keys) { + if pan.0.eq(&Pan::Keys) { if keys.just_pressed(KeyCode::Z) { camera_driver.rotate_yaw_pitch(-90.0, 0.0); } @@ -94,12 +95,12 @@ fn update_orbit_camera( } if keys.just_pressed(KeyCode::E) { - let result = if pan.current().eq(&Pan::Keys) { + let result = if pan.0.eq(&Pan::Keys) { Pan::Mouse } else { Pan::Keys }; - pan.overwrite_set(result); + pan.0 = result; println!("State:{result:?}"); } diff --git a/src/lib.rs b/src/lib.rs index 5108a8b..a67bb57 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,8 @@ pub mod drivers; use bevy::{ prelude::{ default, App, Camera, Camera2dBundle, Camera3dBundle, Commands, Component, - IntoSystemDescriptor, OrthographicProjection, Plugin, Query, Res, Resource, SystemLabel, - Transform, Vec3, With, + OrthographicProjection, Plugin, Query, Res, Resource, + Transform, Vec3, With, SystemSet, IntoSystemConfig, }, render::camera::ScalingMode, }; @@ -30,7 +30,7 @@ impl Plugin for ConfigCam { default_player: false, ..Default::default() }) - .add_startup_system(camera_setup.label(CCSetupLabel)) + .add_startup_system(camera_setup.in_set(CCSetupLabel)) .add_plugin(CCFpv) .add_plugin(CCOrbit) .add_system(change_driver_system) @@ -120,7 +120,7 @@ fn camera_setup(mut commands: Commands, config: Res<CCConfig>) { )); } -#[derive(Debug, Clone, PartialEq, Eq, Hash, SystemLabel)] +#[derive(Debug, Clone, PartialEq, Eq, Hash, SystemSet)] pub struct CCSetupLabel; #[derive(Component)] From 2f4b3016e4adb75acf76ebb1e428d9a005088506 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Thu, 9 Mar 2023 02:25:30 +0100 Subject: [PATCH 58/63] Fixed a panic --- Cargo.toml | 5 +---- src/drivers/fpv.rs | 5 +++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1ceea8c..19acb66 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,4 @@ default-features = false [dev-dependencies.bevy] version = "0.10" features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] -default-features = false - -[patch.crates-io] -leafwing-input-manager = { git = "https://github.com/TimJentzsch/leafwing-input-manager", branch = "bevy-0.10" } \ No newline at end of file +default-features = false \ No newline at end of file diff --git a/src/drivers/fpv.rs b/src/drivers/fpv.rs index 6a1c2ff..c93baad 100644 --- a/src/drivers/fpv.rs +++ b/src/drivers/fpv.rs @@ -109,8 +109,9 @@ pub fn update_fpv_camera( if let Ok(window) = windows.get_single() { if !window.cursor.visible { - r.driver_mut::<Fpv>() - .set_rotation(delta, sensitivity, move_vec, time_delta_seconds); + if let Some(fpv) = r.try_driver_mut::<Fpv>() { + fpv.set_rotation(delta, sensitivity, move_vec, time_delta_seconds); + } } } }); From 9df6d010da374419a5bdd20c1add649cb25c1655 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Thu, 9 Mar 2023 02:30:32 +0100 Subject: [PATCH 59/63] fmt & clippy --- examples/minimal.rs | 5 ++++- examples/multiple_targets.rs | 5 ++++- examples/simple.rs | 5 ++++- examples/yp.rs | 5 ++++- src/driver/driver_resources.rs | 2 +- src/drivers/fpv.rs | 2 +- src/lib.rs | 6 +++--- 7 files changed, 21 insertions(+), 9 deletions(-) diff --git a/examples/minimal.rs b/examples/minimal.rs index 219bf18..2b8bc9e 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -17,7 +17,10 @@ fn setup( ) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0, ..Default::default() })), + mesh: meshes.add(Mesh::from(shape::Plane { + size: 5.0, + ..Default::default() + })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index 3de4315..e080f6b 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -39,7 +39,10 @@ fn setup( ) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 11.0, ..Default::default() })), + mesh: meshes.add(Mesh::from(shape::Plane { + size: 11.0, + ..Default::default() + })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/examples/simple.rs b/examples/simple.rs index 307d069..cbf14cc 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -34,7 +34,10 @@ fn setup( ) { // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0, ..Default::default() })), + mesh: meshes.add(Mesh::from(shape::Plane { + size: 5.0, + ..Default::default() + })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/examples/yp.rs b/examples/yp.rs index 6a71b0c..42325f7 100644 --- a/examples/yp.rs +++ b/examples/yp.rs @@ -49,7 +49,10 @@ fn setup( // plane commands.spawn(PbrBundle { - mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0, ..Default::default() })), + mesh: meshes.add(Mesh::from(shape::Plane { + size: 5.0, + ..Default::default() + })), material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()), ..Default::default() }); diff --git a/src/driver/driver_resources.rs b/src/driver/driver_resources.rs index 179da88..44ce55d 100644 --- a/src/driver/driver_resources.rs +++ b/src/driver/driver_resources.rs @@ -1,4 +1,4 @@ -use bevy::prelude::{Camera, Commands, Entity, Input, KeyCode, Query, Res, ResMut, DetectChanges}; +use bevy::prelude::{Camera, Commands, DetectChanges, Entity, Input, KeyCode, Query, Res, ResMut}; use super::driver_core::Drivers; diff --git a/src/drivers/fpv.rs b/src/drivers/fpv.rs index c93baad..56cc555 100644 --- a/src/drivers/fpv.rs +++ b/src/drivers/fpv.rs @@ -111,7 +111,7 @@ pub fn update_fpv_camera( if !window.cursor.visible { if let Some(fpv) = r.try_driver_mut::<Fpv>() { fpv.set_rotation(delta, sensitivity, move_vec, time_delta_seconds); - } + } } } }); diff --git a/src/lib.rs b/src/lib.rs index a67bb57..250d145 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,9 +3,9 @@ pub mod drivers; use bevy::{ prelude::{ - default, App, Camera, Camera2dBundle, Camera3dBundle, Commands, Component, - OrthographicProjection, Plugin, Query, Res, Resource, - Transform, Vec3, With, SystemSet, IntoSystemConfig, + default, App, Camera, Commands, Component, + IntoSystemConfig, OrthographicProjection, Plugin, Query, Res, Resource, SystemSet, + Transform, Vec3, With, Camera3dBundle, Camera2dBundle, }, render::camera::ScalingMode, }; From 11bf9b6772947f433df381a9d89333d2cf8cea5d Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 17 Sep 2023 19:51:35 +0200 Subject: [PATCH 60/63] Updated to bevy_dolly crate and bevy 0.11 --- Cargo.toml | 10 +++++----- examples/minimal.rs | 4 ++-- src/drivers/fpv.rs | 6 +++--- src/drivers/orbit.rs | 8 ++++---- src/lib.rs | 29 +++++++++++++++-------------- 5 files changed, 29 insertions(+), 28 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 19acb66..9c9f0c7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,17 +23,17 @@ name = "bevy_config_cam" [dependencies] rand = "0.8" -strum = "0.24" -strum_macros = "0.24" -bevy_dolly = { git = "https://github.com/BlackPhlox/bevy_dolly", branch = "map_fork_v2" }#{ path = "../bevy_dolly" } +strum = "0.25" +strum_macros = "0.25" +bevy_dolly = "0.0.1" config_cam_derive = { path = "config_cam_derive" } [dependencies.bevy] -version = "0.10" +version = "0.11" features = ["bevy_render","bevy_pbr"] default-features = false [dev-dependencies.bevy] -version = "0.10" +version = "0.11" features = ["bevy_core_pipeline", "bevy_asset", "bevy_scene", "bevy_pbr", "bevy_gltf", "x11", "wayland"] default-features = false \ No newline at end of file diff --git a/examples/minimal.rs b/examples/minimal.rs index 2b8bc9e..132a808 100644 --- a/examples/minimal.rs +++ b/examples/minimal.rs @@ -4,8 +4,8 @@ use bevy_config_cam::*; fn main() { App::new() .add_plugins(DefaultPlugins) - .add_plugin(ConfigCam) - .add_startup_system(setup) + .add_plugins(ConfigCam) + .add_systems(Startup, setup) .run(); } diff --git a/src/drivers/fpv.rs b/src/drivers/fpv.rs index 56cc555..f23b553 100644 --- a/src/drivers/fpv.rs +++ b/src/drivers/fpv.rs @@ -88,7 +88,7 @@ pub fn update_fpv_camera( move_vec.y -= 1.0; } - let boost: f32 = if keys.pressed(KeyCode::LShift) { + let boost: f32 = if keys.pressed(KeyCode::ShiftLeft) { 1. } else { 0. @@ -104,13 +104,13 @@ pub fn update_fpv_camera( move_vec, boost, boost_mult, - fps_state.0.eq(&MovementType::FirstPerson), + fps_state.get().eq(&MovementType::FirstPerson), ); if let Ok(window) = windows.get_single() { if !window.cursor.visible { if let Some(fpv) = r.try_driver_mut::<Fpv>() { - fpv.set_rotation(delta, sensitivity, move_vec, time_delta_seconds); + fpv.set_rotation(delta, move_vec, time_delta_seconds); } } } diff --git a/src/drivers/orbit.rs b/src/drivers/orbit.rs index 2c09b02..f36e54b 100644 --- a/src/drivers/orbit.rs +++ b/src/drivers/orbit.rs @@ -78,9 +78,9 @@ fn update_orbit_camera( delta += event.delta; } - config.rotation = Quat::from_rotation_y(delta.x); + config.transform.rotation = Quat::from_rotation_y(delta.x); - if pan.0.eq(&Pan::Keys) { + if pan.get().eq(&Pan::Keys) { if keys.just_pressed(KeyCode::Z) { camera_driver.rotate_yaw_pitch(-90.0, 0.0); } @@ -95,12 +95,12 @@ fn update_orbit_camera( } if keys.just_pressed(KeyCode::E) { - let result = if pan.0.eq(&Pan::Keys) { + let result = if pan.get().eq(&Pan::Keys) { Pan::Mouse } else { Pan::Keys }; - pan.0 = result; + *pan = State::new(result); println!("State:{result:?}"); } diff --git a/src/lib.rs b/src/lib.rs index 250d145..32153d1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,8 +4,8 @@ pub mod drivers; use bevy::{ prelude::{ default, App, Camera, Commands, Component, - IntoSystemConfig, OrthographicProjection, Plugin, Query, Res, Resource, SystemSet, - Transform, Vec3, With, Camera3dBundle, Camera2dBundle, + OrthographicProjection, Plugin, Query, Res, Resource, SystemSet, + Transform, Vec3, With, Camera3dBundle, Camera2dBundle, Update, Startup, IntoSystemConfigs, }, render::camera::ScalingMode, }; @@ -24,18 +24,18 @@ impl Plugin for ConfigCam { fn build(&self, app: &mut App) { app.init_resource::<Drivers>() .init_resource::<CCConfig>() - .add_plugin(DollyPosCtrl) - .add_plugin(DollyCursorGrab) + .add_plugins(DollyPosCtrl) + .add_plugins(DollyCursorGrab) .insert_resource(DollyPosCtrlConfig { - default_player: false, + player: Player::None, ..Default::default() }) - .add_startup_system(camera_setup.in_set(CCSetupLabel)) - .add_plugin(CCFpv) - .add_plugin(CCOrbit) - .add_system(change_driver_system) - .add_system(update_driver_system) - .add_system(update_look_at); + .add_systems(Startup, camera_setup.run_if(is_init_cameras).in_set(CCSetupLabel)) + .add_plugins(CCFpv) + .add_plugins(CCOrbit) + .add_systems(Update, change_driver_system) + .add_systems(Update, update_driver_system) + .add_systems(Update, update_look_at); } } @@ -80,10 +80,11 @@ impl Default for CCConfig { } } +fn is_init_cameras(config: Res<CCConfig>) -> bool { + config.init_cameras +} + fn camera_setup(mut commands: Commands, config: Res<CCConfig>) { - if !config.init_cameras { - return; - } commands.spawn(( MainCamera, PerspectiveCamera, From 469fe14a4cbf5336ffb226754f5590ca540d854d Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 17 Sep 2023 19:53:52 +0200 Subject: [PATCH 61/63] fmt & clippy --- src/drivers/fpv.rs | 6 +++--- src/drivers/orbit.rs | 6 +++--- src/lib.rs | 13 ++++++++----- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/drivers/fpv.rs b/src/drivers/fpv.rs index f23b553..fcc51c6 100644 --- a/src/drivers/fpv.rs +++ b/src/drivers/fpv.rs @@ -15,9 +15,9 @@ pub struct CCFpv; impl Plugin for CCFpv { fn build(&self, app: &mut App) { app.add_rig_component(CCFpv) - .add_startup_system(setup_fpv) + .add_systems(Startup, setup_fpv) .add_state::<MovementType>() - .add_system(update_fpv_camera); + .add_systems(Update, update_fpv_camera); } } @@ -63,7 +63,7 @@ pub fn update_fpv_camera( ) { let time_delta_seconds: f32 = time.delta_seconds(); let boost_mult = 5.0f32; - let sensitivity = Vec2::splat(1.0); + let _sensitivity = Vec2::splat(1.0); let mut move_vec = Vec3::ZERO; diff --git a/src/drivers/orbit.rs b/src/drivers/orbit.rs index f36e54b..e231990 100644 --- a/src/drivers/orbit.rs +++ b/src/drivers/orbit.rs @@ -15,9 +15,9 @@ impl Plugin for CCOrbit { fn build(&self, app: &mut App) { app.add_rig_component(CCOrbit) .add_state::<Pan>() - .add_startup_system(setup_orbit.after(CCSetupLabel)) - .add_system(handle_mouse_scroll) - .add_system(update_orbit_camera); + .add_systems(Startup, setup_orbit.after(CCSetupLabel)) + .add_systems(Update, handle_mouse_scroll) + .add_systems(Update, update_orbit_camera); } } diff --git a/src/lib.rs b/src/lib.rs index 32153d1..a6f60f8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,9 +3,9 @@ pub mod drivers; use bevy::{ prelude::{ - default, App, Camera, Commands, Component, - OrthographicProjection, Plugin, Query, Res, Resource, SystemSet, - Transform, Vec3, With, Camera3dBundle, Camera2dBundle, Update, Startup, IntoSystemConfigs, + default, App, Camera, Camera2dBundle, Camera3dBundle, Commands, Component, + IntoSystemConfigs, OrthographicProjection, Plugin, Query, Res, Resource, Startup, + SystemSet, Transform, Update, Vec3, With, }, render::camera::ScalingMode, }; @@ -30,7 +30,10 @@ impl Plugin for ConfigCam { player: Player::None, ..Default::default() }) - .add_systems(Startup, camera_setup.run_if(is_init_cameras).in_set(CCSetupLabel)) + .add_systems( + Startup, + camera_setup.run_if(is_init_cameras).in_set(CCSetupLabel), + ) .add_plugins(CCFpv) .add_plugins(CCOrbit) .add_systems(Update, change_driver_system) @@ -84,7 +87,7 @@ fn is_init_cameras(config: Res<CCConfig>) -> bool { config.init_cameras } -fn camera_setup(mut commands: Commands, config: Res<CCConfig>) { +fn camera_setup(mut commands: Commands, _config: Res<CCConfig>) { commands.spawn(( MainCamera, PerspectiveCamera, From f47b07806b931ba807dd88c316173ff75095f62b Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 17 Sep 2023 22:44:47 +0200 Subject: [PATCH 62/63] Updated readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5ce5a3..0169f37 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ Note: That some of them are overwritten by accessing the settings or the changin |0.5|0.1.X| |0.6|0.2.X| |0.7|0.3.X| -|0.8|0.4.X| +|0.11|0.4.X| # Licensing The project is under dual license MIT and Apache-2.0, so yoink to your hearts content, just remember the license agreements. From 06e96ea929699a666a04271efbaeabdc81cad5c1 Mon Sep 17 00:00:00 2001 From: Mikkel Rasmussen <theluja@gmail.com> Date: Sun, 17 Sep 2023 22:51:25 +0200 Subject: [PATCH 63/63] Update examples --- README.md | 23 ++++++++++++++--------- examples/multiple_targets.rs | 2 +- examples/simple.rs | 19 ++++++++++++------- examples/yp.rs | 6 +++--- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 0169f37..fa069ea 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ <a href="https://crates.io/crates/bevy_config_cam"><img src="https://img.shields.io/crates/v/bevy_config_cam" alt="link to crates.io"></a> <a href="https://docs.rs/bevy_config_cam"><img src="https://docs.rs/bevy_config_cam/badge.svg" alt="link to docs.rs"></a> <a href="https://github.com/BlackPhlox/bevy_config_cam/blob/master/credits/CREDITS.md"><img src="https://img.shields.io/crates/l/bevy_config_cam" alt="link to license"></a> -<a href="https://crates.io/crates/bevy_config_cam"><img src="https://img.shields.io/crates/d/bevy_config_cam" alt="downloads/link to crates.io"></a> +<a href="https://crates.io/crates/bevy_config_cam"><img src="https://img.shields.io/crates/d/bevy_config_cam" alt="downloads/link to crates.io"></a> <a href="https://github.com/BlackPhlox/bevy_config_cam"><img src="https://img.shields.io/github/stars/BlackPhlox/bevy_config_cam" alt="stars/github repo"></a> <a href="https://github.com/BlackPhlox/bevy_config_cam/actions/workflows/master.yml"><img src="https://github.com/BlackPhlox/bevy_config_cam/actions/workflows/master.yml/badge.svg" alt="github actions"></a> <a href="https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking"><img src="https://img.shields.io/badge/Bevy%20tracking-released%20version-lightblue" alt="tracking bevy release branch"></a> @@ -14,14 +14,14 @@ An easy plug-n-play multifunctional camera controller that allows for easy setup of a camera and player for a scene. Add a few lines of code to your existing project allows you to test a wide variety of cameras by attaching it to -your player asset or the default red player entity. +your player asset or the default red player entity. Inspired and extended on [bevy_flycam](https://github.com/sburris0/bevy_flycam), this plugin is fairly simple but should be a neat help for developers looking for a camera implementation without going the hassle of reinventing the wheel. # Backend -The main goal of this plugin is to first and foremost provide the user with a configurable, extendable and easy-to-use API. [`dolly`](https://github.com/h3r2tic/dolly) by @h3r2tic is a crate that provides an framework for which to create, combine and modify camera positioning, exactly what `bevy_config_cam` is looking for. -[bevy_dolly](https://github.com/BlackPhlox/bevy_dolly) is the backend for `bevy_config_cam`. +The main goal of this plugin is to first and foremost provide the user with a configurable, extendable and easy-to-use API. [`dolly`](https://github.com/h3r2tic/dolly) by @h3r2tic is a crate that provides an framework for which to create, combine and modify camera positioning, exactly what `bevy_config_cam` is looking for. +[bevy_dolly](https://github.com/BlackPhlox/bevy_dolly) is the backend for `bevy_config_cam`. # Showcase @@ -33,13 +33,13 @@ The main goal of this plugin is to first and foremost provide the user with a co <th><h2>Static</h2></th> <th><h2>Pinned</h2></th> </tr> - <tr> + <tr> <th>FollowStatic</th> <th>Fps</th> </tr> <tr> <td><img src="https://user-images.githubusercontent.com/25123512/119991121-6cd28600-bfc9-11eb-9fcd-89fa9d591d4b.png" style="height:350px;" alt="FollowStatic"></td> - <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:350px;" alt="Fps"></td> + <td><img src="https://user-images.githubusercontent.com/25123512/119991187-7bb93880-bfc9-11eb-9739-598e01ba214f.png" style="height:350px;" alt="Fps"></td> </tr> <tr> <th>LookAt</th> @@ -82,7 +82,7 @@ The main goal of this plugin is to first and foremost provide the user with a co ## Test the project -Before I start using a plugin, I all ways like to run the examples prior to setting it up for my own project. Just to see if the plugin satisfy my needs. +Before I start using a plugin, I all ways like to run the examples prior to setting it up for my own project. Just to see if the plugin satisfy my needs. If you're like me then this is for you. 1. Clone this repo to your local machine @@ -96,11 +96,12 @@ Settings: <kbd>E</kbd> and use the mouse-scroll to change the selected settings ## Add to your own project -Adding this plugin to your project is *very* simple, it only requires you to write 2 lines of code. +Adding this plugin to your project is *very* simple, it only requires you to write 2 lines of code. ### Step 1. - Setup - + Add the correct version to your `Cargo.toml`, you can find the version you are looking for under the support section. The thing you should be adding should look like this (only add the line marked by `# <--`): + ```toml [dependencies] bevy = { version = "0.8"} @@ -140,9 +141,11 @@ Now, there is a reason for the name `bevy_config_cam`. It is most likely that yo ..Default::default() }) ``` + Note: That some of them are overwritten by accessing the settings or the changing the camera type. Feedback on this is high appreciated, just create a new issue and I'll look into it when I have the time. # Support + [![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-released%20version-lightblue)](https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking) |bevy|bevy_config_cam| @@ -153,7 +156,9 @@ Note: That some of them are overwritten by accessing the settings or the changin |0.11|0.4.X| # Licensing + The project is under dual license MIT and Apache-2.0, so yoink to your hearts content, just remember the license agreements. # Contributing + Yes this project is still very much WIP, so PRs are very welcome diff --git a/examples/multiple_targets.rs b/examples/multiple_targets.rs index e080f6b..79682ac 100644 --- a/examples/multiple_targets.rs +++ b/examples/multiple_targets.rs @@ -7,7 +7,7 @@ fn main() { App::new() .insert_resource(Msaa::default()) .add_plugins(DefaultPlugins) - .add_plugin(ConfigCam) + .add_plugins(ConfigCam) .add_rig_component(T1) .add_dolly_component(MainCamera) /*.insert_resource(MovementSettings { diff --git a/examples/simple.rs b/examples/simple.rs index cbf14cc..eccd348 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -12,13 +12,18 @@ use config_cam_derive::DriverMarker; fn main() { App::new() .add_plugins(DefaultPlugins) - .add_plugin(WireframePlugin) - .add_plugin(ConfigCam) - .add_startup_system(setup) - .add_system(rotator_system) - .add_system(add_target_system) - .add_system(remove_target_system) - .add_system(switch_camera) + .add_plugins(WireframePlugin) + .add_plugins(ConfigCam) + .add_systems(Startup, setup) + .add_systems( + Update, + ( + rotator_system, + add_target_system, + remove_target_system, + switch_camera, + ), + ) .run(); } diff --git a/examples/yp.rs b/examples/yp.rs index 42325f7..e4427ed 100644 --- a/examples/yp.rs +++ b/examples/yp.rs @@ -14,14 +14,14 @@ pub use std::any::TypeId; fn main() { App::new() .add_plugins(DefaultPlugins) - .add_plugin(ConfigCam) + .add_plugins(ConfigCam) .add_dolly_component(YP) .insert_resource(Drivers::new( driver_vec![CCOrbit, CCFpv, YP], type_vec![MainCamera], )) - .add_startup_system(setup) - .add_system(update_yaw_driver) + .add_systems(Startup, setup) + .add_systems(Update, update_yaw_driver) .run(); }