From d1db542b16eb49e6bae1d016be8792927528a545 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Thu, 18 Aug 2022 21:26:52 +0200 Subject: [PATCH] Snake collision with itself --- Cargo.lock | 470 ++++++++++++++++++++++++++++++++++++++++++++------ Cargo.toml | 1 + src/canvas.rs | 20 ++- src/grid.rs | 13 +- src/main.rs | 7 +- src/snake.rs | 67 ++++--- 6 files changed, 489 insertions(+), 89 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ae824f6..5c2e94b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.59" +version = "1.0.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c91f1f46651137be86f3a2b9a8359f9ab421d04d941c62b5982e1ca21113adf9" +checksum = "1485d4d2cc45e7b201ee3767015c96faa5904387c9d87c6efdd0fb511f12d305" [[package]] name = "approx" @@ -123,6 +123,25 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arboard" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" +dependencies = [ + "clipboard-win", + "core-graphics 0.22.3", + "image 0.23.14", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot 0.12.1", + "thiserror", + "winapi", + "x11rb", +] + [[package]] name = "arrayvec" version = "0.7.2" @@ -140,9 +159,9 @@ dependencies = [ [[package]] name = "async-channel" -version = "1.6.1" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" dependencies = [ "concurrent-queue", "event-listener", @@ -169,6 +188,12 @@ version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" +[[package]] +name = "atomic_refcell" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" + [[package]] name = "autocfg" version = "1.1.0" @@ -191,11 +216,36 @@ dependencies = [ "bevy_internal", ] +[[package]] +name = "bevy-inspector-egui" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c53ed1cad011e33ea145d2c1f649a966e7457453f3768ddff39bc5064bd525" +dependencies = [ + "bevy", + "bevy-inspector-egui-derive", + "bevy_egui", + "image 0.23.14", + "pretty-type-name", +] + +[[package]] +name = "bevy-inspector-egui-derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48ef6260a46924d40781bcb9da157c110d5166bbd573795e4a16f2505913d0d0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "bevy-snake" version = "0.1.0" dependencies = [ "bevy", + "bevy-inspector-egui", "itertools", "iyes_loopless", ] @@ -374,6 +424,19 @@ dependencies = [ "syn", ] +[[package]] +name = "bevy_egui" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf44ff770566dca66b805a6829df783f64700bd01d35aec1034dff31b531a4" +dependencies = [ + "arboard", + "bevy", + "egui", + "thread_local", + "webbrowser", +] + [[package]] name = "bevy_encase_derive" version = "0.8.0" @@ -623,7 +686,7 @@ dependencies = [ "futures-lite", "hex", "hexasphere", - "image", + "image 0.24.3", "naga", "once_cell", "parking_lot 0.12.1", @@ -795,7 +858,7 @@ checksum = "8bda6dada53e546845887ae7357eec57b8d547ef71627b716b33839b4a98b687" dependencies = [ "ahash", "getrandom", - "hashbrown 0.12.3", + "hashbrown", "instant", "tracing", "uuid", @@ -884,24 +947,24 @@ checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" [[package]] name = "bumpalo" -version = "3.10.0" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "bytemuck" -version = "1.11.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5377c8865e74a160d21f29c2d40669f53286db6eab59b88540cbb12ffc8b835" +checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" dependencies = [ "bytemuck_derive", ] [[package]] name = "bytemuck_derive" -version = "1.1.1" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfd2f4180c5721da6335cc9e9061cce522b87a35e51cc57636d28d22a9863c80" +checksum = "1b9e1f5fa78f69496407a27ae9ed989e3c3b072310286f5ef385525e4cbc24a9" dependencies = [ "proc-macro2", "quote", @@ -979,6 +1042,17 @@ dependencies = [ "libloading", ] +[[package]] +name = "clipboard-win" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + [[package]] name = "cocoa" version = "0.24.0" @@ -1028,9 +1102,9 @@ checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" [[package]] name = "combine" -version = "4.6.4" +version = "4.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a604e93b79d1808327a6fca85a6f2d69de66461e7620f5a4cbf5fb4d1d7c948" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" dependencies = [ "bytes", "memchr", @@ -1275,6 +1349,16 @@ dependencies = [ "syn", ] +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + [[package]] name = "deflate" version = "1.0.0" @@ -1297,10 +1381,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] -name = "either" -version = "1.7.0" +name = "egui" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" +checksum = "eb095a8b9feb9b7ff8f00b6776dffcef059538a3f4a91238e03c900e9c9ad9a2" +dependencies = [ + "ahash", + "epaint", + "nohash-hasher", +] + +[[package]] +name = "either" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" + +[[package]] +name = "emath" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c223f58c7e38abe1770f367b969f1b3fbd4704b67666bcb65dbb1adb0980ba72" +dependencies = [ + "bytemuck", +] [[package]] name = "encase" @@ -1344,6 +1448,21 @@ dependencies = [ "regex", ] +[[package]] +name = "epaint" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c29567088888e8ac3e8f61bbb2ddc820207ebb8d69eefde5bcefa06d65e4e89" +dependencies = [ + "ab_glyph", + "ahash", + "atomic_refcell", + "bytemuck", + "emath", + "nohash-hasher", + "parking_lot 0.12.1", +] + [[package]] name = "erased-serde" version = "0.3.22" @@ -1353,6 +1472,16 @@ dependencies = [ "serde", ] +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + [[package]] name = "euclid" version = "0.22.7" @@ -1416,6 +1545,16 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -1427,15 +1566,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "d2acedae88d38235936c3922476b10fced7b2b68136f5e3c03c2d5be348a1115" [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "93a66fc6d035a26a3ae255a6d2bca35eda63ae4c5512bef54449113f7a1228e5" [[package]] name = "futures-lite" @@ -1461,6 +1600,16 @@ dependencies = [ "byteorder", ] +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + [[package]] name = "getrandom" version = "0.2.7" @@ -1603,13 +1752,13 @@ dependencies = [ [[package]] name = "gpu-descriptor" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a538f217be4d405ff4719a283ca68323cc2384003eca5baaa87501e821c81dda" +checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a" dependencies = [ "bitflags", "gpu-descriptor-types", - "hashbrown 0.11.2", + "hashbrown", ] [[package]] @@ -1651,15 +1800,6 @@ dependencies = [ "syn", ] -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.12.3" @@ -1707,6 +1847,33 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-iter", + "num-rational 0.3.2", + "num-traits", + "png 0.16.8", + "tiff", +] + [[package]] name = "image" version = "0.24.3" @@ -1716,9 +1883,9 @@ dependencies = [ "bytemuck", "byteorder", "color_quant", - "num-rational", + "num-rational 0.4.1", "num-traits", - "png", + "png 0.17.5", "scoped_threadpool", ] @@ -1729,7 +1896,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", - "hashbrown 0.12.3", + "hashbrown", ] [[package]] @@ -1842,6 +2009,12 @@ dependencies = [ "libc", ] +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" + [[package]] name = "js-sys" version = "0.3.59" @@ -1907,9 +2080,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.127" +version = "0.2.132" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505e71a4706fa491e9b1b55f51b95d4037d0821ee40131190475f692b35b009b" +checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" [[package]] name = "libloading" @@ -1977,6 +2150,12 @@ 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" @@ -2012,6 +2191,25 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + [[package]] name = "miniz_oxide" version = "0.5.3" @@ -2146,6 +2344,19 @@ dependencies = [ "jni-sys", ] +[[package]] +name = "nix" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + [[package]] name = "nix" version = "0.23.1" @@ -2170,6 +2381,12 @@ dependencies = [ "libc", ] +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "7.1.1" @@ -2219,6 +2436,28 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-rational" version = "0.4.1" @@ -2280,6 +2519,17 @@ dependencies = [ "objc_exception", ] +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + [[package]] name = "objc_exception" version = "0.1.2" @@ -2289,6 +2539,15 @@ dependencies = [ "cc", ] +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + [[package]] name = "oboe" version = "0.4.6" @@ -2323,9 +2582,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" +checksum = "074864da206b4973b84eb91683020dbefd6a8c3f0f38e054d93954e891935e4e" [[package]] name = "owned_ttf_parser" @@ -2424,6 +2683,18 @@ version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +[[package]] +name = "png" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +dependencies = [ + "bitflags", + "crc32fast", + "deflate 0.8.6", + "miniz_oxide 0.3.7", +] + [[package]] name = "png" version = "0.17.5" @@ -2432,8 +2703,8 @@ checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" dependencies = [ "bitflags", "crc32fast", - "deflate", - "miniz_oxide", + "deflate 1.0.0", + "miniz_oxide 0.5.3", ] [[package]] @@ -2446,10 +2717,16 @@ dependencies = [ ] [[package]] -name = "proc-macro-crate" -version = "1.2.0" +name = "pretty-type-name" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d50bfb8c23f23915855a00d98b5a35ef2e0b871bb52937bacadb798fbb66c8" +checksum = "a8815d101cfb4cb491154896bdab292a395a7ac9ab185a9941a2f5be0135900d" + +[[package]] +name = "proc-macro-crate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" dependencies = [ "once_cell", "thiserror", @@ -2615,18 +2892,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590c437916fb6b221e1d00df6e3294f3fccd70ca7e92541c475d6ed6ef5fee2" +checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.142" +version = "1.0.143" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34b5b8d809babe02f538c2cfec6f2c1ed10804c0e5a6a041a049a4f5588ccc2e" +checksum = "d3d8e8de557aee63c26b85b947f5e59b690d0454c753f3adeb5cd7835ab88391" dependencies = [ "proc-macro2", "quote", @@ -2702,6 +2979,12 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + [[package]] name = "strsim" version = "0.10.0" @@ -2776,6 +3059,17 @@ dependencies = [ "once_cell", ] +[[package]] +name = "tiff" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" +dependencies = [ + "jpeg-decoder", + "miniz_oxide 0.4.4", + "weezl", +] + [[package]] name = "tinyvec" version = "1.6.0" @@ -2885,12 +3179,27 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + [[package]] name = "unicode-ident" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-width" version = "0.1.9" @@ -2903,6 +3212,18 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + [[package]] name = "uuid" version = "1.1.2" @@ -3030,6 +3351,26 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webbrowser" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" +dependencies = [ + "jni", + "ndk-glue 0.6.2", + "url", + "web-sys", + "widestring", + "winapi", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + [[package]] name = "wgpu" version = "0.13.1" @@ -3124,6 +3465,12 @@ dependencies = [ "bitflags", ] +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + [[package]] name = "winapi" version = "0.3.9" @@ -3149,6 +3496,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" @@ -3230,15 +3586,27 @@ dependencies = [ [[package]] name = "x11-dl" -version = "2.19.1" +version = "2.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59" +checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6" dependencies = [ "lazy_static", "libc", "pkg-config", ] +[[package]] +name = "x11rb" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" +dependencies = [ + "gethostname", + "nix 0.22.3", + "winapi", + "winapi-wsapoll", +] + [[package]] name = "xi-unicode" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index 848ea30..cf90835 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,6 +8,7 @@ edition = "2021" [dependencies] iyes_loopless = "0.7.0" itertools = "0.10.3" +bevy-inspector-egui = "0.12.1" # bevy_editor_pls = { git = "https://github.com/jakobhellermann/bevy_editor_pls" } [dependencies.bevy] diff --git a/src/canvas.rs b/src/canvas.rs index 646863e..3eb314c 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -1,21 +1,23 @@ use crate::grid; use bevy::prelude::*; -pub struct ModPlugin; +pub struct CanvasPlugin; -impl Plugin for ModPlugin { +impl Plugin for CanvasPlugin { fn build(&self, app: &mut App) { app.add_startup_system(spawn_background); } } fn spawn_background(mut commands: Commands) { - commands.spawn_bundle(SpriteBundle { - sprite: Sprite { - color: Color::DARK_GRAY, - custom_size: Some(Vec2::splat(grid::SEGMENT_SIZE * grid::SIZE as f32)), + commands + .spawn_bundle(SpriteBundle { + sprite: Sprite { + color: Color::DARK_GRAY, + custom_size: Some(Vec2::splat(grid::SEGMENT_SIZE * grid::SIZE as f32)), + ..Default::default() + }, ..Default::default() - }, - ..Default::default() - }); + }) + .insert(Name::new("Canvas")); } diff --git a/src/grid.rs b/src/grid.rs index cd1d4e0..111bfad 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -6,13 +6,17 @@ pub type Index = i16; pub const SIZE: Index = 17; pub const SEGMENT_SIZE: f32 = 20.; -#[derive(Component, Clone, Copy, Default, Debug)] +#[derive(Component, Clone, Copy, Default, Debug, PartialEq, Eq)] pub struct Coordinate(pub Index, pub Index); impl Coordinate { pub fn splat(v: Index) -> Self { Self(v, v) } + + pub fn in_bounds(self) -> bool { + self.0 >= 0 && self.0 < SIZE && self.1 >= 0 && self.1 < SIZE + } } impl Add for Coordinate { @@ -29,18 +33,17 @@ impl AddAssign for Coordinate { } } -impl From for Transform { +impl From for Vec2 { fn from(grid_coordinate: Coordinate) -> Self { (&grid_coordinate).into() } } -impl From<&Coordinate> for Transform { +impl From<&Coordinate> for Vec2 { fn from(grid_coordinate: &Coordinate) -> Self { - Transform::from_xyz( + Vec2::new( (grid_coordinate.0 - SIZE / 2) as f32 * SEGMENT_SIZE, (grid_coordinate.1 - SIZE / 2) as f32 * SEGMENT_SIZE, - 0., ) } } diff --git a/src/main.rs b/src/main.rs index 98ff5c0..1ca51ee 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,7 @@ use bevy::{prelude::*, render::camera::ScalingMode}; // use bevy_editor_pls::prelude::*; +use crate::{canvas::CanvasPlugin, snake::SnakePlugin}; +use bevy_inspector_egui::WorldInspectorPlugin; use grid::{SEGMENT_SIZE, SIZE}; use iyes_loopless::prelude::*; @@ -31,9 +33,10 @@ fn main() { }) .add_loopless_state(AppState::Begin) .add_plugins(DefaultPlugins) + .add_plugin(WorldInspectorPlugin::new()) // .add_plugin(EditorPlugin) - .add_plugin(snake::ModPlugin) - .add_plugin(canvas::ModPlugin) + .add_plugin(SnakePlugin) + .add_plugin(CanvasPlugin) .add_startup_system(setup_system) .add_system(camera_move_system) .add_system(bevy::window::close_on_esc) diff --git a/src/snake.rs b/src/snake.rs index b898b2c..745fe45 100644 --- a/src/snake.rs +++ b/src/snake.rs @@ -7,12 +7,16 @@ use std::time::Duration; #[derive(Debug, Clone, PartialEq, Eq, Hash, StageLabel)] struct FixedTimeStage; -pub struct ModPlugin; +pub struct SnakePlugin; -impl Plugin for ModPlugin { +impl Plugin for SnakePlugin { fn build(&self, app: &mut App) { let mut fixed_time_systems0 = SystemStage::parallel(); - fixed_time_systems0.add_system(segments_movement_system.run_in_state(AppState::InGame)); + fixed_time_systems0.add_system( + segments_movement_system + .run_in_state(AppState::InGame) + .run_if_not(about_to_lose), + ); let mut fixed_time_systems1 = SystemStage::parallel(); fixed_time_systems1 @@ -42,13 +46,15 @@ impl Plugin for ModPlugin { } } +const Z_HEIGHT: f32 = 10.; + #[derive(Component)] struct SnakeSegment; #[derive(Component)] struct SnakeHead; -#[derive(Component)] +#[derive(Component, Copy, Clone)] enum Direction { Up, Down, @@ -92,7 +98,7 @@ fn create_snake_segment(commands: &mut Commands, grid_position: grid::Coordinate custom_size: Some(Vec2::splat(grid::SEGMENT_SIZE) * 0.9), ..Default::default() }, - transform: grid_position.into(), + transform: Transform::from_translation(Vec2::from(grid_position).extend(Z_HEIGHT)), ..Default::default() }) .insert(SnakeSegment) @@ -139,7 +145,13 @@ fn add_tail_system( 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); + + commands + .entity(segment) + .insert(Name::new(format!("Segment {}", segment_number))); commands.entity(snake).add_child(segment); } } @@ -167,19 +179,14 @@ fn grid_transform_system( mut query: Query<(&mut Transform, &grid::Coordinate), With>, ) { for (mut transform, grid_coordinate) in query.iter_mut() { - *transform = grid_coordinate.into(); + *transform = Transform::from_translation(Vec2::from(grid_coordinate).extend(Z_HEIGHT)); } } fn head_movement_system(mut query: Query<(&mut grid::Coordinate, &Direction), With>) { - let (mut grid_coordinate, direction) = query.single_mut(); + let (mut grid_coordinate, &direction) = query.single_mut(); - match direction { - Direction::Up => *grid_coordinate += grid::Coordinate(0, 1), - Direction::Down => *grid_coordinate += grid::Coordinate(0, -1), - Direction::Left => *grid_coordinate += grid::Coordinate(-1, 0), - Direction::Right => *grid_coordinate += grid::Coordinate(1, 0), - }; + *grid_coordinate = next_grid_coordinate(*grid_coordinate, direction); } fn segments_movement_system( @@ -197,18 +204,34 @@ fn segments_movement_system( } } -fn about_to_lose(query: Query<(&grid::Coordinate, &Direction), With>) -> bool { - const HIGH_BARRIER: grid::Index = grid::SIZE - 1; +fn about_to_lose( + head_query: Query<(&grid::Coordinate, &Direction), With>, + segment_query: Query<&grid::Coordinate, (With, Without)>, +) -> bool { + let (&head_coordinate, &head_direction) = head_query.single(); + let next_head_coordinate = next_grid_coordinate(head_coordinate, head_direction); - matches!( - query.single(), - (grid::Coordinate(_, 0), Direction::Down) - | (grid::Coordinate(_, HIGH_BARRIER), Direction::Up) - | (grid::Coordinate(0, _), Direction::Left) - | (grid::Coordinate(HIGH_BARRIER, _), Direction::Right) - ) + let hit_border = !next_head_coordinate.in_bounds(); + + let hit_snake = !segment_query + .iter() + .all(|&coordinate| coordinate != next_head_coordinate); + + hit_border || hit_snake } fn game_over_system(mut commands: Commands) { 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), + } +}