From 2a3c59ad3359c7908db644bb770bce07f6771aa9 Mon Sep 17 00:00:00 2001 From: Llywelwyn Date: Sun, 3 Sep 2023 01:45:18 +0100 Subject: [PATCH] first steps - extreme wip 1. need to finish curses12x24 first of all 2. bind everything to the viewport, and make scalable --- Cargo.lock | 1102 +++++++-------------------------- resources/curses12x24.png | Bin 0 -> 6071 bytes resources/curses16x16.png | Bin 0 -> 21020 bytes resources/nagidal24x24.png | Bin 0 -> 36288 bytes src/camera.rs | 26 +- src/data/visuals.rs | 2 + src/gui/character_creation.rs | 2 + src/gui/farlook.rs | 2 +- src/gui/mod.rs | 562 ++++++++++++++--- src/main.rs | 26 +- src/states/state.rs | 6 + 11 files changed, 750 insertions(+), 978 deletions(-) create mode 100644 resources/curses12x24.png create mode 100644 resources/curses16x16.png create mode 100644 resources/nagidal24x24.png diff --git a/Cargo.lock b/Cargo.lock index 73868b2..00daf50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,24 +2,12 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "ab_glyph_rasterizer" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" - [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "adler32" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" - [[package]] name = "ahash" version = "0.3.8" @@ -28,32 +16,13 @@ checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217" [[package]] name = "aho-corasick" -version = "1.0.2" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" dependencies = [ "memchr", ] -[[package]] -name = "andrew" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c4afb09dd642feec8408e33f92f3ffc4052946f6b20f32fb99c1f58cd4fa7cf" -dependencies = [ - "bitflags 1.3.2", - "rusttype", - "walkdir", - "xdg", - "xml-rs", -] - -[[package]] -name = "android_glue" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "000444226fcff248f2bc4c7625be32c63caccfecc2723a2b9f78a7487a49c407" - [[package]] name = "anes" version = "0.1.6" @@ -62,15 +31,15 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstyle" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd" +checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea" [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.75" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" [[package]] name = "arrayref" @@ -104,9 +73,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" [[package]] name = "block" @@ -135,13 +104,12 @@ dependencies = [ [[package]] name = "bracket-color" -version = "0.8.2" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1d1b160817fb74eebedccd678055cd688d1a73dc1a14519fa30ff4c9a5bdee" +checksum = "7333827cf727ceb302cc4f638cc8befc87f5f1423873255d94cc0a24009e940a" dependencies = [ - "byteorder", "lazy_static", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "serde", ] @@ -155,6 +123,16 @@ dependencies = [ "serde", ] +[[package]] +name = "bracket-embedding" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cb6747f25903066109a619e3d580ef5ff7b3ffc281fa51ece473e1396e2298" +dependencies = [ + "lazy_static", + "parking_lot 0.12.1", +] + [[package]] name = "bracket-embedding" version = "0.8.7" @@ -171,7 +149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f31b525fcd65027885f3a1e3a250a5dd397d70de4a6a5a125f03e0bef951499" dependencies = [ "serde", - "ultraviolet 0.9.1", + "ultraviolet", ] [[package]] @@ -180,7 +158,7 @@ version = "0.8.7" source = "git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6#851f6f08675444fb6fa088b9e67bee9fd75554c6" dependencies = [ "serde", - "ultraviolet 0.9.1", + "ultraviolet", ] [[package]] @@ -190,12 +168,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43bbe13e39628e7f73673737c825001494dee7329cee8ee79dfeaa7cfd136dbf" dependencies = [ "bracket-algorithm-traits 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "bracket-color 0.8.2", + "bracket-color 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "bracket-geometry 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "bracket-noise 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "bracket-pathfinding 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "bracket-random 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "bracket-terminal 0.8.5", + "bracket-terminal 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -204,12 +182,12 @@ version = "0.8.7" source = "git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6#851f6f08675444fb6fa088b9e67bee9fd75554c6" dependencies = [ "bracket-algorithm-traits 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", - "bracket-color 0.8.7", + "bracket-color 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "bracket-geometry 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "bracket-noise 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "bracket-pathfinding 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "bracket-random 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", - "bracket-terminal 0.8.7", + "bracket-terminal 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", ] [[package]] @@ -237,7 +215,7 @@ checksum = "32ae7f2ebf242316ba10e84ca3b31af064b8c0c77402b2171a3104a2a77718fc" dependencies = [ "bracket-algorithm-traits 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "bracket-geometry 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-rational 0.4.1", + "num-rational", "smallvec", ] @@ -248,7 +226,7 @@ source = "git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6f dependencies = [ "bracket-algorithm-traits 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "bracket-geometry 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", - "num-rational 0.4.1", + "num-rational", "smallvec", ] @@ -283,41 +261,54 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "bracket-rex" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4735d15070b98d0f07360d62914d1524679325019cae46c7af73637a6ef196a" +dependencies = [ + "bracket-color 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bracket-embedding 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", + "byteorder", + "flate2", +] + [[package]] name = "bracket-rex" version = "0.8.7" source = "git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6#851f6f08675444fb6fa088b9e67bee9fd75554c6" dependencies = [ - "bracket-color 0.8.7", - "bracket-embedding", + "bracket-color 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", + "bracket-embedding 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "byteorder", "flate2", ] [[package]] name = "bracket-terminal" -version = "0.8.5" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "460594df0b3364cae6ce5a5de4d787b293d20df0deffed4a942c10b1e3d50b1d" +checksum = "2493063cb676e2e9e3a3a630eee032a297e43c8a1cee08c94feaad3344ed0b46" dependencies = [ "anyhow", - "bracket-color 0.8.2", + "bracket-color 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", + "bracket-embedding 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "bracket-geometry 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", - "byteorder", + "bracket-rex 0.8.7 (registry+https://github.com/rust-lang/crates.io-index)", "console_error_panic_hook", - "flate2", - "glow 0.10.0", - "glutin 0.26.0", - "image 0.23.14", + "glow", + "glutin", + "image", "lazy_static", "object-pool", - "parking_lot 0.11.2", + "parking_lot 0.12.1", "rand", - "ultraviolet 0.8.1", + "ultraviolet", "wasm-bindgen", "wasm-timer", "web-sys", - "winit 0.24.0", + "winit 0.26.1", + "winit 0.27.5", ] [[package]] @@ -326,19 +317,19 @@ version = "0.8.7" source = "git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6#851f6f08675444fb6fa088b9e67bee9fd75554c6" dependencies = [ "anyhow", - "bracket-color 0.8.7", - "bracket-embedding", + "bracket-color 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", + "bracket-embedding 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "bracket-geometry 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", - "bracket-rex", + "bracket-rex 0.8.7 (git+https://github.com/amethyst/bracket-lib.git?rev=851f6f08675444fb6fa088b9e67bee9fd75554c6)", "console_error_panic_hook", - "glow 0.11.2", - "glutin 0.29.1", - "image 0.24.6", + "glow", + "glutin", + "image", "lazy_static", "object-pool", "parking_lot 0.12.1", "rand", - "ultraviolet 0.9.1", + "ultraviolet", "wasm-bindgen", "wasm-timer", "web-sys", @@ -364,16 +355,6 @@ version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" -[[package]] -name = "calloop" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b036167e76041694579972c28cf4877b4f92da222560ddb49008937b6a6727c" -dependencies = [ - "log", - "nix 0.18.0", -] - [[package]] name = "calloop" version = "0.9.3" @@ -406,9 +387,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] [[package]] name = "cfg-if" @@ -460,18 +444,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.3.11" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1640e5cc7fb47dbb8338fd471b105e7ed6c3cb2aeb00c2e067127ffd3764a05d" +checksum = "6a13b88d2c62ff462f88e4a121f17a82c1af05693a2f192b5c38d14de73c19f6" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.3.11" +version = "4.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c59138d527eeaf9b53f35a77fcc1fad9d883116070c63d5de1c7dc7b00c72b" +checksum = "2bb9faaa7c2ef94b2743a21f5a29e6f0010dff4caa69ac8e9d6cf8b6fa74da08" dependencies = [ "anstyle", "clap_lex", @@ -479,9 +463,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" +checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961" [[package]] name = "cmake" @@ -492,22 +476,6 @@ dependencies = [ "cc", ] -[[package]] -name = "cocoa" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c54201c07dcf3a5ca33fececb8042aed767ee4bfd5a0235a8ceabcda956044b2" -dependencies = [ - "bitflags 1.3.2", - "block", - "cocoa-foundation", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "foreign-types 0.3.2", - "libc", - "objc", -] - [[package]] name = "cocoa" version = "0.24.1" @@ -764,7 +732,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21fd3add36ea31aba1520aa5288714dd63be506106753226d0eb387a93bc9c45" dependencies = [ - "cocoa 0.24.1", + "cocoa", "core-foundation 0.9.3", "core-foundation-sys 0.8.4", "core-graphics 0.22.3", @@ -778,7 +746,7 @@ dependencies = [ "once_cell", "pkg-config", "servo-fontconfig", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -787,38 +755,14 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" -[[package]] -name = "darling" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858" -dependencies = [ - "darling_core 0.10.2", - "darling_macro 0.10.2", -] - [[package]] name = "darling" version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", -] - -[[package]] -name = "darling_core" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.9.3", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -831,18 +775,7 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.10.0", - "syn 1.0.109", -] - -[[package]] -name = "darling_macro" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72" -dependencies = [ - "darling_core 0.10.2", - "quote", + "strsim", "syn 1.0.109", ] @@ -852,28 +785,7 @@ version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" dependencies = [ - "darling_core 0.13.4", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "deflate" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" -dependencies = [ - "adler32", - "byteorder", -] - -[[package]] -name = "derivative" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" -dependencies = [ - "proc-macro2", + "darling_core", "quote", "syn 1.0.109", ] @@ -884,15 +796,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "dlib" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b11f15d1e3268f140f68d390637d5e76d849782d971ae7063e0da69fe9709a76" -dependencies = [ - "libloading 0.6.7", -] - [[package]] name = "dlib" version = "0.5.2" @@ -918,27 +821,27 @@ dependencies = [ "libc", "serde", "serde_derive", - "winapi 0.3.9", + "winapi", "wio", ] [[package]] name = "either" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" [[package]] name = "equivalent" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.1" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" dependencies = [ "errno-dragonfly", "libc", @@ -976,12 +879,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.26" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" dependencies = [ "crc32fast", - "miniz_oxide 0.7.1", + "miniz_oxide", ] [[package]] @@ -1017,7 +920,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.29", ] [[package]] @@ -1054,22 +957,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -dependencies = [ - "bitflags 1.3.2", - "fuchsia-zircon-sys", -] - -[[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" - [[package]] name = "futures" version = "0.1.31" @@ -1098,18 +985,6 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "glow" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "945be163fdb893227410c8b44c2412dade922585b262d1daa6a7e96135217d4c" -dependencies = [ - "js-sys", - "slotmap", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "glow" version = "0.11.2" @@ -1122,33 +997,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "glutin" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ae1cbb9176b9151c4ce03f012e3cd1c6c18c4be79edeaeb3d99f5d8085c5fa3" -dependencies = [ - "android_glue", - "cgl", - "cocoa 0.23.0", - "core-foundation 0.9.3", - "glutin_egl_sys", - "glutin_emscripten_sys", - "glutin_gles2_sys", - "glutin_glx_sys", - "glutin_wgl_sys", - "lazy_static", - "libloading 0.6.7", - "log", - "objc", - "osmesa-sys", - "parking_lot 0.11.2", - "wayland-client 0.28.6", - "wayland-egl 0.28.6", - "winapi 0.3.9", - "winit 0.24.0", -] - [[package]] name = "glutin" version = "0.29.1" @@ -1156,7 +1004,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "444c9ad294fdcaf20ccf6726b78f380b5450275540c9b68ab62f49726ad1c713" dependencies = [ "cgl", - "cocoa 0.24.1", + "cocoa", "core-foundation 0.9.3", "glutin_egl_sys", "glutin_gles2_sys", @@ -1169,9 +1017,9 @@ dependencies = [ "osmesa-sys", "parking_lot 0.12.1", "raw-window-handle 0.5.2", - "wayland-client 0.29.5", - "wayland-egl 0.29.5", - "winapi 0.3.9", + "wayland-client", + "wayland-egl", + "winapi", "winit 0.27.5", ] @@ -1182,15 +1030,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68900f84b471f31ea1d1355567eb865a2cf446294f06cef8d653ed7bcf5f013d" dependencies = [ "gl_generator", - "winapi 0.3.9", + "winapi", ] -[[package]] -name = "glutin_emscripten_sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80de4146df76e8a6c32b03007bc764ff3249dcaeb4f675d68a06caf1bac363f1" - [[package]] name = "glutin_gles2_sys" version = "0.1.5" @@ -1258,15 +1100,6 @@ dependencies = [ "rayon", ] -[[package]] -name = "home" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" -dependencies = [ - "windows-sys 0.48.0", -] - [[package]] name = "ident_case" version = "1.0.1" @@ -1275,33 +1108,17 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "image" -version = "0.23.14" +version = "0.24.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" dependencies = [ "bytemuck", "byteorder", "color_quant", - "jpeg-decoder 0.1.22", - "num-iter", - "num-rational 0.3.2", + "jpeg-decoder", + "num-rational", "num-traits", - "png 0.16.8", -] - -[[package]] -name = "image" -version = "0.24.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "jpeg-decoder 0.3.0", - "num-rational 0.4.1", - "num-traits", - "png 0.17.9", + "png", ] [[package]] @@ -1326,15 +1143,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "iovec" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -dependencies = [ - "libc", -] - [[package]] name = "is-terminal" version = "0.4.9" @@ -1357,9 +1165,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" [[package]] name = "jni-sys" @@ -1367,12 +1175,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jpeg-decoder" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" - [[package]] name = "jpeg-decoder" version = "0.3.0" @@ -1388,16 +1190,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -dependencies = [ - "winapi 0.2.8", - "winapi-build", -] - [[package]] name = "khronos_api" version = "3.1.0" @@ -1410,28 +1202,12 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -[[package]] -name = "lazycell" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" - [[package]] name = "libc" version = "0.2.147" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" -[[package]] -name = "libloading" -version = "0.6.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "351a32417a12d5f7e82c368a66781e307834dae04c6ce0cd4456d52989229883" -dependencies = [ - "cfg-if 1.0.0", - "winapi 0.3.9", -] - [[package]] name = "libloading" version = "0.7.4" @@ -1439,7 +1215,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if 1.0.0", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -1454,9 +1230,9 @@ dependencies = [ [[package]] name = "linux-raw-sys" -version = "0.4.3" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0" +checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503" [[package]] name = "lock_api" @@ -1470,9 +1246,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.19" +version = "0.4.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "malloc_buf" @@ -1491,18 +1267,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.5.0" +version = "2.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" - -[[package]] -name = "memmap2" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b70ca2a6103ac8b665dc150b142ef0e4e89df640c9e6cf295d189c3caebe5a" -dependencies = [ - "libc", -] +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" [[package]] name = "memmap2" @@ -1546,15 +1313,6 @@ 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.7.1" @@ -1565,25 +1323,6 @@ dependencies = [ "simd-adler32", ] -[[package]] -name = "mio" -version = "0.6.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" -dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow", - "net2", - "slab", - "winapi 0.2.8", -] - [[package]] name = "mio" version = "0.8.8" @@ -1596,48 +1335,12 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "mio-extras" -version = "2.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19" -dependencies = [ - "lazycell", - "log", - "mio 0.6.23", - "slab", -] - -[[package]] -name = "miow" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" -dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", -] - [[package]] name = "mopa" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915" -[[package]] -name = "ndk" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb167c1febed0a496639034d0c76b3b74263636045db5489eee52143c246e73" -dependencies = [ - "jni-sys", - "ndk-sys 0.2.2", - "num_enum 0.4.3", - "thiserror", -] - [[package]] name = "ndk" version = "0.5.0" @@ -1647,7 +1350,7 @@ dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys 0.2.2", - "num_enum 0.5.11", + "num_enum", "thiserror", ] @@ -1660,7 +1363,7 @@ dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys 0.4.1+23.1.7779620", - "num_enum 0.5.11", + "num_enum", "raw-window-handle 0.5.2", "thiserror", ] @@ -1671,20 +1374,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" -[[package]] -name = "ndk-glue" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdf399b8b7a39c6fb153c4ec32c72fd5fe789df24a647f229c239aa7adb15241" -dependencies = [ - "lazy_static", - "libc", - "log", - "ndk 0.2.1", - "ndk-macro 0.2.0", - "ndk-sys 0.2.2", -] - [[package]] name = "ndk-glue" version = "0.5.2" @@ -1696,7 +1385,7 @@ dependencies = [ "log", "ndk 0.5.0", "ndk-context", - "ndk-macro 0.3.0", + "ndk-macro", "ndk-sys 0.2.2", ] @@ -1710,33 +1399,20 @@ dependencies = [ "log", "ndk 0.7.0", "ndk-context", - "ndk-macro 0.3.0", + "ndk-macro", "ndk-sys 0.4.1+23.1.7779620", "once_cell", "parking_lot 0.12.1", ] -[[package]] -name = "ndk-macro" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d1c6307dc424d0f65b9b06e94f88248e6305726b14729fd67a5e47b2dc481d" -dependencies = [ - "darling 0.10.2", - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "ndk-macro" version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" dependencies = [ - "darling 0.13.4", - "proc-macro-crate 1.3.1", + "darling", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", @@ -1757,41 +1433,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "net2" -version = "0.2.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac" -dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", -] - -[[package]] -name = "nix" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83450fe6a6142ddd95fb064b746083fc4ef1705fe81f64a64e1d4b39f54a1055" -dependencies = [ - "bitflags 1.3.2", - "cc", - "cfg-if 0.1.10", - "libc", -] - -[[package]] -name = "nix" -version = "0.20.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" -dependencies = [ - "bitflags 1.3.2", - "cc", - "cfg-if 1.0.0", - "libc", -] - [[package]] name = "nix" version = "0.22.3" @@ -1850,28 +1491,6 @@ 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" @@ -1885,9 +1504,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" dependencies = [ "autocfg", ] @@ -1902,35 +1521,13 @@ dependencies = [ "libc", ] -[[package]] -name = "num_enum" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca565a7df06f3d4b485494f25ba05da1435950f4dc263440eda7a6fa9b8e36e4" -dependencies = [ - "derivative", - "num_enum_derive 0.4.3", -] - [[package]] name = "num_enum" version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive 0.5.11", -] - -[[package]] -name = "num_enum_derive" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffa5a33ddddfee04c0283a7653987d634e880347e96b5b2ed64de07efb59db9d" -dependencies = [ - "proc-macro-crate 0.1.5", - "proc-macro2", - "quote", - "syn 1.0.109", + "num_enum_derive", ] [[package]] @@ -1939,7 +1536,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", @@ -1984,15 +1581,6 @@ dependencies = [ "shared_library", ] -[[package]] -name = "owned_ttf_parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05e6affeb1632d6ff6a23d2cd40ffed138e82f1532571a26f527c8a284bb2fbb" -dependencies = [ - "ttf-parser", -] - [[package]] name = "parking_lot" version = "0.11.2" @@ -2025,7 +1613,7 @@ dependencies = [ "libc", "redox_syscall 0.2.16", "smallvec", - "winapi 0.3.9", + "winapi", ] [[package]] @@ -2083,36 +1671,15 @@ dependencies = [ [[package]] name = "png" -version = "0.16.8" +version = "0.17.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" -dependencies = [ - "bitflags 1.3.2", - "crc32fast", - "deflate", - "miniz_oxide 0.3.7", -] - -[[package]] -name = "png" -version = "0.17.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.1", -] - -[[package]] -name = "proc-macro-crate" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785" -dependencies = [ - "toml", + "miniz_oxide", ] [[package]] @@ -2127,18 +1694,18 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.63" +version = "1.0.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.29" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" dependencies = [ "proc-macro2", ] @@ -2168,16 +1735,6 @@ dependencies = [ "serde", ] -[[package]] -name = "raw-window-handle" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76" -dependencies = [ - "libc", - "raw-window-handle 0.4.3", -] - [[package]] name = "raw-window-handle" version = "0.4.3" @@ -2235,9 +1792,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.9.0" +version = "1.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89089e897c013b3deb627116ae56a6955a72b8bed395c9526af31c9fe528b484" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" dependencies = [ "aho-corasick", "memchr", @@ -2247,9 +1804,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.3.0" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa250384981ea14565685dea16a9ccc4d1c541a13f82b9c168572264d1df8c56" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" dependencies = [ "aho-corasick", "memchr", @@ -2258,9 +1815,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.7.3" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab07dc67230e4a4718e70fd5c20055a4334b121f1f9db8fe63ef39ce9b8c846" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "rltk" @@ -2289,32 +1846,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.3" +version = "0.38.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4" +checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453" dependencies = [ - "bitflags 2.3.3", + "bitflags 2.4.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.48.0", ] -[[package]] -name = "rusttype" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ff8374aa04134254b7995b63ad3dc41c7f7236f69528b28553da7d72efaa967" -dependencies = [ - "ab_glyph_rasterizer", - "owned_ttf_parser", -] - [[package]] name = "ryu" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" [[package]] name = "safe_arch" @@ -2327,9 +1874,9 @@ dependencies = [ [[package]] name = "safe_arch" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62a7484307bd40f8f7ccbacccac730108f2cae119a3b11c74485b48aa9ea650f" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" dependencies = [ "bytemuck", ] @@ -2351,9 +1898,9 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sctk-adwaita" @@ -2375,29 +1922,29 @@ checksum = "a0eddf2e8f50ced781f288c19f18621fa72a3779e3cb58dbf23b07469b0abeb4" [[package]] name = "serde" -version = "1.0.166" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01b7404f9d441d3ad40e6a636a7782c377d2abdbe4fa2440e2edcc2f4f10db8" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.166" +version = "1.0.188" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dd83d6dde2b6b2d466e14d9d1acce8816dedee94f735eac6395808b3483c6d6" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.29", ] [[package]] name = "serde_json" -version = "1.0.100" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c" +checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360" dependencies = [ "itoa", "ryu", @@ -2457,15 +2004,15 @@ checksum = "a5ea33232fdcf1bf691ca33450e5a94dde13e1a8cbb8caabc5e4f9d761e10b1a" [[package]] name = "simd-adler32" -version = "0.3.5" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -2485,25 +2032,6 @@ version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" -[[package]] -name = "smithay-client-toolkit" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4750c76fd5d3ac95fa3ed80fe667d6a3d8590a960e5b575b98eea93339a80b80" -dependencies = [ - "andrew", - "bitflags 1.3.2", - "calloop 0.6.5", - "dlib 0.4.2", - "lazy_static", - "log", - "memmap2 0.1.0", - "nix 0.18.0", - "wayland-client 0.28.6", - "wayland-cursor 0.28.6", - "wayland-protocols 0.28.6", -] - [[package]] name = "smithay-client-toolkit" version = "0.15.4" @@ -2512,15 +2040,15 @@ checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3" dependencies = [ "bitflags 1.3.2", "calloop 0.9.3", - "dlib 0.5.2", + "dlib", "lazy_static", "log", "memmap2 0.3.1", "nix 0.22.3", "pkg-config", - "wayland-client 0.29.5", - "wayland-cursor 0.29.5", - "wayland-protocols 0.29.5", + "wayland-client", + "wayland-cursor", + "wayland-protocols", ] [[package]] @@ -2531,15 +2059,15 @@ checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454" dependencies = [ "bitflags 1.3.2", "calloop 0.10.6", - "dlib 0.5.2", + "dlib", "lazy_static", "log", "memmap2 0.5.10", "nix 0.24.3", "pkg-config", - "wayland-client 0.29.5", - "wayland-cursor 0.29.5", - "wayland-protocols 0.29.5", + "wayland-client", + "wayland-cursor", + "wayland-protocols", ] [[package]] @@ -2570,12 +2098,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "strsim" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" - [[package]] name = "strsim" version = "0.10.0" @@ -2595,9 +2117,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.23" +version = "2.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a" dependencies = [ "proc-macro2", "quote", @@ -2606,22 +2128,22 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.41" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c16a64ba9387ef3fdae4f9c1a7f07a0997fce91985c0336f1ddc1822b3b37802" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.41" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d14928354b01c4d6a4f0e549069adef399a284e7995c7ccca94e8a07a5346c59" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.29", ] [[package]] @@ -2634,7 +2156,7 @@ dependencies = [ "arrayvec", "bytemuck", "cfg-if 1.0.0", - "png 0.17.9", + "png", "safe_arch 0.5.2", "tiny-skia-path", ] @@ -2698,21 +2220,15 @@ checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" [[package]] name = "toml_edit" -version = "0.19.12" +version = "0.19.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c500344a19072298cd05a7224b3c0c629348b78692bf48466c5238656e315a78" +checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a" dependencies = [ "indexmap", "toml_datetime", "winnow", ] -[[package]] -name = "ttf-parser" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" - [[package]] name = "tuple_utils" version = "0.3.0" @@ -2728,29 +2244,20 @@ dependencies = [ "nom", ] -[[package]] -name = "ultraviolet" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b9e3507eba17043af05c8a72fce3ec2c24b58945f45732e71dbc6646d904a7" -dependencies = [ - "wide 0.6.5", -] - [[package]] name = "ultraviolet" version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca0b28b9a6ce66d47e3c5666aa738c5ec5223fcdd4c263f3edc98ab6fef618b3" dependencies = [ - "wide 0.7.10", + "wide", ] [[package]] name = "unicode-ident" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" [[package]] name = "vec_map" @@ -2801,7 +2308,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.29", "wasm-bindgen-shared", ] @@ -2823,7 +2330,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.23", + "syn 2.0.29", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -2848,22 +2355,6 @@ dependencies = [ "web-sys", ] -[[package]] -name = "wayland-client" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3ab332350e502f159382201394a78e3cc12d0f04db863429260164ea40e0355" -dependencies = [ - "bitflags 1.3.2", - "downcast-rs", - "libc", - "nix 0.20.0", - "scoped-tls", - "wayland-commons 0.28.6", - "wayland-scanner 0.28.6", - "wayland-sys 0.28.6", -] - [[package]] name = "wayland-client" version = "0.29.5" @@ -2875,21 +2366,9 @@ dependencies = [ "libc", "nix 0.24.3", "scoped-tls", - "wayland-commons 0.29.5", - "wayland-scanner 0.29.5", - "wayland-sys 0.29.5", -] - -[[package]] -name = "wayland-commons" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21817947c7011bbd0a27e11b17b337bfd022e8544b071a2641232047966fbda" -dependencies = [ - "nix 0.20.0", - "once_cell", - "smallvec", - "wayland-sys 0.28.6", + "wayland-commons", + "wayland-scanner", + "wayland-sys", ] [[package]] @@ -2901,18 +2380,7 @@ dependencies = [ "nix 0.24.3", "once_cell", "smallvec", - "wayland-sys 0.29.5", -] - -[[package]] -name = "wayland-cursor" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be610084edd1586d45e7bdd275fe345c7c1873598caa464c4fb835dee70fa65a" -dependencies = [ - "nix 0.20.0", - "wayland-client 0.28.6", - "xcursor", + "wayland-sys", ] [[package]] @@ -2922,40 +2390,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661" dependencies = [ "nix 0.24.3", - "wayland-client 0.29.5", + "wayland-client", "xcursor", ] -[[package]] -name = "wayland-egl" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ba1ab1e18756b23982d36f08856d521d7df45015f404a2d7c4f0b2d2f66956" -dependencies = [ - "wayland-client 0.28.6", - "wayland-sys 0.28.6", -] - [[package]] name = "wayland-egl" version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "402de949f81a012926d821a2d659f930694257e76dd92b6e0042ceb27be4107d" dependencies = [ - "wayland-client 0.29.5", - "wayland-sys 0.29.5", -] - -[[package]] -name = "wayland-protocols" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "286620ea4d803bacf61fa087a4242ee316693099ee5a140796aaba02b29f861f" -dependencies = [ - "bitflags 1.3.2", - "wayland-client 0.28.6", - "wayland-commons 0.28.6", - "wayland-scanner 0.28.6", + "wayland-client", + "wayland-sys", ] [[package]] @@ -2965,20 +2411,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6" dependencies = [ "bitflags 1.3.2", - "wayland-client 0.29.5", - "wayland-commons 0.29.5", - "wayland-scanner 0.29.5", -] - -[[package]] -name = "wayland-scanner" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce923eb2deb61de332d1f356ec7b6bf37094dc5573952e1c8936db03b54c03f1" -dependencies = [ - "proc-macro2", - "quote", - "xml-rs", + "wayland-client", + "wayland-commons", + "wayland-scanner", ] [[package]] @@ -2992,24 +2427,13 @@ dependencies = [ "xml-rs", ] -[[package]] -name = "wayland-sys" -version = "0.28.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d841fca9aed7febf9bed2e9796c49bf58d4152ceda8ac949ebe00868d8f0feb8" -dependencies = [ - "dlib 0.5.2", - "lazy_static", - "pkg-config", -] - [[package]] name = "wayland-sys" version = "0.29.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4" dependencies = [ - "dlib 0.5.2", + "dlib", "lazy_static", "pkg-config", ] @@ -3026,30 +2450,14 @@ dependencies = [ [[package]] name = "wide" -version = "0.6.5" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46bbe7c604a27ca0b05c5503221e76da628225b568e6f1280b42dbad3b72d89b" +checksum = "aa469ffa65ef7e0ba0f164183697b89b854253fd31aeb92358b7b6155177d62f" dependencies = [ "bytemuck", - "safe_arch 0.5.2", + "safe_arch 0.7.1", ] -[[package]] -name = "wide" -version = "0.7.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40018623e2dba2602a9790faba8d33f2ebdebf4b86561b83928db735f8784728" -dependencies = [ - "bytemuck", - "safe_arch 0.7.0", -] - -[[package]] -name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" - [[package]] name = "winapi" version = "0.3.9" @@ -3060,12 +2468,6 @@ dependencies = [ "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" @@ -3078,7 +2480,7 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" dependencies = [ - "winapi 0.3.9", + "winapi", ] [[package]] @@ -3111,24 +2513,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.48.1" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.48.0", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_msvc" @@ -3138,9 +2540,9 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_i686_gnu" @@ -3150,9 +2552,9 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_msvc" @@ -3162,9 +2564,9 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_x86_64_gnu" @@ -3174,15 +2576,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_msvc" @@ -3192,42 +2594,9 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" - -[[package]] -name = "winit" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4eda6fce0eb84bd0a33e3c8794eb902e1033d0a1d5a31bc4f19b1b4bbff597" -dependencies = [ - "bitflags 1.3.2", - "cocoa 0.24.1", - "core-foundation 0.9.3", - "core-graphics 0.22.3", - "core-video-sys", - "dispatch", - "instant", - "lazy_static", - "libc", - "log", - "mio 0.6.23", - "mio-extras", - "ndk 0.2.1", - "ndk-glue 0.2.1", - "ndk-sys 0.2.2", - "objc", - "parking_lot 0.11.2", - "percent-encoding", - "raw-window-handle 0.3.4", - "smithay-client-toolkit 0.12.3", - "wasm-bindgen", - "wayland-client 0.28.6", - "web-sys", - "winapi 0.3.9", - "x11-dl", -] +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "winit" @@ -3236,7 +2605,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" dependencies = [ "bitflags 1.3.2", - "cocoa 0.24.1", + "cocoa", "core-foundation 0.9.3", "core-graphics 0.22.3", "core-video-sys", @@ -3245,7 +2614,7 @@ dependencies = [ "lazy_static", "libc", "log", - "mio 0.8.8", + "mio", "ndk 0.5.0", "ndk-glue 0.5.2", "ndk-sys 0.2.2", @@ -3255,10 +2624,10 @@ dependencies = [ "raw-window-handle 0.4.3", "smithay-client-toolkit 0.15.4", "wasm-bindgen", - "wayland-client 0.29.5", - "wayland-protocols 0.29.5", + "wayland-client", + "wayland-protocols", "web-sys", - "winapi 0.3.9", + "winapi", "x11-dl", ] @@ -3269,14 +2638,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c" dependencies = [ "bitflags 1.3.2", - "cocoa 0.24.1", + "cocoa", "core-foundation 0.9.3", "core-graphics 0.22.3", "dispatch", "instant", "libc", "log", - "mio 0.8.8", + "mio", "ndk 0.7.0", "ndk-glue 0.7.0", "objc", @@ -3288,8 +2657,8 @@ dependencies = [ "sctk-adwaita", "smithay-client-toolkit 0.16.0", "wasm-bindgen", - "wayland-client 0.29.5", - "wayland-protocols 0.29.5", + "wayland-client", + "wayland-protocols", "web-sys", "windows-sys 0.36.1", "x11-dl", @@ -3297,9 +2666,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.4.8" +version = "0.5.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9482fe6ceabdf32f3966bfdd350ba69256a97c30253dc616fe0005af24f164e" +checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc" dependencies = [ "memchr", ] @@ -3310,17 +2679,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" dependencies = [ - "winapi 0.3.9", -] - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" -dependencies = [ - "winapi 0.2.8", - "winapi-build", + "winapi", ] [[package]] @@ -3343,17 +2702,8 @@ dependencies = [ "nom", ] -[[package]] -name = "xdg" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "688597db5a750e9cad4511cb94729a078e274308099a0382b5b8203bbc767fee" -dependencies = [ - "home", -] - [[package]] name = "xml-rs" -version = "0.8.15" +version = "0.8.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a56c84a8ccd4258aed21c92f70c0f6dea75356b6892ae27c24139da456f9336" +checksum = "47430998a7b5d499ccee752b41567bc3afc57e1327dc855b1a2aa44ce29b5fa1" diff --git a/resources/curses12x24.png b/resources/curses12x24.png new file mode 100644 index 0000000000000000000000000000000000000000..af280d7bbe70e891d1b25120cfa160071cae5fa2 GIT binary patch literal 6071 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 Sc6AI43=E#GelF{r5}E++8w5)L literal 0 HcmV?d00001 diff --git a/resources/nagidal24x24.png b/resources/nagidal24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..8c7c82b4e168788e2df14633ecc7e1b33096db32 GIT binary patch literal 36288 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

^H?~T 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 literal 0 HcmV?d00001 diff --git a/src/camera.rs b/src/camera.rs index c71e12c..82fb98b 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -2,13 +2,14 @@ use super::{ Hidden, Map, Mind, Position, Prop, Renderable }; use rltk::prelude::*; use specs::prelude::*; use std::ops::Mul; +use super::data::visuals::{ VIEWPORT_W, VIEWPORT_H }; const SHOW_BOUNDARIES: bool = false; pub fn get_screen_bounds(ecs: &World, _ctx: &mut Rltk) -> (i32, i32, i32, i32, i32, i32) { let player_pos = ecs.fetch::(); let map = ecs.fetch::(); - let (x_chars, y_chars, mut x_offset, mut y_offset) = (69, 41, 1, 10); + let (x_chars, y_chars, mut x_offset, mut y_offset) = (VIEWPORT_W, VIEWPORT_H, 1, 10); let centre_x = (x_chars / 2) as i32; let centre_y = (y_chars / 2) as i32; @@ -52,7 +53,13 @@ pub fn render_camera(ecs: &World, ctx: &mut Rltk) { ctx.set(x + x_offset, y + y_offset, fg, bg, glyph); } } else if SHOW_BOUNDARIES { - ctx.set(x + x_offset, y + y_offset, RGB::named(DARKSLATEGRAY), RGB::named(BLACK), rltk::to_cp437('#')); + ctx.set( + x + x_offset, + y + y_offset, + RGB::named(DARKSLATEGRAY), + RGB::named(BLACK), + rltk::to_cp437('#') + ); } x += 1; } @@ -112,7 +119,13 @@ pub fn render_camera(ecs: &World, ctx: &mut Rltk) { } } if draw { - ctx.set(entity_offset_x + x_offset, entity_offset_y + y_offset, fg, bg, render.glyph); + ctx.set( + entity_offset_x + x_offset, + entity_offset_y + y_offset, + fg, + bg, + render.glyph + ); } } } @@ -141,7 +154,12 @@ pub fn render_debug_map(map: &Map, ctx: &mut Rltk) { if tx >= 0 && tx < map_width && ty >= 0 && ty < map_height { let idx = map.xy_idx(tx, ty); if map.revealed_tiles[idx] { - let (glyph, fg, bg) = crate::map::themes::get_tile_renderables_for_id(idx, &*map, None, None); + let (glyph, fg, bg) = crate::map::themes::get_tile_renderables_for_id( + idx, + &*map, + None, + None + ); ctx.set(x, y, fg, bg, glyph); } } else if SHOW_BOUNDARIES { diff --git a/src/data/visuals.rs b/src/data/visuals.rs index fd348ea..a46ee1c 100644 --- a/src/data/visuals.rs +++ b/src/data/visuals.rs @@ -1,5 +1,7 @@ // POST-PROCESSING pub const WITH_DARKEN_BY_DISTANCE: bool = true; // If further away tiles should get darkened, instead of a harsh transition to non-visible. +pub const VIEWPORT_W: i32 = 40; +pub const VIEWPORT_H: i32 = 30; pub const BRIGHTEN_FG_COLOUR_BY: i32 = 16; pub const GLOBAL_OFFSET_MIN_CLAMP: f32 = -0.5; diff --git a/src/gui/character_creation.rs b/src/gui/character_creation.rs index 947e4c8..c198b92 100644 --- a/src/gui/character_creation.rs +++ b/src/gui/character_creation.rs @@ -112,6 +112,7 @@ pub enum CharCreateResult { /// Handles the player character creation screen. pub fn character_creation(gs: &mut State, ctx: &mut Rltk) -> CharCreateResult { + ctx.set_active_console(1); let runstate = gs.ecs.fetch::(); let mut x = 2; @@ -245,6 +246,7 @@ pub fn character_creation(gs: &mut State, ctx: &mut Rltk) -> CharCreateResult { } } } + ctx.set_active_console(0); return CharCreateResult::NoSelection { ancestry: Ancestry::Human, class: Class::Fighter }; } diff --git a/src/gui/farlook.rs b/src/gui/farlook.rs index beea815..2c232df 100644 --- a/src/gui/farlook.rs +++ b/src/gui/farlook.rs @@ -23,7 +23,7 @@ pub fn show_farlook(gs: &mut State, ctx: &mut Rltk) -> FarlookResult { ); if let RunState::Farlook { x, y } = *runstate { - let (screen_x, screen_y) = (69, 41); + let (screen_x, screen_y) = (40, 30); let x = x.clamp(x_offset, x_offset - 1 + (screen_x as i32)); let y = y.clamp(y_offset, y_offset - 1 + (screen_y as i32)); diff --git a/src/gui/mod.rs b/src/gui/mod.rs index d80d476..0041d04 100644 --- a/src/gui/mod.rs +++ b/src/gui/mod.rs @@ -35,7 +35,14 @@ use super::{ data::ids::get_local_col, }; use crate::data::entity::CARRY_CAPACITY_PER_STRENGTH; -use crate::data::visuals::{ TARGETING_LINE_COL, TARGETING_CURSOR_COL, TARGETING_AOE_COL, TARGETING_VALID_COL }; +use crate::data::visuals::{ + TARGETING_LINE_COL, + TARGETING_CURSOR_COL, + TARGETING_AOE_COL, + TARGETING_VALID_COL, + VIEWPORT_W, + VIEWPORT_H, +}; use rltk::prelude::*; use specs::prelude::*; use std::collections::BTreeMap; @@ -96,7 +103,10 @@ pub fn draw_lerping_bar( ctx.print(sx + width, sy, "]"); } +pub const TEXT_FONT_MOD: i32 = 2; + pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { + ctx.set_active_console(1); // Render stats let pools = ecs.read_storage::(); let attributes = ecs.read_storage::(); @@ -104,12 +114,18 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { let hunger = ecs.read_storage::(); let burden = ecs.read_storage::(); let skills = ecs.read_storage::(); - for (_player, stats, attributes, hunger, skills) in (&players, &pools, &attributes, &hunger, &skills).join() { + for (_player, stats, attributes, hunger, skills) in ( + &players, + &pools, + &attributes, + &hunger, + &skills, + ).join() { // Draw hp/mana bars draw_lerping_bar( ctx, - 2, - 53, + 2 * TEXT_FONT_MOD, + 53 * TEXT_FONT_MOD, 22, stats.hit_points.current, stats.hit_points.max, @@ -118,8 +134,8 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { ); draw_lerping_bar( ctx, - 2, - 54, + 2 * TEXT_FONT_MOD, + 54 * TEXT_FONT_MOD, 22, stats.mana.current, stats.mana.max, @@ -137,66 +153,169 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { armour_ac_bonus += ac.amount; } } - let armour_class = stats.bac - attributes.dexterity.bonus / 2 - skill_ac_bonus - armour_ac_bonus; - ctx.print_color(26, 53, RGB::named(rltk::PINK), RGB::named(rltk::BLACK), "AC"); - ctx.print_color(28, 53, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), armour_class); + let armour_class = + stats.bac - attributes.dexterity.bonus / 2 - skill_ac_bonus - armour_ac_bonus; + ctx.print_color( + 26 * TEXT_FONT_MOD, + 53, + RGB::named(rltk::PINK), + RGB::named(rltk::BLACK), + "AC" + ); + ctx.print_color( + 28 * TEXT_FONT_MOD, + 53, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + armour_class + ); // Draw level ctx.print_color( - 26, + 26 * TEXT_FONT_MOD, 54, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), format!("XP{}/{}", stats.level, stats.xp) ); // Draw attributes - let x = 38; + let x = 38 * TEXT_FONT_MOD; ctx.print_color(x, 53, RGB::named(rltk::RED), RGB::named(rltk::BLACK), "STR"); - ctx.print_color(x + 3, 53, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), attributes.strength.base); + ctx.print_color( + x + 3, + 53, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + attributes.strength.base + ); ctx.print_color(x + 7, 53, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "DEX"); - ctx.print_color(x + 10, 53, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), attributes.dexterity.base); + ctx.print_color( + x + 10, + 53, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + attributes.dexterity.base + ); ctx.print_color(x + 14, 53, RGB::named(rltk::ORANGE), RGB::named(rltk::BLACK), "CON"); - ctx.print_color(x + 17, 53, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), attributes.constitution.base); + ctx.print_color( + x + 17, + 53, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + attributes.constitution.base + ); ctx.print_color(x, 54, RGB::named(rltk::CYAN), RGB::named(rltk::BLACK), "INT"); - ctx.print_color(x + 3, 54, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), attributes.intelligence.base); + ctx.print_color( + x + 3, + 54, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + attributes.intelligence.base + ); ctx.print_color(x + 7, 54, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "WIS"); - ctx.print_color(x + 10, 54, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), attributes.wisdom.base); + ctx.print_color( + x + 10, + 54, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + attributes.wisdom.base + ); ctx.print_color(x + 14, 54, RGB::named(rltk::PURPLE), RGB::named(rltk::BLACK), "CHA"); - ctx.print_color(x + 17, 54, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), attributes.charisma.base); + ctx.print_color( + x + 17, + 54, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + attributes.charisma.base + ); // Draw hunger match hunger.state { HungerState::Satiated => { - ctx.print_color_right(70, 53, get_hunger_colour(hunger.state), RGB::named(rltk::BLACK), "Satiated"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 53, + get_hunger_colour(hunger.state), + RGB::named(rltk::BLACK), + "Satiated" + ); } HungerState::Normal => {} HungerState::Hungry => { - ctx.print_color_right(70, 53, get_hunger_colour(hunger.state), RGB::named(rltk::BLACK), "Hungry"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 53, + get_hunger_colour(hunger.state), + RGB::named(rltk::BLACK), + "Hungry" + ); } HungerState::Weak => { - ctx.print_color_right(70, 53, get_hunger_colour(hunger.state), RGB::named(rltk::BLACK), "Weak"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 53, + get_hunger_colour(hunger.state), + RGB::named(rltk::BLACK), + "Weak" + ); } HungerState::Fainting => { - ctx.print_color_right(70, 53, get_hunger_colour(hunger.state), RGB::named(rltk::BLACK), "Fainting"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 53, + get_hunger_colour(hunger.state), + RGB::named(rltk::BLACK), + "Fainting" + ); } HungerState::Starving => { - ctx.print_color_right(70, 53, get_hunger_colour(hunger.state), RGB::named(rltk::BLACK), "Starving"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 53, + get_hunger_colour(hunger.state), + RGB::named(rltk::BLACK), + "Starving" + ); } } // Burden if let Some(burden) = burden.get(*player_entity) { match burden.level { crate::BurdenLevel::Burdened => { - ctx.print_color_right(70, 50, RGB::named(rltk::BROWN1), RGB::named(rltk::BLACK), "Burdened"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 50, + RGB::named(rltk::BROWN1), + RGB::named(rltk::BLACK), + "Burdened" + ); } crate::BurdenLevel::Strained => { - ctx.print_color_right(70, 50, RGB::named(rltk::ORANGE), RGB::named(rltk::BLACK), "Strained"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 50, + RGB::named(rltk::ORANGE), + RGB::named(rltk::BLACK), + "Strained" + ); } crate::BurdenLevel::Overloaded => { - ctx.print_color_right(70, 50, RGB::named(rltk::RED), RGB::named(rltk::BLACK), "Overloaded"); + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 50, + RGB::named(rltk::RED), + RGB::named(rltk::BLACK), + "Overloaded" + ); } } } if stats.god { - ctx.print_color(20, 20, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "--- GODMODE: ON ---"); + ctx.print_color( + 20 * TEXT_FONT_MOD, + 20, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + "--- GODMODE: ON ---" + ); } // Draw equipment let renderables = ecs.read_storage::(); @@ -214,47 +333,96 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { } let mut y = 1; if !equipment.is_empty() { - ctx.print_color(72, y, RGB::named(rltk::BLACK), RGB::named(rltk::WHITE), "Equipment"); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + RGB::named(rltk::BLACK), + RGB::named(rltk::WHITE), + "Equipment" + ); let mut j = 0; for item in equipment { y += 1; - ctx.set(72, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), 97 + (j as rltk::FontCharType)); + ctx.set( + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + 97 + (j as rltk::FontCharType) + ); j += 1; - ctx.set(74, y, item.2, RGB::named(rltk::BLACK), item.3); - ctx.print_color(76, y, item.1, RGB::named(rltk::BLACK), &item.0); - ctx.print_color(76 + &item.0.len() + 1, y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "(worn)"); + ctx.set( + (VIEWPORT_W + 3) * TEXT_FONT_MOD + 2, + y, + item.2, + RGB::named(rltk::BLACK), + item.3 + ); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD + 4, + y, + item.1, + RGB::named(rltk::BLACK), + &item.0 + ); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD + 4 + (item.0.len() as i32) + 1, + y, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + "(worn)" + ); } y += 2; } // Draw consumables - ctx.print_color(72, y, RGB::named(rltk::BLACK), RGB::named(rltk::WHITE), "Backpack"); ctx.print_color( - 81, + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + RGB::named(rltk::BLACK), + RGB::named(rltk::WHITE), + "Backpack" + ); + ctx.print_color( + (VIEWPORT_W + 12) * TEXT_FONT_MOD, y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), &format!( "[{:.1}/{} lbs]", stats.weight, - (attributes.strength.base + attributes.strength.modifiers) * CARRY_CAPACITY_PER_STRENGTH + (attributes.strength.base + attributes.strength.modifiers) * + CARRY_CAPACITY_PER_STRENGTH ) ); y += 1; let player_inventory = get_player_inventory(&ecs); - y = print_options(&player_inventory, 72, y, ctx).0; + y = print_options(&player_inventory, (VIEWPORT_W + 3) * TEXT_FONT_MOD, y, ctx).0; // Draw spells - if we have any -- NYI! if let Some(known_spells) = ecs.read_storage::().get(*player_entity) { y += 1; // Draw known spells - ctx.print_color(72, y, RGB::named(BLACK), RGB::named(WHITE), "Known Spells"); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + RGB::named(BLACK), + RGB::named(WHITE), + "Known Spells" + ); y += 1; let mut index = 1; for spell in known_spells.list.iter() { - ctx.print_color(72, y, RGB::named(YELLOW), RGB::named(BLACK), &format!("{}", index)); ctx.print_color( - 74, + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + RGB::named(YELLOW), + RGB::named(BLACK), + &format!("{}", index) + ); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD + 1, y, RGB::named(CYAN), RGB::named(BLACK), @@ -311,32 +479,101 @@ pub fn draw_ui(ecs: &World, ctx: &mut Rltk) { if !seen_entities.is_empty() { y += 1; - ctx.print_color(72, y, RGB::named(rltk::BLACK), RGB::named(rltk::WHITE), "In View"); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + RGB::named(rltk::BLACK), + RGB::named(rltk::WHITE), + "In View" + ); for entity in seen_entities { y += 1; - ctx.set(72, y, entity.2, RGB::named(rltk::BLACK), entity.3); - ctx.print_color(74, y, entity.1, RGB::named(rltk::BLACK), entity.0); + ctx.set( + (VIEWPORT_W + 3) * TEXT_FONT_MOD, + y, + entity.2, + RGB::named(rltk::BLACK), + entity.3 + ); + ctx.print_color( + (VIEWPORT_W + 3) * TEXT_FONT_MOD + 1, + y, + entity.1, + RGB::named(rltk::BLACK), + entity.0 + ); } } } // Render the message log at [1, 7], ascending, with 7 lines and a max width of 68. - gamelog::print_log(&mut rltk::BACKEND_INTERNAL.lock().consoles[0].console, Point::new(1, 7), false, 7, 68); + gamelog::print_log( + &mut rltk::BACKEND_INTERNAL.lock().consoles[1].console, + Point::new(1 * TEXT_FONT_MOD, 7), + false, + 7, + (VIEWPORT_W - 1) * TEXT_FONT_MOD + ); // Render id let map = ecs.fetch::(); - let id = if map.depth > 0 { format!("{}{}", map.short_name, map.depth) } else { format!("{}", map.short_name) }; - ctx.print_color_right(70, 54, get_local_col(map.id), RGB::named(rltk::BLACK), &id); + let id = if map.depth > 0 { + format!("{}{}", map.short_name, map.depth) + } else { + format!("{}", map.short_name) + }; + ctx.print_color_right( + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 54, + get_local_col(map.id), + RGB::named(rltk::BLACK), + &id + ); // Render turn let turns = crate::gamelog::get_event_count(EVENT::COUNT_TURN); - ctx.print_color_right(69 - id.len(), 54, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), &format!("T{}", turns)); + ctx.print_color_right( + VIEWPORT_W * TEXT_FONT_MOD - (id.len() as i32), + 54, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + &format!("T{}", turns) + ); // Boxes and tooltips last, so they draw over everything else. - ctx.draw_hollow_box(0, 0, 70, 8, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Log box - ctx.draw_hollow_box(0, 9, 70, 42, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Camera box - ctx.draw_hollow_box(0, 52, 70, 3, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Stats box - ctx.draw_hollow_box(71, 0, 33, 55, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); // Side box + ctx.draw_hollow_box( + 0 * TEXT_FONT_MOD, + 0, + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 8, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK) + ); // Log box + ctx.draw_hollow_box( + 0 * TEXT_FONT_MOD, + 9, + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 42, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK) + ); // Camera box + ctx.draw_hollow_box( + 0 * TEXT_FONT_MOD, + 52, + (VIEWPORT_W + 1) * TEXT_FONT_MOD, + 3, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK) + ); // Stats box + ctx.draw_hollow_box( + (VIEWPORT_W + 2) * TEXT_FONT_MOD, + 0, + 33 * TEXT_FONT_MOD, + 55, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK) + ); // Side box + ctx.set_active_console(0); tooltip::draw_tooltips(ecs, ctx, None); } @@ -403,7 +640,12 @@ pub enum ItemMenuResult { Selected, } -pub fn print_options(inventory: &PlayerInventory, mut x: i32, mut y: i32, ctx: &mut Rltk) -> (i32, i32) { +pub fn print_options( + inventory: &PlayerInventory, + mut x: i32, + mut y: i32, + ctx: &mut Rltk +) -> (i32, i32) { let mut j = 0; let initial_x: i32 = x; let mut width: i32 = -1; @@ -411,10 +653,22 @@ pub fn print_options(inventory: &PlayerInventory, mut x: i32, mut y: i32, ctx: & x = initial_x; // Print the character required to access this item. i.e. (a) if j < 26 { - ctx.set(x, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), 97 + (j as rltk::FontCharType)); + ctx.set( + x, + y, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + 97 + (j as rltk::FontCharType) + ); } else { // If we somehow have more than 26, start using capitals - ctx.set(x, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), 65 - 26 + (j as rltk::FontCharType)); + ctx.set( + x, + y, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + 65 - 26 + (j as rltk::FontCharType) + ); } x += 2; @@ -428,7 +682,13 @@ pub fn print_options(inventory: &PlayerInventory, mut x: i32, mut y: i32, ctx: & // i.e. (a) 3 daggers ctx.print_color(x, y, fg, RGB::named(rltk::BLACK), item_count); x += 2; - ctx.print_color(x, y, fg, RGB::named(rltk::BLACK), item.display_name.plural.to_string()); + ctx.print_color( + x, + y, + fg, + RGB::named(rltk::BLACK), + item.display_name.plural.to_string() + ); let this_width = x - initial_x + (item.display_name.plural.len() as i32); width = if width > this_width { width } else { this_width }; } else { @@ -436,7 +696,9 @@ pub fn print_options(inventory: &PlayerInventory, mut x: i32, mut y: i32, ctx: & ctx.print_color(x, y, fg, RGB::named(rltk::BLACK), "some"); x += 5; } else if - ['a', 'e', 'i', 'o', 'u'].iter().any(|&v| item.display_name.singular.to_lowercase().starts_with(v)) + ['a', 'e', 'i', 'o', 'u'] + .iter() + .any(|&v| item.display_name.singular.to_lowercase().starts_with(v)) { // If one and starts with a vowel, print 'an' // i.e. (a) an apple @@ -448,7 +710,13 @@ pub fn print_options(inventory: &PlayerInventory, mut x: i32, mut y: i32, ctx: & ctx.print_color(x, y, fg, RGB::named(rltk::BLACK), "a"); x += 2; } - ctx.print_color(x, y, fg, RGB::named(rltk::BLACK), item.display_name.singular.to_string()); + ctx.print_color( + x, + y, + fg, + RGB::named(rltk::BLACK), + item.display_name.singular.to_string() + ); let this_width = x - initial_x + (item.display_name.singular.len() as i32); width = if width > this_width { width } else { this_width }; } @@ -463,18 +731,20 @@ pub fn print_options(inventory: &PlayerInventory, mut x: i32, mut y: i32, ctx: & pub fn get_max_inventory_width(inventory: &PlayerInventory) -> i32 { let mut width: i32 = 0; for (item, (_e, count)) in inventory { - let mut this_width = item.display_name.singular.len() as i32; - // Clean this up. It should use consts. - this_width += 4; // The spaces before and after the character to select this item, etc. + let mut this_width = 4; // The spaces before and after the character to select this item, etc. if count <= &1 { + this_width += item.display_name.singular.len() as i32; if item.display_name.singular == item.display_name.plural { this_width += 4; // "some".len - } else if ['a', 'e', 'i', 'o', 'u'].iter().any(|&v| item.display_name.singular.starts_with(v)) { + } else if + ['a', 'e', 'i', 'o', 'u'].iter().any(|&v| item.display_name.singular.starts_with(v)) + { this_width += 2; // "an".len } else { this_width += 1; // "a".len } } else { + this_width += item.display_name.plural.len() as i32; this_width += count.to_string().len() as i32; // i.e. "12".len } width = if width > this_width { width } else { this_width }; @@ -492,7 +762,10 @@ pub fn obfuscate_name( dm: &MasterDungeonMap, wand: Option<&ReadStorage> ) -> (String, String) { - let (mut singular, mut plural) = ("nameless item (bug)".to_string(), "nameless items (bug)".to_string()); + let (mut singular, mut plural) = ( + "nameless item (bug)".to_string(), + "nameless items (bug)".to_string(), + ); if let Some(name) = names.get(item) { if magic_items.get(item).is_some() { if dm.identified_items.contains(&name.name) { @@ -510,7 +783,10 @@ pub fn obfuscate_name( } else if let Some(obfuscated) = obfuscated_names.get(item) { (singular, plural) = (obfuscated.name.clone(), obfuscated.plural.clone()); } else { - (singular, plural) = ("unid magic item".to_string(), "unid magic items".to_string()); + (singular, plural) = ( + "unid magic item".to_string(), + "unid magic items".to_string(), + ); } } else { (singular, plural) = (name.name.clone(), name.plural.clone()); @@ -534,7 +810,10 @@ pub fn obfuscate_name( // Outside the ECS pub fn obfuscate_name_ecs(ecs: &World, item: Entity) -> (String, String) { - let (mut singular, mut plural) = ("nameless item (bug)".to_string(), "nameless items (bug)".to_string()); + let (mut singular, mut plural) = ( + "nameless item (bug)".to_string(), + "nameless items (bug)".to_string(), + ); if let Some(name) = ecs.read_storage::().get(item) { if ecs.read_storage::().get(item).is_some() { let dm = ecs.fetch::(); @@ -550,7 +829,10 @@ pub fn obfuscate_name_ecs(ecs: &World, item: Entity) -> (String, String) { } else if let Some(obfuscated) = ecs.read_storage::().get(item) { (singular, plural) = (obfuscated.name.clone(), obfuscated.plural.clone()); } else { - (singular, plural) = ("unid magic item".to_string(), "unid magic items".to_string()); + (singular, plural) = ( + "unid magic item".to_string(), + "unid magic items".to_string(), + ); } } else { (singular, plural) = (name.name.clone(), name.plural.clone()); @@ -592,7 +874,11 @@ pub fn unobf_name_ecs(ecs: &World, item: Entity) -> (String, String) { /// Gets renderable colour as tuple of u8 pub fn renderable_colour(renderables: &ReadStorage, entity: Entity) -> (u8, u8, u8) { return if let Some(renderable) = renderables.get(entity) { - ((renderable.fg.r * 255.0) as u8, (renderable.fg.g * 255.0) as u8, (renderable.fg.b * 255.0) as u8) + ( + (renderable.fg.r * 255.0) as u8, + (renderable.fg.g * 255.0) as u8, + (renderable.fg.b * 255.0) as u8, + ) } else { WHITE }; @@ -601,7 +887,11 @@ pub fn renderable_colour(renderables: &ReadStorage, entity: Entity) /// Gets renderable colour as tuple of u8 pub fn renderable_colour_ecs(ecs: &World, entity: Entity) -> (u8, u8, u8) { return if let Some(renderable) = ecs.read_storage::().get(entity) { - ((renderable.fg.r * 255.0) as u8, (renderable.fg.g * 255.0) as u8, (renderable.fg.b * 255.0) as u8) + ( + (renderable.fg.r * 255.0) as u8, + (renderable.fg.g * 255.0) as u8, + (renderable.fg.b * 255.0) as u8, + ) } else { WHITE }; @@ -660,7 +950,13 @@ pub fn show_help(ctx: &mut Rltk) -> YesNoResult { let width = 25; ctx.draw_box(x, y, width, height, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); ctx.print_color(x + 3, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), " Controls "); - ctx.print_color(x + 3, y + height, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), " ESC/? to close "); + ctx.print_color( + x + 3, + y + height, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + " ESC/? to close " + ); x += 2; y += 2; ctx.print_color(x, y, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "MOVE COMMANDS"); @@ -767,10 +1063,12 @@ pub fn get_player_inventory(ecs: &World) -> PlayerInventory { } pub fn show_inventory(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option) { + ctx.set_active_console(1); + let player_inventory = get_player_inventory(&gs.ecs); let count = player_inventory.len(); - let (x_offset, y_offset) = (1, 10); + let (x_offset, y_offset) = (1 * TEXT_FONT_MOD, 10); let on_overmap = gs.ecs.fetch::().overmap; let message = if !on_overmap { @@ -779,14 +1077,29 @@ pub fn show_inventory(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option "You can't use items on the overmap [Esc.]" }; - ctx.print_color(1 + x_offset, 1 + y_offset, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), message); + ctx.print_color( + 1 + x_offset, + 1 + y_offset, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + message + ); let x = 1 + x_offset; let y = 3 + y_offset; let width = get_max_inventory_width(&player_inventory); - ctx.draw_box(x, y, width + 2, (count + 1) as i32, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); + ctx.draw_box( + x, + y, + width + 2, + (count + 1) as i32, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK) + ); print_options(&player_inventory, x + 1, y + 1, ctx); + ctx.set_active_console(0); + match ctx.key { None => (ItemMenuResult::NoResponse, None), Some(key) => @@ -796,7 +1109,10 @@ pub fn show_inventory(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option let selection = letter_to_option::letter_to_option(key, ctx.shift); if selection > -1 && selection < (count as i32) { if on_overmap { - gamelog::Logger::new().append("You can't use items on the overmap.").log(); + gamelog::Logger + ::new() + .append("You can't use items on the overmap.") + .log(); } else { return ( ItemMenuResult::Selected, @@ -822,14 +1138,31 @@ pub fn drop_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option let (x_offset, y_offset) = (1, 10); let on_overmap = gs.ecs.fetch::().overmap; - let message = if !on_overmap { "Drop what? [aA-zZ][Esc.]" } else { "You can't drop items on the overmap [Esc.]" }; + let message = if !on_overmap { + "Drop what? [aA-zZ][Esc.]" + } else { + "You can't drop items on the overmap [Esc.]" + }; - ctx.print_color(1 + x_offset, 1 + y_offset, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), message); + ctx.print_color( + 1 + x_offset, + 1 + y_offset, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + message + ); let x = 1 + x_offset; let y = 3 + y_offset; let width = get_max_inventory_width(&player_inventory); - ctx.draw_box(x, y, width + 2, (count + 1) as i32, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK)); + ctx.draw_box( + x, + y, + width + 2, + (count + 1) as i32, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK) + ); print_options(&player_inventory, x + 1, y + 1, ctx); match ctx.key { @@ -841,7 +1174,10 @@ pub fn drop_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Option let selection = rltk::letter_to_option(key); if selection > -1 && selection < (count as i32) { if on_overmap { - gamelog::Logger::new().append("You can't drop items on the overmap.").log(); + gamelog::Logger + ::new() + .append("You can't drop items on the overmap.") + .log(); } else { return ( ItemMenuResult::Selected, @@ -879,7 +1215,9 @@ pub fn remove_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Opti let mut equippable: Vec<(Entity, String)> = Vec::new(); let mut width = 2; - for (entity, _pack) in (&entities, &backpack).join().filter(|item| item.1.owner == *player_entity) { + for (entity, _pack) in (&entities, &backpack) + .join() + .filter(|item| item.1.owner == *player_entity) { let this_name = &obfuscate_name_ecs(&gs.ecs, entity).0; let this_width = 5 + this_name.len(); width = if width > this_width { width } else { this_width }; @@ -900,7 +1238,13 @@ pub fn remove_item_menu(gs: &mut State, ctx: &mut Rltk) -> (ItemMenuResult, Opti } else { (RGB::named(rltk::WHITE), rltk::to_cp437('-')) }; - ctx.set(x + 1, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), 97 + (j as rltk::FontCharType)); + ctx.set( + x + 1, + y, + RGB::named(rltk::YELLOW), + RGB::named(rltk::BLACK), + 97 + (j as rltk::FontCharType) + ); ctx.set(x + 3, y, fg, RGB::named(rltk::BLACK), glyph); fg = RGB::named(item_colour_ecs(&gs.ecs, *e)); ctx.print_color(x + 5, y, fg, RGB::named(rltk::BLACK), name); @@ -965,7 +1309,12 @@ pub fn ranged_target( if distance <= (range as f32) { let screen_x = idx.x - min_x; let screen_y = idx.y - min_y; - if screen_x > 1 && screen_x < max_x - min_x - 1 && screen_y > 1 && screen_y < max_y - min_y - 1 { + if + screen_x > 1 && + screen_x < max_x - min_x - 1 && + screen_y > 1 && + screen_y < max_y - min_y - 1 + { ctx.set_bg(screen_x + x_offset, screen_y + y_offset, TARGETING_VALID_COL); available_cells.push(idx); } @@ -977,8 +1326,11 @@ pub fn ranged_target( // Draw mouse cursor let mouse_pos = (x, y); - let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = camera::get_screen_bounds(&gs.ecs, ctx); - let (screen_x, screen_y) = (69, 41); + let (min_x, _max_x, min_y, _max_y, x_offset, y_offset) = camera::get_screen_bounds( + &gs.ecs, + ctx + ); + let (screen_x, screen_y) = (40, 30); let x = x.clamp(x_offset, x_offset - 1 + (screen_x as i32)); let y = y.clamp(y_offset, y_offset - 1 + (screen_y as i32)); @@ -1019,7 +1371,9 @@ pub fn ranged_target( aoe, &*map ); - blast_tiles.retain(|p| p.x > 0 && p.x < map.width - 1 && p.y > 0 && p.y < map.height - 1); + blast_tiles.retain( + |p| p.x > 0 && p.x < map.width - 1 && p.y > 0 && p.y < map.height - 1 + ); for tile in blast_tiles.iter() { let bg = if available_cells.contains(&tile) { let col1 = TARGETING_AOE_COL; @@ -1040,7 +1394,10 @@ pub fn ranged_target( Some(key) => match key { VirtualKeyCode::Return => { - return (TargetResult::Selected, Some(Point::new(mouse_pos_adjusted.0, mouse_pos_adjusted.1))); + return ( + TargetResult::Selected, + Some(Point::new(mouse_pos_adjusted.0, mouse_pos_adjusted.1)), + ); } _ => result, } @@ -1106,10 +1463,22 @@ pub fn main_menu(gs: &mut State, ctx: &mut Rltk) -> MainMenuResult { if save_exists { if selection == MainMenuSelection::LoadGame { ctx.print_color(x + 2, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "["); - ctx.print_color(x + 3, y, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), "continue"); + ctx.print_color( + x + 3, + y, + RGB::named(rltk::GREEN), + RGB::named(rltk::BLACK), + "continue" + ); ctx.print_color(x + 11, y, RGB::named(rltk::YELLOW), RGB::named(rltk::BLACK), "]"); } else { - ctx.print_color(x + 3, y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), "continue"); + ctx.print_color( + x + 3, + y, + RGB::named(rltk::WHITE), + RGB::named(rltk::BLACK), + "continue" + ); } y += 1; } @@ -1142,7 +1511,9 @@ pub fn main_menu(gs: &mut State, ctx: &mut Rltk) -> MainMenuResult { return MainMenuResult::NoSelection { selected: MainMenuSelection::NewGame }; } VirtualKeyCode::L => { - return MainMenuResult::NoSelection { selected: MainMenuSelection::LoadGame }; + return MainMenuResult::NoSelection { + selected: MainMenuSelection::LoadGame, + }; } VirtualKeyCode::Up | VirtualKeyCode::Numpad8 | VirtualKeyCode::K => { let mut new_selection; @@ -1223,7 +1594,13 @@ pub fn game_over(ctx: &mut Rltk) -> YesNoResult { format!("You survived for {} turns.", crate::gamelog::get_event_count(EVENT::COUNT_TURN)) ); y += 2; - ctx.print_color(x, y, RGB::named(rltk::GREEN), RGB::named(rltk::BLACK), format!("And in the process, you")); + ctx.print_color( + x, + y, + RGB::named(rltk::GREEN), + RGB::named(rltk::BLACK), + format!("And in the process, you") + ); y += 1; if crate::gamelog::get_event_count(EVENT::COUNT_CHANGED_FLOOR) > 0 { ctx.print_color( @@ -1231,7 +1608,10 @@ pub fn game_over(ctx: &mut Rltk) -> YesNoResult { y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), - format!("- changed floor {} times", crate::gamelog::get_event_count(EVENT::COUNT_CHANGED_FLOOR)) + format!( + "- changed floor {} times", + crate::gamelog::get_event_count(EVENT::COUNT_CHANGED_FLOOR) + ) ); y += 1; } @@ -1255,7 +1635,10 @@ pub fn game_over(ctx: &mut Rltk) -> YesNoResult { y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), - format!("- slew {} other creature(s)", crate::gamelog::get_event_count(EVENT::COUNT_KILLED)) + format!( + "- slew {} other creature(s)", + crate::gamelog::get_event_count(EVENT::COUNT_KILLED) + ) ); y += 1; } @@ -1265,7 +1648,10 @@ pub fn game_over(ctx: &mut Rltk) -> YesNoResult { y, RGB::named(rltk::WHITE), RGB::named(rltk::BLACK), - format!("- forgot the controls {} time(s)", crate::gamelog::get_event_count(EVENT::COUNT_LOOKED_FOR_HELP)) + format!( + "- forgot the controls {} time(s)", + crate::gamelog::get_event_count(EVENT::COUNT_LOOKED_FOR_HELP) + ) ); } diff --git a/src/main.rs b/src/main.rs index 488ed16..a6e4092 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,22 +3,28 @@ use specs::prelude::*; use specs::saveload::{ SimpleMarker, SimpleMarkerAllocator }; use rltk::prelude::*; -const DISPLAYWIDTH: i32 = 105; +const DISPLAYWIDTH: i32 = 72; const DISPLAYHEIGHT: i32 = 56; fn main() -> rltk::BError { // Embedded resources for use in wasm build - const CURSES_14_16_BYTES: &[u8] = include_bytes!("../resources/curses14x16.png"); - rltk::embedding::EMBED.lock().add_resource("resources/curses14x16.png".to_string(), CURSES_14_16_BYTES); - - //rltk::link_resource!(CURSES14X16, "../resources/curses_14x16.png"); + const CURSES_16_16_BYTES: &[u8] = include_bytes!("../resources/nagidal24x24.png"); + const ISHMERIA_8_16_BYTES: &[u8] = include_bytes!("../resources/curses12x24.png"); + rltk::embedding::EMBED + .lock() + .add_resource("resources/nagidal24x24.png".to_string(), CURSES_16_16_BYTES); + rltk::embedding::EMBED + .lock() + .add_resource("resources/curses12x24.png".to_string(), ISHMERIA_8_16_BYTES); let mut context = RltkBuilder::new() .with_title("rust-rl") .with_dimensions(DISPLAYWIDTH, DISPLAYHEIGHT) - .with_font("curses14x16.png", 14, 16) - .with_tile_dimensions(14, 16) - .with_simple_console(DISPLAYWIDTH, DISPLAYHEIGHT, "curses14x16.png") + .with_font("nagidal24x24.png", 24, 24) + .with_font("curses12x24.png", 12, 24) + .with_tile_dimensions(24, 24) + .with_simple_console(DISPLAYWIDTH, DISPLAYHEIGHT, "nagidal24x24.png") + .with_sparse_console(DISPLAYWIDTH * 2, DISPLAYHEIGHT, "curses12x24.png") .build()?; if config::CONFIG.visuals.with_scanlines { context.with_post_scanlines(config::CONFIG.visuals.with_screen_burn); @@ -26,7 +32,9 @@ fn main() -> rltk::BError { let mut gs = State { ecs: World::new(), - mapgen_next_state: Some(RunState::MainMenu { menu_selection: gui::MainMenuSelection::NewGame }), + mapgen_next_state: Some(RunState::MainMenu { + menu_selection: gui::MainMenuSelection::NewGame, + }), mapgen_index: 0, mapgen_history: Vec::new(), mapgen_timer: 0.0, diff --git a/src/states/state.rs b/src/states/state.rs index 3dd1559..00152d5 100644 --- a/src/states/state.rs +++ b/src/states/state.rs @@ -164,6 +164,9 @@ impl GameState for State { new_runstate = *runstate; } // Clear screen + ctx.set_active_console(1); + ctx.cls(); + ctx.set_active_console(0); ctx.cls(); particle_system::particle_ticker(&mut self.ecs, ctx); @@ -559,6 +562,9 @@ impl GameState for State { new_runstate = self.mapgen_next_state.unwrap(); } if self.mapgen_history.len() != 0 { + ctx.set_active_console(1); + ctx.cls(); + ctx.set_active_console(0); ctx.cls(); camera::render_debug_map(&self.mapgen_history[self.mapgen_index], ctx);