From b5e0c7e6a7f4bac4251209206bfdafe7c14113cd Mon Sep 17 00:00:00 2001 From: joe Date: Sun, 11 Jan 2026 17:16:33 -0800 Subject: [PATCH] basic assets for tank and background grid --- .cargo/config.toml | 9 + Cargo.lock | 824 +++++++++++++++++++- Cargo.toml | 9 + assets/sprites/terrain/grid_paper_empty.png | Bin 0 -> 22410 bytes assets/sprites/units/basic_tank.png | Bin 0 -> 17576 bytes src/main.rs | 53 +- 6 files changed, 871 insertions(+), 24 deletions(-) create mode 100644 .cargo/config.toml create mode 100644 assets/sprites/terrain/grid_paper_empty.png create mode 100644 assets/sprites/units/basic_tank.png diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..d174eaa --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,9 @@ +# for Linux +[target.x86_64-unknown-linux-gnu] +linker = "clang" +rustflags = ["-C", "link-arg=-fuse-ld=lld"] + +# for Windows +[target.x86_64-pc-windows-msvc] +linker = "rust-lld.exe" + diff --git a/Cargo.lock b/Cargo.lock index 6851d08..9b97baf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -103,6 +103,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "alsa" version = "0.9.1" @@ -167,6 +173,12 @@ dependencies = [ "libc", ] +[[package]] +name = "anymap3" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170433209e817da6aae2c51aa0dd443009a613425dd041ebfb2492d1c4c11a25" + [[package]] name = "approx" version = "0.5.1" @@ -176,12 +188,27 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arc-swap" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d03449bb8ca2cc2ef70869af31463d1ae5ccc8fa3e334b307203fbf815207e" +dependencies = [ + "rustversion", +] + [[package]] name = "arrayref" version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" +[[package]] +name = "arrayvec" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" + [[package]] name = "arrayvec" version = "0.7.6" @@ -307,6 +334,7 @@ name = "autobats" version = "0.1.0" dependencies = [ "bevy", + "steel-core", ] [[package]] @@ -625,7 +653,7 @@ name = "bevy_ecs" version = "0.18.0-rc.2" source = "git+https://github.com/bevyengine/bevy.git?branch=release-0.18.0#f8e531d1693301d7d3feba6404236bcdfcab7f33" dependencies = [ - "arrayvec", + "arrayvec 0.7.6", "bevy_ecs_macros", "bevy_platform", "bevy_ptr", @@ -637,7 +665,7 @@ dependencies = [ "concurrent-queue", "derive_more", "fixedbitset", - "indexmap", + "indexmap 2.13.0", "log", "nonmax", "serde", @@ -896,7 +924,7 @@ version = "0.18.0-rc.2" source = "git+https://github.com/bevyengine/bevy.git?branch=release-0.18.0#f8e531d1693301d7d3feba6404236bcdfcab7f33" dependencies = [ "approx", - "arrayvec", + "arrayvec 0.7.6", "bevy_reflect", "derive_more", "glam", @@ -1067,7 +1095,7 @@ dependencies = [ "erased-serde", "foldhash 0.2.0", "glam", - "indexmap", + "indexmap 2.13.0", "inventory", "petgraph", "serde", @@ -1085,7 +1113,7 @@ version = "0.18.0-rc.2" source = "git+https://github.com/bevyengine/bevy.git?branch=release-0.18.0#f8e531d1693301d7d3feba6404236bcdfcab7f33" dependencies = [ "bevy_macro_utils", - "indexmap", + "indexmap 2.13.0", "proc-macro2", "quote", "syn", @@ -1126,7 +1154,7 @@ dependencies = [ "fixedbitset", "glam", "image", - "indexmap", + "indexmap 2.13.0", "js-sys", "naga", "nonmax", @@ -1467,6 +1495,28 @@ dependencies = [ "winit", ] +[[package]] +name = "bigdecimal" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + [[package]] name = "bindgen" version = "0.72.1" @@ -1516,6 +1566,15 @@ dependencies = [ "serde_core", ] +[[package]] +name = "bitmaps" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "031043d04099746d8db04daf1fa424b2bc8bd69d92b25962dcde24da39ab64a2" +dependencies = [ + "typenum", +] + [[package]] name = "blake3" version = "1.8.3" @@ -1523,7 +1582,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2468ef7d57b3fb7e16b576e8377cdbde2320c60e1491e961d11da40fc4f02a2d" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.7.6", "cc", "cfg-if", "constant_time_eq", @@ -1536,6 +1595,15 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "block2" version = "0.5.1" @@ -1637,6 +1705,15 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "castaway" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec551ab6e7578819132c713a93c022a05d60159dc86e7a7050223577484c55a" +dependencies = [ + "rustversion", +] + [[package]] name = "cc" version = "1.2.52" @@ -1676,6 +1753,17 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "num-traits", + "windows-link 0.2.1", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -1687,6 +1775,25 @@ dependencies = [ "libloading", ] +[[package]] +name = "codegen" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff61280aed771c3070e7dcc9e050c66f1eb1e3b96431ba66f9f74641d02fc41d" +dependencies = [ + "indexmap 1.9.3", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width 0.1.14", +] + [[package]] name = "codespan-reporting" version = "0.12.0" @@ -1695,7 +1802,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ "serde", "termcolor", - "unicode-width", + "unicode-width 0.2.2", ] [[package]] @@ -1708,6 +1815,21 @@ dependencies = [ "memchr", ] +[[package]] +name = "compact_str" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32" +dependencies = [ + "castaway", + "cfg-if", + "itoa", + "rustversion", + "ryu", + "serde", + "static_assertions", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -1964,6 +2086,16 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" +[[package]] +name = "crypto-common" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" +dependencies = [ + "generic-array", + "typenum", +] + [[package]] name = "ctrlc" version = "3.5.1" @@ -1981,6 +2113,20 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "dasp_sample" version = "0.11.0" @@ -2016,6 +2162,16 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + [[package]] name = "dispatch" version = "0.2.0" @@ -2034,6 +2190,17 @@ dependencies = [ "objc2 0.6.3", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "disqualified" version = "1.0.0" @@ -2113,6 +2280,12 @@ dependencies = [ "syn", ] +[[package]] +name = "env_home" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f84e12ccf0a7ddc17a6c41c93326024c42920d7ee630d04950e6926645c0fe" + [[package]] name = "equivalent" version = "1.0.2" @@ -2299,6 +2472,17 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + [[package]] name = "futures-io" version = "0.3.31" @@ -2346,6 +2530,28 @@ dependencies = [ "futures-task", "pin-project-lite", "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "generic_singleton" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2d5de0fc83987dac514f3b910c5d08392b220efe8cf72086c660029a197bf73" +dependencies = [ + "anymap3", + "lazy_static", + "parking_lot", ] [[package]] @@ -2365,9 +2571,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ "cfg-if", + "js-sys", "libc", "r-efi", "wasip2", + "wasm-bindgen", ] [[package]] @@ -2556,6 +2764,23 @@ dependencies = [ "byteorder", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + [[package]] name = "hashbrown" version = "0.15.5" @@ -2611,6 +2836,148 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" +[[package]] +name = "httparse" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core 0.58.0", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_casemap" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4ca9983e8bf51223c2f89014fa4eaa9e9b336c47f3af0d000538f86f841fba1" +dependencies = [ + "icu_casemap_data", + "icu_collections", + "icu_locale_core", + "icu_properties", + "icu_provider", + "potential_utf", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_casemap_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98d4663d0f99b301033a19e0acf94e9d2fa4b107638580165e5a6ccc49ad1450" + +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "serde", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "serde", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "serde", + "stable_deref_trait", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "im-lists" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "952b35313cb20214b270aa12e6d144270cc1c44d29caf207565f2cbeb926db9d" +dependencies = [ + "generic_singleton", + "smallvec", +] + +[[package]] +name = "im-rc" +version = "15.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1955a75fa080c677d3972822ec4bad316169ab1cfc6c257a942c2265dbe5fe" +dependencies = [ + "bitmaps", + "rand_core 0.6.4", + "rand_xoshiro", + "serde", + "sized-chunks", + "typenum", + "version_check", +] + [[package]] name = "image" version = "0.25.9" @@ -2624,6 +2991,16 @@ dependencies = [ "png", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + [[package]] name = "indexmap" version = "2.13.0" @@ -2693,6 +3070,12 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + [[package]] name = "jni" version = "0.21.1" @@ -2752,6 +3135,18 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "lasso" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e14eda50a3494b3bf7b9ce51c52434a761e383d7238ce1dd5dcec2fbc13e9fb" +dependencies = [ + "ahash", + "dashmap", + "hashbrown 0.14.5", + "serde", +] + [[package]] name = "lazy_static" version = "1.5.0" @@ -2830,6 +3225,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + [[package]] name = "litrs" version = "1.0.0" @@ -2878,6 +3279,16 @@ dependencies = [ "regex-automata", ] +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + [[package]] name = "memchr" version = "2.7.6" @@ -2940,16 +3351,16 @@ version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "066cf25f0e8b11ee0df221219010f213ad429855f57c494f995590c861a9a7d8" dependencies = [ - "arrayvec", + "arrayvec 0.7.6", "bit-set", "bitflags 2.10.0", "cfg-if", "cfg_aliases", - "codespan-reporting", + "codespan-reporting 0.12.0", "half", "hashbrown 0.16.1", "hexf-parse", - "indexmap", + "indexmap 2.13.0", "libm", "log", "num-traits", @@ -2967,9 +3378,9 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "310c347db1b30e69581f3b84dc9a5c311ed583f67851b39b77953cb7a066c97f" dependencies = [ - "codespan-reporting", + "codespan-reporting 0.12.0", "data-encoding", - "indexmap", + "indexmap 2.13.0", "naga", "regex", "rustc-hash 1.1.0", @@ -3077,6 +3488,17 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "serde", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -3088,6 +3510,26 @@ dependencies = [ "syn", ] +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -3485,7 +3927,7 @@ checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" dependencies = [ "fixedbitset", "hashbrown 0.15.5", - "indexmap", + "indexmap 2.13.0", "serde", "serde_derive", ] @@ -3581,6 +4023,17 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "serde_core", + "writeable", + "zerovec", +] + [[package]] name = "pp-rs" version = "0.2.1" @@ -3605,6 +4058,17 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" +[[package]] +name = "pretty" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d22152487193190344590e4f30e219cf3fe140d9e7a3fdb683d82aa2c5f4156" +dependencies = [ + "arrayvec 0.5.2", + "typed-arena", + "unicode-width 0.2.2", +] + [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -3675,7 +4139,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" dependencies = [ "rand_chacha", - "rand_core", + "rand_core 0.9.3", ] [[package]] @@ -3685,9 +4149,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" dependencies = [ "ppv-lite86", - "rand_core", + "rand_core 0.9.3", ] +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" + [[package]] name = "rand_core" version = "0.9.3" @@ -3707,6 +4177,15 @@ dependencies = [ "rand", ] +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "range-alloc" version = "0.1.4" @@ -3897,6 +4376,12 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" +[[package]] +name = "ryu" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a50f4cf475b65d88e057964e0e9bb1f0aa9bbb2036dc65c64596b42932536984" + [[package]] name = "same-file" version = "1.0.6" @@ -3979,6 +4464,19 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + [[package]] name = "sharded-slab" version = "0.1.7" @@ -3988,6 +4486,15 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared_vector" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aacfea9afcf271e69d700140dc2a3e2ff44b1092dd0de71fdd4e5c26672a2" +dependencies = [ + "allocator-api2", +] + [[package]] name = "shlex" version = "1.3.0" @@ -4000,6 +4507,16 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" +[[package]] +name = "sized-chunks" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16d69225bde7a69b235da73377861095455d298f2b970996eec25ddbb42b3d1e" +dependencies = [ + "bitmaps", + "typenum", +] + [[package]] name = "skrifa" version = "0.37.0" @@ -4114,12 +4631,114 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "steel-core" +version = "0.7.0" +source = "git+https://github.com/mattwparas/steel.git?branch=master#697b11bc3211275845fe68c5e0c65f980cf6bd80" +dependencies = [ + "arc-swap", + "bigdecimal", + "bincode", + "chrono", + "codespan-reporting 0.11.1", + "compact_str", + "crossbeam-channel", + "crossbeam-queue", + "crossbeam-utils", + "env_home", + "futures-executor", + "futures-task", + "futures-util", + "getrandom", + "glob", + "httparse", + "icu_casemap", + "im-lists", + "im-rc", + "lasso", + "log", + "md-5", + "num-bigint", + "num-integer", + "num-rational", + "num-traits", + "once_cell", + "parking_lot", + "polling", + "rand", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "shared_vector", + "smallvec", + "steel-derive", + "steel-gen", + "steel-parser", + "steel-quickscope", + "strsim", + "weak-table", + "which", + "xdg", +] + +[[package]] +name = "steel-derive" +version = "0.6.0" +source = "git+https://github.com/mattwparas/steel.git?branch=master#697b11bc3211275845fe68c5e0c65f980cf6bd80" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "steel-gen" +version = "0.3.0" +source = "git+https://github.com/mattwparas/steel.git?branch=master#697b11bc3211275845fe68c5e0c65f980cf6bd80" +dependencies = [ + "codegen", + "serde", +] + +[[package]] +name = "steel-parser" +version = "0.7.0" +source = "git+https://github.com/mattwparas/steel.git?branch=master#697b11bc3211275845fe68c5e0c65f980cf6bd80" +dependencies = [ + "compact_str", + "lasso", + "log", + "num-bigint", + "num-rational", + "num-traits", + "once_cell", + "pretty", + "rustc-hash 2.1.1", + "serde", + "smallvec", +] + +[[package]] +name = "steel-quickscope" +version = "0.2.0" +source = "git+https://github.com/mattwparas/steel.git?branch=master#697b11bc3211275845fe68c5e0c65f980cf6bd80" +dependencies = [ + "indexmap 2.13.0", + "smallvec", +] + [[package]] name = "strict-num" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + [[package]] name = "svg_fmt" version = "0.4.5" @@ -4148,6 +4767,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sys-locale" version = "0.3.2" @@ -4177,7 +4807,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "41ba83ebaf2954d31d05d67340fd46cebe99da2b7133b0dd68d70c65473a437b" dependencies = [ - "arrayvec", + "arrayvec 0.7.6", "grid", "serde", "slotmap", @@ -4248,7 +4878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.7.6", "bytemuck", "cfg-if", "log", @@ -4266,6 +4896,17 @@ dependencies = [ "strict-num", ] +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "serde_core", + "zerovec", +] + [[package]] name = "tinyvec" version = "1.10.0" @@ -4296,7 +4937,7 @@ version = "0.23.10+spec-1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" dependencies = [ - "indexmap", + "indexmap 2.13.0", "toml_datetime", "toml_parser", "winnow", @@ -4404,12 +5045,24 @@ dependencies = [ "core_maths", ] +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + [[package]] name = "typeid" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + [[package]] name = "typewit" version = "1.14.2" @@ -4446,6 +5099,12 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + [[package]] name = "unicode-width" version = "0.2.2" @@ -4684,6 +5343,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "weak-table" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" + [[package]] name = "web-sys" version = "0.3.83" @@ -4710,7 +5375,7 @@ version = "27.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfe68bac7cde125de7a731c3400723cadaaf1703795ad3f4805f187459cd7a77" dependencies = [ - "arrayvec", + "arrayvec 0.7.6", "bitflags 2.10.0", "cfg-if", "cfg_aliases", @@ -4737,7 +5402,7 @@ version = "27.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27a75de515543b1897b26119f93731b385a19aea165a1ec5f0e3acecc229cae7" dependencies = [ - "arrayvec", + "arrayvec 0.7.6", "bit-set", "bit-vec", "bitflags 2.10.0", @@ -4745,7 +5410,7 @@ dependencies = [ "cfg_aliases", "document-features", "hashbrown 0.16.1", - "indexmap", + "indexmap 2.13.0", "log", "naga", "once_cell", @@ -4797,7 +5462,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5b21cb61c57ee198bc4aff71aeadff4cbb80b927beb912506af9c780d64313ce" dependencies = [ "android_system_properties", - "arrayvec", + "arrayvec 0.7.6", "ash", "bit-set", "bitflags 2.10.0", @@ -4854,6 +5519,17 @@ dependencies = [ "web-sys", ] +[[package]] +name = "which" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fabb953106c3c8eea8306e4393700d7657561cb43122571b172bbfb7c7ba1d" +dependencies = [ + "env_home", + "rustix 1.1.3", + "winsafe", +] + [[package]] name = "winapi" version = "0.3.9" @@ -5395,12 +6071,24 @@ dependencies = [ "memchr", ] +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + [[package]] name = "wit-bindgen" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + [[package]] name = "x11-dl" version = "2.21.0" @@ -5439,6 +6127,12 @@ version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bec9e4a500ca8864c5b47b8b482a73d62e4237670e5b5f1d6b9e3cae50f28f2b" +[[package]] +name = "xdg" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb433233f2df9344722454bc7e96465c9d03bff9d77c248f9e7523fe79585b5" + [[package]] name = "xkbcommon-dl" version = "0.4.2" @@ -5470,6 +6164,29 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "zeno" version = "0.3.3" @@ -5495,3 +6212,64 @@ dependencies = [ "quote", "syn", ] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "serde", + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac93432f5b761b22864c774aac244fa5c0fd877678a4c37ebf6cf42208f9c9ec" diff --git a/Cargo.toml b/Cargo.toml index ea8af02..a53b48b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,3 +5,12 @@ edition = "2024" [dependencies] bevy = { default-features = false, git = "https://github.com/bevyengine/bevy.git", branch = "release-0.18.0", features = ["2d"] } +steel-core = { git="https://github.com/mattwparas/steel.git", branch = "master" } + +# Enable a small amount of optimization in the dev profile. +[profile.dev] +opt-level = 1 + +# Enable a large amount of optimization in the dev profile for dependencies. +[profile.dev.package."*"] +opt-level = 3 diff --git a/assets/sprites/terrain/grid_paper_empty.png b/assets/sprites/terrain/grid_paper_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..865392cee242bd0c0273c125de8e02509c18f06f GIT binary patch literal 22410 zcmZsjWmKD8(5?f)DZ!lp#oda#ySo*a;_ePbio0vk;!s?JODS5cP~6>JPTuvMZ=FA9 zWksGHo6MG(+4uG2o2s%58VV5#002Ofla*8l0AQdGVE{-7&^trd3akH)+|*^nVV1|3 zf}jU*)?!Lx06;?m>We8n^qAaSR$U1I@TCC&g1-U)Ptc~|0|3B-4FEVY0RZ?j0RVjG z+zvHC=o1KL3Nn&__x~=1-Q_9J7G!5xJvRV=h4Q~EjCZMsC$tgKT~0{~@d)MvECXI@ z#18}LmjL7>#WcPDo^%^zP>s0kKYnscn5eF-t?c0;LgN$*-jFJxlGnGnbKT2*jdeMLEg+bU$fw%O=o9=p&6%k zNB;c;c@~^}1>03H*`?4|T1Z0$BvBpG7>2WDjuP0ybz$>h3ZWkL5Ni}9WbzGDjvWAz z3jeE@i`-dsT-&L8J8`IG5(|dNs*2J!9sEXvgDYyA(HWs$kSHHlcX#3r{#5rO((6+o z;(v$6qZ0p6@P1@XLQ_sb*KaF-9UsQ4p7)g;i8!}>FOzrAIW;vL$=2l{3k6r=^E9$v z->0qD)s5blJum-@A;RJgf^su?0<^l0xkyshs8 zyQ`ur1S11HvLh<753Vq9FOjSi_quG?m4IWd{MRu(fIA*RwoV-UL?(x2^@ z8D|8RIg~vZ+ynpC+)y+@+t+#BcpQVv=%PSEmc*26*#4oqEt*S~WYdEOTcW#KD~lya zt%yz6CZGF&7OG1f+Np?*l@#Thu-GT$^M}xS`NNa?a@%aXhV^y9Sx>}pLHg+r6e&}O zG>T|7m)o`@gWNzf&^-CjNA^?i=^oy0yv|OfozzkKBoaygSigxW9HHK&hkqnw=CFkf zRG5vt6bq9POVpA$xTYeo{m+dU>PtS&(GCl$et*KNBNl$!)6b!KeWgvL3jIf#R6B`c z9q^Hi?uL35h^a_{QGxKC!wI0_GeLsu%xWmo-Cq~zTCk-ovpd{p%bohe2^MQOfp{@N z`{gL^8K=rUX5u%a%;ra`1kpAIj(_!|`Hlb(g|zy9n!#eb@39qCRCOaxPMpQ~0xQT2 zX;?i?r_Ol$uGub16up{ckYP_5_nT_4;@eZNF|p`E1?(ps=W@FwV>sI##69cE@^{s@ z7?U;F0L&NbZy_=;Bor1n0{EQyJb*Gxw0Qr50}9)Bc8sEE#p(l}z)2?nEKA>Glp;AL zGMr4q-Oq|A4f0bpMem?S0Pg{JE8}Uo+IbVAfzWdyfg7bs zKjdo!wxlpown`~6Z}o5eiKYUXr$OJZdz9Y3HKDDyhHUnoNKv7LIitiQyVuZtSp(2) z!VoOjf0nxZr*Beu8le@95T8={p1gyX~ZClp*9iT^E8U1 zfE2T=O%sTILHCYVgkn#^pjzdUnWk6;;FL+L09n)mGbd80zC*hEp2-3y&P84lJ-9mN zVVt_|7<$|M>{_tP^grYdR~dPDpQlVcETX@UrUVY8?ZP-Lu>!WksgXZ2}$X>T5eVGwig<)CO%v5jHFWq zM~g+Ia&E!?L}ZIA&p_cgIZ89a*9_Opwahyd)rf};{ul>3VWCpvKR=K!Q&|hdqZc6`xQFm?Cpz2)o_7U z9{JCnUV{eMQOry_ZL`;G(8?>^6TLe)%wu?*?((-2#>O6R-~>i-{GN>UB__8myK@hR zZcSF~`jc4sRI3;%C0z(TJ#D0dDjOEzNLAcU{a`vHXE_Y*6&2@BP|kz7t+0_+z1(e3 zRsm{j4+fl8pOiHG7fcx!JP9mbsnQAzG?z@FVC315()nH6A3$2&)u_TB6*H5w5vh1e|ISap1oY1rBG+Y@BK@u>?7UEtLZOih;+9 zi238y64!7o$NZIXLV?D)*sNsgr)9)uep*3D5yDjbj(;1I(P(QpEykVhg|Ad=h@x(cs?O z*-c(FYX7~`>NK&?uNf1f!H5jvzlbal+3+d|?Eg9IHqGpFefHU?+a(Wv6Nb*jh=Pnw z2UeLHOl9tPKi087FhzFZ{h5zfX!mc;%FjH-Y*h070|@#Qch~z+hF~SJvg=4*4o|E5 zhOI0kTD}mVOcK$Nxlr&+U$^_8+!@1|C zFt3U*T$_#s`EupJm(Wy9r<%gOwcwQedxxwHNfb6}Lyg?08e@QYFF;I6UkL*3-b4`7 zpDlat@MhY^aM+ULaIK+qKf*KafG7l=$Hm(go}283mme#2AILu+TvsWuK|7w>Mi+DXv;jRVd-QS9 zzAiJX>SX8hBlcr;UO`>w)K5l?`6V8R2#phl!Sq5yxh2w*{lsiimqDf-N z4t(+e&=%l~gSa2hSwWoxKmKA@s-6fC5(J-&Za@^g-CIb+u z(({rnBK#2gQ(w0P{@!VQYx0o(AGbxYk3(L_zWT=4ObD5<&#=?_d*Vn=f8Q8=3?pq9 zyTQ28bjat8Uot9>86trb#f^JS2F||z6M0qTk~PjHU$2FcV9&HZCdLYrM$Oojm3{5_ zc>`S~J9Gd8(){)0T(kbRuuO;4h~P{y%0FQsCixLV6u}z*M9G+gLZH_sZtP~^V-_23 zA*L7+SQmFOHaaXqGWUZ|P}*e&n;#&h6iA%YQ{OQ7Hy0W!Xae9dTnW63fr};8HM5lN zM&fKOW1%s;wl!*_&@spW_7W^o5WU1H?F z@MdHZT04Lc%1lwi?^`#zo1pX8M^Cr^G%Aq7JzxP7IJ=buyF-I-d-)A9-qEU{u!X~< zJZcOy3Gov{9IhyBgtWQTZ`9+&C*V~}Ht5e#WlGjXrCRY{l;rmi$>psgJFWGOZ%x0?q$I9Hr17JIafz2<22cL~GS{+%ilj6W>xu2VskjH>*72MEz?nL1Ib?=oS3 zA^o0L9b@{PK>j=2H(7r7#ORh^qCBcGo|+E!Wg{esh3T>9M;T2GLqvqs&13YMh-qgk zgSy1Z`|PzxA0w?cO4VHynbM;onTGH43O>iC5zT0i$=;Z+ZQX=EvSY^HxW)#o?6_5I zJ3j^zCn7xmWX6u759->k zcw<9$(}RI^5WW@x?rW*->X`0n(H#J0ah2= zQ7LY4PPTh%+cCl*mT=j4w&zDPcf#em72c(37>f--@bePB;}WaK7dk$yNCT;?6K`7X zuDQvjh0ioSZbY5v=kak~U}t_2?zr*+&~VSs;(`I)9_;OyYmJpda@bRH5_EdZA(_~z zUq6QSdp?+lEcl|Ko(L+g{Q6JYGR)qD8T+1} zCXs~Q;cIbczP1fL#}~M}RL7%2Qxd9quvg!Y-zHwe9VfE#4)mog4gBT<-`;0U#m-H- zp4<6t3A+f)G27WhI(gA(@hOKd7vuFD92y30;|>#NI*InmpQK{V^&au^W*Wf4ixH2P z)A~^j1JczQ6H`*L%Y93-OQ7M{06$hU|G+?k{YcYld;+SXi&q>7+vV*ECBY%n5*G`#3-C*cpc(VP{B=s&HTPioS!-nG=-3>u7 z3T8k34E8BP`|~;0*aG<0h2~Ed%lcQ8h^_3>G@_ZA^%@{}1}X@;P5k+HHIn9gmb0zC z^R%VoXCVqSfoK_`Awi>!ZA4?W6)ZKLKMWM1awB7X$#x^Z@V*u+(Pj#C6Osu%pftfB zO{g+P(Zo)~rAWl1Q#e+Mf=7s^qAw3K)+y-Y)ZQ#`G3$?3y8}{E-8A2+!Tx9yc_Y?# zq=NpTB{(?|gkuc(_#6HIa%h=2X$-dg3C=y&1q1sB%IzfGV^WCIGpNk$9fzAf>u-Ab zU;b_tJUxbwjmu82R^Ph2W&Hi?VkYY+cTs`=BUh;wM;rmL47IizZ_cv~@HCi)+`~S%YRj@$e8+_npXP5rJr!M=fn+#f%Gy}S zcM@S5B+1w9Ns=F#mf;OJ{pEjgS?+)FC=qS3>dPUd2hqJM7SL%AyrnI%!XVeQyO)hz zf7_HG71SHqYRHcl#~PA-x%%ywOS(?Xsp~>!Mk~&~U9kQLOn53hk9Insi?U+dJb!y} zhzHdst#12uGzoOMwisO}yk80Aw-3wh3FW1xUtzp$Un1u`#j^IiM%bo>TNt%_j>lC+ z3i`gJ_P&>U9a2XU?+c;+$Yj!^-aHC=;EJ&{@E<()N|<};(?Ne6@p_kKC2W=dUXDFr zF*F|*PrUdZn!7b9Kga@d=?}OW+kZJrsiRAFX0$-jBT1pYuQlF$YA#3_98vaYzHQ+7 zx*l|aSs?8131i-O@UZ+UU?|isVitRzE0`|IPbz%+80i(5;It6M!p31s{I-Yh&;{)*UV zH$r-;d*5W$Bi%tI2>Y^C6`Anxyxt{~6#E(S;9X?cduQhgiuHgXi)lXGT(dqdiUbD2 zY!mqH-vkpc2FcmpTRB`)QnVqR2RtB?1>ExDgw;&Xq`<|(JN5X69hW;fvO97I)6H+> ztp`AKrk;42{=QT&Sbgh#I1EsZHxhgGAwE#p?d`ty%g1Rq0fGr$RC?d|WU5m3+3|Ll zmkHl5rp{fZZMo};cG|hjVDgg8UMAh&acGO^IFV)z0SK zwqC_Oc?`;qlxW^J4}|EX_w~B!c2nZ0TguGN3-_mIw%bBXs~xf4o5xNCmr7bxUYWN{ zO`-U<#>={>lJi6?U0>Dc3GIJppch;*F%J~juj{cj@!RnTzwfcX@3!`C>z(o`qrTnk z_io(HW7~Q_r?~uQ5|b^u1|LlxPzCb_#~|o?<3!GZ9rvR&D#v zXoRqW%C-by7bn&GeXZ8@hIs>R`kN1IGGQo;%=M|G!M^?Qq(Z{m(C0>7rRaq|S5^== z*ZKswo%X++?6fFh9#&}f_%;sLM3&$%9_-N{>r?s~J-4Wop1$aARz*&EQ-F8A8cfvq zg{$l5ihb`_hQIwtkalt8|M*+uX-JH*?@W&~7GJwQ!^H4uJS!?k!dntv4F&VOVy+YnV@OWm;tZR!XA*<^%iAj;O1sO#}4v%BShX-2__?)QkGIQ29uIO|iQ zrlAKDmtfo?mMb@cIVn$YF==@dO9e{RF3gVzmef}FY7}<7#8rC}MDwcQ5WZ#B zkv5s7(HQ$e=P%MkZ0QR2qSzv|k$BPHyRRp)khqRBX(ePsiz7;R}Tx&^WC_JIC zV7jQ3?mx{lHiY=t{X0M~!sMtbc^NVgi4Rt3E!2hU{lhqWpKHVyEz2qaY92m3=ueXx zF@C?PDSY0m4cJF=mD6);)V*pJvHa*lCjVDMA%WLWfPcd&=#u*{v-23HJJvxpg|@Dz z%km{Vg@FNvY`fcS>idPYQwkmbp%q~_r^=l;;P z507yoyh(WbY0QN&b$K$udypRFwznt}fXeyNhrKq&9(O!~F|rCtJBgx`Z32D#urK<3 zbKj}hC*;^C_DA?U#mFnfX(y4*gSb}Y*;x9e@13YxQjU6Xy4VO={v z>qsv*t&JP#6VW%uH`NBXxUyvJ2Fa;oE*7f1+WlS;Y#K^ zM(*k7XNIJRmz=MUY*3N%TVX~?N(PO4Ubi3a1qf)XWDoiH_(_ggDQX*r9=zK(oC5E# zIla7({=!hOx770KT69T^viC;u7syk$JHPMM=r-~XYV_eu=+~F-K3V1nljBp`ZT;3c zlg<`(H>fI9Wq$gJM*G*ZK3Rd$gW)#JVgAtP`j8o)T<*0U%Nwn%%*SZY(2=) z-u6s=T)sBkBK}tBkepKLKz{e{RpR#ZeNt1v;-;GdJ04%SfFRYrl-j2b_4WY&@i@kj zJ}$ChTkNbK(#p)Lz(T1$ORhcAcKz z1w4la4&sE(`w!zVPTii75``7&NUY4|>B8#ENh73elP@Q?i>!GC>T#B9ljstlwX|BC zS{4wmEx|d88;F3lvnfm?R?DkHzum`uqWM{7>URRWN%fRzF4gMxVy*G^yxn32{mdn` zvHvA=H$e?f2}Q`)6#K=k2tXpVX4n%1R>D%e*Tw3;gfEd%M3z? z`XT4#+@ewJr5WOO!(<5Lp~T?oT7iwb(3_ezjyJ8V0;8e^d-cFQQobCs!ucECuYvpc z>~GH3W;26JQdS1jMa+p*s$Rpk3R7rY(3IRVeScURW{xhNa5hTq&rdL8%cqu7nTw)} z($e0evQj?ES6cdTRLjJxyV3|jFV;kSe33<&43*Wft!-FA9_^xEKT2_kiDx{W8#7E| z$$b#b%_I^r7jz-!&C{rC>8J#q!B%2JvPQhJO2#&o>1xtGVzU<&nCKwa= zk(ST0DdP{vbI-$SKf+(nl`;=E#xxB6`1>uyQ`2m&*6M&_4s%gJAF=2m?XP_J!11@o zq>Po|7iZ#Wkr{+Qw&C9h+^~ACa1#x9KmF8*R3l@zYMbsRkyboTDtCUGsU$~EsR=RU*Y+GH+FpWON19LELv;U5-3k&!A5#=A zbphiv4Hd{guGt>3^zjOYaEq`)2x6wX`~$Jh?x1BwT-v@c&#)u=8|n4Wum(BVP@A&d zJ+O*$TD}J}lLK}GGj!V)9URWtJf4g{HN_WeV7Y()GvqXXOJo$G2Yop3@FmLO8BlU3 zWu%V0boP9@la$^}Y6!j^EeDb1Yc8i(Dlh`mTE3mcf-5Ke4a9TQJ1kC=`L53PTh!H( zDypwirT1&jWceO-=WxwYlyBuD8x7q_$XG_Z8*cI~!vESfc|o^Ail*sktyX@Q1=RL| zlvnysuFZ=rbh#KhbDJn7-Z^5;GkT-g*MZwNB*QC@Nq9JwLlyJG;C{|@KieD|xGffw ziOI3vuuIRtHupeJmyQqHeYk686AEmBfq@hr)>Eb@2fQu5rLEClHZ5=$f6omu%>Law zV0l%^u6l2Lw81;5nef7gR`70)-~?_qUR+oK?hC#FW$X2WEm4w+>ZB_an zob*ODmp{7+b*fmM%oQ3&=@ZN;?FvuVsp6gvmGS5%bLzUr{|Vfi&1h{`q-f8#eSVMt zx5Z2CFH}xsBZ{u-VNT=J+SNovn~~l#5@OBT=Op+tsxc=`I57=vDtlvYGY6eW5sbWa z!EF~kRhimbQK_v`geod5CztpHBz?qq*I)~rdHFLc!;`xjP{?I(4u6zkLShcX8M$IN zKQg761dgrI+Q};*!~AF$Sz*5RQ+4xH$9VI0rPT$~cY{-^es<{KM^w3~Pwx_f#Zn$0 zkI1~B;Z+|3MX}tQh6Ciq@4s>$;cc*f=75)5zAD0Q1eGVaX#ne#D2Ji5r9&ZX6=N1d z10bd$&V~N9gI&A_{A=NzkN}a(^E7oU;iUe=tlEi?snI~<X=@!ZTTvC1H`BB9||rOKc2cd$5oGb61j`Fl^2^5jEcKdTAcmb3C0lxZ!6%TQmnQIkS%ARGB)9kmpfcVM z6D1cE7S}IgH5!H@tG0~hDoOfxB0~r*1PKMdQ0+xotId_zwY}IKnGo;Qrk^-sHG2F5 zd3i)G#aUbcSz7Y%$?}jq@!h=7rhZ{d-8W?=>;Ifjww6B5XZG6JUmNt;os^2#x+-H+ z045Bcl{vSLE&qkw_Mgj!S<5a4KqCmMxupR2K3PnZM|Swdd?lfnmBJH4 zK1u1=9+BZr0*Czr0T*AG;rH|gifPO4E(ulr7G=l^WGgz_4%I>$d2&*}9d7@9jr)Qk zcCH}$k~@~jauPX(&OE(qiB*nm-DSY$zK}Uf;!cmVvowi@355!?iI}c;D~z$mJlA5B zq0LDEMWxZ;Dn7E___WVM7Tqrf@+5noOIB8mC?YQr!&hk&Tlh(JAX1Z5*@5%bodq;i zjr?%lqr|D~U|B17+cm{`4wK?9K2YAGZZrAKSu(f=Iq0P9*g5(^cZJ6ZfNg`h3umoQ zq;=C3`0}E7n`|EUTwpi?`GVV*tWLuJZ|ymZn&l)$@r0BMaXy_JvnTK-vyM!ttmS6* za0aurj%0FyWBE)pE@j&FdR@?G96y1qft|8wRaj{6sLym8DCsXcWQ2iSz!Mx)uG437 zpEWRI>^~&(b}S&ctf@^)`|_x=p3M_HM%0@h<3)6_iEn)U{&oi@P2Oa|1^p5A>npalA-dj4sYF=c0DXLrzee_84b`~g;9*B;xjW(4-fafJ*XL2bUfKIUZ(Vi1wmg>$RL$XBC9RF>o$LXBI7NG}u@MXX#t)XE^ zR4^r9?fqL>Z4VUcp#0|i*F&jxjZUe!NMXVTLN6rYWpeC?=hHVoL=os19?yr$w##X9 z^T}Q;FgA?k=fr0_bkOHpn#!??Uh9(~G?N5wKybD!{mntAn6*@z_+M829bxcW-|Y}u zb>2gmPN6r_NV%A&)Pa8F20K#;R2yKvI<81J6L8;HR=uM@*r{1hYUNVTu_CT1@Yfp^0)O4q`JV8AdH?#9UK-VD zqVd=J(9xm0o8XT6?ckjef(cgBWTx^jPv?G)-qY-UY2JFW|K&|A&7e5};9Y;7rYe<4}WL!>8~a#8G8=j?hcee>Eh zemmgEojTSD6QNM5u^A`8)9&d?ee|Z;)?-*CA(7~*|DSHP^jVdf&Zuuw_p~NBZ6nP*)9kCQq=< zOo+j}v9?g%6Ppv9VjAcJo~21YAAda;$29boxAZnT^AM84hzzf;3H(crJrQrmD*{#V zs`$p-OMnK&z)lI$G*SJy;G>qT4X8v-M?j_ac5VN2bF9Nj%y`!%iSKMrb0hUvh!z~D zMen5iRB=x^dXcCydOFEo?3T9&j?-c=Csbf90+uI%ULr*T$3?oISyZ0KkH*=1y^lv; ze9M3;nV?*Pzam)!=OS;p?=NSaf=5$r9sE12L08;P-A^bAB|i{R$52BijEY)k>v)V+ah0UKud<7&1yzg+haxFe+`fc0Jqr)`DuQg z|Fh{6qFr3|YEOw>4zxzoqGO%GQ~ZpHmq{~7wbKvR7529SxSs_Q6ykRt4UNRh{Wd%0 zz99r1IJtnhyLEass-;4jJ~)yCSTRJaDkRQJ3e10u{Pl8QfZsF4h7O^lX@}y{SxsO=kkG}y1)C1U?VGo6X)vsiOa$8YPP}-v`=p#TV*a2aPhR4?0wVuD501_ zsDU9c^B9nc1Ll=O3SRZw#rrk4J^i({|8zSHy3U1y?5Q@^;;KkqcI%u!$c@(w6c-|X z^(C+ECpCP(SHh5_z%U6wgkvrwOWSJ$3DCiW>3#wt!Op)g+_N)2gm6yEOotc11E!Xtor^NNAQ6aE`Qs_-PCekTXwp=g?gP~$mT5pp=dy5A}4JrL6amX4Oq`JLzd zG3r!X-A$ZKg9vAV9I2?h|1EaXh>k*Lw%;63Rs zBnH}VeRrz#wq4fzY|rZNxXk@iGa>LAL+Upl6zvZo-^G)^p3C_x8O?-r|GVZcbzNAz zK+)8t*=74}3Zc&cj{Kn&UDDl^TUPzY9=0uIRZ71FJCwAe#>0URs}uub5_P)hL>J!T z>3s)IJ&j)-poj!q%e?H`eFA&`r`2!1A6;}N2yc@Gy$g`u+9~Tqz8w8-^}asKO9JI$ ztZrAfk-2YN60LqoF`HX?HDrrH_*na`JYZAK_{X02;%OZ01UJu_d1Q&h*y?277jZ*? zlaMK*u5G2!bnBu&mRJk(eCA?)2zE2QlnL!V~qf09N)2h zY!v>$Hiua^m+M?G;hY~nqvbS;bi+)tF{DlASqztHN-{VWWm58|0U<6LY;goCSiWA- zxPOWm`)3)~3L1V0(Zo|r$m+@=MJQVVFI0K4iZfy0yAsI^_KerwbG10slcRzwBZRYm zeMJc=)Ge*NI^;>HP&*58*!Vfsvsv)#%^RQ zo>9kEa^wDa1fhP_w3$|k4y%%2-d8b|A=H+}F1j!wEavn#LSpsBpuoF(m<03gTe?v}j!^c5#GyiCL^uZ5Q}z;t~;wi33;hYgo6Tnij!+cbw!D0^9l) z_#VNJWK{c;^BN`RNvVgJ(Vj@eSRU$LVs4SSk9&t2q(TA%6QkL@-LBzbO(Oom;X0&( zhdxI_d;*KL)uYMubjtab~~ z{&n{m@Fd*RfHEsy1_aJ8H^ZFTUE4P5g6LF^Mra9>j zK5?l>wVR-zb`R7PQ_ts8L1iM^E>~Ymrz=3W4k#U*ha$u0az2cv&A;kx>8ckj>nj-& zZVSf8o@fudpTbo*qW!v0rhw9MC!625keEuXT1wbb zUuiZ^TwTVnEx>iOW}9*lp0ElK;8Yn>h1yN!tFw?39W9-0pE#6{fsrO(lsF_uK^2)p zi@3_$9qKb0W*NohFC1kYBEa9(?yv>Q!Z5nN{-VkmGQ7<0o;Qd>AUB{|H3A7yq zQ29!nL93cDR+r zax3oWP%O#j{8Yq%wq33cWtoS+-UO#A%IOdy;4yvuY0QVG%i)HBG%em??x&mkh6Da# zsKyX9!u;{x#Jj4G;?!}0 zapNx4>qgT1I?seUT(S~2T8Kv046tri2UJa_vCMoU-&2KtCRG834-)^yxyVD5*P36! zPctSE`r}xF(Z0^T~eV6TMp;KZZ(5#`#bWL?Ob^e~)fuR%5^ASStsR5qm<6vbVCuZ?N+{s39R|7c6{ zaJI=t!kf}Ymr^(DGgM9&AyG~SFt}1&P1m3_%8WEl?7JZ6Rv_jFPFb6)(~vt_1e4#W z7*IG`gQ7VTVssN?6|@5T74Bh)s+ub%4%DXyp3x>>^+d*$lG@|kD8UoAjTNn0vO;T? z`8;a-<=;d)$ECcCT+M4aap;`hZnX#{l#MP;Lr`#*tSsifNy+62mJ_s^fgkO1e!W5I zeHsgh<^zWlBmP=er7;FV;b_7|be)$gnL4$aS>{hXwItz@iQg#`t0w=2(6++xMiI#6 z={SDgKdQ;;`_MG*ny>@8n|-2=5(#aX7_Z`~b$Nc`k}O2j2ATDx)M33+Se}6d8}R2x zftieLbElGl4y+tKeztGsSzb|jy4wM0k_GSxafIKH2#5C0Ac{X_s_DO@u1ZkhB(-cG zLrc*%N*tErg^=^v5Erb4z_RHDvA@Nc7x}XxBV{v6cNS-$iIO=05WMtV;6fJB^8!bX ze7OaNo$s7_f*A7k05Z=+Bwi_LI$95&xD%Q2S*LmbPAw?lZbH`i9wm!|faz|6eUJzZ z-pu^Y6RpuL(nbGe8NT%O=9Zwd(l0?x8~Vu}sj8P4DKH2B<(_y#H2{!-OG;!0(&~&AX04tMWlS zdxG8%QU5`9$X)W;rxvpog$rN;QE2>rIN3BOU5VK4+Uxm;3X>>}XjKB7B86Dw8wv7n zbeQ7!{{E9HH?R8#`V$@aovCRt1XK`*@o=tu_?;00hz=n9(EP>&i%t$_9xgix=e`e_ zODw-Y0bWcW6EHOwGJ}NloXC(0g>l{WOxcT@d2^IZl_+vFpcMi-T%TF8QekC%i+n=; z1yNoRbSe)@0Jtjqsh~_<`>`wng~ue!S>N#aJR81k{F!K_c)FxAyxMvZkeI>-nscXv zP9kpY=!gfyb4hNY<^}NACkJoMP?8&jH`06)J@h(&5V>za?aRU=W}{iNox0piZZ+zZ zaGDfHp|zQWJ%M)ms`ID#jBl+*?Q+HpRblaSyC^&Z8f-A1amS#Ek-7?(%pW;qqfWn^ z94})Say`pZXzP=^iA)94PuKT5=Cieqa3q{a+(N5NVlB?>@KHsC?1dN_snu-G%%9U> z{`&K&ujkN$oIK!>9K?`F{7U)lBVOrN(}&*K!qVFiU>a@;re2JXOg7 z2~Gzidl_#T1^c<9l5$6hiMO3ihj>7p_Cv{?3CX2TYCC8-ALIIy($o|klt5hSGZy8)(tv8WZ@gXvN1X=|X5-An$ z5kN|6Lu&+_xi$w>M79$O0`c58=A-?*9Ix+AkAF6^X>miQ!O-H6EbuLOJ?M^pYCIy$ zaV+6{ZFlYV*c}dE6#3CxHpL6=T39NqJMT$lK`7|u1{J#gB9_w{cJtZ6DCWS?{9mB? z{t-wzk4D?ReHWMG@?O^m6Xkl@j+1!^rCRS%)DN4B_hPlJ_4dz#74tyVvHwDT^4Uf| zBvT-}#QiAYS>W?Iz)R3Vt<&8EncsQ1{uguvl0rBSAuEhUt@PIa zLoIiP9*QE~Nh78=2t7<=kt{EuE=?19Lrs=Jywk?!FNvHzc|OMl69CcRF;;CxL{YJu z&LCQ$$eH(r>``af;3c-o6>@mYy7L)0D2IRisKu}c&rU}7KH%vr{BEu!-Zcc{kKQQZ zCxfW{8%exy?+1aG08w$Rk zX3hHYh!=gfhv%2|%M=mQJ&~OsZhqB0Zu~;bP3!0I>Iyu@^HNp`1Fg0o-~QzXPL)DZ zih&~jFR5N@&*TRX+H$7a+>2p*dMK;w8G@LQf5mzpG+NxT38j`@cQXZaR3u0{q_f$M z^D|%sMoca8x)o`jXepQ=M@$GvNU&~ zdXK%jAV5CALtXf5`VaO#KR$nLMN1UH=%7~j4=Ae(b7U2WZ)X$^YeQ0npZG`2qcQH5 zTf2g#M1g&cP{4u};oEV9i^F-P|J0)mua;NW0=f8nerQSwMRK-9dV=XihPnTx8|#Q1 z(Mn?*IY_TpWO#o#KZmT_*(U>vB1LbW))xH1_@v1}j~ub(D{7Gu9$&TM;wL4a55CVp<+RkFfJ{$d0=Nvt||HIH31az1_=s$;}B9l75b zEMK5;Z%IdWKv}$2anC1bf?q@HzAW7(tb_9id0jlUDS9#BluHpEBU|IO?3pk?3? zM=#aiHm8Bt)wR6T2+`AdwVDF(iH%hy*}Mu1|GxDoJ+>KFs&^MTc&vIG;&@50#HW3n z#~v=Gqu+nvNnXOCwd-$|sBWo*hzU3f^hT*O`?e5C<6JhgcP8;dE47;DU?4Q9MuU0R}R{cKY0fJkqN*W-Y^#vjS~8oa00 z#MKaU`S>`)ChJ3L-gUAB@yRu^2d-nAx8g5}3ME|Dq9G-!*HhriA71Jkb-_gGIJ2n( znN0|lJ7>8wOGlMwB#)~ci6wKl{u;80EIR&Z8t)1p_f$d$EON1A9j#1}C2OwoOLq#QZ|6WvrMNidgPDzIR0baiO+p9;LDytt;Qwf`zZcqAQ zuX_$KdL_M2p3(03?9zpIP$Xe3JRIwsKYo6+UpGPF{$&Z3z)l_t1#LvnvE9Y`R2{7N zESjF6e0wBRnP4*;q#wF0nIX;nnyJAfM8eXbFJt_dQ&7nRomjLU-}FVDSeG)HUf{f= zIYf7a0V=>go39F413$W*x3sS!{5`Kdm8T+FQwm(h1z`3(Tz#Bk@E+eZ`=V;c!_@#i zKhRER)X^cwh88cr^WqTSct&B^z;2BSRB4Zr%k-%=9-RnLAofRg3gFXz@l&1sgNJpLj)dpji0XOajK@5v3t6{IJZ2zdyj4hKJ=@5B= zpuzPcPr{`m;h71s!C^%X+P!0b@@)OJEobV@7p~Wf8SI|G#=cIeVlqVSp-<{h1Tn2( zV{?}l8eHSRS7sINi2XB?;cjX?0P-i5KAcKR(dY$Y-SX;N{m$eSfO^Eb)@t(7$gSIFL2= z1t>QV%&o<%*q>J=v(E-1j{5zaGSyr1<-QB;#`(5zdpK>rlv~yAXGm9bNOip2_jOIj zJQCNAaRF|~7oc@cKdo^fD!x5LNbNcQcrn2|&Xlzs_RIIoOXzm+pkG0dL;=ScZrw5Y zpB>D?vY>oG@oi7VhUFG|IP^Uv(5yH zVe<{?U7YAmiM;K#3ZC?7vL6@Kvg>qoZ3Mks7r0n@pj~!=V>a@=Z*Gu--c{bmH5R!& zftE^_gK3r{K`%MRGnSiw#jF~B81jvhcx)yIJYLwnoxeYU?0$d5)#ka(n~P4F548)r zw@XL-k)+Tc5D!q^O?j{D{%M!I%|Cmc;-jo}|A8%x73-_)x9MatJ4@SkL+K^guLC_^ z4^vP0y#A%#%W0*$S!Hy8^;s6Fn4{s4KCsPw_TUIeDzB{C2YzisG5(_|#YP~xQQx`l z#&K-1_iPn-%hmg~^NHVq?Go~1U0ir$zF6YyUtmJ+_rtGI!?%fwPQ&HzFYpEams|nk z?0qfv7qcH96C>}>ozEAHrIVo}Ze{J^^ju^&W~3Zv?;z-R%aW=9%*Q z4o+w$74qT)k4pZf*ZYMC-IR)`ezcWjY|!w_J<$&vqw6{6(vR=e`B_BQL-tX<9 ztGEQ`dCrMKEKA$}B8ANDco_Z59a}u{)b&1b;OoqY;NdRpu#)Y={rP)pPL+Wl0Xp}^ z&JKO=%Ws)n?bzQf-a!%5&P&`codrRnE(1n5u#&MUJ}q25d~IB@9RL7c%YXk1z^FS% zo~`O?!Pg4zmioZ#$W?5nB~RbREy#ELxL3X5;gB5b)7J`SN#q>j`V~RI6GB&( z>VcvpO)cEoR=mOjN-Y@`X_M)fpjt@wasPX1s6Tp{t}*7GPFD_Avh_Ze5!s1bT#w>9 zBPnZxrYjG7O~t>ET`7_<91i>_y}R7vFE zzHPgj{Z3;zHzbB4zhsCeyvaP;oZ)6jhOQK{^)V<@G;A<0jTIhmJ2onilvPgA0|4P{yNPhQhDWi!CIz(N*>=FVK~zz4+|;)nz3l`M&tk!FK(>nPj z*5)RYEpnwv;GibKunuv@rSp66`JPEYPF)%gt?J5 zlSFA#OeQWvA-c|>8YU8%KyDgVtJNhKgKGWUJ&YsH^jgwv+n$mVX1<5CB{P0%LJVXQlbu19WQwOS(@H>ISRTrqC)RTx)pzbGj;G^s&EY27gEIcOS^rd{Q8 z%$VDl&&h2|+pb28hy5W%{9TBv_fTLfHK{+^K)1z`;3o0;DOU+{wE-@-fp)#7-GbGs z#6=sJp2evRDC_kB#UsZx*nldmG@OOi5bH_@V50QB@xxc{aHH8FBN|tfTsrRDIYPP; zaj#ILQm2U0cRg>v{wnv6pN{G)Ns3#c#dzh$3X0)rRTFB4iqn&DEBy4$*LZ$<8f$CP zg3{5daJxyk39fam87jgSC5iG^4uSgz z2Sk;wGalT%O zC?0XO#vAy+dj96kAHnHUyj{_k!lA?6RgMdXuIdXR_NS{uHh%W-0cV@D{r%}X)=lE3 z)}*ZL_D3X=SF4J=+#s%K#Lxr65|<`jpN zB7WS%sjeLk<&F*#rK$nrlw_zzeFw%-UHC4Hk-BzhcvAPr%=xds`jC&m{+3s69`K)j z{@1K=ETy>7SS_JvC@9`;Z-($K2Vpfx;@ zv3|W{4aoRi&SSi{KeaY4m+gb)r1;es%LL;W+JKKo?qzJ?WiZz7z&PcLHXt>31i=HqUyuXPv793H z1K1sgT6-P-d+=TZ>qaHkiq^GE*Vb5NXvT2a+H!7f^^86t`H9G+u|xHQ?5|BV7L^J0 z&P$2^uSPs=CUFoXPRBqB(ZMT^wf$gIoc~-IXknAdvO2+OSi8e%M@^LPjd8p^u~LiD z=P{181KspI#%7Kt9qY(iNhP96QmLf1bNh1z#xK1;)d^EP!WEIxDG!w6t1+%`TjQnn zXGeY8IlO^RqhmhBBcV$qJiYW0!%MEoN>_G^+`DXY=aUbHJ|?~{ z#dt!Uy%gge^N}GTH^JC(%q=Q1KBb^e-elwcT!Jy*XMdRNkL(@F@5cB%z57M`vkUJ; z1xb@z)bKtOrFf1?ixnD8`v;wil>O=Cpg)fd=+zkepTh<&VvL2+tN6$~eqk9fN)iJz zIAV(NDl~XT9~qK6I#Z>24#1gB)=mvzgj_CN8-LZtTCfkz9Y=2_?9r%(jU2epPNk1V zLPJC-Df7oCPx$KbW2_h{WnR5~n+HcX_Sa6|Ojc0Q8kZ{PTxopnsJGa8--t3wrDpm_ z8J=EUCqjY|Bzs9}eBSt+IRyza<_zP^n zE34{Hwt;x-h+cv51sm}1kMYC?#CEzg6(Q&Jq8oq=gsSS$wDPN^-iYdTvJ^C>3s+itB6*D$mC!*)t6EE;}TU0dI0k=3nbFq5FU{-4L+^6QU2 zrt6%8_J9xm^-p>2=FM7an!If4VTz=aU?s|CI(%;Zi&hW8F6k&^oR?%bnZ|YUorkq1 zmtu^B^3AWrI7Xch15YmOj}I7I@ck!i3rkX`}Z>OkFjC6*yu}&3txPD!ry=NDH{`xn=Pq5 zc0^M+hLgqv$8S7(+O9dWxLq5T9G?leNNb?Bdi}%f-(PRg~;elgF5G&ts0d zhsY5QPI33{qeP%faw8KgGm~J8WvOqJ!IMwk%6svX=$>$7NUcwQgI=|EIFz#AarQeg z_Ny?i#(x>c)4Yf11&ou&-&Ys39?TK33C3K4@%jDH$^Ptq>m`FVbyuAmFy52d>|uO) z<2w11F&;E>RRQTj<4WU!oe6ZQK_ru{Rw88R38*x(Gybb>AigtKo#XoNeH##_@)!9& z7?0YJix}&b81Hm5R{zN_>ZZDP%S79h9N}-!QKEH z9h}DN@uX2upC|>kU7>SjV?Nf0mxoz)1QKEtJb)*mq}cZkXuQY7Dq}8$Gh(|E@iHBl z`Ar8-DU(vJ9)Fn*%*>|)iwj=7P6w_Xkra|KHK?>Wjr6uY%v)0o#vOJv%Emd(-@d`?f-TXaBal(!%Lko!M+qtY%5 zN6iug%zixBI2~Ad`}GIB{_1^1ogO$!i7Z;D14rW-(b|`9aRBppQdX3LbsZ_S+-#Z{ z|71d1LVy{+{442(UE|g^rO@z8gao;Gr9y*98e6+9H-I@gfI1yGr9)iehdYECjI>M! znr#k1YhS_h(}9DKmMM4|`}mUUbl@p#ZgBv!nGZOnNLG5~AlzUH17__AhUvh&mPp7% zoFkLzz?C_^Ob4FbcyQh6Zlb*FW0%(DVaDTceXIqGRpHRc#!kCRK~-axN;i&%>5BuH z&zNYO;)c2e$9)nREqmyT$tL@+e|&brwiHwn_m7XbeQ;3e;x$)rO|pR3hY5%d!(aLQt8e&+ z-+o-D10VCVfA#j_0A_3ad(HST;Ge&G#NYq!W1jXKZm-t-%}@T4qtOA>4oU7y5^zpW z8T#9aAxY>Y)7LyetGZaqtV2IzXf7r`MEi>Cimlgy9D|$L7@YcRf zo|-re=BO`3pgC8691B^mMeqG2Qp186sU|L?hMpubA8^tsVQ~O+QH3!y0)@U9ohLSK ziyV07AwazOYX_qw6isY#dJ&43+BIk=2iDrbNz(ku0Qnl#gNFV{B+a!Uf{dHLJo9z@ zF*!QgtCd9bL#$0tG!;mf$$_hqaA5+@5}x7G^{=(@;(+oZhpgZtdSdl!)y$#$!0NTVD$ zrUEsIr3^TyCnZHCB7za&em75sx4K&5a5$eNKAmds@ z0N1Q3s3lT5z=t_;#Dv~{kps_P4s2lJ*rWxw;xv15V4*>1h9Mfvzb)AHk^@&BxYr4* z!yG)7#ZazA4#*|u?upbUAv+O}i0+D+eBjEllOW%frm&z%gaG#CZAI4QQB& zCX?}u4w%M-opcREqSs6g45btV$aOmKA_wLg$bl^=U^2PWI~21j`JGN0c6yv5#)|pV zfv=w&I3@I)99XVL2WYOZ95_acr=cI1Dn&yMY#!t1205?_G>a95t5p7Heb zEL=iL++44?vtBLMGHW?7kQ8^}WV7M%=9JE27TCQT2i$B|B*07U4ycP9cxFsM#T`0_ zfBNDN{O04|@od|(K04;zci!U8k6v3WWwyh?CS8CWKK=5K{PL5JdD3mTvp(SccYeY< zuRo|Uzl_tXmn7hvVnO$403sf8U=p3c3ZcnM5pdpNKp6*w?#6^GrY&a%Xo^wxz2k0J zokPBi2Ak1S1Vp?Ny&X#p?hRs2F8yL9v(Ek0p8u{;v^M*UT##!*43Z6UU@#SYP!TQ; zU`DDiG&bFZVopKX)-JHiGv|&#HOc3K=Sco_5Q#v74!n~C3+j%WA-c$cXC()gDhC!x zI57jRxM7Q(%-r!0a$u=)U}6NACPc501N$Neo}V6MDEZf+5K$X;L>Ct@YdP@5kV6a$s;uDNuUWUg*1?!?r>D z9yg1A0E--Wo=;zlB%n!n_{IZ{U%7|5le}>6uw4vg_SXQzrO>GG@U?r~Ir;z>$3?ii zUZcZ6kovZeMGic-8-RqwtM52mw=@R_K=cD>SgHWC)__oA9Gr*t<7mC&#%jHj0~?6- zqa3(Y3Xm=iU`{_&z!cXtf{fFFO@*Fzkps_`0V?1z3$RG4(}AVRfeAUVIG*C(-_)}) zP=gma@T}y(GRlF)Ep7#Ved4|A90Pcy04CFc4MqX*5cKQV3{p5$|W!{jLv-BVev_V6aIKh@BkR%&M7B z!1OB!&_bYK+$jkaHBeaF+TqxTpVa(lhvAZHZEi=#NE*W+4v zjpV>-lmq|%voHAYlTUcw6;?No`03k!!TXCGc*b(z#4!HJ9RBy`f8baD>l2=CH{3or z;Jvrs;qBKSutIA0U?F*56M<=Q0P~OoQ#Ia>BxPg5X%WQ4Z`46paF5UgW^@lLNWqe~K<2m?=d<4%}feBt#0XlQNK3m8f|gDbC^m z=1~QxPM{tN5kbXC;)wcUDRY*A`|dwHrht${P&bknWM~;y<-pMkK$j}OtUO&U?e?X^ zyA9b3*__4(X8mjegw+k^aLJ&pBjwjHaSkv%!E;1*#33lCsEPdCVc#d+hwE40T) zm^;}EuO1yNhH?$Mg18hC@W#E{9K82#Z40lwdgDgO1EPB%uCmuaX8sOf!iJrz;}fZJ zVCy-)dC2=C+~D}|1|rY{t$|pJjkQ2d!n3X*O^(jVz-mTV zNC_EuD0@;Ag6g#BVKA%+cv3_{HlA%iZ!ni;+X zJwy?6@qk{loo-&~z%~fMMy{CH^-%+@vh&&3PdO`@&%b`kFaG;)kbaA&jH{wn=Ckhx z>WZu2;)sUjyZbmL+NJi48|8pI($Jh7K#!6IS~b4<_Jrp>h($ M07*qoM6N<$f@l6l82|tP literal 0 HcmV?d00001 diff --git a/assets/sprites/units/basic_tank.png b/assets/sprites/units/basic_tank.png new file mode 100644 index 0000000000000000000000000000000000000000..760b92f27fe8c130130275e21ebf7fd5469ac606 GIT binary patch literal 17576 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 literal 0 HcmV?d00001 diff --git a/src/main.rs b/src/main.rs index e7a11a9..307ed4b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,54 @@ +//! Renders a 2D scene containing a single, moving sprite. + +use bevy::prelude::*; + fn main() { - println!("Hello, world!"); + App::new() + .add_plugins(DefaultPlugins) + .add_systems(Startup, setup) + .add_systems(Update, sprite_movement) + .run(); +} + +#[derive(Component)] +enum Direction { + Left, + Right, +} + +fn setup(mut commands: Commands, asset_server: Res) { + commands.spawn(Camera2d); + + commands.spawn(( + Sprite::from_image(asset_server.load("sprites/units/basic_tank.png")), + Transform::from_xyz(0., 0., 1.0).with_scale(Vec3::ONE), + Direction::Right, + )); + commands.spawn(Sprite { + image: asset_server.load("sprites/terrain/grid_paper_empty.png"), + image_mode: SpriteImageMode::Tiled { + tile_x: true, + tile_y: true, + stretch_value: 1.0, // The image will tile every 128px + }, + custom_size: Some(Vec2::splat(2048.0)), + ..default() + }); +} + +/// The sprite is animated by changing its translation depending on the time that has passed since +/// the last frame. +fn sprite_movement(time: Res