From e70ec516731cf24dcbb81f9d5540d31b8502e59d Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Tue, 8 Nov 2022 22:36:19 +0100 Subject: [PATCH] Further refactoring --- Cargo.lock | 255 +++++++++++++++++--------------- Cargo.toml | 4 +- src/snake.rs | 130 ++++++++--------- src/snake_old.rs | 367 ----------------------------------------------- 4 files changed, 204 insertions(+), 552 deletions(-) delete mode 100644 src/snake_old.rs diff --git a/Cargo.lock b/Cargo.lock index cb61676..b47c56c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04a9283dace1c41c265496614998d5b9c4a97b3eb770e804f007c5144bf03f2b" +checksum = "4dcdbc68024b653943864d436fe8a24b028095bc1cf91a8926f8241e4aaffe59" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -99,20 +99,11 @@ dependencies = [ "libc", ] -[[package]] -name = "ansi_term" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" -dependencies = [ - "winapi", -] - [[package]] name = "anyhow" -version = "1.0.65" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" +checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6" [[package]] name = "approx" @@ -202,9 +193,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.13.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "bevy" @@ -1030,24 +1021,24 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.11.0" +version = "3.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" +checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba" [[package]] name = "bytemuck" -version = "1.12.1" +version = "1.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" +checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9e1f5fa78f69496407a27ae9ed989e3c3b072310286f5ef385525e4cbc24a9" +checksum = "5fe233b960f12f8007e3db2d136e3cb1c291bfd7396e384ee76025fc1a3932b4" dependencies = [ "proc-macro2", "quote", @@ -1074,9 +1065,9 @@ checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" [[package]] name = "cc" -version = "1.0.73" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "41ca34107f97baef6cfb231b32f36115781856b8f8208e8c580e0bcaea374842" dependencies = [ "jobserver", ] @@ -1138,9 +1129,9 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.24.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" dependencies = [ "bitflags", "block", @@ -1214,9 +1205,9 @@ dependencies = [ [[package]] name = "const_panic" -version = "0.2.4" +version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c0358e41e90e443c69b2b2811f6ec9892c228b93620634cf4344fe89967fa9f" +checksum = "9ed2b28323eee4fb66bb824401daa3e46bd445b9a9298a3d382b320710ba69dd" [[package]] name = "copyless" @@ -1372,12 +1363,11 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.11" +version = "0.8.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +checksum = "edbafec5fa1f196ca66527c1b12c2ec4745ca14b50f1ad8f9f6f720b55d11fac" dependencies = [ "cfg-if 1.0.0", - "once_cell", ] [[package]] @@ -1582,9 +1572,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.17" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" +checksum = "4b9663d381d07ae25dc88dbdf27df458faa83a9b25336bcac83d5e452b5fc9d3" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1649,15 +1639,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" +checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac" [[package]] name = "futures-io" -version = "0.3.24" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" +checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb" [[package]] name = "futures-lite" @@ -1695,9 +1685,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.7" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if 1.0.0", "js-sys", @@ -1967,7 +1957,7 @@ dependencies = [ "color_quant", "num-rational 0.4.1", "num-traits", - "png 0.17.6", + "png 0.17.7", "scoped_threadpool", ] @@ -2052,9 +2042,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" +checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" [[package]] name = "iyes_loopless" @@ -2125,9 +2115,9 @@ dependencies = [ [[package]] name = "kqueue" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6112e8f37b59803ac47a42d14f1f3a59bbf72fc6857ffc5be455e28a691f8e" +checksum = "2c8fc60ba15bf51257aa9807a48a61013db043fcf3a78cb0d916e8e396dcad98" dependencies = [ "kqueue-sys", "libc", @@ -2168,15 +2158,15 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.133" +version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0f80d65747a3e43d1596c7c5492d95d5edddaabd45a7fcdb02b95f644164966" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "libloading" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if 1.0.0", "winapi", @@ -2302,10 +2292,19 @@ dependencies = [ ] [[package]] -name = "mio" -version = "0.8.4" +name = "miniz_oxide" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de" dependencies = [ "libc", "log", @@ -2497,6 +2496,16 @@ dependencies = [ "winapi", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-derive" version = "0.3.3" @@ -2562,9 +2571,9 @@ dependencies = [ [[package]] name = "num_cpus" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5" dependencies = [ "hermit-abi", "libc", @@ -2664,9 +2673,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" +checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" [[package]] name = "opener" @@ -2679,10 +2688,16 @@ dependencies = [ ] [[package]] -name = "owned_ttf_parser" -version = "0.15.2" +name = "overload" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owned_ttf_parser" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4665508572151759e8d60404e20dc096ef93a99801a05ac2ac6e43bf5b4ca187" dependencies = [ "ttf-parser", ] @@ -2711,7 +2726,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.3", + "parking_lot_core 0.9.4", ] [[package]] @@ -2730,9 +2745,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0" dependencies = [ "cfg-if 1.0.0", "libc", @@ -2771,9 +2786,9 @@ checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pkg-config" -version = "0.3.25" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" [[package]] name = "png" @@ -2789,14 +2804,14 @@ dependencies = [ [[package]] name = "png" -version = "0.17.6" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c" +checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" dependencies = [ "bitflags", "crc32fast", "flate2", - "miniz_oxide 0.5.4", + "miniz_oxide 0.6.2", ] [[package]] @@ -2810,9 +2825,9 @@ dependencies = [ [[package]] name = "ppv-lite86" -version = "0.2.16" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" [[package]] name = "pretty-type-name" @@ -2833,18 +2848,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.44" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ "unicode-ident", ] [[package]] name = "profiling" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" +checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" [[package]] name = "quote" @@ -2923,9 +2938,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a" dependencies = [ "aho-corasick", "memchr", @@ -2943,9 +2958,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.27" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "renderdoc-sys" @@ -3020,18 +3035,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.145" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" +checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.145" +version = "1.0.147" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c" +checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852" dependencies = [ "proc-macro2", "quote", @@ -3040,9 +3055,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.85" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44" +checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" dependencies = [ "itoa", "ryu", @@ -3084,9 +3099,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" dependencies = [ "serde", ] @@ -3127,9 +3142,9 @@ checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" [[package]] name = "syn" -version = "1.0.101" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" dependencies = [ "proc-macro2", "quote", @@ -3224,9 +3239,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.36" +version = "0.1.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -3236,9 +3251,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", @@ -3247,9 +3262,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a" dependencies = [ "once_cell", "valuable", @@ -3268,12 +3283,12 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.15" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" +checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70" dependencies = [ - "ansi_term", "matchers", + "nu-ansi-term", "once_cell", "regex", "sharded-slab", @@ -3297,9 +3312,9 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.15.2" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" +checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff" [[package]] name = "typenum" @@ -3315,9 +3330,9 @@ checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-ident" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "unicode-normalization" @@ -3353,9 +3368,9 @@ dependencies = [ [[package]] name = "uuid" -version = "1.1.2" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" +checksum = "feb41e78f93363bb2df8b0e86a2ca30eed7806ea16ea0c790d757cf93f79be83" dependencies = [ "getrandom", "serde", @@ -3640,46 +3655,60 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ + "windows_aarch64_gnullvm", "windows_aarch64_msvc", "windows_i686_gnu", "windows_i686_msvc", "windows_x86_64_gnu", + "windows_x86_64_gnullvm", "windows_x86_64_msvc", ] [[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" +name = "windows_aarch64_gnullvm" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" [[package]] name = "windows_i686_gnu" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" [[package]] name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" [[package]] name = "winit" diff --git a/Cargo.toml b/Cargo.toml index f779f7f..e9ac244 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,13 +7,13 @@ edition = "2021" [dependencies] iyes_loopless = "0.8.0" -itertools = "0.10.3" +itertools = "0.10.5" rand = "0.8.5" bevy_editor_pls = "0.1.1" bevy_tweening = "0.5.0" [dependencies.bevy] -version = "0.8.0" +version = "0.8.1" features = ["dynamic"] [profile.dev.package."*"] diff --git a/src/snake.rs b/src/snake.rs index 3cfb9af..516644f 100644 --- a/src/snake.rs +++ b/src/snake.rs @@ -35,15 +35,8 @@ impl Plugin for SnakePlugin { .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 + apply_direction_system .run_in_state(AppState::InGame) .run_if(tick_triggered), ) @@ -53,7 +46,7 @@ impl Plugin for SnakePlugin { .run_if(tick_triggered), ) .add_system( - about_to_collide + collision_system .run_in_state(AppState::InGame) .run_if(tick_triggered), ) @@ -69,24 +62,13 @@ impl Plugin for SnakePlugin { pub const Z_HEIGHT: f32 = 10.; -#[derive(Component)] +#[derive(Component, Debug)] struct SnakeSegment; -#[derive(Component)] +#[derive(Component, Debug)] pub struct SnakeHead; -#[derive(Component, Copy, Clone)] -enum Direction { - Up, - Down, - Left, - Right, -} - -#[derive(Component)] -struct DirectionBuffer(Option); - -#[derive(Component)] +#[derive(Component, Debug)] struct Snake { about_to_collide: bool, segments: Vec, @@ -101,6 +83,14 @@ impl Snake { } } +#[derive(Component, Copy, Clone, Debug)] +enum Direction { + Up, + Down, + Left, + Right, +} + impl Direction { fn from_keypress(keypress: Res>) -> Option { if keypress.pressed(KeyCode::Up) { @@ -117,6 +107,9 @@ impl Direction { } } +#[derive(Component, Default, Debug)] +struct DirectionBuffer(Option); + fn create_snake_segment(commands: &mut Commands, grid_position: grid::Coordinate) -> Entity { commands .spawn_bundle(SpriteBundle { @@ -139,13 +132,13 @@ fn setup_snake_system(mut commands: Commands) { commands .entity(snake_head) .insert(Name::new("SnakeHead")) - .insert(SnakeHead) - .insert(DirectionBuffer(None)); + .insert(SnakeHead); commands .spawn() .insert(Snake::with_segments(&[snake_head])) .insert(Name::new("Snake")) + .insert(DirectionBuffer::default()) .insert_bundle(SpatialBundle::default()) .add_child(snake_head); } @@ -153,11 +146,11 @@ fn setup_snake_system(mut commands: Commands) { fn add_direction_system( mut commands: Commands, keypress: Res>, - mut query: Query>, + mut query: Query>, ) { if let Some(direction) = Direction::from_keypress(keypress) { - let snake_head = query.single_mut(); - commands.entity(snake_head).insert(direction); + let snake = query.single_mut(); + commands.entity(snake).insert(direction); commands.insert_resource(NextState(AppState::InGame)); } @@ -184,9 +177,7 @@ fn add_tail_system( } } -fn update_direction_system( - mut query: Query<(&mut Direction, &mut DirectionBuffer), With>, -) { +fn apply_direction_system(mut query: Query<(&mut Direction, &mut DirectionBuffer), With>) { for (mut direction, mut direction_buffer) in query.iter_mut() { if let Some(new_direction) = direction_buffer.0 { *direction = new_direction; @@ -197,7 +188,7 @@ fn update_direction_system( fn change_direction_system( keypress: Res>, - mut query: Query<(&Direction, &mut DirectionBuffer), With>, + mut query: Query<(&Direction, &mut DirectionBuffer), With>, ) { if let Some(new_direction) = Direction::from_keypress(keypress) { let (direction, mut direction_buffer) = query.single_mut(); @@ -205,7 +196,7 @@ fn change_direction_system( if let (Direction::Up, Direction::Down) | (Direction::Down, Direction::Up) | (Direction::Left, Direction::Right) - | (Direction::Right, Direction::Left) = (direction, &new_direction) + | (Direction::Right, Direction::Left) = (direction, new_direction) { return; } @@ -222,46 +213,49 @@ fn grid_transform_system( } } -fn head_movement_system( - mut head_query: Query<(&mut grid::Coordinate, &Direction, &Parent), With>, - 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>, - snake_query: Query<&Snake>, + snake_query: Query<(&Snake, &Direction)>, ) { - for snake in snake_query.iter() { - if snake.about_to_collide { + for ( + Snake { + about_to_collide, + segments, + .. + }, + direction, + ) in snake_query.iter() + { + if *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(); + + // ... then the other elements + for (&segment, &previous_segment) in segments.iter().rev().tuple_windows() { + let previous_coordinate = *segment_query.get(previous_segment).unwrap(); + let mut coordinate = segment_query.get_mut(segment).unwrap(); *coordinate = previous_coordinate; } + + // First move head ... + let head = *segments.iter().next().expect("Snake has always a head"); + let mut head_coordinate = segment_query.get_mut(head).unwrap(); + *head_coordinate = next_grid_coordinate(&head_coordinate, direction); } } -fn about_to_collide( - head_query: Query<(&grid::Coordinate, &Direction, &Parent), With>, +fn collision_system( segment_query: Query<&grid::Coordinate, (With, Without)>, - mut snake_query: Query<&mut Snake>, + head_query: Query<(&grid::Coordinate, &Parent), With>, + mut snake_query: Query<(&Direction, &mut Snake)>, ) { - for (&head_coordinate, &head_direction, parent) in head_query.iter() { - let next_head_coordinate = next_grid_coordinate(head_coordinate, head_direction); + for (head_coordinate, parent) in head_query.iter() { + let (direction, mut snake) = snake_query + .get_mut(parent.get()) + .expect("Head must be child of Snake"); + + let next_head_coordinate = next_grid_coordinate(head_coordinate, direction); let hit_border = !next_head_coordinate.in_bounds(); @@ -269,10 +263,6 @@ fn about_to_collide( .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; } } @@ -284,13 +274,13 @@ fn game_over_system(query: Query<&Snake>, mut commands: Commands) { } fn next_grid_coordinate( - current_coordinate: grid::Coordinate, - direction: Direction, + 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), + 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), } } diff --git a/src/snake_old.rs b/src/snake_old.rs deleted file mode 100644 index 4c0bc46..0000000 --- a/src/snake_old.rs +++ /dev/null @@ -1,367 +0,0 @@ -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); - -#[derive(Component)] -struct Snake { - about_to_collide: bool, - segments: Vec, -} - -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>) -> Option { - 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>, - mut query: Query>, -) { - 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, - 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, - 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, - bulge_segment_query: Query<(Entity, &Parent), (With, With)>, - snake_query: Query<&Snake>, - time: Res