From 757180b13c8bea47dbd1712a48b394118c16d450 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Tue, 1 Nov 2022 20:15:51 +0100 Subject: [PATCH] Refactor organisation --- Cargo.lock | 363 ++++++++++++++++++++------------------- Cargo.toml | 5 +- src/fruit.rs | 6 +- src/grid.rs | 2 +- src/main.rs | 2 +- src/snake.rs | 184 ++++++++------------ src/snake/appearance.rs | 0 src/snake/bulge.rs | 81 +++++++++ src/snake/movement.rs | 0 src/snake_old.rs | 367 ++++++++++++++++++++++++++++++++++++++++ src/tick.rs | 18 +- 11 files changed, 713 insertions(+), 315 deletions(-) create mode 100644 src/snake/appearance.rs create mode 100644 src/snake/bulge.rs create mode 100644 src/snake/movement.rs create mode 100644 src/snake_old.rs diff --git a/Cargo.lock b/Cargo.lock index 68df9e4..cb61676 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/Cargo.toml b/Cargo.toml index ee78369..f779f7f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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] diff --git a/src/fruit.rs b/src/fruit.rs index c1df868..513687d 100644 --- a/src/fruit.rs +++ b/src/fruit.rs @@ -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::() - .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) diff --git a/src/grid.rs b/src/grid.rs index 14eb4da..511296c 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -42,7 +42,7 @@ impl From 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, ) } diff --git a/src/main.rs b/src/main.rs index 44f0fef..a14cec9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -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; diff --git a/src/snake.rs b/src/snake.rs index 8a406bb..3cfb9af 100644 --- a/src/snake.rs +++ b/src/snake.rs @@ -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); #[derive(Component)] -struct Snake; - -#[derive(Component)] -struct SnakeSegments(Vec); - -#[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, } -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, - 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, - query: Query>, -) { - 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, With)>, - snake_segments_query: Query<&SnakeSegments>, - time: Res