From f1cafa14d849a1c68e290e14c08c550b30308cf2 Mon Sep 17 00:00:00 2001 From: DenisToxic Date: Tue, 27 Oct 2026 19:02:27 +0100 Subject: [PATCH] Initial commit --- .gitignore | 3 + Cargo.lock | 5589 +++++++++++++++++++++++++++++++++++ Cargo.toml | 22 + README.md | 100 + assets/audio/death.wav | Bin 0 -> 26504 bytes assets/audio/defeated.wav | Bin 0 -> 9302 bytes assets/audio/frightened.wav | Bin 0 -> 13274 bytes assets/audio/game_over.wav | Bin 0 -> 38852 bytes assets/audio/pellet.wav | Bin 0 -> 3128 bytes assets/audio/power.wav | Bin 0 -> 15916 bytes assets/audio/victory.wav | Bin 0 -> 42380 bytes src/audio.rs | 63 + src/game.rs | 147 + src/ghost.rs | 275 ++ src/main.rs | 44 + src/maze.rs | 153 + src/pathfinding.rs | 43 + src/pellets.rs | 84 + src/player.rs | 128 + src/settings.rs | 128 + src/ui.rs | 351 +++ tools/generate_audio.py | 38 + tools/package.ps1 | 38 + tools/package.sh | 28 + 24 files changed, 7234 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 assets/audio/death.wav create mode 100644 assets/audio/defeated.wav create mode 100644 assets/audio/frightened.wav create mode 100644 assets/audio/game_over.wav create mode 100644 assets/audio/pellet.wav create mode 100644 assets/audio/power.wav create mode 100644 assets/audio/victory.wav create mode 100644 src/audio.rs create mode 100644 src/game.rs create mode 100644 src/ghost.rs create mode 100644 src/main.rs create mode 100644 src/maze.rs create mode 100644 src/pathfinding.rs create mode 100644 src/pellets.rs create mode 100644 src/player.rs create mode 100644 src/settings.rs create mode 100644 src/ui.rs create mode 100644 tools/generate_audio.py create mode 100644 tools/package.ps1 create mode 100644 tools/package.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5513384 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/target/ +/release/ +*.log diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..142c5df --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5589 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "ab_glyph" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01c0457472c38ea5bd1c3b5ada5e368271cb550be7a4ca4a0b4634e9913f6cc2" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "366ffbaa4442f4684d91e2cd7c5ea7c4ed8add41959a31447066e279e432b618" + +[[package]] +name = "accesskit" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3b7f7f85a7e5f68090000ed7622545829afd484d210358702ae4cb97dd0c320" +dependencies = [ + "uuid", +] + +[[package]] +name = "accesskit_consumer" +version = "0.35.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53cf47daed85312e763fbf85ceca136e0d7abc68e0a7e12abe11f48172bc3b10" +dependencies = [ + "accesskit", + "hashbrown 0.16.1", +] + +[[package]] +name = "accesskit_consumer" +version = "0.38.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d10a236f96f87d70732e44520046785431ef01d5bcd6b041317bfadd2f88245" +dependencies = [ + "accesskit", + "hashbrown 0.16.1", +] + +[[package]] +name = "accesskit_macos" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce02dc63b43f0c9296af9ac946312a2dc8814427d7a64d2d600971dac55b6076" +dependencies = [ + "accesskit", + "accesskit_consumer 0.38.0", + "hashbrown 0.16.1", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "accesskit_windows" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff7009f1a532e917d66970a1e80c965140c6cfbbabbdde3d64e5431e6c78e21" +dependencies = [ + "accesskit", + "accesskit_consumer 0.35.0", + "hashbrown 0.16.1", + "static_assertions", + "windows", + "windows-core", +] + +[[package]] +name = "accesskit_winit" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fe9a94394896352cc4660ca2288bd4ef883d83238853c038b44070c8f134313" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_windows", + "raw-window-handle", + "winit", +] + +[[package]] +name = "ahash" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" +dependencies = [ + "cfg-if", + "getrandom 0.3.4", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c982642fa9e8606056828ee9a8505737230110bb1099153c79efe865c59d12ba" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + +[[package]] +name = "alsa" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "812947049edcd670a82cd5c73c3661d2e58468577ba8489de58e1a73c04cbd5d" +dependencies = [ + "alsa-sys", + "bitflags 2.13.2", + "cfg-if", + "libc", +] + +[[package]] +name = "alsa-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad7569085a265dd3f607ebecce7458eaab2132a84393534c95b18dcbc3f31e04" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android-activity" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2a1bb052857d5dd49572219344a7332b31b76405648eabac5bc68978251bcd" +dependencies = [ + "android-properties", + "bitflags 2.13.2", + "cc", + "jni 0.22.4", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum", + "thiserror 2.0.20", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_log-sys" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84521a3cf562bc62942e294181d9eef17eb38ceb8c68677bc49f144e4c3d4f8d" + +[[package]] +name = "android_system_properties" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae221649c9976a6f6c56ae1facf410f3ddb33cc661c4b7b61020a912d4237fbc" +dependencies = [ + "libc", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arboard" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" +dependencies = [ + "clipboard-win", + "log", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", + "parking_lot", + "percent-encoding", + "windows-sys 0.60.2", + "wl-clipboard-rs", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" + +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + +[[package]] +name = "as-raw-xcb-connection" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b" + +[[package]] +name = "ash" +version = "0.38.0+1.3.281" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" +dependencies = [ + "libloading", +] + +[[package]] +name = "assert_type_match" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f548ad2c4031f2902e3edc1f29c29e835829437de49562d8eb5dc5584d3a1043" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "async-broadcast" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" +dependencies = [ + "event-listener", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-channel" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "924ed96dd52d1b75e9c1a3e6275715fd320f5f9439fb5a4a11fa51f4221158d2" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96bf972d85afc50bf5ab8fe2d54d1586b4e0b46c97c50a0c9e71e2f7bcd812a" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "pin-project-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8034a681df4aed8b8edbd7fbe472401ecf009251c8b40556b304567052e294c5" +dependencies = [ + "async-lock", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-io" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456b8a8feb6f42d237746d4b3e9a178494627745c3c56c6ea55d92ba50d026fc" +dependencies = [ + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix 1.1.4", + "slab", + "windows-sys 0.61.2", +] + +[[package]] +name = "async-lock" +version = "3.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f7f2596bd5b78a9fec8088ccd89180d7f9f55b94b0576823bbbdc72ee8311" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "atomicow" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301801c08259e328a1c7da556608c0c22687708831b22024dbd3a57ea741e6de" +dependencies = [ + "portable-atomic", + "portable-atomic-util", +] + +[[package]] +name = "autocfg" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" + +[[package]] +name = "bevy" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bfadbebfc6599aa59289b754ac30023959854304f3d393da2cf62bb3cd5df8f" +dependencies = [ + "bevy_internal", +] + +[[package]] +name = "bevy_a11y" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c02cd43f914ef7a0f5b16f8a3d88c378c07c92f1a8c32ac5ac4d4f73e55f9e2" +dependencies = [ + "accesskit", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_reflect", +] + +[[package]] +name = "bevy_android" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae5ea5245a845cefa8efb5ff7c2a8a36cdebfb99596068780f340f0b5aba6689" +dependencies = [ + "android-activity", +] + +[[package]] +name = "bevy_app" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd2aa472d43b4d081ef41d26300d17bd22cba6d68df2a223eb358782fa40bc6" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "console_error_panic_hook", + "ctrlc", + "downcast-rs 2.0.2", + "log", + "thiserror 2.0.20", + "variadics_please", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1624eddbf2293441b2158506aba75e523432b898d9da26eb6ed3e20af4c7fd38" +dependencies = [ + "async-broadcast", + "async-channel", + "async-fs", + "async-io", + "async-lock", + "atomicow", + "bevy_android", + "bevy_app", + "bevy_asset_macros", + "bevy_diagnostic", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bitflags 2.13.2", + "blake3", + "crossbeam-channel", + "derive_more", + "disqualified", + "downcast-rs 2.0.2", + "either", + "futures-io", + "futures-lite", + "futures-util", + "js-sys", + "ron", + "serde", + "stackfuture", + "thiserror 2.0.20", + "tracing", + "uuid", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_asset_macros" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "735611c80e926e960d279cba2a6f6ab27a61291752ec3b26e76bf9a0957e11e1" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_audio" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "750809b7b007dd6de6e5c730e67973027a3d22392fa7fd6f5331f8cefb489a18" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_transform", + "rodio", + "tracing", +] + +[[package]] +name = "bevy_camera" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de20d0babfb51e3907eb4eb56f1e36096a6f8c77acd997f5de611df4ee067d" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "bevy_window", + "derive_more", + "downcast-rs 2.0.2", + "serde", + "smallvec", + "thiserror 2.0.20", + "wgpu-types", +] + +[[package]] +name = "bevy_clipboard" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a9792c7f2e8b5b71b9572a6d98fca4ee88ed186c8a02e164540c461ae3a92e" +dependencies = [ + "arboard", + "bevy_app", + "bevy_ecs", + "bevy_log", + "bevy_platform", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_color" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e5370beae13bea2db64744f370bb33566aa770dff91c2beae245ce82217fbbc" +dependencies = [ + "bevy_math", + "bevy_reflect", + "bytemuck", + "derive_more", + "encase", + "serde", + "thiserror 2.0.20", + "wgpu-types", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2564f1ba766532e8eeb20059133ff6703e8dd5c3864b92378d0d1c541096ef12" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_image", + "bevy_light", + "bevy_log", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.13.2", + "indexmap", + "nonmax", +] + +[[package]] +name = "bevy_derive" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d2a03321f3bd8016a041b3ae6afe83e636b3540fbc61d571bf069a21fda3231" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07a3a736f15486650c4c6866798a78d625c7063c991a3cc7b13f1577d89c82ae" +dependencies = [ + "atomic-waker", + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_tasks", + "bevy_time", + "const-fnv1a-hash", + "log", + "serde", +] + +[[package]] +name = "bevy_ecs" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a350b2e4c2e47f7903d688affb8a723b31bca63af9789f1da88703f1ba04e354" +dependencies = [ + "arrayvec", + "bevy_ecs_macros", + "bevy_platform", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bitflags 2.13.2", + "bumpalo", + "concurrent-queue", + "derive_more", + "fixedbitset", + "indexmap", + "log", + "nonmax", + "serde", + "slotmap", + "smallvec", + "thiserror 2.0.20", + "variadics_please", +] + +[[package]] +name = "bevy_ecs_macro_logic" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a10fef45a3e7dad717ba03e8b5f7ecdf3b3fd1cd1c5e425793525938e90d5f" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3916d712264b6f3ec9c964ba10719450ea371e537e202a2ffcfa9f6a5e68169d" +dependencies = [ + "bevy_ecs_macro_logic", + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be03820f64f2279ae9d826c882e4ef764516ff75ab7bdc39bb40801891533b89" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_gilrs" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8215d166d5c4a9f821713a1a549a57c5f8bdf404745c84f7a8b920b7b7d92b2" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_platform", + "bevy_time", + "gilrs", + "thiserror 2.0.20", + "tracing", +] + +[[package]] +name = "bevy_gizmos" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ac5bcad0b8d141ef64f4a89643f74f11827ea6ef48073192b39d69156ed1b92" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_ecs", + "bevy_gizmos_macros", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", +] + +[[package]] +name = "bevy_gizmos_macros" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b37bbaa6241480b119da406fc261c9cf85d435addad880ae564c9b0f54a89a28" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_gizmos_render" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ea2b6266d210bca0aa3bcba7e17204e437b4e86cecd4021ab7dcd32da576a02" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_gizmos", + "bevy_image", + "bevy_log", + "bevy_material", + "bevy_math", + "bevy_mesh", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite_render", + "bevy_transform", + "bevy_utils", + "bytemuck", + "tracing", +] + +[[package]] +name = "bevy_image" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca63218585b83f98831214431449e9344b363349dd5cab98dae0b8129f0a0e2f" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_color", + "bevy_ecs", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_utils", + "bitflags 2.13.2", + "bytemuck", + "futures-lite", + "guillotiere", + "half", + "image", + "rectangle-pack", + "serde", + "thiserror 2.0.20", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_input" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b22e8b1119ff5c0b551cc11b672d25732c4e3eda72aceabc380595bd0e7bbe88" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "derive_more", + "log", + "smol_str", + "thiserror 2.0.20", +] + +[[package]] +name = "bevy_input_focus" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4d5573eb503387f73d12acde3010d49c808c790d34691e2fb410fc54b8c72b9" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_window", + "log", + "thiserror 2.0.20", +] + +[[package]] +name = "bevy_internal" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ba99ca2e501f14f4af3322d66ae41b5c5b6ebd3aac4d00cda47dea4c00290ae" +dependencies = [ + "bevy_a11y", + "bevy_android", + "bevy_app", + "bevy_asset", + "bevy_audio", + "bevy_camera", + "bevy_clipboard", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gilrs", + "bevy_gizmos", + "bevy_gizmos_render", + "bevy_image", + "bevy_input", + "bevy_input_focus", + "bevy_light", + "bevy_log", + "bevy_material", + "bevy_math", + "bevy_mesh", + "bevy_pbr", + "bevy_platform", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite", + "bevy_sprite_render", + "bevy_state", + "bevy_tasks", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_ui", + "bevy_ui_render", + "bevy_utils", + "bevy_window", + "bevy_winit", +] + +[[package]] +name = "bevy_light" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f91fb900c2412c5cb7ff5083d428d8361a1d39b605df86eb259aff82f7ac45" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_ecs", + "bevy_image", + "bevy_log", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "half", + "smallvec", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_log" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e24488594832237c1e3abc823642823fa057b810c3a21e14e65bdbd15d1579d5" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_utils", + "tracing", + "tracing-log", + "tracing-oslog", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7164fe229422295bba15f1885048f34f4660db069aacb895208f996b0c7784fb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", + "toml_edit", +] + +[[package]] +name = "bevy_material" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3efcdb3ba04a57f6e05548884745684a2051e9692398915f57c5c276306b7f10" +dependencies = [ + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_material_macros", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_shader", + "bevy_utils", + "encase", + "smallvec", + "thiserror 2.0.20", + "tracing", + "variadics_please", + "wgpu-types", +] + +[[package]] +name = "bevy_material_macros" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854f95c8f3374ef6242790de50b5cb8f5a601c698772d1447bf856067b53ee64" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_math" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ead494dcfaa9b4594eed7f09a27d868b7cc7fc9ebd655c5643322778f4a8a2" +dependencies = [ + "approx", + "arrayvec", + "bevy_reflect", + "derive_more", + "glam", + "itertools", + "libm", + "rand", + "rand_distr", + "serde", + "thiserror 2.0.20", + "variadics_please", +] + +[[package]] +name = "bevy_mesh" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2adbf8e5a5817c345986756eb0377e18a510e1d7685ef62d6c7bafcd3bab85e" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_encase_derive", + "bevy_math", + "bevy_mikktspace", + "bevy_platform", + "bevy_reflect", + "bevy_transform", + "bitflags 2.13.2", + "bytemuck", + "derive_more", + "encase", + "glam", + "half", + "hexasphere", + "thiserror 2.0.20", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_mikktspace" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff34eb29ff4b8a8688bc7299f14fb6b597461ca80fec03ed7d22939ab33e48f" + +[[package]] +name = "bevy_pbr" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "244ae7d618b51a59c913c36b0564a295cd85ea91a5e777b542bb7bdb846a23d6" +dependencies = [ + "arrayvec", + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_image", + "bevy_light", + "bevy_log", + "bevy_material", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_tasks", + "bevy_transform", + "bevy_utils", + "bitflags 2.13.2", + "bytemuck", + "derive_more", + "fixedbitset", + "indexmap", + "nonmax", + "offset-allocator", + "smallvec", + "static_assertions", + "thiserror 2.0.20", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_platform" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd610a417e7b4a3b9602cf11264d16cbbff8eabe689c5fed8be4e84c6a2680a3" +dependencies = [ + "critical-section", + "foldhash 0.2.0", + "futures-channel", + "futures-lite", + "hashbrown 0.16.1", + "js-sys", + "portable-atomic", + "portable-atomic-util", + "serde", + "spin", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-time", + "windows-sys 0.61.2", +] + +[[package]] +name = "bevy_ptr" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1974de4b140f102fded747229ff4a61921acec07f02f0d1dcdadfe9ce177d0ff" + +[[package]] +name = "bevy_reflect" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b76c3d056da3e299b84652ccf914c487b786857225d8ffbc8fc9509441a9e6b" +dependencies = [ + "assert_type_match", + "bevy_platform", + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "derive_more", + "disqualified", + "downcast-rs 2.0.2", + "erased-serde", + "foldhash 0.2.0", + "glam", + "indexmap", + "inventory", + "serde", + "smallvec", + "smol_str", + "thiserror 2.0.20", + "uuid", + "variadics_please", + "wgpu-types", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc5f820ee52afeca6d3bb83f15c1bf61ea6196c840a761a21a8bc266a3b166e" +dependencies = [ + "bevy_macro_utils", + "indexmap", + "proc-macro2", + "quote", + "syn 2.0.119", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc86a32b2eef9859e1e7d323c6d1a9150fe77aa17c30fd05abebc12f645929dc" +dependencies = [ + "async-channel", + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_encase_derive", + "bevy_image", + "bevy_log", + "bevy_material", + "bevy_material_macros", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render_macros", + "bevy_shader", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.13.2", + "bytemuck", + "derive_more", + "downcast-rs 2.0.2", + "encase", + "glam", + "image", + "indexmap", + "itertools", + "js-sys", + "naga", + "nonmax", + "offset-allocator", + "send_wrapper", + "smallvec", + "thiserror 2.0.20", + "variadics_please", + "wasm-bindgen", + "weak-table", + "web-sys", + "wgpu", + "wgpu-types", +] + +[[package]] +name = "bevy_render_macros" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6be6eba0ce9770ae4576693804d6c605f8afd9c4769787414254efcf92196a90" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_shader" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50ba4fa5c5102a9ad1b0508c5bf8a6d02a22d5dc13c23ba908ee6d3d16a357cd" +dependencies = [ + "bevy_asset", + "bevy_platform", + "bevy_reflect", + "bevy_utils", + "naga", + "naga_oil", + "serde", + "thiserror 2.0.20", + "tracing", + "wgpu-naga-bridge", + "wgpu-types", +] + +[[package]] +name = "bevy_sprite" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e93e631436ff9c08613843d46521ee60f2fcb2eb5f4754eec59591ca817a2ba0" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_log", + "bevy_math", + "bevy_mesh", + "bevy_reflect", + "bevy_text", + "bevy_transform", + "bevy_window", + "radsort", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_sprite_render" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0a13c775880fe8fb3e7928921b2a1b549fd92c17571e7ca5e1250e53f0e56c" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_material", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bitflags 2.13.2", + "bytemuck", + "derive_more", + "fixedbitset", + "nonmax", + "tracing", +] + +[[package]] +name = "bevy_state" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f69ce6a0066eb4626165e2f8c85d3cf4808cfe4cb2027df8840d5cbfe8a3428d" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "bevy_state_macros", + "bevy_utils", + "log", + "variadics_please", +] + +[[package]] +name = "bevy_state_macros" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a36dd49049023a0abbd0bd1e2b99580ed83a18c5351c64caba4c06e3b584cf9c" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "bevy_tasks" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f787d4ba7237b64b30bd2d690a8cbae1ba775e0eec326711c446654cb720e7c" +dependencies = [ + "async-channel", + "async-executor", + "async-task", + "atomic-waker", + "bevy_platform", + "concurrent-queue", + "crossbeam-queue", + "derive_more", + "futures-lite", + "heapless", + "web-task", +] + +[[package]] +name = "bevy_text" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b275f50fb01b1e2d411326a7750ecc2fe629c48b89997cf2a3c93fe786e076" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_clipboard", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_log", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_utils", + "parley", + "serde", + "smallvec", + "smol_str", + "swash", + "sys-locale", + "thiserror 2.0.20", + "tracing", + "wgpu-types", +] + +[[package]] +name = "bevy_time" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6896d83d7ed32a2f89da127b7aeddf01eb702e603897cf5ddac231480a1870e" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_platform", + "bevy_reflect", + "crossbeam-channel", + "log", + "serde", +] + +[[package]] +name = "bevy_transform" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d94cc6065320ebeb58ae88a0863a4c4c2a642c6db698e283eb50be01a834ca5a" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "derive_more", + "serde", + "thiserror 2.0.20", +] + +[[package]] +name = "bevy_ui" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a2f97c39dadfef97dbe295fc1ce212825bb9fda2becc8f558d1d7e7d7dbbedf" +dependencies = [ + "accesskit", + "bevy_a11y", + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_input", + "bevy_input_focus", + "bevy_log", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_sprite", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "derive_more", + "parley", + "smallvec", + "swash", + "taffy", + "thiserror 2.0.20", + "tracing", +] + +[[package]] +name = "bevy_ui_render" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a36be1c251417421ee070ecd1a393f0036631f7495564a8c9d4abb6042dc40" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_camera", + "bevy_color", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_image", + "bevy_input_focus", + "bevy_math", + "bevy_mesh", + "bevy_platform", + "bevy_reflect", + "bevy_render", + "bevy_shader", + "bevy_sprite", + "bevy_sprite_render", + "bevy_text", + "bevy_transform", + "bevy_ui", + "bevy_utils", + "bytemuck", + "derive_more", + "indexmap", + "tracing", +] + +[[package]] +name = "bevy_utils" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de51fa7ea2e95d4c2d1278c5629285d59eec951cc60c992964c03f30910ef5a1" +dependencies = [ + "async-channel", + "bevy_platform", + "disqualified", + "indexmap", + "thread_local", +] + +[[package]] +name = "bevy_window" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38373ee93a9248c14afe41d2025f4aa5e68b004b06ae7702816b180e72b39ea3" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "log", + "raw-window-handle", + "serde", +] + +[[package]] +name = "bevy_winit" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e9c615f4194b1e00ba536892a3d3d3300c2a1f8e66112fdebd7077bf2744c9" +dependencies = [ + "accesskit", + "accesskit_winit", + "approx", + "bevy_a11y", + "bevy_android", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_input", + "bevy_input_focus", + "bevy_log", + "bevy_math", + "bevy_platform", + "bevy_reflect", + "bevy_tasks", + "bevy_window", + "js-sys", + "tracing", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bit-set" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b71798fca2c1fe1086445a7258a4bc81e6e49dcd24c8d0dd9a1e57395b603f51" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" +dependencies = [ + "bytemuck", + "serde_core", +] + +[[package]] +name = "blake3" +version = "1.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d9e454fc11f76977dc803893aff6304ed33d6a26efae8696573bea74baa27ae" +dependencies = [ + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "cpufeatures", +] + +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2 0.5.2", +] + +[[package]] +name = "block2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdeb9d870516001442e364c5220d3574d2da8dc765554b4a617230d33fa58ef5" +dependencies = [ + "objc2 0.6.4", +] + +[[package]] +name = "blocking" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a70e4329df6cb94385eed412ec92375c3cdd8a6e502493d1229b6414e4036dfa" +dependencies = [ + "async-channel", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "bumpalo" +version = "3.20.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649" + +[[package]] +name = "bytemuck" +version = "1.25.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95832e849adfb21180ccb6826a99da14e5d266ae5c2e668e1602cf234f153797" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a1f896587b6f2c069c73d2f0913e2d590c3990285cd2f0b6aa02b786b4c679c" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "byteorder-lite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" + +[[package]] +name = "bytes" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04" + +[[package]] +name = "calloop" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec" +dependencies = [ + "bitflags 2.13.2", + "log", + "polling", + "rustix 0.38.44", + "slab", + "thiserror 1.0.69", +] + +[[package]] +name = "calloop-wayland-source" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95a66a987056935f7efce4ab5668920b5d0dac4a7c99991a67395f13702ddd20" +dependencies = [ + "calloop", + "rustix 0.38.44", + "wayland-backend", + "wayland-client", +] + +[[package]] +name = "cc" +version = "1.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3eb0f42d6c360dc3f8a821f6bf2fdea7f72bfd36b3076eb0e6d1e9e0752fff4" +dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + +[[package]] +name = "cfg_aliases" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" + +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + +[[package]] +name = "codespan-reporting" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "codespan-reporting" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af491d569909a7e4dee0ad7db7f5341fef5c614d5b8ec8cf765732aba3cff681" +dependencies = [ + "serde", + "termcolor", + "unicode-width", +] + +[[package]] +name = "combine" +version = "4.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfc320937d09e6de266b31b9afb480f197d7a861be86be7cb2ea7e5d1bfffc5e" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", + "portable-atomic", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const-fnv1a-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" + +[[package]] +name = "const_panic" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9603f79528ece8163c496f8932121cb36cfe46259e9c907bb3d8205139d7caa3" +dependencies = [ + "typewit", +] + +[[package]] +name = "const_soft_float" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" + +[[package]] +name = "constant_time_eq" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d52eff69cd5e647efe296129160853a42795992097e8af39800e1060caeea9b" + +[[package]] +name = "constgebra" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1aaf9b65849a68662ac6c0810c8893a765c960b907dd7cfab9c4a50bf764fbc" +dependencies = [ + "const_soft_float", +] + +[[package]] +name = "convert_case" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "633458d4ef8c78b72454de2d54fd6ab2e60f9e02be22f3c6104cdc8a4e0fceb9" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "core-graphics" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "core_maths" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77745e017f5edba1a9c1d854f6f3a52dac8a12dd5af5d2f54aecf61e43d80d30" +dependencies = [ + "libm", +] + +[[package]] +name = "coreaudio-rs" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5d7dca3ebcf65a035582c9ad4385371a9d9ee6537474d2a278f4e1e475bb58" +dependencies = [ + "bitflags 2.13.2", + "libc", + "objc2-audio-toolbox", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", +] + +[[package]] +name = "cpal" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8942da362c0f0d895d7cac616263f2f9424edc5687364dfd1d25ef7eba506d7" +dependencies = [ + "alsa", + "coreaudio-rs", + "dasp_sample", + "jni 0.21.1", + "js-sys", + "libc", + "mach2", + "ndk", + "ndk-context", + "num-derive", + "num-traits", + "objc2 0.6.4", + "objc2-audio-toolbox", + "objc2-avf-audio", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows", +] + +[[package]] +name = "cpufeatures" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566" +dependencies = [ + "libc", +] + +[[package]] +name = "critical-section" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" + +[[package]] +name = "crossbeam-channel" +version = "0.5.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b0cc327b5bc766e7fda9c9260cc0fa81b43a8e240440422dff70788e3f9ef1" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03e8bd762f7479489c70ed6c768ddca99d7296857de437a68dcb2a94365b3fae" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31eee39dddec8330830986fcd7625edb5a24ec90ea038215273bbc3adb08ac6" + +[[package]] +name = "crunchy" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" + +[[package]] +name = "ctrlc" +version = "3.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0b1fab2ae45819af2d0731d60f2afe17227ebb1a1538a236da84c93e9a60162" +dependencies = [ + "dispatch2", + "nix", + "windows-sys 0.61.2", +] + +[[package]] +name = "cursor-icon" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "data-encoding" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4583a4551df46e2792f82ceeac45e850d2e2d5debba0b91f102385cda5b11f06" + +[[package]] +name = "derive_more" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 2.0.119", + "unicode-xid", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "dispatch2" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e0e367e4e7da84520dedcac1901e4da967309406d1e51017ae1abfb97adbd38" +dependencies = [ + "bitflags 2.13.2", + "block2 0.6.2", + "libc", + "objc2 0.6.4", +] + +[[package]] +name = "displaydoc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6232dd377dcc64799954cbd3a9bb882e9cdc1308ccd87b1c098f1fb2eaf82a8" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "disqualified" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9c272297e804878a2a4b707cfcfc6d2328b5bb936944613b4fdf2b9269afdfd" + +[[package]] +name = "dlib" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab8ecd87370524b461f8557c119c405552c396ed91fc0a8eec68679eab26f94a" +dependencies = [ + "libloading", +] + +[[package]] +name = "document-features" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" +dependencies = [ + "litrs", +] + +[[package]] +name = "downcast-rs" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" + +[[package]] +name = "downcast-rs" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" + +[[package]] +name = "dpi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76" + +[[package]] +name = "either" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "252afb9ae5eaa683babdc6a068b3f5726eb19e05070c731f9b2a23a7c3e8ed34" + +[[package]] +name = "encase" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1acbc46b960480c4959213714511e22f9a2e0d361520693bcf5057b5924f53e" +dependencies = [ + "const_panic", + "encase_derive", + "thiserror 2.0.20", +] + +[[package]] +name = "encase_derive" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e30d38c47336a0afbdfde297b442944041cf6dccbb1a79eceea16abfb27a92a" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "495d24abe406f090f2ba8fc362ecaa8a001e192522aa75eae7b144163c3235ff" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "erased-serde" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2add8a07dd6a8d93ff627029c51de145e12686fbc36ecb298ac22e74cf02dec" +dependencies = [ + "serde", + "serde_core", + "typeid", +] + +[[package]] +name = "errno" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "error-code" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" + +[[package]] +name = "euclid" +version = "0.22.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "5.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2" +dependencies = [ + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" + +[[package]] +name = "find-msvc-tools" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e0f1c7c3a72c66fd80abe965175f7523475c0489a87d3ff9d6e8c87d87a9d2d" + +[[package]] +name = "first_person_maze" +version = "1.0.0" +dependencies = [ + "bevy", + "ron", + "serde", +] + +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + +[[package]] +name = "foldhash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" + +[[package]] +name = "font-types" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b38ad915f6dadd993ced50848a8291a543bd41ca62bc10740d5e64e2ab4cfd7" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "font-types" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8eb065f3251655b3c90e22e5e363f310fc5332fb3402e37bbc94752283248f6" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "fontique" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c20b425addb8661e97fe1d51c4d8bcec3ec29ed6ad0db983976a7521276b8f7" +dependencies = [ + "hashbrown 0.17.1", + "linebender_resource_handle", + "memmap2", + "parlance", + "read-fonts 0.39.2", + "smallvec", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea5190182e6915eb873ddbc16e23b711b6eb1f9c00a0d0a3a91b5f6228475225" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "futures-channel" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" +dependencies = [ + "futures-core", +] + +[[package]] +name = "futures-core" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" + +[[package]] +name = "futures-io" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" + +[[package]] +name = "futures-lite" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "futures-task" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" + +[[package]] +name = "futures-util" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" +dependencies = [ + "futures-core", + "futures-macro", + "futures-task", + "pin-project-lite", + "slab", +] + +[[package]] +name = "gethostname" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" +dependencies = [ + "rustix 1.1.4", + "windows-link", +] + +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi 5.3.0", + "wasip2", +] + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi 6.0.0", +] + +[[package]] +name = "gilrs" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "902fb00d3f6398e635be22e5c837b303c501835cca7ac11a47bba138f7aafdd8" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc7f0ce6237abcc0523f2a5502b1e3fe5802daaae47ac14e166fe49551301ea9" +dependencies = [ + "inotify", + "js-sys", + "libc", + "libudev-sys", + "log", + "nix", + "objc2-core-foundation", + "objc2-io-kit", + "uuid", + "vec_map", + "wasm-bindgen", + "web-sys", + "windows", +] + +[[package]] +name = "glam" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f70749695b063ecbf6b62949ccccde2e733ec3ecbbd71d467dca4e5c6c97cca0" +dependencies = [ + "bytemuck", + "encase", + "libm", + "rand", + "serde_core", +] + +[[package]] +name = "gpu-allocator" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51255ea7cfaadb6c5f1528d43e92a82acb2b96c43365989a28b2d44ee38f8795" +dependencies = [ + "ash", + "hashbrown 0.16.1", + "log", + "presser", + "thiserror 2.0.20", + "windows", +] + +[[package]] +name = "gpu-descriptor" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b89c83349105e3732062a895becfc71a8f921bb71ecbbdd8ff99263e3b53a0ca" +dependencies = [ + "bitflags 2.13.2", + "gpu-descriptor-types", + "hashbrown 0.15.5", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "grid" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b40ca9252762c466af32d0b1002e91e4e1bc5398f77455e55474deb466355ff5" + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "half" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" +dependencies = [ + "bytemuck", + "cfg-if", + "crunchy", + "num-traits", + "zerocopy", +] + +[[package]] +name = "harfrust" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "551ed25397e4b444e89686602877d5cf3a7f6e3d548dcac37a8357d1e195f4df" +dependencies = [ + "bitflags 2.13.2", + "bytemuck", + "core_maths", + "read-fonts 0.39.2", + "smallvec", +] + +[[package]] +name = "hash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hashbrown" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +dependencies = [ + "foldhash 0.1.5", +] + +[[package]] +name = "hashbrown" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash 0.2.0", + "serde", + "serde_core", +] + +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "foldhash 0.2.0", +] + +[[package]] +name = "heapless" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25ba4bd83f9415b58b4ed8dc5714c76e626a105be4646c02630ad730ad3b5aa4" +dependencies = [ + "hash32", + "portable-atomic", + "stable_deref_trait", +] + +[[package]] +name = "hermit-abi" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17592d60ebacc7d5e169f4663c5f84f9161cc90328abcfe8456f41e4dfcb284" + +[[package]] +name = "hexasphere" +version = "18.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "177ea6330876de4ef08e184f827b98acc037614a4ce409902c5b0d53a9c2e951" +dependencies = [ + "constgebra", + "glam", + "tinyvec", +] + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "hound" +version = "3.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f" + +[[package]] +name = "icu_collections" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" +dependencies = [ + "displaydoc", + "potential_utf", + "utf8_iter", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" +dependencies = [ + "displaydoc", + "litemap", + "serde", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locale_fallback" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "251af8e57c9400e3eb58242fe5b8b1152b2a64fdf4cf632f923c38ccee6f2fa9" +dependencies = [ + "icu_locale_core", + "icu_locale_fallback_data", + "icu_provider", + "potential_utf", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locale_fallback_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "decf2a22ec8fa68f1a0c1129a3f8583f8f8bc24e8b9ccbe98ead99f62a4dc3a8" + +[[package]] +name = "icu_normalizer" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" + +[[package]] +name = "icu_properties" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" + +[[package]] +name = "icu_provider" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d27bbb9d3abbefac45d55f647c9de1d44aafcd1186eb91879afef17c396c3e73" +dependencies = [ + "displaydoc", + "icu_locale_core", + "serde", + "stable_deref_trait", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_segmenter" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82d07aafccd67af15d02512a6adf5896fbc5ed00f2e99b471d2efa14016db3db" +dependencies = [ + "icu_collections", + "icu_locale_fallback", + "icu_provider", + "icu_segmenter_data", + "potential_utf", + "smallvec", + "utf8_iter", + "zerovec", +] + +[[package]] +name = "icu_segmenter_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad" + +[[package]] +name = "image" +version = "0.25.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85ab80394333c02fe689eaf900ab500fbd0c2213da414687ebf995a65d5a6104" +dependencies = [ + "bytemuck", + "byteorder-lite", + "moxcms", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "2.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc4e190f5d26ca7051642629da2c52fc03bde85a03197c99408dcd291734c855" +dependencies = [ + "equivalent", + "hashbrown 0.17.1", +] + +[[package]] +name = "inotify" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cc00ea907cab49550b7da656f80ebb97be1b997d931fbcd28d39734e17ce592" +dependencies = [ + "bitflags 2.13.2", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c033f80b2c113cdf91ab7a33faa9cbc014726dcad99880c8609af2a370edf37d" +dependencies = [ + "libc", +] + +[[package]] +name = "inventory" +version = "0.3.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4f0c30c76f2f4ccee3fe55a2435f691ca00c0e4bd87abe4f4a851b1d4dac39b" +dependencies = [ + "rustversion", +] + +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys 0.3.1", + "log", + "thiserror 1.0.69", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +dependencies = [ + "cfg-if", + "combine", + "jni-macros", + "jni-sys 0.4.1", + "log", + "simd_cesu8", + "thiserror 2.0.20", + "walkdir", + "windows-link", +] + +[[package]] +name = "jni-macros" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +dependencies = [ + "proc-macro2", + "quote", + "rustc_version", + "simd_cesu8", + "syn 2.0.119", +] + +[[package]] +name = "jni-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" +dependencies = [ + "jni-sys 0.4.1", +] + +[[package]] +name = "jni-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" +dependencies = [ + "jni-sys-macros", +] + +[[package]] +name = "jni-sys-macros" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" +dependencies = [ + "quote", + "syn 2.0.119", +] + +[[package]] +name = "jobserver" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c00acbd29eabad4a2392fa0e921c874934dbbf4194312ad20f04a0ed67a3cb3" +dependencies = [ + "getrandom 0.4.3", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce57d20d1ea864ce2ac172ab472d409214f4fd359f0b2a2775abdf522e2af99e" +dependencies = [ + "cfg-if", + "futures-util", + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "libloading" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +dependencies = [ + "cfg-if", + "windows-link", +] + +[[package]] +name = "libm" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" + +[[package]] +name = "libredox" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6480ccc157a1389bb2e4891b24751b0f798ba640d22386f23143fbcc89da195a" +dependencies = [ + "bitflags 2.13.2", + "libc", + "plain", + "redox_syscall 0.9.4", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "linebender_resource_handle" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4a5ff6bcca6c4867b1c4fd4ef63e4db7436ef363e0ad7531d1558856bae64f4" + +[[package]] +name = "linux-raw-sys" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab" + +[[package]] +name = "linux-raw-sys" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" + +[[package]] +name = "litemap" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" + +[[package]] +name = "litrs" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9f8bd3e56ce4dfc153cf470fffbfa98c7620958b312ca5c3a4b8d5181fd13c6" + +[[package]] +name = "mach2" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a1b95cd5421ec55b445b5ae102f5ea0e768de1f82bd3001e11f426c269c3aea" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "memmap2" +version = "0.9.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" +dependencies = [ + "libc", +] + +[[package]] +name = "moxcms" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb85c154ba489f01b25c0d36ae69a87e4a1c73a72631fc6c0eb6dde34a73e44b" +dependencies = [ + "num-traits", + "pxfm", +] + +[[package]] +name = "naga" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2bf919621e7975acb27d881bae2fb993e0d45c8e0446e85e6272971e00dc8df" +dependencies = [ + "arrayvec", + "bit-set", + "bitflags 2.13.2", + "cfg-if", + "cfg_aliases", + "codespan-reporting 0.13.1", + "half", + "hashbrown 0.16.1", + "hexf-parse", + "indexmap", + "libm", + "log", + "num-traits", + "once_cell", + "pp-rs", + "rustc-hash", + "spirv", + "thiserror 2.0.20", + "unicode-ident", +] + +[[package]] +name = "naga_oil" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "319f03062940ed85c03da020042618356bb8ca5263020322930883b05e30208e" +dependencies = [ + "codespan-reporting 0.12.0", + "data-encoding", + "indexmap", + "naga", + "regex", + "rustc-hash", + "thiserror 2.0.20", + "tracing", + "unicode-ident", +] + +[[package]] +name = "ndk" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" +dependencies = [ + "bitflags 2.13.2", + "jni-sys 0.3.1", + "log", + "ndk-sys", + "num_enum", + "raw-window-handle", + "thiserror 1.0.69", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.6.0+11769913" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" +dependencies = [ + "jni-sys 0.3.1", +] + +[[package]] +name = "nix" +version = "0.31.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" +dependencies = [ + "bitflags 2.13.2", + "cfg-if", + "cfg_aliases", + "libc", +] + +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + +[[package]] +name = "nonmax" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "num-bigint" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c89e69e7e0f03bea5ef08013795c25018e101932225a656383bd384495ecc367" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "num-integer" +version = "0.1.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" +dependencies = [ + "num_enum_derive", + "rustversion", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" +dependencies = [ + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" +dependencies = [ + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "libc", + "objc2 0.5.2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation 0.2.2", + "objc2-quartz-core 0.2.2", +] + +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", + "objc2-core-graphics", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-audio-toolbox" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6948501a91121d6399b79abaa33a8aa4ea7857fe019f341b8c23ad6e81b79b08" +dependencies = [ + "bitflags 2.13.2", + "libc", + "objc2 0.6.4", + "objc2-core-audio", + "objc2-core-audio-types", + "objc2-core-foundation", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-avf-audio" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13a380031deed8e99db00065c45937da434ca987c034e13b87e4441f9e4090be" +dependencies = [ + "objc2 0.6.4", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-cloud-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-contacts" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-audio" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1eebcea8b0dbff5f7c8504f3107c68fc061a3eb44932051c8cf8a68d969c3b2" +dependencies = [ + "dispatch2", + "objc2 0.6.4", + "objc2-core-audio-types", + "objc2-core-foundation", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-core-audio-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a89f2ec274a0cf4a32642b2991e8b351a404d290da87bb6a9a9d8632490bd1c" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-core-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" +dependencies = [ + "bitflags 2.13.2", + "block2 0.6.2", + "dispatch2", + "libc", + "objc2 0.6.4", +] + +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.2", + "dispatch2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-io-surface", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal 0.2.2", +] + +[[package]] +name = "objc2-core-location" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-contacts", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-encode" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "dispatch", + "libc", + "objc2 0.5.2", +] + +[[package]] +name = "objc2-foundation" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" +dependencies = [ + "bitflags 2.13.2", + "block2 0.6.2", + "libc", + "objc2 0.6.4", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33fafba39597d6dc1fb709123dfa8289d39406734be322956a69f0931c73bb15" +dependencies = [ + "bitflags 2.13.2", + "libc", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", + "objc2-core-foundation", +] + +[[package]] +name = "objc2-link-presentation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-metal" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0125f776a10d00af4152d74616409f0d4a2053a6f57fa5b7d6aa2854ac04794" +dependencies = [ + "bitflags 2.13.2", + "block2 0.6.2", + "objc2 0.6.4", + "objc2-foundation 0.3.2", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", + "objc2-metal 0.2.2", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" +dependencies = [ + "bitflags 2.13.2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", +] + +[[package]] +name = "objc2-symbols" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" +dependencies = [ + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-ui-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-cloud-kit", + "objc2-core-data", + "objc2-core-image", + "objc2-core-location", + "objc2-foundation 0.2.2", + "objc2-link-presentation", + "objc2-quartz-core 0.2.2", + "objc2-symbols", + "objc2-uniform-type-identifiers", + "objc2-user-notifications", +] + +[[package]] +name = "objc2-uniform-type-identifiers" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" +dependencies = [ + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "objc2-user-notifications" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" +dependencies = [ + "bitflags 2.13.2", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-core-location", + "objc2-foundation 0.2.2", +] + +[[package]] +name = "offset-allocator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e234d535da3521eb95106f40f0b73483d80bfb3aacf27c40d7e2b72f1a3e00a2" +dependencies = [ + "log", + "nonmax", +] + +[[package]] +name = "once_cell" +version = "1.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" + +[[package]] +name = "orbclient" +version = "0.3.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5df339f526ea9a60e371768d50efc2f2508c7203290731565d1f7a6f71d21747" +dependencies = [ + "libc", + "libredox", +] + +[[package]] +name = "ordered-float" +version = "5.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + +[[package]] +name = "owned_ttf_parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36820e9051aca1014ddc75770aab4d68bc1e9e632f0f5627c4086bc216fb583b" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.18", + "smallvec", + "windows-link", +] + +[[package]] +name = "parlance" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6937eda350acc1a5d05872c3cbf99fe78619c269096e2be3d4a350058639d5" + +[[package]] +name = "parley" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fad031076f48f0d4d85ce1aea9b94b4e715a4d636a030a123038f8f5b5e4343" +dependencies = [ + "fontique", + "harfrust", + "hashbrown 0.17.1", + "icu_normalizer", + "icu_properties", + "icu_segmenter", + "linebender_resource_handle", + "parlance", + "parley_data", + "skrifa 0.42.1", +] + +[[package]] +name = "parley_data" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ab9ace3fad1b9ed603ddac5b595e69931fc50263d7e04e4055015b77b02da5" +dependencies = [ + "icu_properties", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "petgraph" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455" +dependencies = [ + "fixedbitset", + "hashbrown 0.15.5", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" + +[[package]] +name = "piper" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c835479a4443ded371d6c535cbfd8d31ad92c5d23ae9770a61bc155e4992a3c1" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" + +[[package]] +name = "plain" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" + +[[package]] +name = "polling" +version = "3.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e4f59085d47d8241c88ead0f274e8a0cb551f3625263c05eb8dd897c34218" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi", + "pin-project-lite", + "rustix 1.1.4", + "windows-sys 0.61.2", +] + +[[package]] +name = "portable-atomic" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85" + +[[package]] +name = "portable-atomic-util" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ab3eb7f3becc3a1cbc4f2c6f20267996cfc1a6467a873763411b136a122715" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "potential_utf" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" +dependencies = [ + "serde_core", + "writeable", + "zerovec", +] + +[[package]] +name = "pp-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "proc-macro-crate" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d595e54a326bc53c1c197b32d295e14b169e3cfeaa8dc82b529f947fba6bcf5" + +[[package]] +name = "pxfm" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d55d956fa96f5ec02be2e13af0e20391a5aa83d6a074e3ad368959d0fab299ea" + +[[package]] +name = "quick-xml" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e660451e55124f798a69a5af3f49ccfbefbd41910eefd25caf2393e1f3473ec1" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "radsort" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019b4b213425016d7d84a153c4c73afb0946fbb4840e4eece7ba8848b9d6da22" + +[[package]] +name = "rand" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80" +dependencies = [ + "getrandom 0.4.3", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69" + +[[package]] +name = "rand_distr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d431c2703ccf129de4d45253c03f49ebb22b97d6ad79ee3ecfc7e3f4862c1d8" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "range-alloc" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca45419789ae5a7899559e9512e58ca889e41f04f1f2445e9f4b290ceccd1d08" + +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + +[[package]] +name = "raw-window-metal" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40d213455a5f1dc59214213c7330e074ddf8114c9a42411eb890c767357ce135" +dependencies = [ + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-quartz-core 0.3.2", +] + +[[package]] +name = "read-fonts" +version = "0.39.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ed38b89c2c77ff968c524145ad65fb010f38af5c7a224b53b81d47ac2daa81" +dependencies = [ + "bytemuck", + "font-types 0.11.3", +] + +[[package]] +name = "read-fonts" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" +dependencies = [ + "bytemuck", + "font-types 0.12.5", + "once_cell", +] + +[[package]] +name = "rectangle-pack" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "redox_syscall" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "737970939a87c6fa31e7acad13307bccbb017a073b695b6089a2c484f929e20e" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "regex" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad8553b9b26413251cbf30e620595c7a41b3887f03da04579c0e6b0d6a06b4b2" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4" + +[[package]] +name = "renderdoc-sys" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" + +[[package]] +name = "rodio" +version = "0.22.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0a536bb79db59098ef71a4dd4246c02eb87b316deceb1b68e0cde7167ec01eb" +dependencies = [ + "cpal", + "dasp_sample", + "hound", + "num-rational", + "thiserror 2.0.20", + "tracing", +] + +[[package]] +name = "ron" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81116b9531d61eabc41aeb228e4b6b2435bcca3233b98cf3b3077d4e6e9debb3" +dependencies = [ + "bitflags 2.13.2", + "once_cell", + "serde", + "serde_derive", + "typeid", + "unicode-ident", +] + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +dependencies = [ + "bitflags 2.13.2", + "errno", + "libc", + "linux-raw-sys 0.4.15", + "windows-sys 0.59.0", +] + +[[package]] +name = "rustix" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" +dependencies = [ + "bitflags 2.13.2", + "errno", + "libc", + "linux-raw-sys 0.12.1", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sctk-adwaita" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6277f0217056f77f1d8f49f2950ac6c278c0d607c45f5ee99328d792ede24ec" +dependencies = [ + "ab_glyph", + "log", + "memmap2", + "smithay-client-toolkit", + "tiny-skia", +] + +[[package]] +name = "semver" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" + +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "simd_cesu8" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" +dependencies = [ + "rustc_version", + "simdutf8", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "skrifa" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c34617370ae968efb7161bb2beb517d9084659aae19e24b89e3db25b46e4564" +dependencies = [ + "bytemuck", + "read-fonts 0.39.2", +] + +[[package]] +name = "skrifa" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819ab7d62b1d3e72d9d9dea5650bac30424f9111364bb94928dbf5ecad1baa68" +dependencies = [ + "bytemuck", + "read-fonts 0.41.0", +] + +[[package]] +name = "slab" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" + +[[package]] +name = "slotmap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd58c3c93c3d278ca835519292445cb4b0d4dc59ccfdf7ceadaab3f8aeb4038" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891" + +[[package]] +name = "smithay-client-toolkit" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3457dea1f0eb631b4034d61d4d8c32074caa6cd1ab2d59f2327bd8461e2c0016" +dependencies = [ + "bitflags 2.13.2", + "calloop", + "calloop-wayland-source", + "cursor-icon", + "libc", + "log", + "memmap2", + "rustix 0.38.44", + "thiserror 1.0.69", + "wayland-backend", + "wayland-client", + "wayland-csd-frame", + "wayland-cursor", + "wayland-protocols", + "wayland-protocols-wlr", + "wayland-scanner", + "xkeysym", +] + +[[package]] +name = "smol_str" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" +dependencies = [ + "serde", +] + +[[package]] +name = "spin" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "023a211cb3138dbc438680b32560ad89f699977624c9f8dbb95a47d5b4c07dd3" +dependencies = [ + "portable-atomic", +] + +[[package]] +name = "spirv" +version = "0.4.0+sdk-1.4.341.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f" +dependencies = [ + "bitflags 2.13.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "stackfuture" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115beb9c69db2393ff10b75a1b8587a51716e5551d015001e55320ed279d32f9" +dependencies = [ + "const_panic", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + +[[package]] +name = "svg_fmt" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb" + +[[package]] +name = "swash" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c2499c2d826531388872b2268718aed907a39bd785ab0dcfe57fab26283f92e" +dependencies = [ + "skrifa 0.44.0", + "yazi", + "zeno", +] + +[[package]] +name = "syn" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12df2e0110f65b775f769bb17ef989067a1d931b2eb822bd4346631eeada89f9" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "synstructure" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "901704edd0dfe137f1987838ee4f259e4e063c31371bdb423f7ae38ec6f77f02" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "sys-locale" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eab9a99a024a169fe8a903cf9d4a3b3601109bcc13bd9e3c6fff259138626c4" +dependencies = [ + "libc", +] + +[[package]] +name = "taffy" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aea22054047c16c3f34d3ac473a2170be1424b1115b2a3adcf28cfb067c88859" +dependencies = [ + "arrayvec", + "grid", + "serde", + "slotmap", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec86235f5fcc2a73650310756d2ac5b138a5780bbbdfae3eeccec992c435ba4f" +dependencies = [ + "thiserror-impl 2.0.20", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc04cd3e1236dd4a98afca4569f2deb3f120e5422a4023be2cb683f8486292af" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] + +[[package]] +name = "thread_local" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad99c4c6d32803332c548b1af0540b357b3f5fc0be8f6c6bfe8b2e6ae784070" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tiny-skia" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" +dependencies = [ + "arrayref", + "bytemuck", + "strict-num", +] + +[[package]] +name = "tinystr" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" +dependencies = [ + "displaydoc", + "serde_core", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3ca314f692efd6c868f8408f53fe444634a845f96c028b97d35f6a1f79f0ee" + +[[package]] +name = "toml_datetime" +version = "1.1.1+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" +dependencies = [ + "serde_core", +] + +[[package]] +name = "toml_edit" +version = "0.25.15+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1340ea94a5856333492c9064b02c778b191dd2c853778d9609debdcdfea3a614" +dependencies = [ + "indexmap", + "toml_datetime", + "toml_parser", + "winnow", +] + +[[package]] +name = "toml_parser" +version = "1.1.3+spec-1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" +dependencies = [ + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-oslog" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76902d2a8d5f9f55a81155c08971734071968c90f2d9bfe645fe700579b2950" +dependencies = [ + "cc", + "cfg-if", + "tracing-core", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7f578e5945fb242538965c2d0b04418d38ec25c79d160cd279bf0731c8d319" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex-automata", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "tree_magic_mini" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" +dependencies = [ + "memchr", + "nom", + "petgraph", +] + +[[package]] +name = "ttf-parser" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" + +[[package]] +name = "typeid" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" + +[[package]] +name = "typewit" +version = "1.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "214ca0b2191785cbc06209b9ca1861e048e39b5ba33574b3cedd58363d5bb5f6" + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "unicode-segmentation" +version = "1.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" + +[[package]] +name = "unicode-width" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef6dac1e96601b4fb3acccccff2139741fcb757cb9a36089bf5be91cfb285ce" +dependencies = [ + "getrandom 0.4.3", + "js-sys", + "serde_core", + "wasm-bindgen", +] + +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + +[[package]] +name = "variadics_please" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b6d82be61465f97d42bd1d15bf20f3b0a3a0905018f38f9d6f6962055b0b5c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasip2" +version = "1.0.4+wasi-0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67efb37e106e55ce722a510d6b5f9c17f083e5fc79afc2badeb12cc313d9487" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aecb87a33d3b0c5e3b7aa46336eaf486cffafbd281b195e4c8b80d50df2351bf" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ef4c5d3d2cdf5c54f4231181768f5510842e350db025faf1f7163b1030ed928" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a690d511e3c1a8b3a55e33511e3c2c00c78415cd23650f32b808627f5696b9ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "411e4887f0071ef2d2164a9d5fdf2d20efbef78fccd3a78b0c10a1dc5295e48a" +dependencies = [ + "bumpalo", + "proc-macro2", + "quote", + "syn 3.0.5", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81941cd78d0c92026c33e5e01312845a4cb1e9af3407f9134b100dd03144103e" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "wayland-backend" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" +dependencies = [ + "cc", + "downcast-rs 1.2.1", + "rustix 1.1.4", + "scoped-tls", + "smallvec", + "wayland-sys", +] + +[[package]] +name = "wayland-client" +version = "0.31.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3c36a0f861ad76d0901f2800b46321410d9f73f2ea88aac0650d86c32688073" +dependencies = [ + "bitflags 2.13.2", + "rustix 1.1.4", + "wayland-backend", + "wayland-scanner", +] + +[[package]] +name = "wayland-csd-frame" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "625c5029dbd43d25e6aa9615e88b829a5cad13b2819c4ae129fdbb7c31ab4c7e" +dependencies = [ + "bitflags 2.13.2", + "cursor-icon", + "wayland-backend", +] + +[[package]] +name = "wayland-cursor" +version = "0.31.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a52d18780be9b1314328a3de5f930b73d2200112e3849ca6cb11822793fb34d" +dependencies = [ + "rustix 1.1.4", + "wayland-client", + "xcursor", +] + +[[package]] +name = "wayland-protocols" +version = "0.32.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23d0c813de3daa2ed6520af85a3bd49b0e722a3078506899aa9686fea58dc4b6" +dependencies = [ + "bitflags 2.13.2", + "wayland-backend", + "wayland-client", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-plasma" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b6d8cf1eb2c1c31ed1f5643c88a6e53538129d4af80030c8cabd1f9fa884d91" +dependencies = [ + "bitflags 2.13.2", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-protocols-wlr" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb04e52f7836d7c7976c78ca0250d61e33873c34156a2a1fc9474828ec268234" +dependencies = [ + "bitflags 2.13.2", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-scanner", +] + +[[package]] +name = "wayland-scanner" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338e30461b3a2b67d70eb30a6d89f8e0c93a833e07d2ae89085cd070c4a00ac0" +dependencies = [ + "proc-macro2", + "quick-xml", + "quote", +] + +[[package]] +name = "wayland-sys" +version = "0.31.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8eab23fefc9e41f8e841df4a9c707e8a8c4ed26e944ef69297184de2785e3be" +dependencies = [ + "dlib", + "log", + "pkg-config", +] + +[[package]] +name = "weak-table" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "323f4da9523e9a669e1eaf9c6e763892769b1d38c623913647bfdc1532fe4549" + +[[package]] +name = "web-sys" +version = "0.3.105" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fbddc4a036f00ec4f18c83445bd3115cb306a91da554919a099d9222fe4a7f8" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-task" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cdc136a53ccd64a1211f107ccc34404769fbcc0f165f1afa065f5d88ab93538" +dependencies = [ + "async-task", + "cfg-if", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wgpu" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76e8840e1ba2881d4cbb18d2147627a56af426ff064c0401eb0c8410c6325d07" +dependencies = [ + "arrayvec", + "bitflags 2.13.2", + "bytemuck", + "cfg-if", + "cfg_aliases", + "document-features", + "hashbrown 0.16.1", + "log", + "naga", + "portable-atomic", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f519832254e56965a9940c4af57dcb75f702b6f6fa4a0b172f685395843a4d7" +dependencies = [ + "arrayvec", + "bit-set", + "bit-vec", + "bitflags 2.13.2", + "bytemuck", + "cfg_aliases", + "document-features", + "hashbrown 0.16.1", + "indexmap", + "log", + "naga", + "once_cell", + "parking_lot", + "portable-atomic", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror 2.0.20", + "wgpu-core-deps-apple", + "wgpu-core-deps-windows-linux-android", + "wgpu-hal", + "wgpu-naga-bridge", + "wgpu-types", +] + +[[package]] +name = "wgpu-core-deps-apple" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5e39e26c4c0e07589e67d18546cf79ff45383659fc72fca4dd293358a0347f3" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-core-deps-windows-linux-android" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e592c1bbef6ad047647ae6e666ebd8cee7a32bb4544d9700ec96cbf73230257" +dependencies = [ + "wgpu-hal", +] + +[[package]] +name = "wgpu-hal" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97ace1c17727311c22a46e4e3faf56ea6de81af99dcc839bdfb54857b94d448d" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.13.2", + "block2 0.6.2", + "bytemuck", + "cfg-if", + "cfg_aliases", + "gpu-allocator", + "gpu-descriptor", + "hashbrown 0.16.1", + "libc", + "libloading", + "log", + "naga", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-foundation 0.3.2", + "objc2-metal 0.3.2", + "objc2-quartz-core 0.3.2", + "once_cell", + "ordered-float", + "parking_lot", + "portable-atomic", + "portable-atomic-util", + "profiling", + "range-alloc", + "raw-window-handle", + "raw-window-metal", + "renderdoc-sys", + "smallvec", + "thiserror 2.0.20", + "wgpu-naga-bridge", + "wgpu-types", + "windows", + "windows-core", +] + +[[package]] +name = "wgpu-naga-bridge" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95226013f547544b223281cd16a4fb549aa9dcb562adbda0faae4c73ffbbc161" +dependencies = [ + "naga", + "wgpu-types", +] + +[[package]] +name = "wgpu-types" +version = "29.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84bf84cd9ca8ca45e2b223a3868f1adf9bfc0c66aeac212e76ee7e40fdadf8f5" +dependencies = [ + "bitflags 2.13.2", + "bytemuck", + "js-sys", + "log", + "raw-window-handle", + "serde", + "web-sys", +] + +[[package]] +name = "winapi-util" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "windows" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527fadee13e0c05939a6a05d5bd6eec6cd2e3dbd648b9f8e447c6518133d8580" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b2d95af1a8a14a3c7367e1ed4fc9c20e0a26e79551b1454d72583c97cc6610" +dependencies = [ + "windows-core", +] + +[[package]] +name = "windows-core" +version = "0.62.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d6f90251fe18a279739e78025bd6ddc52a7e22f921070ccdc67dde84c605cb" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", +] + +[[package]] +name = "windows-implement" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-interface" +version = "0.59.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-numerics" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e2e40844ac143cdb44aead537bbf727de9b044e107a0f1220392177d15b0f26" +dependencies = [ + "windows-core", + "windows-link", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows-threading" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3949bd5b99cafdf1c7ca86b43ca564028dfe27d66958f2470940f73d86d75b37" +dependencies = [ + "windows-link", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "winit" +version = "0.30.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d" +dependencies = [ + "ahash", + "android-activity", + "atomic-waker", + "bitflags 2.13.2", + "block2 0.5.1", + "bytemuck", + "calloop", + "cfg_aliases", + "concurrent-queue", + "core-foundation", + "core-graphics", + "cursor-icon", + "dpi", + "js-sys", + "libc", + "memmap2", + "ndk", + "objc2 0.5.2", + "objc2-app-kit 0.2.2", + "objc2-foundation 0.2.2", + "objc2-ui-kit", + "orbclient", + "percent-encoding", + "pin-project", + "raw-window-handle", + "redox_syscall 0.4.1", + "rustix 0.38.44", + "sctk-adwaita", + "smithay-client-toolkit", + "smol_str", + "tracing", + "unicode-segmentation", + "wasm-bindgen", + "wasm-bindgen-futures", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-plasma", + "web-sys", + "web-time", + "windows-sys 0.52.0", + "x11-dl", + "x11rb", + "xkbcommon-dl", +] + +[[package]] +name = "winnow" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" +dependencies = [ + "memchr", +] + +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + +[[package]] +name = "wl-clipboard-rs" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9651471a32e87d96ef3a127715382b2d11cc7c8bb9822ded8a7cc94072eb0a3" +dependencies = [ + "libc", + "log", + "os_pipe", + "rustix 1.1.4", + "thiserror 2.0.20", + "tree_magic_mini", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", +] + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414" +dependencies = [ + "as-raw-xcb-connection", + "gethostname", + "libc", + "libloading", + "once_cell", + "rustix 1.1.4", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd" + +[[package]] +name = "xcursor" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "163b33ed8786455e2fa5d72f554057ce3f3182425434f756cd39c99839d88e23" + +[[package]] +name = "xkbcommon-dl" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5" +dependencies = [ + "bitflags 2.13.2", + "dlib", + "log", + "once_cell", + "xkeysym", +] + +[[package]] +name = "xkeysym" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9cc00251562a284751c9973bace760d86c0276c471b4be569fe6b068ee97a56" + +[[package]] +name = "yazi" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5" + +[[package]] +name = "yoke" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "709fe23a0424b6a435d82152b1bd3fdfb0833487d5fa90d05d42762a9891fef5" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33811428bee40dbceb6d545e95754741d17a6aef9a4849f0fd62e2ba4f412a78" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", + "synstructure", +] + +[[package]] +name = "zeno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524" + +[[package]] +name = "zerocopy" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d35102a9f36d089ccae9e4c6802bc118be4487b80aaffc0ab4e0cf5ce92d2873" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c01f5ab44258da43cf276c74a2763db2ff3969c9c652c3f2de07041d0b2bc" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.119", +] + +[[package]] +name = "zerofrom" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ec05a11813ea801ff6d75110ad09cd0824ddba17dfe17128ea0d5f68e6c5272" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f75b4683f6c7f45248d4d64056a24298c6281e0993356d7d1b4a1a962ef10d4a" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "zerovec" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" +dependencies = [ + "serde", + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34df6fc39dbd26ddc9c10e6a2984476e13acce22e64e4487636ef494369225da" +dependencies = [ + "proc-macro2", + "quote", + "syn 3.0.5", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..6bac865 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "first_person_maze" +version = "1.0.0" +edition = "2024" +rust-version = "1.95" + +[dependencies] +bevy = { version = "=0.19.1", default-features = false, features = ["std", "async_executor", "multi_threaded", "bevy_asset", "bevy_log", "bevy_state", "bevy_winit", "bevy_render", "bevy_core_pipeline", "bevy_pbr", "bevy_ui_render", "bevy_text", "default_font", "bevy_gilrs", "bevy_audio", "wav", "x11", "wayland", "keyboard", "mouse"] } +serde = { version = "1", features = ["derive"] } +ron = "0.12" + +[profile.release] +opt-level = 3 +lto = "thin" +codegen-units = 1 +strip = "debuginfo" + +[profile.dev] +opt-level = 1 + +[profile.dev.package."*"] +opt-level = 2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a30d83 --- /dev/null +++ b/README.md @@ -0,0 +1,100 @@ +# First Person Maze + +A native Rust / Bevy game. Collect every pellet in the maze while avoiding four +ghosts. Power pellets let you catch ghosts for bonus points. You have three lives. + +## Play + +Run `first_person_maze.exe` on Windows or `./first_person_maze` on Linux from a +release package. Keep `assets/` next to the executable. A graphical desktop and +working GPU drivers are required. + +| Input | Action | +| --- | --- | +| W / A / S / D | Move / strafe | +| Mouse or left / right arrows | Look / turn | +| Enter | Start / activate menu selection | +| Escape | Pause / resume / leave settings | +| Arrow keys | Navigate menus / adjust settings | +| F3 | Toggle performance HUD | +| Gamepad sticks | Move / look | +| Gamepad D-pad / south button | Navigate / activate | +| Gamepad Start | Pause / resume | + +Losing focus pauses the game. Settings include resolution, fullscreen, volume, +mouse sensitivity, keyboard-only camera, head bob, 30/60 FPS and low graphics. +ARM64 defaults to low graphics and 30 FPS; other architectures default to 60 FPS. + +Settings save to `%APPDATA%/first_person_maze/settings.ron` on Windows, or +`$XDG_CONFIG_HOME/first_person_maze/settings.ron` on Linux (default: +`~/.config/first_person_maze/settings.ron`). Delete this file to restore defaults. + +## Build + +Requires Rust 1.95 or newer. Keep `Cargo.lock` and build with `--locked`. + +Windows requires the MSVC Rust toolchain, Visual Studio C++ Build Tools and a +Windows SDK. Linux requires native development libraries; on Debian / Ubuntu: + +```sh +sudo apt install build-essential pkg-config libasound2-dev libudev-dev \ + libx11-dev libxi-dev libxrandr-dev libxcursor-dev libxinerama-dev \ + libxkbcommon-dev libwayland-dev libvulkan-dev +``` + +```sh +cargo build --release --locked +cargo run --release --locked +``` + +When building from a network share, use a local build directory. In PowerShell: + +```powershell +$env:CARGO_TARGET_DIR = "$env:LOCALAPPDATA/first_person_maze/target" +``` + +Linux also needs a Vulkan loader and GPU driver at runtime. For Raspberry Pi, +use a 64-bit desktop OS and a working V3DV driver; build natively on the device. +Linux, ARM64 and physical gamepads have not been validated in this cleanup. + +## Package + +From PowerShell on Windows: + +```powershell +powershell -NoProfile -ExecutionPolicy Bypass -File tools/package.ps1 +``` + +From a POSIX shell on Linux: + +```sh +sh tools/package.sh +``` + +An optional target triple can be supplied as the first argument. Cross builds +require the corresponding Rust target, linker and native target libraries. +`CARGO_TARGET_DIR` is supported by both scripts. + +Packages are written to `release//first_person_maze/` and contain only +the executable, this README and runtime audio. Each packaging run replaces the +previous package for that target. Distribute the folder as an archive. Windows +players may need the Microsoft Visual C++ runtime; Linux players need the +system libraries matching the build environment. + +## Audio and maintenance + +Seven synthesized WAV effects are included. To regenerate them, run +`python tools/generate_audio.py` (Python is only needed for regeneration). +Add your own licensed `assets/audio/music.wav` to enable looping background music. +Geometry and the default font are generated or embedded. Missing audio is skipped. + +Before packaging: + +```sh +cargo fmt --check +cargo clippy --locked --all-targets -- -D warnings +cargo build --release --locked +``` + +Manually verify start, movement, pellet collection, ghost contact, pause/resume, +settings, restart and result screens on each supported platform before release. diff --git a/assets/audio/death.wav b/assets/audio/death.wav new file mode 100644 index 0000000000000000000000000000000000000000..49664b4bce577a6b345052b69fe07b13ac843055 GIT binary patch literal 26504 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 Z*`mnuv?k^M`u_BHBH#b>-+xof{{t(l{A>UK literal 0 HcmV?d00001 diff --git a/assets/audio/defeated.wav b/assets/audio/defeated.wav new file mode 100644 index 0000000000000000000000000000000000000000..d508ed27cb2e8d252efd973a99cd5d9c2156afbb GIT binary patch literal 9302 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 literal 0 HcmV?d00001 diff --git a/assets/audio/game_over.wav b/assets/audio/game_over.wav new file mode 100644 index 0000000000000000000000000000000000000000..b50524a11d379ccc7663cef32d3a51674ee7390c GIT binary patch literal 38852 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

T7`(P|?cmi3KJpZkmMEH; znXEN#w-xX|^^e#gmO&uqmK4S3 zRi3M?q&Qx$OpvaA@kjA(R$EC}tvZS;isQsqXp&8|p;k~MBDk%6Fc&=`R}vtsAHW(d zi;j&qT-vT~2nZxSK8szh5rb54)0qm(bBA!f~*P(uqS=Tp2X zxv9~?a3Y78MSZxC%VComjQejj^w=3n^BgApt2mW)Kq^lFZ?T`X3SSGI$QA}{S4nx0$#xdjd2XO(64xw8bHIv z$D+|>XsJukciSk-;_rOduedFLf$*A%v1=K|&t25xO{gERcU?+4g86}$vQWRd z#QCVX0{odBGgwr8f=3-c@LEM*`&@qY3o>u6VE0lCSWY8qmCY|X2 zRk3;Hr4&Y}J_#pbf>D0$MJ%~}bHT|&)cP2OAErZ9hbMK$Q4xNYB+eNQR;vUYWy-lRV z!)XlzXnlRLwe{ui0gPh9C|!oLYZmWnIdkteXsF}NMR)ivA84O`EKyqSRc`KBd0J`% z`fNumS^c4~MqxLa%;-HGbK5LxZ8m?-fL;3qN_q^O)*y(nuH1*_l(9PhyBO~`3&c!@ zL(2z0^n=j4Lkl=d%^sk<+o7`7(ZiCMvzFl)%ea;J z|6sKolvBig(o+i=POZYMb<0yPHE9P8so$2=Q#*WO9U<5hR90 ze5baGeD`c+hEvi(bBd`^FLj#A{eQ>LdPbkU3$b;L)^?FHoTYc1g00KAPVxE-AG-hx zcNL~9gWr0@|9Hhp=_6EC+W$gtCBld0q`dhVuZuuzm4F*7!^l+@IxpkOcvXgvmE?0p zzmr_~zH?kzS<%JART;jUxMY+wM#~RSRu`pBr@Y@NaR$Tno^rq8dQGeQ*Y%ozzvbia zxx@b=x-#rsw*Pc<{ouJWG8f9I)eJLN2G5mY<@!N$S@`Mk^o)OB8UOx4cl}_y{!MlX z-)&u>IDEH^U;mx#%AmLYO?7dE^FOa2lvl>*{yX8tk*)tPd)L4Ct{;E@UzFGX59cMJ zmNQZR88q%J#)ud2`ZbtykFbAG1seY*Pv*Tj%OIAuma$tYtIHGQ2YE@%;ujPOWdr4G z83y=Xqf-`->xm27*O+pHytVv^tR-jA zOG{TuJUk6=gy1b7n-D$934?;+E}`E!xu4=shslqbaLXYNR-l_a#qCZk1dixlnRpvJ$pQo|1e#S%go?44cyNZZ~Tju>Z{>YBr3E^KP~U>O>p7T-PLQbN|m0g2lZpCkqn^_dbfnKDHaUnlNM z9Ftfy@kzqy1X;p7JXJ$2_u}%$jW8cHB^wisKN&jehw3JgFKn86l4`inQ`uBe9;!zq z{UE+9+Rk1zYu9kaP_CdZ5c7GwcFyDbT}oGWXH`cp`%>EtBK)23e#NCt#~C#(#gwu? zxpT5P`PsJ}-{yWB^KB@<=Y9M8+w*Uh2ZE?y>LJFJn_ErefGNovQVaQ3HGG_NrO|a{DLG8!;Z<6JIc$#QS3DfG=sFYb#eNC^y|nN zC^7wIs%3s)ZXfp`uBK&+C1hz3KPUbqR9`q=lb}nGCZxsRh+hpil@Nc?(#H~rn;9pG z8*hGZs%=_j{9-6#7@+@CcTJm46f3{F5_y?gD%&eM5npX5Z6#?Ut|zJ)s~W8sDHkq> z1*BS_fxjJDqGphv>AK6~EbQ#(_#2N)3)?>n zCX0EgSsFJu?s{BiOApH$%XLetMG~)v8WWRY^Ri`yrIW>MIUm<2E@YmE+iI4{g^B2h zL1k#GPtrZo3gmC=uAZh^Cmd1URJ@db#h4%BG>0H&9>k-TmyB|iaqV=*AM+b0`0wEh zEb8v#+5!<#8Op?A>tef$ndm`!AM*WeOY4wkN&6>tf9m4YiK!z}N2X3qU6pz|H7&JZ z+Aus_S<`2vyV8eQUDg@4EcTQ3zQob*Iv2Uxx$}B_p8MXtzNP*Nf!@Iu#3)Ng@^QvO zBZ`S!;?I&N(o3?v@|AdcItk@eD)kHXW=&shF5M&DRDE8}8tfn@Vr1_zX6RFgsOxxS2kmhLWoiWZvL z>Z7Xnf*=$jXINkPFS4a%);JDP3yB{UMJbCqXQ}(KD~D@@ z^M<2{V>!;P88#)E2TM{PQ`0LjeqJRTcQVccgZWLSkDv#0KaR-!3|{fi22ICS6l2J zr#%zBRefSC41WfOafUxDj`IhRJ<;D{14MPjxj5hU2v5?l@@9%G%8$ywgnp`=>WAuS zngZIZ+V0fG1ifEBf;pw0akJ55tYMmJI%0ZnlJd?AnTwk9nayUO>49mpX`m@Tezobw z+{P2+vAd&h0x?ojw?gaDG}mk*@>xMOK{%?kEAqo)%!3wsPZou;;;y3EvAygqN+YGP z1}zO~>eYCT|~joXqYit`ui?=SxR7M~Z!lJ)8X^ZmOa-tM!z1DY+QCSX)?| zS=(6$SZ7*yTAy1@WF_2a^Vr(bGm1DiJMuVpIxD&Ex(2)TWMJ;^&FXth|7a7)#NO)e z(8O><&b+2Z&%_pqdJxfzNp4G%WIg2h6kilulwAcQ{)vHVjb;Z_)E#X*-4k6i{TY2e z!%Qfng5)mTW_(Jf=4_@?rmCi&Ol3{EOfu6O<392#mN%vtRvIcB9_#z-9psR+Y5QpJ zYbt7z)K0Q>B?)9AR1P5y_>Hr?oyqQZh11T(M7?4wqBkRAnDa5A1H{uS1g7|J`m(aR zxa%q9S>;x^e}PZ=6~oh7GVQ&#FR<6N$MCDIqE6b|>e#Aq)wOl7jkc|}UAKwswd}vy z-`FdY3r}!Ph7Xy5hh~Ypfajv8uUF$c>KowC8hDIHs5$Y?hvAixu0-Qf$Obo#$WaWk zdODPdU%pS#OKHG%(M=Urtxy*x?^jjrNo^V3W}R9;Sbs?$XXtELWw>hy8gdvb85Zf zk7ooi{++(2%pV&A&4VKHL<|Y%#|N^8JPc-@Rp)aqJ1jYbwJVGKhJ36dyYf6S{-Cg! zezJr7i95;Gw?ym5;dM|a(>K>I)?e2LAQEfAc?~cOF$^+vH#9O7Gbjx&$ZXhGp95Rf zMC#$Fwz2k^rkm!Cx}*9wW|3{M3xmm0l}j;BeuGoz1EhyIo8M6U2P0>G>_?~A7i<^a z9tsc}+)1=`p#QF~l5dAMyLT1#oQ-fc7hK(N&+de@vOw8xaEx#?b`*0YI#dohzvCHQ z8#snIRy*z?sA}!p;B=EW^q?!7`**k0GtDC<0-njY%U25)=NBwMmxDuyCSMMZj^xFE zKAS8IUqwmc26%Hf5&LqJq*G&RW8^aK^RMRraFpk za+$oR>?CosfkdNB;(nr&WUA^DJrOZR29bp)4;hKR5@kH;FYI6MOZ2VqX7+A|IlJcW zgGFl}HmF3`Q+Tey&RWhKPMOo;`0DuNNOAZu#}%gCOmgmXrZ|hc#=EY&a=E9vKe=0Y z&cl5i@|MFjQjhFP0|JpiQm`yJJH~_)Bc~(1Au9GkDuhLwsf$!7m16h<`rtlUNXyuv zEGZlmN>Uq{)pOKo>Smh1G(qxw{-(XjgIg(GM;u&B={LJ|dv!Z>Yp8(%kYI_rPt@1| zZB9mrNt*1MQ|i|0PpT0rpDkz02-=?!4hV z&vn)Lm>N*Jin`jn=DRM!Wi@suxl`TsJli}P?|AQ5Z#UmFUwi)xe@_UQi9vN}eW+ZR zETrtCu8me=CvK!j$G&1+Vt8YuDk9>=uN;IH#1a1D%lFoVHa49iD5E!h=DjhdP8~)_IrJE7()+x+j{+; zEuJ(6O4oY0v`enH)Io9TYlZuvJAvBUPd2<>Ua}VY z{$Lgz>rcaG^fmA^k>Uv<2~nFIoF}iru5MqRkmqxjcDJ~i8 z(1*(EkReK(U8nK>b%wZmug=Q*{6(`xb4l}BW7mW=Vy#H)$3gZ;bCk@AKWnN`3)g8$ z)zo&?T2&ormzhFVVV|;w@|L2F;<>z&{JE^H><)3BQ|$V0VXto+emD>=jtsXgw z#bXy4-F9K@fMf|gB6nB}mZTc4xh39O)W>1Zcux(F-t*CY7WdXX_c*w`0q#Lq)uy{w zx(~UZK)MzuJK@tX``ghNnubzDRbza;ne5QnDMqQcl9Xv1+Qs8Y8{9%2p}+dmGNuF#!7YKRfoGU1!lo|c||aBG`AH^^IBh}N*)`<|?TV|`bB+5F@DPy7|h zMy3pop(fggZiQ+SXR1gPsx-UeCE3R-&R#_kq6qoPiIP>ij9&7KEM3+`eg*D&iNekr zbgR;*tS>B~KH^m^RkKw`RBu%>M#F0Amg?^6{`kWBs=KJ0s4J+msDr9Uj4$IC3ghKeMK;Azc{5m;(K4}YkuR~5?WKDiGkc{?)O=D|xS^F|oTw2z$|NhMSU%Np^a@gneGM4?sZA2NK!1V|?V`@g;5^K&Az7`rrHp(l( zvCtfE1FHiaFgU&O@1U(W^yl;keJ_1ysg)J5kyCw>F@?>5^jb@{&>Oz5J{7!LXa9UM zG`jpHXb<~&0;@rbcoi%jnn6yyvP6p0$nCl-qJ`9W2uZny6QaF2eO;K?PrA4n9t)MU zuk@@mUN#6CM1wPEqx=i@r-6zsWKq;Bt0@P4=d2zmQ%P4~60!^Vg+f9BAs3l=6@p9o zl6}5)%JItP%G^qu;v`f~U4=|>K|WbtTK-wK62ibPT|*o{nOJBU82fRYk3Ysvw4XE4 zm18f78s#K=*g(8K$HRTX#_ztN0-@Kzq+mM;mzRM}ysMwElYQ}Dz(h97KZHz~4gJ-~ z30W43>?d+FwujW3PJcQL^(Nq#>I-vpH=rUb-`wxkq|Pu#ZkVkkJRr4ja5y53qg&w) zx)6;ramxBSo}yof*%g<}lsuOdCEwO9X(pUof6Hu)q9ZXVeUWEXG*e8bh1^!yzGqUb z!8*F9axlGTG;4;Rl|7U#si^|^&C-~Sx4`o?hWPm;-_8FoD|f}#5fQ9LEO0SV^$*w)D&e8|BT_5k3~wXWZwlWG&4Krjhi>3G>q7eo1n$7~ zO%L>Beknp`NGV)(I(bUJ;N7(QgMJl#sSNo_gxD(bOCEt9yr{UOIIlRN*sIv6SVRrGxZ!xi98eL1iRizUEW@A@AxlwjVrf^1Kot}{C&x-v;`SSuRh7{*d0~=MPU?wQD4}sf(6M?@28?dh}4=m&UuZJ=_8n}+1(evG) z)h0Lr8tG0j6f8zoyd-kMX&8s*hOa{>w1}*T{KMYOP;3wqOcASyAQUH>bBVQ92P_z0 zX&Ix)vgMOhgqJu#9=N=CnSP_Ue1k}=g1>4S868iMN%6DXE0-zs5ObNh;&~-icwxZq z!&R;4t9r<*;+RW;VqGljhNH*@Wiy@igpv_+4!PV!&{gBarQoYJbI#v_=WPyg=wS3P zeYaRNnaKJ;GKN{9PA9>y8N#n&CZ~nkFK8t@VFe6O^FoIqoZ_j6De$4zaN$UQ+&Ld2c^Ip=MZa=#Whn6} zcdQ~Yx-;x*)gu4c1w1O%8Pg8q!O8zUN8UL+RaxOIhmte!2$nXdOh+cg%JRmn68bXJ zjFOMx8X+IVyKfDjS5lr?E@EW3#!NJmS}0HMkJs3)eud*nkiNrZGn{yTfVlcpaV?xI zmxw;pB_eZ`x@Ztn#WFIfwI*i&I@1a>lmuu3xG7G0%tq0lV9n8fv)?Edma2|*E;)&`{=G1~= zP1qTFNxs~JywBxiW1NlwaC~T7XaaoO3~DNgvGFJ~=G%}rWDFMzH-?K^2*2|TUs6G6 zsVNXpFJUCA(mOUVe<+CZ4kxDj9G^xlX0)B6*U)9P#be;Z9y7O=!pJp8vQP4qr}$jb z+C+$^VSYObZT3m(XDyZqcB=&Mw<_6IYsjj}D$B}{WitmECdD!vMCxUHY)k27?WGl@ z7FL(H8HIj@1}e-babLWJpHoj9FaE?mm`NNn7uh(^l6R>aPLc@m{EhGt^LY%&f_D)Q=hh%!u1DXSfLDa{X`z_^PSQ75lmgrx`TJTmuok#HuI6id}b^bwbtaKEzGlc z0PosGTG(tnZ*}0UL$Hzi@f!6OSH?c`m7e(rcBg8@Zj-5t}@Z7Y7v9uGbjzZK)ly?3Squ5!-lE2B`yAFCY35IYD4zI1@-QlC;sJs_`gFQ?=P40bBmh4w`Iw-WtzVJfXfc@}YpUNUCnqvZ}J z2i#sfN9pVZ7vw#3!xXU)57|*@sh2RGUWr7imBzz%<-&=UpLrnx26~VXE3r=hel-Va33D8<{_5Z%(&FfS2s@F)IMs!po|D+~M_7X&x$Rm~8=2@S zA7~x>Fq2J#hi*$g$YSK+Rzb+6Fc01*E9t4oK~{|0=tJva3)ey;ZeV8EK^r;}IZNMq z%=@=SBCIL1W9q6+D;v!BN`jZWisj80HA2(W!^blTqG3O+;wwBwcKE?I*wN-Ox1ECD zNr$1#2A$LpzGoyk0+V=VJ0ZSK>;5FR!vM~^E^e075VtAp#SRJ3q35AQNF`5@yMXU+T>&%d(s(ZYPT zGVi`AR>Qtj>_!{XFsi#XDak zUPg%ZhP2cY7+or}KIa85$SCe642m z{R^J=1a#mX>hmM)S2(JMY%D;ls}pMjKQ@Xieajdp4pS3PX%&7*u*?u1RbU}IL!3>d zbtG}m4pSp{Dft&N6-F@M8M&i*Ftn9|Mg2)!lR2Ov?ysgW0?ql|l-CXMgVn^WR)Mc6 z%-3cSn>p_h!-19ZJ=5Ve+T32|&*jwkL|DGAFfcW_3wdZ2^8b?O?*OG+$?WE!0TEk*${V!VLIeN!)TBQTJL!d0VXs4A}@3f#k`uztTwTL>|2<^6? zr}=X{x!tCRKZEId2QU2)5e*qHg5c?uq*(X|# z@oENjFanyX8$GfS6i|6MoLq1%S|R~{7^P1*${xV`oQ0>_&1}C0B548l?icJ^!(hOA zGxK%ij<$dVYe-M8%__A9Pqx)Cr)B(EoqyM&=ITSXHDjfcVdv@&e>I4;!&sg*W>CXR z;GNdPKJDcx>?~`myR?Y6v{{?u}rapG13} z2|c=i9=;UI591x)$t~*YCOp`Gy)r&>i_hKRUT0)!d;lqy zk*Dz)-{BRk)*HUx4>s!?aj`U7f`dBnu+#f5*Vez;EEOYIM$W_xHY<*Plfh+W;?8BJ zGgXH=b$CZ(H@kiFhA0$^s-o*@-OPm37 z{RhqUKXWhs?@ZUf>8^jh`ZwkEUrDbYxf=hSt?>u(75SdAF`6Ov;@9^d|9|}PZ;RKD MSO3SC{g)5_KjhNksQ>@~ literal 0 HcmV?d00001 diff --git a/assets/audio/pellet.wav b/assets/audio/pellet.wav new file mode 100644 index 0000000000000000000000000000000000000000..46c7b69c7a55cbe4f0f795b8862922de3e7d1058 GIT binary patch literal 3128 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 MMf|w`Z+_f=0U+(e;Q#;t literal 0 HcmV?d00001 diff --git a/src/audio.rs b/src/audio.rs new file mode 100644 index 0000000..4b68dd5 --- /dev/null +++ b/src/audio.rs @@ -0,0 +1,63 @@ +use crate::settings::Settings; +use bevy::{audio::Volume, prelude::*}; +#[derive(Clone, Copy)] +pub enum Sound { + Pellet, + Power, + Frightened, + Defeated, + Death, + Victory, + GameOver, +} +impl Sound { + fn file(self) -> &'static str { + match self { + Self::Pellet => "pellet", + Self::Power => "power", + Self::Frightened => "frightened", + Self::Defeated => "defeated", + Self::Death => "death", + Self::Victory => "victory", + Self::GameOver => "game_over", + } + } +} +#[derive(Resource, Default)] +pub struct SoundQueue(pub Vec); +#[derive(Component)] +pub struct Music; +pub fn setup(mut commands: Commands, assets: Res, settings: Res) { + if std::path::Path::new("assets/audio/music.wav").is_file() { + commands.spawn(( + Music, + AudioPlayer::new(assets.load("audio/music.wav")), + PlaybackSettings::LOOP.with_volume(Volume::Linear(settings.master * settings.music)), + )); + } +} +pub fn play( + mut commands: Commands, + assets: Res, + settings: Res, + mut queue: ResMut, + mut music: Query<&mut AudioSink, With>, +) { + if settings.is_changed() { + for mut sink in &mut music { + sink.set_volume(Volume::Linear(settings.master * settings.music)); + } + } + for sound in queue.0.drain(..) { + let path = format!("audio/{}.wav", sound.file()); + if settings.master * settings.sound > 0. + && std::path::Path::new("assets").join(&path).is_file() + { + commands.spawn(( + AudioPlayer::new(assets.load(path)), + PlaybackSettings::DESPAWN + .with_volume(Volume::Linear(settings.master * settings.sound)), + )); + } + } +} diff --git a/src/game.rs b/src/game.rs new file mode 100644 index 0000000..665a8f1 --- /dev/null +++ b/src/game.rs @@ -0,0 +1,147 @@ +use crate::{audio, ghost, maze, pellets, player, settings, ui}; +use bevy::{ecs::system::RunSystemOnce, prelude::*}; +#[derive(States, Default, Clone, Copy, Debug, PartialEq, Eq, Hash)] +pub enum GameState { + #[default] + MainMenu, + Playing, + Paused, + PlayerDeath, + Victory, + GameOver, +} +#[derive(Component)] +pub struct WorldEntity; +#[derive(Resource)] +pub struct Session { + pub score: u32, + pub lives: u32, + pub remaining: u32, + pub power: f32, + pub chain: u32, + pub elapsed: f32, + pub death: f32, +} +impl Default for Session { + fn default() -> Self { + Self { + score: 0, + lives: 3, + remaining: 0, + power: 0., + chain: 0, + elapsed: 0., + death: 0., + } + } +} +pub struct GamePlugin; +impl Plugin for GamePlugin { + fn build(&self, app: &mut App) { + app.init_state::() + .init_resource::() + .init_resource::() + .init_resource::() + .init_resource::() + .init_resource::() + .init_resource::() + .add_systems( + Startup, + ( + maze::build, + player::spawn, + pellets::spawn, + ghost::spawn, + ui::setup, + audio::setup, + ) + .chain(), + ) + .add_systems( + Update, + (ui::input, settings::apply, ui::scale, player::cursor).chain(), + ) + .add_systems( + Update, + ( + tick, + player::move_player, + pellets::collect, + ghost::think, + ghost::movement, + ghost::contact, + ghost::appearance, + pellets::pulse, + ) + .chain() + .run_if(in_state(GameState::Playing)), + ) + .add_systems(Update, death.run_if(in_state(GameState::PlayerDeath))) + .add_systems(PostUpdate, (ui::draw, audio::play).chain()) + .add_systems(OnEnter(GameState::Victory), victory) + .add_systems(OnEnter(GameState::GameOver), game_over) + .add_systems(Last, settings::frame_cap); + } +} +fn tick(time: Res

, + mut settings: ResMut, + mut exit: MessageWriter, + buttons: Query<(&Interaction, &Row), Changed>, + windows: Query<&Window>, +) { + if keys.just_pressed(KeyCode::F3) { + settings.debug = !settings.debug; + settings.save(); + } + let pad = |button| pads.iter().any(|g| g.just_pressed(button)); + let pause = keys.just_pressed(KeyCode::Escape) || pad(GamepadButton::Start); + if *state.get() == GameState::Playing { + if pause || windows.iter().any(|w| !w.focused) { + menu.selected = 0; + next.set(GameState::Paused); + } + return; + } + if pause { + if menu.settings { + menu.settings = false; + menu.selected = 0; + settings.save(); + } else if *state.get() == GameState::Paused { + next.set(GameState::Playing); + } + return; + } + let count = options(*state.get(), &menu, &settings).len(); + if count == 0 { + return; + } + menu.selected = menu.selected.min(count - 1); + if keys.just_pressed(KeyCode::ArrowDown) || pad(GamepadButton::DPadDown) { + menu.selected = (menu.selected + 1) % count; + } + if keys.just_pressed(KeyCode::ArrowUp) || pad(GamepadButton::DPadUp) { + menu.selected = (menu.selected + count - 1) % count; + } + let left = keys.just_pressed(KeyCode::ArrowLeft) || pad(GamepadButton::DPadLeft); + let right = keys.just_pressed(KeyCode::ArrowRight) || pad(GamepadButton::DPadRight); + let mut activate = keys.just_pressed(KeyCode::Enter) || pad(GamepadButton::South); + for (interaction, row) in &buttons { + if row.0 < count && *interaction == Interaction::Pressed { + menu.selected = row.0; + activate = true; + } + } + if menu.settings { + if !(left || right || activate) { + return; + } + let d = if left { -1. } else { 1. }; + match menu.selected { + 0 => settings.sensitivity = (settings.sensitivity + d * 0.0005).clamp(0.0005, 0.01), + 1 => settings.speed = (settings.speed + d * 0.5).clamp(2., 7.), + 2 => settings.master = (settings.master + d * 0.1).clamp(0., 1.), + 3 => settings.music = (settings.music + d * 0.1).clamp(0., 1.), + 4 => settings.sound = (settings.sound + d * 0.1).clamp(0., 1.), + 5 => settings.fullscreen = !settings.fullscreen, + 6 => { + let resolutions = [(960, 540), (1280, 720), (1920, 1080)]; + let i = resolutions + .iter() + .position(|r| *r == (settings.width, settings.height)) + .unwrap_or(1); + let n = (i as i32 + if left { 2 } else { 1 }) as usize % 3; + (settings.width, settings.height) = resolutions[n]; + } + 7 => settings.fps = if settings.fps == 30 { 60 } else { 30 }, + 8 => settings.keyboard_only = !settings.keyboard_only, + 9 => settings.low = !settings.low, + 10 => settings.bob = !settings.bob, + 11 => settings.debug = !settings.debug, + _ => { + menu.settings = false; + menu.selected = 0; + } + } + settings.save(); + return; + } + if !activate { + return; + } + match (*state.get(), menu.selected) { + (GameState::MainMenu, 0) + | (GameState::Paused, 2) + | (GameState::Victory | GameState::GameOver, 0) => { + commands.queue(game::restart); + } + (GameState::MainMenu, 1) | (GameState::Paused, 1) => { + menu.settings = true; + } + (GameState::MainMenu, 2) => { + exit.write(AppExit::Success); + } + (GameState::Paused, 0) => next.set(GameState::Playing), + (GameState::Paused, 3) | (GameState::Victory | GameState::GameOver, 1) => { + next.set(GameState::MainMenu) + } + _ => {} + } + menu.selected = 0; +} +#[allow(clippy::too_many_arguments, clippy::type_complexity)] // Explicit disjoint UI queries. +pub fn draw( + state: Res>, + session: Res, + menu: Res, + settings: Res, + time: Res