Refactor organisation

This commit is contained in:
2022-11-01 20:15:51 +01:00
parent 0140be1121
commit 757180b13c
11 changed files with 713 additions and 315 deletions

363
Cargo.lock generated
View File

@@ -4,9 +4,9 @@ version = 3
[[package]]
name = "ab_glyph"
version = "0.2.16"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "846ffacb9d0c8b879ef9e565b59e18fb76d6a61013e5bd24ecc659864e6b1a1f"
checksum = "04a9283dace1c41c265496614998d5b9c4a97b3eb770e804f007c5144bf03f2b"
dependencies = [
"ab_glyph_rasterizer",
"owned_ttf_parser",
@@ -14,9 +14,9 @@ dependencies = [
[[package]]
name = "ab_glyph_rasterizer"
version = "0.1.5"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e"
checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6"
[[package]]
name = "adler"
@@ -43,9 +43,9 @@ dependencies = [
[[package]]
name = "aho-corasick"
version = "0.7.18"
version = "0.7.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
dependencies = [
"memchr",
]
@@ -92,9 +92,9 @@ dependencies = [
[[package]]
name = "android_system_properties"
version = "0.1.4"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e"
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
dependencies = [
"libc",
]
@@ -110,9 +110,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.62"
version = "1.0.65"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1485d4d2cc45e7b201ee3767015c96faa5904387c9d87c6efdd0fb511f12d305"
checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
[[package]]
name = "approx"
@@ -208,9 +208,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
name = "bevy"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55f08528a4e59d607460513a823b40f602d013c1a00f57b824f1075d5d48c3cd"
checksum = "fea147ef1ebb92d41294cfad804c40de151b174c711ce6e0a4a40eba23eae1a4"
dependencies = [
"bevy_dylib",
"bevy_internal",
@@ -254,9 +254,9 @@ dependencies = [
[[package]]
name = "bevy_animation"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e243169af495ad616ff701247c0d3e40078a26ed8de231cf9e54bde6b3c4bb45"
checksum = "a4365465fca7bd78295eb81d0a04afc049399852793d562eb017849bb5d6c55e"
dependencies = [
"bevy_app",
"bevy_asset",
@@ -272,9 +272,9 @@ dependencies = [
[[package]]
name = "bevy_app"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53d26d6ffdf493609d2fedc1018a2ef0cb4d8e48f6d3bcea56fa2df81867e464"
checksum = "9e4ae0a6ed2adf3b153511b4645241660a93f747c05ecd1e5a909dafc803cad4"
dependencies = [
"bevy_derive",
"bevy_ecs",
@@ -287,9 +287,9 @@ dependencies = [
[[package]]
name = "bevy_asset"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d8fb95306d5f18fa70df40632cd984993aeb71e91ce059ae99699098a4f9ce9"
checksum = "2ec773c861a7e9d9978771f59f385500ec6da3a1ab5487705cddb054393d3d19"
dependencies = [
"anyhow",
"bevy_app",
@@ -315,9 +315,9 @@ dependencies = [
[[package]]
name = "bevy_audio"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eee08ac575397ce17477dd291862bafa15226334bdfb82c02bbc3d10bad7bdb8"
checksum = "1e5cf4713a24f318841f73a9e030854cfd5bad46bc81fa1acc9590cdab053c6f"
dependencies = [
"anyhow",
"bevy_app",
@@ -331,9 +331,9 @@ dependencies = [
[[package]]
name = "bevy_core"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6712146d54fff9e1865362e9f39a7b63c7b037ddb72a3d7bb05b959213fb61e"
checksum = "c53172003d5cde7780870b5403c66c8ede3581faf3e510e916d8b4baa5b538d2"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -346,9 +346,9 @@ dependencies = [
[[package]]
name = "bevy_core_pipeline"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "080bb00399b6d7697e505f871d67c6de8b52eb06b47b0cda2be80c2396805983"
checksum = "5e60efd10d593f6d122f2687f74c09ad55835a8f999c35bed6380ddd8e6ff7f2"
dependencies = [
"bevy_app",
"bevy_asset",
@@ -364,9 +364,9 @@ dependencies = [
[[package]]
name = "bevy_derive"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4b8f0786d1fc7e0d35297917be463db3d0886f7bd8d4221ca3d565502579ffb"
checksum = "0e6345431bbe6d7b6c165cd860ecd0b35da929779571259c5df970ac256d45f9"
dependencies = [
"bevy_macro_utils",
"quote",
@@ -375,9 +375,9 @@ dependencies = [
[[package]]
name = "bevy_diagnostic"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "adab74ee5375fbf5d2b1d3da41de8d1491a8a706d17441b5e31214b65349d692"
checksum = "58ac9f4c2815f412be4b6e21e4b299cdafa710f651d064f6d40b2a8377a0d17c"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -388,18 +388,18 @@ dependencies = [
[[package]]
name = "bevy_dylib"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdf5aa9a93a5b8e4314b0adb56803f7f3d95420ec0d8821e17ed0e3ce76ef8be"
checksum = "9b9ac2612b037838ab2ded3222a21ef56c36a1e0f04e6be97493d4532972f32b"
dependencies = [
"bevy_internal",
]
[[package]]
name = "bevy_ecs"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5643dc27b7d6778e3a66c8e0f6ad1fd33309aa2fa61d935f360ccc85b7be6a2"
checksum = "c174066a24ed8a14d15ea58b0aea1c1f5c763f4bb36ebdc2b1dc78026007d0f5"
dependencies = [
"async-channel",
"bevy_ecs_macros",
@@ -416,9 +416,9 @@ dependencies = [
[[package]]
name = "bevy_ecs_macros"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5f2f12677f8725d40930d0a19652f007fe0ef5ac38e23817cfc4930c61f5680"
checksum = "cc50c39e49e8febccc74e8e731680adb0cb4aef1f53275740cbaa95c6da71f4f"
dependencies = [
"bevy_macro_utils",
"proc-macro2",
@@ -429,7 +429,8 @@ dependencies = [
[[package]]
name = "bevy_editor_pls"
version = "0.1.1"
source = "git+https://github.com/jakobhellermann/bevy_editor_pls#9aa28e3f1b6b804eefeb4b976143ca075b4e8697"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8818674dd2957d6cf194f8c223ab927538238713b99c68d7c9652f08be11fcf9"
dependencies = [
"bevy",
"bevy_editor_pls_core",
@@ -440,7 +441,8 @@ dependencies = [
[[package]]
name = "bevy_editor_pls_core"
version = "0.1.1"
source = "git+https://github.com/jakobhellermann/bevy_editor_pls#9aa28e3f1b6b804eefeb4b976143ca075b4e8697"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc6dab52b7c8c7ea6c12768bf606129973d815a08b3fa0b1d0aef590e9a1eeb4"
dependencies = [
"bevy",
"bevy-inspector-egui",
@@ -450,7 +452,8 @@ dependencies = [
[[package]]
name = "bevy_editor_pls_default_windows"
version = "0.1.1"
source = "git+https://github.com/jakobhellermann/bevy_editor_pls#9aa28e3f1b6b804eefeb4b976143ca075b4e8697"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79cc5eb8bd7e7bd6568088e1a41af73ed8eff10c9159018e0cf0d80e323c4a68"
dependencies = [
"bevy",
"bevy-inspector-egui",
@@ -477,9 +480,9 @@ dependencies = [
[[package]]
name = "bevy_encase_derive"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76a767adc36ce1fc917a736843b026d4de7069d90ed5e669c852481ef69fd5aa"
checksum = "68bc194009c5e9b97da64a08142dd183c264885d99c985cf849868103018adf1"
dependencies = [
"bevy_macro_utils",
"encase_derive_impl",
@@ -487,9 +490,9 @@ dependencies = [
[[package]]
name = "bevy_gilrs"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "963940426127533164af2a556971a03c493143c0afb95afadb4a070b6ab8c3df"
checksum = "cb15a3427d9707be92b457e5d66900b02d853b475c21dd8662bdda387ba9f24e"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -500,9 +503,9 @@ dependencies = [
[[package]]
name = "bevy_gltf"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "150cc6782c4472600c2ade5d78c6ce481c992690f0499e63765aba752d7e0f04"
checksum = "79db7d7e71b47a69953fbe8407ded5c6308eaeecf9a05efd5dfb42992f400a16"
dependencies = [
"anyhow",
"base64",
@@ -529,9 +532,9 @@ dependencies = [
[[package]]
name = "bevy_hierarchy"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e2e4c20d7c843cd26ef3c5d7b4c20e3e32c275943e2437ecaca1cfd6cfe3b30"
checksum = "5eb1ec76099ea5a716de08ea42ff41f036ebe2502df1d569168b58f16458a85e"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -542,9 +545,9 @@ dependencies = [
[[package]]
name = "bevy_input"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a11c70573fb4d4c056ba32cfa553daa7e6e1245cb876ccfbe322640928b7ee1c"
checksum = "1821c4b760ba6ddb4fe61806e9cc33f40b09a884557aca4553a29b8c7d73c6b4"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -554,9 +557,9 @@ dependencies = [
[[package]]
name = "bevy_internal"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0d603b597772130782eab6e604706cbb764fb037f9cf0a1904b6f342845b6f44"
checksum = "ee63ad1e3f95a26ff2c227fadb1534a7bfe3a098e0e45c347f2f2575a573d9bc"
dependencies = [
"bevy_animation",
"bevy_app",
@@ -592,9 +595,9 @@ dependencies = [
[[package]]
name = "bevy_log"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cafb12fc84734236e36f407ab62c72d5d4279fa4777e40a95d7cc973cbabcd1"
checksum = "092daf498887814a064331dfcd1cf487a5ddab01fd38629b84a35b8b664462a1"
dependencies = [
"android_log-sys",
"bevy_app",
@@ -607,9 +610,9 @@ dependencies = [
[[package]]
name = "bevy_macro_utils"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d081af83b701e16cad209255ba6b383744dfa49efa99eb6505989f293305ab3"
checksum = "43fb5137e5198302d7c6c33d1e454cf48a586e7c6fd12f4860f12863951e16b9"
dependencies = [
"quote",
"syn",
@@ -618,18 +621,18 @@ dependencies = [
[[package]]
name = "bevy_math"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db5394e86c5708d3aa506c6e98ec4ed2a4083a7a018c6693d9ac0e77ebfabfc2"
checksum = "531f2b90c7e861a96f418b3d560131b3354c5e67a67eba3953a45a56ea0114d2"
dependencies = [
"glam",
]
[[package]]
name = "bevy_mikktspace"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40b299a61175a6f7e7398f83cd5b50920fd8bad4df674e614ad94f25f8426509"
checksum = "941e7d3d4e1dbb735f040e4cdc1558be1d3c38d43f1d9fdbb039c39a7849a00b"
dependencies = [
"glam",
]
@@ -678,15 +681,15 @@ dependencies = [
[[package]]
name = "bevy_ptr"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d92d5679e89602a18682a37846573dcd1979410179e14204280460ba9fb8713a"
checksum = "9960c19e582b43cebe1894b6679520a4f50802d1cc5b6fa432f8d685ed232f09"
[[package]]
name = "bevy_reflect"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "08798e67f2d4e6898ef117d8c99cf3b50a8eebc8da4159e6dad2657a0fbe9a4e"
checksum = "3fc689dd7a7df3b3768884a4754711d406aa302ea48da483c03b52715fa95045"
dependencies = [
"bevy_ptr",
"bevy_reflect_derive",
@@ -703,9 +706,9 @@ dependencies = [
[[package]]
name = "bevy_reflect_derive"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19209a7f0238053802b7de04e6724bd90d4ed7d90e87101dbd1b64cca64ff694"
checksum = "8c36fa5100832c787c10558d31632ddc454c221e8dfacbbef836938f59614754"
dependencies = [
"bevy_macro_utils",
"proc-macro2",
@@ -716,9 +719,9 @@ dependencies = [
[[package]]
name = "bevy_render"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb49530388ef17cff3fb8bd5e47372fb3cfeb4befc73e3036f6462ac20f049ef"
checksum = "600bcef85c7efac6e38ed725707f0e5b7c59b510430034ba2f743f472493f845"
dependencies = [
"anyhow",
"bevy_app",
@@ -745,7 +748,7 @@ dependencies = [
"futures-lite",
"hex",
"hexasphere",
"image 0.24.3",
"image 0.24.4",
"naga",
"once_cell",
"parking_lot 0.12.1",
@@ -759,9 +762,9 @@ dependencies = [
[[package]]
name = "bevy_render_macros"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7d0b7a51fa819c20c64f43856c5aaea40f853050bbb09b9ba3672e5ff2688a5"
checksum = "1be90adc9e5d5808833e363670818da5fe68ccafd7ca983a457f90957d2a430b"
dependencies = [
"bevy_macro_utils",
"proc-macro2",
@@ -771,9 +774,9 @@ dependencies = [
[[package]]
name = "bevy_scene"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0064d73ebb0de39901478b493604a1a6d448fd337b66803004c60f41f1fa6c37"
checksum = "a045d575d2c8f776d8ea965363c81660243fefbfc3712ead938b00dfd6797216"
dependencies = [
"anyhow",
"bevy_app",
@@ -819,9 +822,9 @@ dependencies = [
[[package]]
name = "bevy_tasks"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff874c91a36eaac3ef957c6f3b590fb71332d9d136671cc858847d56fe9f80a3"
checksum = "719b753acb3d5b9dbfd77038560fe1893c17d4ee0a4242c2ee70da9d59430537"
dependencies = [
"async-channel",
"async-executor",
@@ -834,9 +837,9 @@ dependencies = [
[[package]]
name = "bevy_text"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef05a788c2c04aaa5db95b22a8f0fff0d3a0b08a7bcd1a71f050a628b38eec6e"
checksum = "c265b7515faf55a3b92fd6ce0ab65dd246f247e11d737d6f5cdaf49c2be42c63"
dependencies = [
"ab_glyph",
"anyhow",
@@ -857,9 +860,9 @@ dependencies = [
[[package]]
name = "bevy_time"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74ec681d641371df81d7bfbcb0eea725ed873f38a094f34b5f7b436f0889e77c"
checksum = "22830665b8476292b861216383fd79922aef2b540f9fd09d49144e3e5e94550e"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -870,9 +873,9 @@ dependencies = [
[[package]]
name = "bevy_transform"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42e1528e35f30bede46a50ee4134f150efc01f5c1002c340b3b2e6a0bfcb8aa5"
checksum = "a4bb8760f03e9667e7499a5ceec1f7630fc3e45702781ac0df56cb969e8ae668"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -921,9 +924,9 @@ dependencies = [
[[package]]
name = "bevy_utils"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bda6dada53e546845887ae7357eec57b8d547ef71627b716b33839b4a98b687"
checksum = "f6e9aa1866c1cf7ee000f281ce9e90d02d701f5c7380a107252017e58e2f5246"
dependencies = [
"ahash",
"getrandom",
@@ -950,9 +953,9 @@ dependencies = [
[[package]]
name = "bevy_winit"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57537a56ac4f4e1ffcad95227bcab37cd17b51770dacff82374a2d88be376322"
checksum = "98b15fee4b75472e3441b0c7221467303e4ce59b342a94a328e447e7cdb5a43c"
dependencies = [
"approx",
"bevy_app",
@@ -1113,9 +1116,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "clang-sys"
version = "1.3.3"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b"
checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
dependencies = [
"glob",
"libc",
@@ -1439,15 +1442,6 @@ dependencies = [
"byteorder",
]
[[package]]
name = "deflate"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f"
dependencies = [
"adler32",
]
[[package]]
name = "dispatch"
version = "0.2.0"
@@ -1545,9 +1539,9 @@ dependencies = [
[[package]]
name = "erased-serde"
version = "0.3.22"
version = "0.3.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "003000e712ad0f95857bd4d2ef8d1890069e06554101697d12050668b2f6f020"
checksum = "54558e0ba96fbe24280072642eceb9d7d442e32c7ec0ea9e7ecd7b4ea2cf4e11"
dependencies = [
"serde",
]
@@ -1604,6 +1598,16 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
[[package]]
name = "flate2"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
dependencies = [
"crc32fast",
"miniz_oxide 0.5.4",
]
[[package]]
name = "fnv"
version = "1.0.7"
@@ -1627,11 +1631,10 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
[[package]]
name = "form_urlencoded"
version = "1.0.1"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
dependencies = [
"matches",
"percent-encoding",
]
@@ -1646,15 +1649,15 @@ dependencies = [
[[package]]
name = "futures-core"
version = "0.3.23"
version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115"
checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
[[package]]
name = "futures-io"
version = "0.3.23"
version = "0.3.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5"
checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
[[package]]
name = "futures-lite"
@@ -1907,9 +1910,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hexasphere"
version = "7.2.0"
version = "7.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9652f2ed7ee9c6374a061039f60fc6e25d7adac7fa10f83365669af3b24b0bf0"
checksum = "aaadafd1beb6ad34cff5521987017ece5848f9ad5401fdb039bff896a643add4"
dependencies = [
"glam",
"once_cell",
@@ -1929,11 +1932,10 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
version = "0.2.3"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
dependencies = [
"matches",
"unicode-bidi",
"unicode-normalization",
]
@@ -1956,16 +1958,16 @@ dependencies = [
[[package]]
name = "image"
version = "0.24.3"
version = "0.24.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7e30ca2ecf7666107ff827a8e481de6a132a9b687ed3bb20bb1c144a36c00964"
checksum = "bd8e4fb07cf672b1642304e731ef8a6a4c7891d67bb4fd4f5ce58cd6ed86803c"
dependencies = [
"bytemuck",
"byteorder",
"color_quant",
"num-rational 0.4.1",
"num-traits",
"png 0.17.5",
"png 0.17.6",
"scoped_threadpool",
]
@@ -2007,9 +2009,9 @@ dependencies = [
[[package]]
name = "inplace_it"
version = "0.3.4"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67f0347836f3f6362c1e7efdadde2b1c4b4556d211310b70631bae7eb692070b"
checksum = "e567468c50f3d4bc7397702e09b380139f9b9288b4e909b070571007f8b5bf78"
[[package]]
name = "instant"
@@ -2041,9 +2043,9 @@ dependencies = [
[[package]]
name = "itertools"
version = "0.10.3"
version = "0.10.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
dependencies = [
"either",
]
@@ -2056,9 +2058,9 @@ checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
[[package]]
name = "iyes_loopless"
version = "0.7.1"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fec251a82c60be9e282aec12056fa153666d5730b21d124655d7c22114d342c8"
checksum = "20f42b3a59033b3372129b84850a6d39e02c25f3f170c4f8b84232b775602bb0"
dependencies = [
"bevy_app",
"bevy_ecs",
@@ -2088,9 +2090,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
[[package]]
name = "jobserver"
version = "0.1.24"
version = "0.1.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
checksum = "068b1ee6743e4d11fb9c6a1e6064b3693a1b600e7f5f5988047d98b3dc9fb90b"
dependencies = [
"libc",
]
@@ -2103,9 +2105,9 @@ checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
[[package]]
name = "js-sys"
version = "0.3.59"
version = "0.3.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2"
checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
dependencies = [
"wasm-bindgen",
]
@@ -2166,9 +2168,9 @@ dependencies = [
[[package]]
name = "libc"
version = "0.2.132"
version = "0.2.133"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966"
[[package]]
name = "libloading"
@@ -2192,9 +2194,9 @@ dependencies = [
[[package]]
name = "lock_api"
version = "0.4.7"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
dependencies = [
"autocfg",
"scopeguard",
@@ -2236,12 +2238,6 @@ dependencies = [
"regex-automata",
]
[[package]]
name = "matches"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
[[package]]
name = "memchr"
version = "2.5.0"
@@ -2298,9 +2294,9 @@ dependencies = [
[[package]]
name = "miniz_oxide"
version = "0.5.3"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
dependencies = [
"adler",
]
@@ -2668,9 +2664,9 @@ dependencies = [
[[package]]
name = "once_cell"
version = "1.13.1"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e"
checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1"
[[package]]
name = "opener"
@@ -2684,9 +2680,9 @@ dependencies = [
[[package]]
name = "owned_ttf_parser"
version = "0.15.1"
version = "0.15.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07ef1a404ae479dd6906f4fa2c88b3c94028f1284beb42a47c183a7c27ee9a3e"
checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb"
dependencies = [
"ttf-parser",
]
@@ -2753,9 +2749,9 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
[[package]]
name = "percent-encoding"
version = "2.1.0"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
[[package]]
name = "petgraph"
@@ -2787,20 +2783,20 @@ checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
dependencies = [
"bitflags",
"crc32fast",
"deflate 0.8.6",
"deflate",
"miniz_oxide 0.3.7",
]
[[package]]
name = "png"
version = "0.17.5"
version = "0.17.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba"
checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c"
dependencies = [
"bitflags",
"crc32fast",
"deflate 1.0.0",
"miniz_oxide 0.5.3",
"flate2",
"miniz_oxide 0.5.4",
]
[[package]]
@@ -2837,9 +2833,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.43"
version = "1.0.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58"
dependencies = [
"unicode-ident",
]
@@ -2888,9 +2884,9 @@ dependencies = [
[[package]]
name = "rand_core"
version = "0.6.3"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [
"getrandom",
]
@@ -3024,18 +3020,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "serde"
version = "1.0.144"
version = "1.0.145"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.144"
version = "1.0.145"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
dependencies = [
"proc-macro2",
"quote",
@@ -3044,9 +3040,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.83"
version = "1.0.85"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7"
checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
dependencies = [
"itoa",
"ryu",
@@ -3131,9 +3127,9 @@ checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2"
[[package]]
name = "syn"
version = "1.0.99"
version = "1.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2"
dependencies = [
"proc-macro2",
"quote",
@@ -3164,18 +3160,18 @@ dependencies = [
[[package]]
name = "thiserror"
version = "1.0.32"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994"
checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.32"
version = "1.0.37"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21"
checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
dependencies = [
"proc-macro2",
"quote",
@@ -3319,40 +3315,39 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
[[package]]
name = "unicode-ident"
version = "1.0.3"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
[[package]]
name = "unicode-normalization"
version = "0.1.21"
version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6"
checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
dependencies = [
"tinyvec",
]
[[package]]
name = "unicode-width"
version = "0.1.9"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
[[package]]
name = "unicode-xid"
version = "0.2.3"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
[[package]]
name = "url"
version = "2.2.2"
version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
dependencies = [
"form_urlencoded",
"idna",
"matches",
"percent-encoding",
]
@@ -3409,9 +3404,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]]
name = "wasm-bindgen"
version = "0.2.82"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d"
checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
dependencies = [
"cfg-if 1.0.0",
"wasm-bindgen-macro",
@@ -3419,9 +3414,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.82"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f"
checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
dependencies = [
"bumpalo",
"log",
@@ -3434,9 +3429,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.32"
version = "0.4.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad"
checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
dependencies = [
"cfg-if 1.0.0",
"js-sys",
@@ -3446,9 +3441,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.82"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602"
checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@@ -3456,9 +3451,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.82"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da"
checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
dependencies = [
"proc-macro2",
"quote",
@@ -3469,15 +3464,15 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.82"
version = "0.2.83"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a"
checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
[[package]]
name = "web-sys"
version = "0.3.59"
version = "0.3.60"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1"
checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
dependencies = [
"js-sys",
"wasm-bindgen",

View File

@@ -6,11 +6,10 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
iyes_loopless = "0.7.0"
iyes_loopless = "0.8.0"
itertools = "0.10.3"
# bevy-inspector-egui = "0.12.1"
rand = "0.8.5"
bevy_editor_pls = { git = "https://github.com/jakobhellermann/bevy_editor_pls" }
bevy_editor_pls = "0.1.1"
bevy_tweening = "0.5.0"
[dependencies.bevy]

View File

@@ -1,18 +1,20 @@
use crate::{
grid,
snake::{SnakeHead, Z_HEIGHT},
snake::{self, SnakeHead},
tick::tick_triggered,
};
use bevy::prelude::*;
use iyes_loopless::prelude::*;
use rand::prelude::*;
const Z_HEIGHT: f32 = snake::Z_HEIGHT / 2.;
pub struct FruitPlugin;
impl Plugin for FruitPlugin {
fn build(&self, app: &mut App) {
app.add_event::<EatenEvent>()
.add_startup_system(spawn_fruit_system)
.add_startup_system(spawn_fruit_system.after(snake::SystemLabel::StartUp))
.add_system(eat_fruit_system.run_if(tick_triggered))
.add_system(debug_eaten_event_system)
.add_system(despawn_fruit_system)

View File

@@ -42,7 +42,7 @@ impl From<Coordinate> for Vec2 {
impl From<&Coordinate> for Vec2 {
fn from(grid_coordinate: &Coordinate) -> Self {
Self::new(
f32::from(grid_coordinate.0 - SIZE / 2)* SEGMENT_SIZE,
f32::from(grid_coordinate.0 - SIZE / 2) * SEGMENT_SIZE,
f32::from(grid_coordinate.1 - SIZE / 2) * SEGMENT_SIZE,
)
}

View File

@@ -1,9 +1,9 @@
use crate::{canvas::CanvasPlugin, fruit::FruitPlugin, snake::SnakePlugin, tick::TickPlugin};
use bevy::{prelude::*, render::camera::ScalingMode};
use bevy_editor_pls::prelude::*;
use bevy_tweening::TweeningPlugin;
use grid::{SEGMENT_SIZE, SIZE};
use iyes_loopless::prelude::*;
use bevy_tweening::TweeningPlugin;
mod canvas;
mod fruit;

View File

@@ -1,15 +1,21 @@
mod appearance;
mod bulge;
mod movement;
use crate::{fruit, grid, tick::tick_triggered, AppState};
use bevy::prelude::*;
use bevy_tweening::{lens::TransformScaleLens, *};
use bulge::{
add_bulge_system, animate_bulge_system, propagate_bulge_system, BulgePropagationTimer,
};
use itertools::Itertools;
use iyes_loopless::prelude::*;
use std::time::Duration;
#[derive(Debug, Clone, PartialEq, Eq, Hash, StageLabel)]
struct MovementStage;
#[derive(Debug, Clone, PartialEq, Eq, Hash, SystemLabel)]
pub enum SystemLabel {
StartUp,
SegmentMovement,
}
@@ -20,13 +26,12 @@ impl Plugin for SnakePlugin {
let movement_stage = SystemStage::parallel();
app.insert_resource(BulgePropagationTimer::default())
.add_startup_system(setup_snake_system)
.add_startup_system(setup_snake_system.label(SystemLabel::StartUp))
.add_stage_after(CoreStage::Update, MovementStage, movement_stage)
.add_system_to_stage(
MovementStage,
segments_movement_system
.run_in_state(AppState::InGame)
.run_if_not(about_to_lose)
.run_if(tick_triggered)
.label(SystemLabel::SegmentMovement),
)
@@ -34,7 +39,6 @@ impl Plugin for SnakePlugin {
MovementStage,
head_movement_system
.run_in_state(AppState::InGame)
.run_if_not(about_to_lose)
.run_if(tick_triggered)
.after(SystemLabel::SegmentMovement),
)
@@ -46,8 +50,12 @@ impl Plugin for SnakePlugin {
.add_system(
game_over_system
.run_in_state(AppState::InGame)
.run_if(tick_triggered)
.run_if(about_to_lose),
.run_if(tick_triggered),
)
.add_system(
about_to_collide
.run_in_state(AppState::InGame)
.run_if(tick_triggered),
)
.add_system(add_direction_system.run_in_state(AppState::Begin))
.add_system(change_direction_system.run_in_state(AppState::InGame))
@@ -62,7 +70,7 @@ impl Plugin for SnakePlugin {
pub const Z_HEIGHT: f32 = 10.;
#[derive(Component)]
pub struct SnakeSegment;
struct SnakeSegment;
#[derive(Component)]
pub struct SnakeHead;
@@ -79,26 +87,17 @@ enum Direction {
struct DirectionBuffer(Option<Direction>);
#[derive(Component)]
struct Snake;
#[derive(Component)]
struct SnakeSegments(Vec<Entity>);
#[derive(Component)]
#[component(storage = "SparseSet")]
struct BulgeMarker;
struct BulgePropagationTimer(Timer);
impl Default for BulgePropagationTimer {
fn default() -> Self {
Self(Timer::new(Duration::from_millis(30), true))
}
struct Snake {
about_to_collide: bool,
segments: Vec<Entity>,
}
impl SnakeSegments {
fn with_head(snake_head: Entity) -> Self {
Self(vec![snake_head])
impl Snake {
fn with_segments(segments: &[Entity]) -> Self {
Self {
about_to_collide: false,
segments: segments.to_owned(),
}
}
}
@@ -145,8 +144,7 @@ fn setup_snake_system(mut commands: Commands) {
commands
.spawn()
.insert(Snake)
.insert(SnakeSegments::with_head(snake_head))
.insert(Snake::with_segments(&[snake_head]))
.insert(Name::new("Snake"))
.insert_bundle(SpatialBundle::default())
.add_child(snake_head);
@@ -168,83 +166,21 @@ fn add_direction_system(
fn add_tail_system(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
mut snake_query: Query<(Entity, &mut SnakeSegments)>,
mut snake_query: Query<(Entity, &mut Snake)>,
) {
for _ in eaten_event_reader.iter() {
let segment =
create_snake_segment(&mut commands, grid::Coordinate::splat(grid::Index::MIN / 2));
let (snake, mut snake_segments) = snake_query.single_mut();
let segment_number = snake_segments.0.len();
snake_segments.0.push(segment);
let (snake_entity, mut snake) = snake_query.single_mut();
snake.segments.push(segment);
commands
.entity(segment)
.insert(Name::new(format!("Segment {}", segment_number)));
commands.entity(snake).add_child(segment);
}
}
.insert(Name::new(format!("Segment {}", snake.segments.len())));
fn add_bulge_system(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
query: Query<Entity, With<SnakeHead>>,
) {
for _ in eaten_event_reader.iter() {
let snake_head_entity = query.single();
commands.entity(snake_head_entity).insert(BulgeMarker);
}
}
fn propagate_bulge_system(
mut commands: Commands,
query: Query<(Entity, &Parent), (With<SnakeSegment>, With<BulgeMarker>)>,
snake_segments_query: Query<&SnakeSegments>,
time: Res<Time>,
mut timer: ResMut<BulgePropagationTimer>,
) {
timer.0.tick(time.delta());
if !timer.0.finished() {
return;
}
for (entity, parent) in query.iter() {
commands.entity(entity).remove::<BulgeMarker>();
let mut segment_iter = snake_segments_query.get(parent.get()).unwrap().0.iter();
segment_iter.find(|&&segment_entity| segment_entity == entity);
if let Some(&segment_entity) = segment_iter.next() {
commands.entity(segment_entity).insert(BulgeMarker);
}
}
}
fn animate_bulge_system(mut commands: Commands, query: Query<Entity, Added<BulgeMarker>>) {
for entity in query.iter() {
let tween_to = Tween::new(
EaseFunction::CubicInOut,
TweeningType::Once,
Duration::from_millis(100),
TransformScaleLens {
start: Vec3::splat(1.0),
end: Vec3::splat(1.1),
},
);
let tween_back = Tween::new(
EaseFunction::CubicInOut,
TweeningType::Once,
Duration::from_millis(150),
TransformScaleLens {
start: Vec3::splat(1.1),
end: Vec3::splat(1.0),
},
);
let tween = tween_to.then(tween_back);
commands.entity(entity).insert(Animator::new(tween));
commands.entity(snake_entity).add_child(segment);
}
}
@@ -286,19 +222,31 @@ fn grid_transform_system(
}
}
fn head_movement_system(mut query: Query<(&mut grid::Coordinate, &Direction), With<SnakeHead>>) {
let (mut grid_coordinate, &direction) = query.single_mut();
fn head_movement_system(
mut head_query: Query<(&mut grid::Coordinate, &Direction, &Parent), With<SnakeHead>>,
snake_query: Query<&Snake>,
) {
for (mut grid_coordinate, &direction, parent) in head_query.iter_mut() {
let snake = snake_query.get(parent.get()).unwrap();
if snake.about_to_collide {
continue;
}
*grid_coordinate = next_grid_coordinate(*grid_coordinate, direction);
*grid_coordinate = next_grid_coordinate(*grid_coordinate, direction);
}
}
fn segments_movement_system(
snake_segments_query: Query<&SnakeSegments>,
mut segment_query: Query<&mut grid::Coordinate, With<SnakeSegment>>,
snake_query: Query<&Snake>,
) {
for snake_segments in snake_segments_query.iter() {
for snake in snake_query.iter() {
if snake.about_to_collide {
continue;
}
for (&segment_entity, &previous_segment_entity) in
snake_segments.0.iter().rev().tuple_windows()
snake.segments.iter().rev().tuple_windows()
{
let previous_coordinate = *segment_query.get(previous_segment_entity).unwrap();
let mut coordinate = segment_query.get_mut(segment_entity).unwrap();
@@ -307,24 +255,32 @@ fn segments_movement_system(
}
}
fn about_to_lose(
head_query: Query<(&grid::Coordinate, &Direction), With<SnakeHead>>,
fn about_to_collide(
head_query: Query<(&grid::Coordinate, &Direction, &Parent), With<SnakeHead>>,
segment_query: Query<&grid::Coordinate, (With<SnakeSegment>, Without<SnakeHead>)>,
) -> bool {
let (&head_coordinate, &head_direction) = head_query.single();
let next_head_coordinate = next_grid_coordinate(head_coordinate, head_direction);
mut snake_query: Query<&mut Snake>,
) {
for (&head_coordinate, &head_direction, parent) in head_query.iter() {
let next_head_coordinate = next_grid_coordinate(head_coordinate, head_direction);
let hit_border = !next_head_coordinate.in_bounds();
let hit_border = !next_head_coordinate.in_bounds();
let hit_snake = !segment_query
.iter()
.all(|&coordinate| coordinate != next_head_coordinate);
let hit_snake = !segment_query
.iter()
.all(|&coordinate| coordinate != next_head_coordinate);
hit_border || hit_snake
let mut snake = snake_query
.get_mut(parent.get())
.expect("Head must be child of Snake.");
snake.about_to_collide = hit_border || hit_snake;
}
}
fn game_over_system(mut commands: Commands) {
commands.insert_resource(NextState(AppState::End));
fn game_over_system(query: Query<&Snake>, mut commands: Commands) {
if query.get_single().unwrap().about_to_collide {
commands.insert_resource(NextState(AppState::End));
}
}
fn next_grid_coordinate(

0
src/snake/appearance.rs Normal file
View File

81
src/snake/bulge.rs Normal file
View File

@@ -0,0 +1,81 @@
use super::{Snake, SnakeHead, SnakeSegment};
use crate::{fruit, tick::TICK_PERIOD};
use bevy::prelude::*;
use bevy_tweening::{lens::TransformScaleLens, *};
use std::time::Duration;
#[derive(Component)]
#[component(storage = "SparseSet")]
pub(super) struct BulgeMarker;
pub(super) struct BulgePropagationTimer(Timer);
impl Default for BulgePropagationTimer {
fn default() -> Self {
Self(Timer::new(Duration::from_millis(TICK_PERIOD / 4), true))
}
}
pub(super) fn add_bulge_system(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
query: Query<Entity, With<SnakeHead>>,
) {
for _ in eaten_event_reader.iter() {
let snake_head_entity = query.single();
commands.entity(snake_head_entity).insert(BulgeMarker);
}
}
pub(super) fn propagate_bulge_system(
mut commands: Commands,
bulge_segment_query: Query<(Entity, &Parent), (With<SnakeSegment>, With<BulgeMarker>)>,
snake_query: Query<&Snake>,
time: Res<Time>,
mut timer: ResMut<BulgePropagationTimer>,
) {
timer.0.tick(time.delta());
if !timer.0.finished() {
return;
}
for (entity, parent) in bulge_segment_query.iter() {
commands.entity(entity).remove::<BulgeMarker>();
let mut segment_iter = snake_query.get(parent.get()).unwrap().segments.iter();
segment_iter.find(|&&segment_entity| segment_entity == entity);
if let Some(&segment_entity) = segment_iter.next() {
commands.entity(segment_entity).insert(BulgeMarker);
}
}
}
pub(super) fn animate_bulge_system(mut commands: Commands, query: Query<Entity, Added<BulgeMarker>>) {
for entity in query.iter() {
let tween_to = Tween::new(
EaseFunction::QuadraticInOut,
TweeningType::Once,
Duration::from_millis(100),
TransformScaleLens {
start: Vec3::splat(1.0),
end: Vec3::splat(1.1),
},
);
let tween_back = Tween::new(
EaseFunction::QuadraticInOut,
TweeningType::Once,
Duration::from_millis(150),
TransformScaleLens {
start: Vec3::splat(1.1),
end: Vec3::splat(1.0),
},
);
let tween = tween_to.then(tween_back);
commands.entity(entity).insert(Animator::new(tween));
}
}

0
src/snake/movement.rs Normal file
View File

367
src/snake_old.rs Normal file
View File

@@ -0,0 +1,367 @@
use crate::{fruit, grid, tick::tick_triggered, tick::TICK_PERIOD, AppState};
use bevy::prelude::*;
use bevy_tweening::{lens::TransformScaleLens, *};
use itertools::Itertools;
use iyes_loopless::prelude::*;
use std::time::Duration;
#[derive(Debug, Clone, PartialEq, Eq, Hash, StageLabel)]
struct MovementStage;
#[derive(Debug, Clone, PartialEq, Eq, Hash, SystemLabel)]
pub enum SystemLabel {
StartUp,
SegmentMovement,
}
pub struct SnakePlugin;
impl Plugin for SnakePlugin {
fn build(&self, app: &mut App) {
let movement_stage = SystemStage::parallel();
app.insert_resource(BulgePropagationTimer::default())
.add_startup_system(setup_snake_system.label(SystemLabel::StartUp))
.add_stage_after(CoreStage::Update, MovementStage, movement_stage)
.add_system_to_stage(
MovementStage,
segments_movement_system
.run_in_state(AppState::InGame)
.run_if(tick_triggered)
.label(SystemLabel::SegmentMovement),
)
.add_system_to_stage(
MovementStage,
head_movement_system
.run_in_state(AppState::InGame)
.run_if(tick_triggered)
.after(SystemLabel::SegmentMovement),
)
.add_system(
update_direction_system
.run_in_state(AppState::InGame)
.run_if(tick_triggered),
)
.add_system(
game_over_system
.run_in_state(AppState::InGame)
.run_if(tick_triggered),
)
.add_system(
about_to_collide
.run_in_state(AppState::InGame)
.run_if(tick_triggered),
)
.add_system(add_direction_system.run_in_state(AppState::Begin))
.add_system(change_direction_system.run_in_state(AppState::InGame))
.add_system(grid_transform_system.run_in_state(AppState::InGame))
.add_system(add_tail_system)
.add_system(add_bulge_system)
.add_system(propagate_bulge_system)
.add_system(animate_bulge_system);
}
}
pub const Z_HEIGHT: f32 = 10.;
#[derive(Component)]
pub struct SnakeSegment;
#[derive(Component)]
pub struct SnakeHead;
#[derive(Component, Copy, Clone)]
enum Direction {
Up,
Down,
Left,
Right,
}
#[derive(Component)]
struct DirectionBuffer(Option<Direction>);
#[derive(Component)]
struct Snake {
about_to_collide: bool,
segments: Vec<Entity>,
}
impl Snake {
fn with_segments(segments: &[Entity]) -> Self {
Self {
about_to_collide: false,
segments: segments.to_owned(),
}
}
}
#[derive(Component)]
#[component(storage = "SparseSet")]
struct BulgeMarker;
struct BulgePropagationTimer(Timer);
impl Default for BulgePropagationTimer {
fn default() -> Self {
Self(Timer::new(Duration::from_millis(TICK_PERIOD / 4), true))
}
}
impl Direction {
fn from_keypress(keypress: Res<Input<KeyCode>>) -> Option<Self> {
if keypress.pressed(KeyCode::Up) {
Some(Self::Up)
} else if keypress.pressed(KeyCode::Down) {
Some(Self::Down)
} else if keypress.pressed(KeyCode::Left) {
Some(Self::Left)
} else if keypress.pressed(KeyCode::Right) {
Some(Self::Right)
} else {
None
}
}
}
fn create_snake_segment(commands: &mut Commands, grid_position: grid::Coordinate) -> Entity {
commands
.spawn_bundle(SpriteBundle {
sprite: Sprite {
color: Color::RED,
custom_size: Some(Vec2::splat(grid::SEGMENT_SIZE) * 0.9),
..Default::default()
},
transform: Transform::from_translation(Vec2::from(grid_position).extend(Z_HEIGHT)),
..Default::default()
})
.insert(SnakeSegment)
.insert(grid_position)
.id()
}
fn setup_snake_system(mut commands: Commands) {
let snake_head = create_snake_segment(&mut commands, grid::Coordinate::splat(grid::SIZE / 2));
commands
.entity(snake_head)
.insert(Name::new("SnakeHead"))
.insert(SnakeHead)
.insert(DirectionBuffer(None));
commands
.spawn()
.insert(Snake::with_segments(&[snake_head]))
.insert(Name::new("Snake"))
.insert_bundle(SpatialBundle::default())
.add_child(snake_head);
}
fn add_direction_system(
mut commands: Commands,
keypress: Res<Input<KeyCode>>,
mut query: Query<Entity, With<SnakeHead>>,
) {
if let Some(direction) = Direction::from_keypress(keypress) {
let snake_head = query.single_mut();
commands.entity(snake_head).insert(direction);
commands.insert_resource(NextState(AppState::InGame));
}
}
fn add_tail_system(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
mut snake_query: Query<(Entity, &mut Snake)>,
) {
for _ in eaten_event_reader.iter() {
let segment =
create_snake_segment(&mut commands, grid::Coordinate::splat(grid::Index::MIN / 2));
let (snake_entity, mut snake) = snake_query.single_mut();
snake.segments.push(segment);
commands
.entity(segment)
.insert(Name::new(format!("Segment {}", snake.segments.len())));
commands.entity(snake_entity).add_child(segment);
}
}
fn add_bulge_system(
mut commands: Commands,
mut eaten_event_reader: EventReader<fruit::EatenEvent>,
query: Query<Entity, With<SnakeHead>>,
) {
for _ in eaten_event_reader.iter() {
let snake_head_entity = query.single();
commands.entity(snake_head_entity).insert(BulgeMarker);
}
}
fn propagate_bulge_system(
mut commands: Commands,
bulge_segment_query: Query<(Entity, &Parent), (With<SnakeSegment>, With<BulgeMarker>)>,
snake_query: Query<&Snake>,
time: Res<Time>,
mut timer: ResMut<BulgePropagationTimer>,
) {
timer.0.tick(time.delta());
if !timer.0.finished() {
return;
}
for (entity, parent) in bulge_segment_query.iter() {
commands.entity(entity).remove::<BulgeMarker>();
let mut segment_iter = snake_query.get(parent.get()).unwrap().segments.iter();
segment_iter.find(|&&segment_entity| segment_entity == entity);
if let Some(&segment_entity) = segment_iter.next() {
commands.entity(segment_entity).insert(BulgeMarker);
}
}
}
fn animate_bulge_system(mut commands: Commands, query: Query<Entity, Added<BulgeMarker>>) {
for entity in query.iter() {
let tween_to = Tween::new(
EaseFunction::QuadraticInOut,
TweeningType::Once,
Duration::from_millis(100),
TransformScaleLens {
start: Vec3::splat(1.0),
end: Vec3::splat(1.1),
},
);
let tween_back = Tween::new(
EaseFunction::QuadraticInOut,
TweeningType::Once,
Duration::from_millis(150),
TransformScaleLens {
start: Vec3::splat(1.1),
end: Vec3::splat(1.0),
},
);
let tween = tween_to.then(tween_back);
commands.entity(entity).insert(Animator::new(tween));
}
}
fn update_direction_system(
mut query: Query<(&mut Direction, &mut DirectionBuffer), With<SnakeHead>>,
) {
for (mut direction, mut direction_buffer) in query.iter_mut() {
if let Some(new_direction) = direction_buffer.0 {
*direction = new_direction;
direction_buffer.0 = None;
}
}
}
fn change_direction_system(
keypress: Res<Input<KeyCode>>,
mut query: Query<(&Direction, &mut DirectionBuffer), With<SnakeHead>>,
) {
if let Some(new_direction) = Direction::from_keypress(keypress) {
let (direction, mut direction_buffer) = query.single_mut();
if let (Direction::Up, Direction::Down)
| (Direction::Down, Direction::Up)
| (Direction::Left, Direction::Right)
| (Direction::Right, Direction::Left) = (direction, &new_direction)
{
return;
}
direction_buffer.0 = Some(new_direction);
}
}
fn grid_transform_system(
mut query: Query<(&mut Transform, &grid::Coordinate), With<SnakeSegment>>,
) {
for (mut transform, grid_coordinate) in query.iter_mut() {
*transform = Transform::from_translation(Vec2::from(grid_coordinate).extend(Z_HEIGHT));
}
}
fn head_movement_system(
mut head_query: Query<(&mut grid::Coordinate, &Direction, &Parent), With<SnakeHead>>,
snake_query: Query<&Snake>,
) {
for (mut grid_coordinate, &direction, parent) in head_query.iter_mut() {
let snake = snake_query.get(parent.get()).unwrap();
if snake.about_to_collide {
continue;
}
*grid_coordinate = next_grid_coordinate(*grid_coordinate, direction);
}
}
fn segments_movement_system(
mut segment_query: Query<&mut grid::Coordinate, With<SnakeSegment>>,
snake_query: Query<&Snake>,
) {
for snake in snake_query.iter() {
if snake.about_to_collide {
continue;
}
for (&segment_entity, &previous_segment_entity) in
snake.segments.iter().rev().tuple_windows()
{
let previous_coordinate = *segment_query.get(previous_segment_entity).unwrap();
let mut coordinate = segment_query.get_mut(segment_entity).unwrap();
*coordinate = previous_coordinate;
}
}
}
fn about_to_collide(
head_query: Query<(&grid::Coordinate, &Direction, &Parent), With<SnakeHead>>,
segment_query: Query<&grid::Coordinate, (With<SnakeSegment>, Without<SnakeHead>)>,
mut snake_query: Query<&mut Snake>,
) {
for (&head_coordinate, &head_direction, parent) in head_query.iter() {
let next_head_coordinate = next_grid_coordinate(head_coordinate, head_direction);
let hit_border = !next_head_coordinate.in_bounds();
let hit_snake = !segment_query
.iter()
.all(|&coordinate| coordinate != next_head_coordinate);
let mut snake = snake_query
.get_mut(parent.get())
.expect("Head must be child of Snake.");
snake.about_to_collide = hit_border || hit_snake;
}
}
fn game_over_system(query: Query<&Snake>, mut commands: Commands) {
if query.get_single().unwrap().about_to_collide {
commands.insert_resource(NextState(AppState::End));
}
}
fn next_grid_coordinate(
current_coordinate: grid::Coordinate,
direction: Direction,
) -> grid::Coordinate {
match direction {
Direction::Up => current_coordinate + grid::Coordinate(0, 1),
Direction::Down => current_coordinate + grid::Coordinate(0, -1),
Direction::Left => current_coordinate + grid::Coordinate(-1, 0),
Direction::Right => current_coordinate + grid::Coordinate(1, 0),
}
}

View File

@@ -3,7 +3,7 @@ use bevy::prelude::*;
use iyes_loopless::prelude::*;
use std::time::Duration;
const TICK_PERIOD: u64 = 125;
pub const TICK_PERIOD: u64 = 125;
#[derive(Debug, Clone, PartialEq, Eq, Hash, StageLabel)]
struct FixedTimeStage;
@@ -12,15 +12,13 @@ pub struct TickPlugin;
impl Plugin for TickPlugin {
fn build(&self, app: &mut App) {
let mut fixed_time_system_stage = SystemStage::parallel();
fixed_time_system_stage.add_system(tick_event_system.run_in_state(AppState::InGame));
app.add_event::<TickEvent>().add_stage_before(
CoreStage::Update,
FixedTimeStage,
FixedTimestepStage::new(Duration::from_millis(TICK_PERIOD))
.with_stage(fixed_time_system_stage),
);
app.add_event::<TickEvent>()
.add_fixed_timestep(Duration::from_millis(TICK_PERIOD), "tick_time_step")
.add_fixed_timestep_system(
"tick_time_step",
0,
tick_event_system.run_in_state(AppState::InGame),
);
}
}