From 09125bcd2ff1e0c97eab901dd4f27e7c21e4abe7 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Fri, 17 Mar 2023 17:54:51 +0100 Subject: [PATCH] Add score indicator --- Cargo.lock | 141 +++++++++++++++++------------ assets/fonts/Audiowide-Regular.ttf | Bin 0 -> 47676 bytes assets/fonts/OFL.txt | 93 +++++++++++++++++++ rust-toolchain.toml | 4 +- src/main.rs | 60 ++++-------- src/ui.rs | 14 +++ src/ui/score.rs | 45 +++++++++ 7 files changed, 252 insertions(+), 105 deletions(-) create mode 100644 assets/fonts/Audiowide-Regular.ttf create mode 100644 assets/fonts/OFL.txt create mode 100644 src/ui.rs create mode 100644 src/ui/score.rs diff --git a/Cargo.lock b/Cargo.lock index e7844be..9c6cd82 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -35,9 +35,9 @@ dependencies = [ [[package]] name = "accesskit_macos" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc50af17818440f580a894536c4c5a95ff9e4bad59f19ee68757ca959d001813" +checksum = "58d062544d6cc36f4213323b7cb3a0d74ddff4b0d2311ab5e7596f4278bb2cc9" dependencies = [ "accesskit", "accesskit_consumer", @@ -61,9 +61,9 @@ dependencies = [ [[package]] name = "accesskit_winit" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eb880d83a5502edd311bdb3af1cf7113b250c9c2d92fbdd05342c7b9f38bf51" +checksum = "fbcb615217efc79c4bed3094c4ca76c4bc554751d1da16f3ed4ba0459b1e8f31" dependencies = [ "accesskit", "accesskit_macos", @@ -312,9 +312,9 @@ dependencies = [ [[package]] name = "bevy-inspector-egui" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69bffd8614a60f187983e9f805bba13c298294f4666172ae7ab9c39ad61919fa" +checksum = "94f7ebaedaa0083df7c3679094e25eccebbaa9c4c60c3a5e74337f6402af2291" dependencies = [ "bevy-inspector-egui-derive", "bevy_app", @@ -588,9 +588,9 @@ dependencies = [ [[package]] name = "bevy_egui" -version = "0.20.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf0efb32c83ae6d2cc36bda08a029d74fdeb45870489599d3779a36649802bce" +checksum = "1ae1391dc1820f8bb3f8f489f2348cfa5f5bd0970a4c6bcb0c1a011f65ae1b4d" dependencies = [ "arboard", "bevy", @@ -1436,9 +1436,9 @@ dependencies = [ [[package]] name = "cpal" -version = "0.15.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34fa7b20adf588f73f094cd9b1d944977c686e37a2759ea217ab174f017e10a" +checksum = "f1241019dec4a73f874bdf6fe3467a8478b47cecaf79435f7acb01f107ab41b1" dependencies = [ "alsa", "core-foundation-sys 0.8.3", @@ -1447,13 +1447,12 @@ dependencies = [ "jni 0.19.0", "js-sys", "libc", - "mach", + "mach2", "ndk", "ndk-context", "oboe", "once_cell", "parking_lot", - "thiserror", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -1579,9 +1578,9 @@ dependencies = [ [[package]] name = "egui_dock" -version = "0.4.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f86bdfe987f753ffcdf896932f09babfc63580b21e1899c304166f0befc85c8" +checksum = "be7e6eb63cb936413bd2a4f54be4a9ef53a48252f25864f5f946d4954d7332bd" dependencies = [ "egui", ] @@ -2168,6 +2167,22 @@ dependencies = [ "walkdir", ] +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + [[package]] name = "jni-sys" version = "0.3.0" @@ -2343,6 +2358,15 @@ dependencies = [ "libc", ] +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + [[package]] name = "malloc_buf" version = "0.0.6" @@ -2646,9 +2670,9 @@ checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" [[package]] name = "objc2" -version = "0.3.0-beta.3" +version = "0.3.0-beta.3.patch-leaks.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649" +checksum = "e7d9bb2ee6b71d02b1b3554ed600d267ee9a2796acc9fa43fb7748e13fe072dd" dependencies = [ "block2", "objc-sys", @@ -2889,9 +2913,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -2904,9 +2928,9 @@ checksum = "74605f360ce573babfe43964cbe520294dcb081afbf8c108fc6e23036b4da2df" [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -2976,9 +3000,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb02a9aee8e8c7ad8d86890f1e16b49e0bbbffc9961ff3788c31d57c98bcbf03" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ "bitflags", ] @@ -3104,18 +3128,18 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "serde" -version = "1.0.155" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.155" +version = "1.0.156" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d" dependencies = [ "proc-macro2", "quote", @@ -3249,9 +3273,9 @@ dependencies = [ [[package]] name = "taffy" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ee314c07429e51c4770287734f62d23bb27cb9e941823f969b57f50171079ee" +checksum = "95c7042a25e07815a16fcf3586602b52b1bc9358165a53ab4dd580b26188b384" dependencies = [ "arrayvec", "num-traits", @@ -3331,9 +3355,9 @@ checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622" [[package]] name = "toml_edit" -version = "0.19.5" +version = "0.19.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7082a95d48029677a28f181e5f6422d0c8339ad8396a39d3f33d62a90c1f6c30" +checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274" dependencies = [ "indexmap", "toml_datetime", @@ -3431,9 +3455,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "7d502c968c6a838ead8e69b2ee18ec708802f99db92a0d156705ec9ef801993b" [[package]] name = "unicode-ident" @@ -3515,12 +3539,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -3680,13 +3703,13 @@ dependencies = [ [[package]] name = "webbrowser" -version = "0.8.7" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d1fa1e5c829b2bf9eb1e28fb950248b797cd6a04866fbdfa8bc31e5eef4c78" +checksum = "579cc485bd5ce5bfa0d738e4921dd0b956eca9800be1fd2e5257ebe95bc4617e" dependencies = [ "core-foundation", "dirs", - "jni 0.20.0", + "jni 0.21.1", "log", "ndk-context", "objc", @@ -3921,9 +3944,9 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", "windows_aarch64_msvc", @@ -3936,51 +3959,51 @@ dependencies = [ [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winit" -version = "0.28.2" +version = "0.28.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d38e7dc904dda347b54dbec3b2d4bf534794f4fb4e6df0be91a264f4f2ed1cf" +checksum = "4f504e8c117b9015f618774f8d58cd4781f5a479bc41079c064f974cbb253874" dependencies = [ "android-activity", "bitflags", @@ -3998,7 +4021,7 @@ dependencies = [ "orbclient", "percent-encoding", "raw-window-handle", - "redox_syscall 0.3.4", + "redox_syscall 0.3.5", "smithay-client-toolkit", "wasm-bindgen", "wayland-client", @@ -4012,9 +4035,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f" +checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966" dependencies = [ "memchr", ] diff --git a/assets/fonts/Audiowide-Regular.ttf b/assets/fonts/Audiowide-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..348817d576f0f63d464e63aca4d2094ae2f08705 GIT binary patch literal 47676 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/OFL.txt b/assets/fonts/OFL.txt new file mode 100644 index 0000000..d679942 --- /dev/null +++ b/assets/fonts/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2012, Brian J. Bonislawsky DBA Astigmatic (AOETI) (astigma@astigmatic.com), with Reserved Font Names "Audiowide" + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 8001328..5d56faf 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,2 +1,2 @@ -# [toolchain] -# channel = "nightly" +[toolchain] +channel = "nightly" diff --git a/src/main.rs b/src/main.rs index 6199757..6b67c40 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,7 @@ use crate::{ fruit::FruitPlugin, grid::{SEGMENT_SIZE, SIZE}, snake::SnakePlugin, + ui::UiPlugin, }; use bevy::{prelude::*, render::camera::ScalingMode, window::WindowResolution}; use bevy_tweening::TweeningPlugin; @@ -15,6 +16,7 @@ mod canvas; mod fruit; mod grid; mod snake; +mod ui; const ASPECT_RATIO: f32 = 16. / 9.; const WINDOW_WIDTH: f32 = WINDOW_HEIGHT * ASPECT_RATIO; @@ -27,15 +29,18 @@ enum GameState { #[default] Begin, InGame, - Paused, End, } +#[derive(Resource)] +struct Score(u32); + fn main() { let mut app = App::new(); app.insert_resource(ClearColor(CLEAR_COLOR)) .insert_resource(FixedTime::new(TICK_PERIOD)) + .insert_resource(Score(0)) .add_plugins(DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { title: "Bevy-Snake".into(), @@ -50,8 +55,9 @@ fn main() { .add_plugin(SnakePlugin) .add_plugin(FruitPlugin) .add_plugin(CanvasPlugin) + .add_plugin(UiPlugin) .add_startup_system(setup_system) - .add_system(camera_move_system); + .add_system(update_score_system); #[cfg(debug_assertions)] { @@ -84,50 +90,16 @@ fn setup_system(mut commands: Commands) { .insert(Name::new("Orthographic Camera")); } -fn camera_move_system( - keypress: Res>, - mut query: Query<&mut Transform, With>, -) { - if !keypress.pressed(KeyCode::LControl) { - return; - } - - let delta = { - let mut delta = Vec3::ZERO; - - if keypress.pressed(KeyCode::Up) { - delta += Vec3::new(0., 10., 0.); - } - if keypress.pressed(KeyCode::Down) { - delta += Vec3::new(0., -10., 0.); - } - if keypress.pressed(KeyCode::Left) { - delta += Vec3::new(-10., 0., 0.); - } - if keypress.pressed(KeyCode::Right) { - delta += Vec3::new(10., 0., 0.); - } - - delta - }; - - query.for_each_mut(|mut transform| { - transform.translation += delta * 0.1; - }); +fn update_score_system(mut score: ResMut, mut eaten_event: EventReader) { + score.0 += eaten_event.iter().count() as u32; } -fn pause_system( - keypress: Res>, - current_state: Res>, - mut next_state: ResMut>, -) { +fn pause_system(keypress: Res>, mut time: ResMut