From d109225da6751849dfafc2d75678fb0fd7a15e0e Mon Sep 17 00:00:00 2001 From: tuxmain Date: Sun, 21 Aug 2022 19:17:55 +0200 Subject: [PATCH] Initial commit --- .gitignore | 1 + Cargo.lock | 4018 +++++++++++++++++++++++++++++++++++++++ Cargo.toml | 13 + LICENSE | 661 +++++++ README.md | 29 + assets/Cantarell-VF.otf | Bin 0 -> 170588 bytes build-wasm.sh | 2 + index.html | 12 + rustfmt.toml | 8 + src/game.rs | 341 ++++ src/main.rs | 62 + src/menu.rs | 42 + 12 files changed, 5189 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/Cantarell-VF.otf create mode 100644 build-wasm.sh create mode 100644 index.html create mode 100644 rustfmt.toml create mode 100644 src/game.rs create mode 100644 src/main.rs create mode 100644 src/menu.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..f831094 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,4018 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e" + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +dependencies = [ + "memchr", +] + +[[package]] +name = "alsa" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5915f52fe2cf65e83924d037b6c5290b7cee097c6b5c8700746e6168a343fd6b" +dependencies = [ + "alsa-sys", + "bitflags", + "libc", + "nix 0.23.1", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android_log-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85965b6739a430150bdd138e2374a98af0c3ee0d030b3bb7fc3bddff58d0102e" + +[[package]] +name = "android_logger" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9ed09b18365ed295d722d0b5ed59c01b79a826ff2d2a8f73d5ecca8e6fb2f66" +dependencies = [ + "android_log-sys", + "env_logger", + "lazy_static", + "log", +] + +[[package]] +name = "android_system_properties" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7ed72e1635e121ca3e79420540282af22da58be50de153d36f81ddc6b83aa9e" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anyhow" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "508b352bb5c066aac251f6daf6b36eccd03e8a88e8081cd44959ea277a3af9a8" + +[[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 = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc120354d1b5ec6d7aaf4876b602def75595937b5e15d356eb554ab5177e08bb" +dependencies = [ + "clipboard-win", + "core-graphics 0.22.3", + "image 0.23.14", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot 0.12.1", + "thiserror", + "winapi", + "x11rb", +] + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "ash" +version = "0.37.0+1.3.209" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006ca68e0f2b03f22d6fa9f2860f85aed430d257fec20f8879b2145e7c7ae1a6" +dependencies = [ + "libloading", +] + +[[package]] +name = "async-channel" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "once_cell", + "slab", +] + +[[package]] +name = "async-task" +version = "4.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524" + +[[package]] +name = "atomic" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b88d82667eca772c4aa12f0f1348b3ae643424c8876448f3f7bd5787032e234c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "atomic_refcell" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b5e5f48b927f04e952dedc932f31995a65a0bf65ec971c74436e51bf6e970d" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" + +[[package]] +name = "bevy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55f08528a4e59d607460513a823b40f602d013c1a00f57b824f1075d5d48c3cd" +dependencies = [ + "bevy_internal", +] + +[[package]] +name = "bevy-inspector-egui" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0c53ed1cad011e33ea145d2c1f649a966e7457453f3768ddff39bc5064bd525" +dependencies = [ + "bevy", + "bevy-inspector-egui-derive", + "bevy_egui", + "image 0.23.14", + "pretty-type-name", +] + +[[package]] +name = "bevy-inspector-egui-derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48ef6260a46924d40781bcb9da157c110d5166bbd573795e4a16f2505913d0d0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_animation" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e243169af495ad616ff701247c0d3e40078a26ed8de231cf9e54bde6b3c4bb45" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "bevy_time", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_app" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d26d6ffdf493609d2fedc1018a2ef0cb4d8e48f6d3bcea56fa2df81867e464" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d8fb95306d5f18fa70df40632cd984993aeb71e91ce059ae99699098a4f9ce9" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_diagnostic", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "crossbeam-channel", + "downcast-rs", + "fastrand", + "js-sys", + "ndk-glue 0.5.2", + "notify", + "parking_lot 0.12.1", + "serde", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_audio" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eee08ac575397ce17477dd291862bafa15226334bdfb82c02bbc3d10bad7bdb8" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "parking_lot 0.12.1", + "rodio", +] + +[[package]] +name = "bevy_core" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6712146d54fff9e1865362e9f39a7b63c7b037ddb72a3d7bb05b959213fb61e" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bytemuck", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080bb00399b6d7697e505f871d67c6de8b52eb06b47b0cda2be80c2396805983" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "radsort", + "serde", +] + +[[package]] +name = "bevy_derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4b8f0786d1fc7e0d35297917be463db3d0886f7bd8d4221ca3d565502579ffb" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adab74ee5375fbf5d2b1d3da41de8d1491a8a706d17441b5e31214b65349d692" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_log", + "bevy_time", + "bevy_utils", +] + +[[package]] +name = "bevy_ecs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5643dc27b7d6778e3a66c8e0f6ad1fd33309aa2fa61d935f360ccc85b7be6a2" +dependencies = [ + "async-channel", + "bevy_ecs_macros", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "fixedbitset", + "fxhash", + "serde", + "thread_local", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5f2f12677f8725d40930d0a19652f007fe0ef5ac38e23817cfc4930c61f5680" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_egui" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf44ff770566dca66b805a6829df783f64700bd01d35aec1034dff31b531a4" +dependencies = [ + "arboard", + "bevy", + "egui", + "thread_local", + "webbrowser", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76a767adc36ce1fc917a736843b026d4de7069d90ed5e669c852481ef69fd5aa" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_fundsp" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a6e13dc15f060f68e5742139d63d31e472df1b271f0a5f854499e3c9c067e20" +dependencies = [ + "atomic", + "bevy", + "fundsp", +] + +[[package]] +name = "bevy_gilrs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "963940426127533164af2a556971a03c493143c0afb95afadb4a070b6ab8c3df" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_utils", + "gilrs", +] + +[[package]] +name = "bevy_gltf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "150cc6782c4472600c2ade5d78c6ce481c992690f0499e63765aba752d7e0f04" +dependencies = [ + "anyhow", + "base64", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_tasks", + "bevy_transform", + "bevy_utils", + "gltf", + "percent-encoding", + "thiserror", +] + +[[package]] +name = "bevy_hanabi" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe35e3c7a5c8b9c26093b62551929581ada6da514e8c8e1ad01c939565916d1a" +dependencies = [ + "anyhow", + "bevy", + "bitflags", + "bytemuck", + "copyless", + "rand", + "rand_pcg", + "ron", + "serde", +] + +[[package]] +name = "bevy_hierarchy" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2e4c20d7c843cd26ef3c5d7b4c20e3e32c275943e2437ecaca1cfd6cfe3b30" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "smallvec", +] + +[[package]] +name = "bevy_input" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a11c70573fb4d4c056ba32cfa553daa7e6e1245cb876ccfbe322640928b7ee1c" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_utils", +] + +[[package]] +name = "bevy_internal" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d603b597772130782eab6e604706cbb764fb037f9cf0a1904b6f342845b6f44" +dependencies = [ + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_audio", + "bevy_core", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gilrs", + "bevy_gltf", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_sprite", + "bevy_tasks", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_ui", + "bevy_utils", + "bevy_window", + "bevy_winit", + "ndk-glue 0.5.2", +] + +[[package]] +name = "bevy_log" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cafb12fc84734236e36f407ab62c72d5d4279fa4777e40a95d7cc973cbabcd1" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_utils", + "console_error_panic_hook", + "tracing-log", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d081af83b701e16cad209255ba6b383744dfa49efa99eb6505989f293305ab3" +dependencies = [ + "quote", + "syn", + "toml", +] + +[[package]] +name = "bevy_math" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db5394e86c5708d3aa506c6e98ec4ed2a4083a7a018c6693d9ac0e77ebfabfc2" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b299a61175a6f7e7398f83cd5b50920fd8bad4df674e614ad94f25f8426509" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_pbr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed9a81bbd02f5e0a57899a41aec37d9cb14965e1e4d510547f3f680323d05c0f" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags", + "bytemuck", + "radsort", +] + +[[package]] +name = "bevy_ptr" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d92d5679e89602a18682a37846573dcd1979410179e14204280460ba9fb8713a" + +[[package]] +name = "bevy_rapier2d" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e941caacdd45fcfc0fe0be661d5aaca0392dabfa6595a96ef7f18716587195f" +dependencies = [ + "bevy", + "bitflags", + "log", + "nalgebra", + "rapier2d", +] + +[[package]] +name = "bevy_reflect" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08798e67f2d4e6898ef117d8c99cf3b50a8eebc8da4159e6dad2657a0fbe9a4e" +dependencies = [ + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "downcast-rs", + "erased-serde", + "glam", + "once_cell", + "parking_lot 0.12.1", + "serde", + "smallvec", + "thiserror", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19209a7f0238053802b7de04e6724bd90d4ed7d90e87101dbd1b64cca64ff694" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb49530388ef17cff3fb8bd5e47372fb3cfeb4befc73e3036f6462ac20f049ef" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_encase_derive", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_mikktspace", + "bevy_reflect", + "bevy_render_macros", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags", + "codespan-reporting", + "copyless", + "downcast-rs", + "encase", + "futures-lite", + "hex", + "hexasphere", + "image 0.24.3", + "naga", + "once_cell", + "parking_lot 0.12.1", + "regex", + "serde", + "smallvec", + "thiserror", + "thread_local", + "wgpu", +] + +[[package]] +name = "bevy_render_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d0b7a51fa819c20c64f43856c5aaea40f853050bbb09b9ba3672e5ff2688a5" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bevy_scene" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0064d73ebb0de39901478b493604a1a6d448fd337b66803004c60f41f1fa6c37" +dependencies = [ + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "ron", + "serde", + "thiserror", + "uuid", +] + +[[package]] +name = "bevy_sprite" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f83dfe8897d6c0d9d5ce3818d49a13e58ae2b9b9ecf4f4bb85aa31bb0678f68" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags", + "bytemuck", + "copyless", + "fixedbitset", + "guillotiere", + "rectangle-pack", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_tasks" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff874c91a36eaac3ef957c6f3b590fb71332d9d136671cc858847d56fe9f80a3" +dependencies = [ + "async-channel", + "async-executor", + "event-listener", + "futures-lite", + "num_cpus", + "once_cell", + "wasm-bindgen-futures", +] + +[[package]] +name = "bevy_text" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef05a788c2c04aaa5db95b22a8f0fff0d3a0b08a7bcd1a71f050a628b38eec6e" +dependencies = [ + "ab_glyph", + "anyhow", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", + "bevy_window", + "glyph_brush_layout", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_time" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74ec681d641371df81d7bfbcb0eea725ed873f38a094f34b5f7b436f0889e77c" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "crossbeam-channel", +] + +[[package]] +name = "bevy_transform" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e1528e35f30bede46a50ee4134f150efc01f5c1002c340b3b2e6a0bfcb8aa5" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", +] + +[[package]] +name = "bevy_ui" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac181a7b637da61fad72981ff9d2e5b899283ca7d54b2b7ea49c431121331c53" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bytemuck", + "serde", + "smallvec", + "taffy", +] + +[[package]] +name = "bevy_utils" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda6dada53e546845887ae7357eec57b8d547ef71627b716b33839b4a98b687" +dependencies = [ + "ahash", + "getrandom", + "hashbrown", + "instant", + "tracing", + "uuid", +] + +[[package]] +name = "bevy_window" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3bdc3a220a9bb2fad9bd30d5f44c6645725398fe1bc588fc87abf09f092696e" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_utils", + "raw-window-handle", + "web-sys", +] + +[[package]] +name = "bevy_winit" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57537a56ac4f4e1ffcad95227bcab37cd17b51770dacff82374a2d88be376322" +dependencies = [ + "approx", + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_utils", + "bevy_window", + "crossbeam-channel", + "raw-window-handle", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bevyjam" +version = "0.1.0" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "bevy_fundsp", + "bevy_hanabi", + "bevy_rapier2d", +] + +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +dependencies = [ + "bitflags", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "bytemuck" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f5715e491b5a1598fc2bef5a606847b5dc1d48ea625bd3c02c00de8285591da" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9e1f5fa78f69496407a27ae9ed989e3c3b072310286f5ef385525e4cbc24a9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" + +[[package]] +name = "cache-padded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c" + +[[package]] +name = "cc" +version = "1.0.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "clang-sys" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "clipboard-win" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "cocoa" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832" +dependencies = [ + "bitflags", + "block", + "cocoa-foundation", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318" +dependencies = [ + "bitflags", + "block", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", + "objc", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "1.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c" +dependencies = [ + "cache-padded", +] + +[[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 1.0.0", + "wasm-bindgen", +] + +[[package]] +name = "const_panic" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c0358e41e90e443c69b2b2811f6ec9892c228b93620634cf4344fe89967fa9f" + +[[package]] +name = "copyless" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536" + +[[package]] +name = "core-foundation" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171" +dependencies = [ + "core-foundation-sys 0.7.0", + "libc", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys 0.8.3", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac" + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "core-graphics" +version = "0.19.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923" +dependencies = [ + "bitflags", + "core-foundation 0.7.0", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "core-graphics-types", + "foreign-types", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b" +dependencies = [ + "bitflags", + "core-foundation 0.9.3", + "foreign-types", + "libc", +] + +[[package]] +name = "core-video-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828" +dependencies = [ + "cfg-if 0.1.10", + "core-foundation-sys 0.7.0", + "core-graphics 0.19.2", + "libc", + "objc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11894b20ebfe1ff903cbdc52259693389eea03b94918a2def2c30c3bf227ad88" +dependencies = [ + "bitflags", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dff444d80630d7073077d38d40b4501fd518bd2b922c2a55edcc8b0f7be57e6" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74117836a5124f3629e4b474eed03e479abaf98988b4bb317e29f08cfe0e4116" +dependencies = [ + "alsa", + "core-foundation-sys 0.8.3", + "coreaudio-rs", + "jni", + "js-sys", + "lazy_static", + "libc", + "mach", + "ndk 0.6.0", + "ndk-glue 0.6.2", + "nix 0.23.1", + "oboe", + "parking_lot 0.11.2", + "stdweb", + "thiserror", + "wasm-bindgen", + "web-sys", + "winapi", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "045ebe27666471bb549370b4b0b3e51b07f56325befa4284db65fc89c02511b1" +dependencies = [ + "autocfg", + "cfg-if 1.0.0", + "crossbeam-utils", + "memoffset", + "once_cell", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd42583b04998a5363558e5f9291ee5a5ff6b49944332103f251e7479a82aa7" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51887d4adc7b564537b15adcfb307936f8075dfcd5f00dde9a9f1d29383682bc" +dependencies = [ + "cfg-if 1.0.0", + "once_cell", +] + +[[package]] +name = "cty" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" + +[[package]] +name = "d3d12" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "827914e1f53b1e0e025ecd3d967a7836b7bcb54520f90e21ef8df7b4d88a2759" +dependencies = [ + "bitflags", + "libloading", + "winapi", +] + +[[package]] +name = "darling" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "deflate" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174" +dependencies = [ + "adler32", + "byteorder", +] + +[[package]] +name = "deflate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" +dependencies = [ + "adler32", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "duplicate" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0a4be4cd710e92098de6ad258e6e7c24af11c29c5142f3c6f2a545652480ff8" +dependencies = [ + "heck", + "proc-macro-error", +] + +[[package]] +name = "egui" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb095a8b9feb9b7ff8f00b6776dffcef059538a3f4a91238e03c900e9c9ad9a2" +dependencies = [ + "ahash", + "epaint", + "nohash-hasher", +] + +[[package]] +name = "either" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f107b87b6afc2a64fd13cac55fe06d6c8859f12d4b14cbcdd2c67d0976781be" + +[[package]] +name = "emath" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c223f58c7e38abe1770f367b969f1b3fbd4704b67666bcb65dbb1adb0980ba72" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "encase" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a516181e9a36e8982cb37933c5e7dba638c42938cacde46ee4e5b4156f881b9" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror", +] + +[[package]] +name = "encase_derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5b802412eea315f29f2bb2da3a5963cd6121f56eaa06aebcdc0c54eea578f22" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f2f4de457d974f548d2c2a16f709ebd81013579e543bd1a9b19ced88132c2cf" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "env_logger" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "epaint" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c29567088888e8ac3e8f61bbb2ddc820207ebb8d69eefde5bcefa06d65e4e89" +dependencies = [ + "ab_glyph", + "ahash", + "atomic_refcell", + "bytemuck", + "emath", + "nohash-hasher", + "parking_lot 0.12.1", +] + +[[package]] +name = "erased-serde" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "003000e712ad0f95857bd4d2ef8d1890069e06554101697d12050668b2f6f020" +dependencies = [ + "serde", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + +[[package]] +name = "euclid" +version = "0.22.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fastrand" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" +dependencies = [ + "instant", +] + +[[package]] +name = "filetime" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94a7bbaa59354bc20dd75b67f23e2797b4490e9d6928203fb105c79e448c86c" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "windows-sys", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +dependencies = [ + "matches", + "percent-encoding", +] + +[[package]] +name = "fsevent-sys" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" +dependencies = [ + "libc", +] + +[[package]] +name = "fundsp" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c82c389e6a1394463627e5df8777a9350968e8828e8074d629bc65a0d54165e" +dependencies = [ + "duplicate", + "generic-array", + "lazy_static", + "num-complex", + "numeric-array", + "rsor", + "rustfft", + "tinyvec", +] + +[[package]] +name = "futures-core" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" + +[[package]] +name = "futures-io" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" + +[[package]] +name = "futures-lite" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gilrs" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d6ba7c37bf8ea7ba0c3e3795dfa1a7771b1e47c4bb417c4d27c7b338d79685f" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96a8d94a7fc5afd27e894e08a4cfe5a49237f85bcc7140e90721bad3399c7d02" +dependencies = [ + "core-foundation 0.9.3", + "io-kit-sys", + "js-sys", + "libc", + "libudev-sys", + "log", + "nix 0.24.2", + "rusty-xinput", + "uuid", + "vec_map", + "wasm-bindgen", + "web-sys", + "winapi", +] + +[[package]] +name = "glam" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "glob" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" + +[[package]] +name = "glow" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gltf" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00e0a0eace786193fc83644907097285396360e9e82e30f81a21e9b1ba836a3e" +dependencies = [ + "byteorder", + "gltf-json", + "lazy_static", +] + +[[package]] +name = "gltf-derive" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd53d6e284bb2bf02a6926e4cc4984978c1990914d6cd9deae4e31cf37cd113" +dependencies = [ + "inflections", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "gltf-json" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9949836a9ec5e7f83f76fb9bbcbc77f254a577ebbdb0820867bc11979ef97cad" +dependencies = [ + "gltf-derive", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "glyph_brush_layout" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +dependencies = [ + "ab_glyph", + "approx", + "xi-unicode", +] + +[[package]] +name = "gpu-alloc" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d" +dependencies = [ + "bitflags", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5" +dependencies = [ + "bitflags", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b0c02e1ba0bdb14e965058ca34e09c020f8e507a760df1121728e0aef68d57a" +dependencies = [ + "bitflags", + "gpu-descriptor-types", + "hashbrown", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126" +dependencies = [ + "bitflags", +] + +[[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 = "hash32" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" +dependencies = [ + "byteorder", +] + +[[package]] +name = "hash32-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d2aba832b60be25c1b169146b27c64115470981b128ed84c8db18c1b03c6ff" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", + "serde", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexasphere" +version = "7.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9652f2ed7ee9c6374a061039f60fc6e25d7adac7fa10f83365669af3b24b0bf0" +dependencies = [ + "glam", + "once_cell", +] + +[[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.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a164bb2ceaeff4f42542bdb847c41517c78a60f5649671b2a07312b6e117549" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +dependencies = [ + "matches", + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.23.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-iter", + "num-rational 0.3.2", + "num-traits", + "png 0.16.8", + "tiff", +] + +[[package]] +name = "image" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e30ca2ecf7666107ff827a8e481de6a132a9b687ed3bb20bb1c144a36c00964" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational 0.4.1", + "num-traits", + "png 0.17.5", + "scoped_threadpool", +] + +[[package]] +name = "indexmap" +version = "1.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" +dependencies = [ + "autocfg", + "hashbrown", +] + +[[package]] +name = "inflections" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" + +[[package]] +name = "inotify" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" +dependencies = [ + "bitflags", + "inotify-sys", + "libc", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "inplace_it" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67f0347836f3f6362c1e7efdadde2b1c4b4556d211310b70631bae7eb692070b" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-kit-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7789f7f3c9686f96164f5109d69152de759e76e284f736bd57661c6df5091919" +dependencies = [ + "core-foundation-sys 0.8.3", + "mach", +] + +[[package]] +name = "itoa" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" + +[[package]] +name = "js-sys" +version = "0.3.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258451ab10b34f8af53416d1fdab72c22e805f0c92a1136d59470ec0b11138b2" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +dependencies = [ + "libc", + "libloading", + "pkg-config", +] + +[[package]] +name = "kqueue" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d6112e8f37b59803ac47a42d14f1f3a59bbf72fc6857ffc5be455e28a691f8e" +dependencies = [ + "kqueue-sys", + "libc", +] + +[[package]] +name = "kqueue-sys" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8367585489f01bc55dd27404dcf56b95e6da061a256a666ab23be9ba96a2e587" +dependencies = [ + "bitflags", + "libc", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.131" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04c3b4822ccebfa39c02fc03d1534441b22ead323fa0f48bb7ddd8e6ba076a40" + +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + +[[package]] +name = "libm" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "292a948cd991e376cf75541fe5b97a1081d713c618b4f1b9500f8844e49eb565" + +[[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 = "lock_api" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata", +] + +[[package]] +name = "matches" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" + +[[package]] +name = "matrixmultiply" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +dependencies = [ + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060" +dependencies = [ + "bitflags", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435" +dependencies = [ + "adler32", +] + +[[package]] +name = "miniz_oxide" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +dependencies = [ + "adler", + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys", +] + +[[package]] +name = "naga" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f50357e1167a3ab92d6b3c7f4bf5f7fd13fde3f4b28bf0d5ea07b5100fdb6c0" +dependencies = [ + "bit-set", + "bitflags", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits", + "petgraph", + "pp-rs", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "nalgebra" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9e0a04ce089f9401aac565c740ed30c46291260f27d4911fdbaa6ca65fa3044" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational 0.4.1", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.2.2", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +dependencies = [ + "bitflags", + "jni-sys", + "ndk-sys 0.3.0", + "num_enum", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-glue" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4" +dependencies = [ + "android_logger", + "lazy_static", + "libc", + "log", + "ndk 0.5.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.2.2", +] + +[[package]] +name = "ndk-glue" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d0c4a7b83860226e6b4183edac21851f05d5a51756e97a1144b7f5a6b63e65f" +dependencies = [ + "lazy_static", + "libc", + "log", + "ndk 0.6.0", + "ndk-context", + "ndk-macro", + "ndk-sys 0.3.0", +] + +[[package]] +name = "ndk-macro" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c" +dependencies = [ + "darling", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ndk-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121" + +[[package]] +name = "ndk-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +dependencies = [ + "bitflags", + "cc", + "cfg-if 1.0.0", + "libc", + "memoffset", +] + +[[package]] +name = "nix" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" +dependencies = [ + "bitflags", + "cfg-if 1.0.0", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "notify" +version = "5.0.0-pre.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "553f9844ad0b0824605c20fb55a661679782680410abfb1a8144c2e7e437e7a7" +dependencies = [ + "bitflags", + "crossbeam-channel", + "filetime", + "fsevent-sys", + "inotify", + "kqueue", + "libc", + "mio", + "walkdir", + "winapi", +] + +[[package]] +name = "num-complex" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ae39348c8bc5fbd7f40c727a9925f03517afd2ab27d46702108b6a7e5414c19" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "numeric-array" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c59a9b227913a685ed84aa0de5ded58274e8bcfa55760faae07bc82aee64ccf" +dependencies = [ + "generic-array", + "num-traits", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "oboe" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27f63c358b4fa0fbcfefd7c8be5cfc39c08ce2389f5325687e7762a48d30a5c1" +dependencies = [ + "jni", + "ndk 0.6.0", + "ndk-context", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3370abb7372ed744232c12954d920d1a40f1c4686de9e79e800021ef492294bd" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "once_cell" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18a6dbe30758c9f83eb00cbea4ac95966305f5a7772f3f42ebfc7fc7eddbd8e1" + +[[package]] +name = "optional" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978aa494585d3ca4ad74929863093e87cac9790d81fe7aba2b3dc2890643a0fc" + +[[package]] +name = "owned_ttf_parser" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07ef1a404ae479dd6906f4fa2c88b3c94028f1284beb42a47c183a7c27ee9a3e" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.5", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.3", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +dependencies = [ + "cfg-if 1.0.0", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "parry2d" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2841cebc29aaf7c69058b242742853d9b106c5245ed946090a75d941d23a6f5e" +dependencies = [ + "approx", + "arrayvec", + "bitflags", + "downcast-rs", + "either", + "nalgebra", + "num-derive", + "num-traits", + "rustc-hash", + "simba", + "slab", + "smallvec", + "spade", +] + +[[package]] +name = "paste" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9423e2b32f7a043629287a536f21951e8c6a82482d0acb1eeebfc90bc2225b22" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" + +[[package]] +name = "petgraph" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pkg-config" +version = "0.3.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" + +[[package]] +name = "png" +version = "0.16.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6" +dependencies = [ + "bitflags", + "crc32fast", + "deflate 0.8.6", + "miniz_oxide 0.3.7", +] + +[[package]] +name = "png" +version = "0.17.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba" +dependencies = [ + "bitflags", + "crc32fast", + "deflate 1.0.0", + "miniz_oxide 0.5.3", +] + +[[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 = "ppv-lite86" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "pretty-type-name" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8815d101cfb4cb491154896bdab292a395a7ac9ab185a9941a2f5be0135900d" + +[[package]] +name = "primal-check" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b264861209b0641a9b7571695029f516698bd3f2bf46eb61fca408675630b8c" +dependencies = [ + "num-integer", +] + +[[package]] +name = "proc-macro-crate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9" +dependencies = [ + "once_cell", + "thiserror", + "toml", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f61dcf0b917cd75d4521d7343d1ffff3d1583054133c9b5cbea3375c703c40d" + +[[package]] +name = "quote" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radsort" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_pcg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59cad018caf63deb318e5a4586d99a24424a364f40f1e5778c29aca23f4fc73e" +dependencies = [ + "rand_core", +] + +[[package]] +name = "range-alloc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6" + +[[package]] +name = "rapier2d" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84d7e798266018ec9194a6ca931ae6520c0bf5f7dbdbcb5f1d8bb0d9c075ea24" +dependencies = [ + "approx", + "arrayvec", + "bit-vec", + "bitflags", + "crossbeam", + "downcast-rs", + "nalgebra", + "num-derive", + "num-traits", + "parry2d", + "rustc-hash", + "simba", +] + +[[package]] +name = "raw-window-handle" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41" +dependencies = [ + "cty", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[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.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "regex" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" + +[[package]] +name = "renderdoc-sys" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157" + +[[package]] +name = "robust" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea" + +[[package]] +name = "rodio" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0939e9f626e6c6f1989adb6226a039c855ca483053f0ee7c98b90e41cf731e" +dependencies = [ + "cpal", + "hound", + "lewton", +] + +[[package]] +name = "ron" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" +dependencies = [ + "base64", + "bitflags", + "serde", +] + +[[package]] +name = "rsor" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b57e3964dc31a38416366d2e8f7675755402a10832d5cf4e4112d66ac77cdda" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustfft" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1d089e5c57521629a59f5f39bca7434849ff89bd6873b521afe389c1c602543" +dependencies = [ + "num-complex", + "num-integer", + "num-traits", + "primal-check", + "strength_reduce", + "transpose", +] + +[[package]] +name = "rusty-xinput" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2aa654bc32eb9ca14cce1a084abc9dfe43949a4547c35269a094c39272db3bb" +dependencies = [ + "lazy_static", + "log", + "winapi", +] + +[[package]] +name = "ryu" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" + +[[package]] +name = "safe_arch" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +dependencies = [ + "bytemuck", +] + +[[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_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "serde" +version = "1.0.143" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.143" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3d8e8de557aee63c26b85b947f5e59b690d0454c753f3adeb5cd7835ab88391" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3" + +[[package]] +name = "simba" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c48e45e5961033db030b56ad67aef22e9c908c493a6e8348c0a0f6b93433cd77" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "slab" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1" +dependencies = [ + "serde", +] + +[[package]] +name = "spade" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "333b8c21ebd9a45c5e955f3d7a1f0c4a2214847dd7e8e1abb69f34ec9b88882d" +dependencies = [ + "num-traits", + "optional", + "robust", + "smallvec", +] + +[[package]] +name = "spirv" +version = "0.2.0+1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags", + "num-traits", +] + +[[package]] +name = "stdweb" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef5430c8e36b713e13b48a9f709cc21e046723fe44ce34587b73a830203b533e" + +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "strength_reduce" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3ff2f71c82567c565ba4b3009a9350a96a7269eaa4001ebedae926230bc2254" + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "syn" +version = "1.0.99" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "taffy" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec27dea659b100d489dffa57cf0efc6d7bfefb119af817b92cc14006c0b214e3" +dependencies = [ + "arrayvec", + "hash32", + "hash32-derive", + "num-traits", + "typenum", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5f6586b7f764adc0231f4c79be7b920e766bb2f3e51b3661cdb263828f19994" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12bafc5b54507e0149cdf1b145a5d80ab80a90bcd9275df43d4fff68460f6c21" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +dependencies = [ + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a53f4706d65497df0c4349241deddf35f84cee19c87ed86ea8ca590f4464437" +dependencies = [ + "jpeg-decoder", + "miniz_oxide 0.4.4", + "weezl", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "toml" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" +dependencies = [ + "serde", +] + +[[package]] +name = "tracing" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" +dependencies = [ + "cfg-if 1.0.0", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60db860322da191b40952ad9affe65ea23e7dd6a5c442c2c42865810c6ab8e6b" +dependencies = [ + "ansi_term", + "matchers", + "once_cell", + "regex", + "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 = "transpose" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95f9c900aa98b6ea43aee227fd680550cdec726526aab8ac801549eadb25e39f" +dependencies = [ + "num-integer", + "strength_reduce", +] + +[[package]] +name = "ttf-parser" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd" + +[[package]] +name = "typenum" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" + +[[package]] +name = "unicode-bidi" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" + +[[package]] +name = "unicode-ident" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" + +[[package]] +name = "unicode-normalization" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854cbdc4f7bc6ae19c820d44abdc3277ac3e1b2b93db20a636825d9322fb60e6" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" + +[[package]] +name = "unicode-xid" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" + +[[package]] +name = "url" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +dependencies = [ + "form_urlencoded", + "idna", + "matches", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[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.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7652e3f6c4706c8d9cd54832c4a4ccb9b5336e2c3bd154d5cccfbf1c1f5f7d" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "662cd44805586bd52971b9586b1df85cdbbd9112e4ef4d8f41559c334dc6ac3f" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa76fb221a1f8acddf5b54ace85912606980ad661ac7a503b4570ffd3a624dad" +dependencies = [ + "cfg-if 1.0.0", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b260f13d3012071dfb1512849c033b1925038373aea48ced3012c09df952c602" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be8e654bdd9b79216c2929ab90721aa82faf65c48cdf08bdc4e7f51357b80da" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.82" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6598dd0bd3c7d51095ff6531a5b23e02acdc81804e30d8f07afb77b7215a140a" + +[[package]] +name = "web-sys" +version = "0.3.59" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed055ab27f941423197eb86b2035720b1a3ce40504df082cac2ecc6ed73335a1" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a3cffdb686fbb24d9fb8f03a213803277ed2300f11026a3afe1f108dc021b" +dependencies = [ + "jni", + "ndk-glue 0.6.2", + "url", + "web-sys", + "widestring", + "winapi", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wgpu" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "277e967bf8b7820a76852645a6bce8bbd31c32fda2042e82d8e3ea75fda8892d" +dependencies = [ + "arrayvec", + "js-sys", + "log", + "naga", + "parking_lot 0.12.1", + "raw-window-handle", + "smallvec", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b92788dec9d0c1bed849a1b83f01b2ee12819bf04a79c90f68e4173f7b5ba2" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags", + "cfg_aliases", + "codespan-reporting", + "copyless", + "fxhash", + "log", + "naga", + "parking_lot 0.12.1", + "profiling", + "raw-window-handle", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cbdfc3d0637dba3d5536b93adef3d26023a0b96f0e1ee5ee9560a401d9f646" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags", + "block", + "core-graphics-types", + "d3d12", + "foreign-types", + "fxhash", + "glow", + "gpu-alloc", + "gpu-descriptor", + "inplace_it", + "js-sys", + "khronos-egl", + "libloading", + "log", + "metal", + "naga", + "objc", + "parking_lot 0.12.1", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f762cbc08e1a51389859cf9c199c7aef544789cf3510889aab12c607f701604" +dependencies = [ + "bitflags", +] + +[[package]] +name = "wide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3aba2d1dac31ac7cae82847ac5b8be822aee8f99a4e100f279605016b185c5f" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "winit" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a" +dependencies = [ + "bitflags", + "cocoa", + "core-foundation 0.9.3", + "core-graphics 0.22.3", + "core-video-sys", + "dispatch", + "instant", + "lazy_static", + "libc", + "log", + "mio", + "ndk 0.5.0", + "ndk-glue 0.5.2", + "ndk-sys 0.2.2", + "objc", + "parking_lot 0.11.2", + "percent-encoding", + "raw-window-handle", + "wasm-bindgen", + "web-sys", + "winapi", + "x11-dl", +] + +[[package]] +name = "x11-dl" +version = "2.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c83627bc137605acc00bb399c7b908ef460b621fc37c953db2b09f88c449ea6" +dependencies = [ + "lazy_static", + "libc", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e99be55648b3ae2a52342f9a870c0e138709a3493261ce9b469afe6e4df6d8a" +dependencies = [ + "gethostname", + "nix 0.22.3", + "winapi", + "winapi-wsapoll", +] + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..bd7db37 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "bevyjam" +version = "0.1.0" +authors = ["tuxmain "] +license = "AGPL-3.0-only" +edition = "2021" + +[dependencies] +bevy = "0.8.0" +bevy_fundsp = "0.1.0" +bevy_hanabi = "0.3.0" +bevy-inspector-egui = "0.12.1" +bevy_rapier2d = "0.16.0" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..a5fad97 --- /dev/null +++ b/README.md @@ -0,0 +1,29 @@ +# Bavyjam + +## Build + +```bash +cargo build --release +``` + +### WASM + +Currently `bevy_hanabi` does not compile for WASM, and audio does not work on WASM. + +```bash +rustup target add wasm32-unknown-unknown +cargo install wasm-bindgen-cli + +sh build-wasm.sh + +# Serve on 127.0.0.1:8000 +python3 -m http.server +``` + +## License + +GNU AGPL v3, CopyLeft 2022 Pascal Engélibert + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License. +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. +You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/. diff --git a/assets/Cantarell-VF.otf b/assets/Cantarell-VF.otf new file mode 100644 index 0000000000000000000000000000000000000000..7306325ccf9576c70445804fea176eaf455374a6 GIT binary patch literal 170588 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 z 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

4>lbTv}Fg?Hm_evt*IEzfn8t4$rLIf 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%0Akp6EKbUQiT^^qUxe>=Iq>+Raq1GlRVcfDM* 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 z z&M}~q4J2sa&oH5LFwbkw!-VEB3A%?qiS!R<4Q&mWc3L}_4qBWL0d2$y5zt0Am>yaW zm^HOEVb<2-ObTeHKTOh4>KPo6D+bUuTAVY1nucAQQQPnojvD6((^ZSSMy*5dhnnXJ z(+l$n5^A6y%m8fwOw>%6N`0i(ODEbtde)?i`cX3?3gMX3joviyUn-Trf2Bk;rkGL7 z%P|t5K3}6b3{5>C&_kemKpZVXktH2?p9D=s8l`v(534nx>(pYRodj1yEflp&qRvpM zOJXcREvydx1WpMNK9I>!vm`c>Xkjw6ALcxxzQvk@6tc)&)JC&5Ni0Uh9cO}w+D6Y! zq-P9$zTik5U*ec_5UJ&8<@>=7E7DLuEg|B0w2q1z$l9r>ZsLp-#Sg@$Iv;kD2Ir2L zb5d%^nv1wmeg=w~3XQ_kn-VAJ6675${DvleEyO}Xi&$o&l^oMm(@G@??IZ`EQcS)E z3D-y9lhPwH<^xQlwi02p^FM56<7wL*Ls3%b*NW%{ms+UV=u47-%;_RMpc2z)c4Fox zNfQVxiBn+A61wW=B4(%Myg$YGf#6@3Z@t8Kr!u$rufs@((k0qi3m+@dS>1oFr>y%g z^=lfD6O3^g}n^-A-Lf=EJp~%K-o>>C+UonyO+0LcaarclfNA7uZ@92GlzZrcv>~PfKHb>%)BpexeB>C9%Is zZ$#f{cO&7(;G3`BeEnwMTMcj5y&ZEq_KxG7h`WAwTilJi=X$Trz4&__3+2LEh3yNw z;#kx-??>H_{X<*iUldx@qA0rP)uK@kJs*ZW?EWa~QT(H>kNQ6v`1tx`-^aBdhdquG zC#mS41UzYnGgEw@zVbBoY3HZCpC%W36$cbIEpGYj%roON_h(+uYCj8m7XB>0#H+-& zq;5%QN%QBmo(Df~@I35!`19!JvCrd5eM|jH{c%c41DuocYUyx;H;&^9FoYPIm)Vs$ zl)0AGD)TN2DQjF7S?-84QGCjM%Y(}!aR!Qag(FE!PKNM_Q^W7<|DQ-o2~kUWo>6Gcd|L3vJXCG>7TJr zeq!r?W=nrzmuTJ!BOFq~>S^q1^vP%brAsH9F4Wln_Tt}*>vfJxwqdrijrrog5#rDIGg;3c%X-Vj`EA1d=l|U$dt0x+ zl z7d#RFN&FD53ol&@1+|s`@2;ubdi{m0>CBz+4z>h`GwtA0cpGlu`IuK8fwO8{puaU`XR3*)ZAH8nf5g|ybvb5P zWjk5R597R?{b>3U_#{4ur@%MT#X5W}uas-SjXQr%tqfX?6VQHBEJTe$n7E!JmLpJy zeub76^Cx_UxZW~pS7TnmkBO@j@5Ddj>HHu{^eM{YGOs6c<5QfiGmme^X+07A7tDf> z!HGNH@)szRFZmIZW}U}bJQtyF$NBqwt6YQk#+NDNb1nWF&i2XVec{_|Tw#0=-@?x$ z){WsOY7J@u>A5);q#sHd%tI{Wp%J5zGRo<4FvT z|MY^pm#+u#=kH%iJpS6uLG0AmdZa~(^}m^M<@WPFQTkTk;P7N4zr{I}PKG z8ZFmoIM-_=1X+X28e49s(P(7uz-_p_#zx0*I+nQPI{Z6amvFtob+Rj8fRnIV>$r~d z0$ky^PV$qoKXDjwm-5=;S_`OGc{HGUx|124IhRR!K!!} zhJOLvRSv?^LI<4mHJPvGi)1&x3+I5{!L<*q + + + + + + + + diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..ade1f81 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,8 @@ +hard_tabs = true +newline_style = "unix" + +unstable_features = true +format_code_in_doc_comments = true +format_macro_bodies = true +format_macro_matchers = true +format_strings = true diff --git a/src/game.rs b/src/game.rs new file mode 100644 index 0000000..4540285 --- /dev/null +++ b/src/game.rs @@ -0,0 +1,341 @@ +use crate::AppState; + +use bevy::{ + ecs::world::EntityMut, + input::{keyboard::KeyCode, Input}, + prelude::{shape::Quad, *}, + sprite::{MaterialMesh2dBundle, Mesh2dHandle}, +}; +use bevy_fundsp::prelude::*; +use bevy_hanabi::*; +use bevy_rapier2d::prelude::*; +use std::collections::BTreeSet; + +pub struct GamePlugin; + +impl Plugin for GamePlugin { + fn build(&self, app: &mut App) { + app.add_event::() + .init_resource::() + .init_resource::() + .insert_resource(CurrentLevel(None)) + .add_system_set(SystemSet::on_enter(AppState::Game).with_system(setup)) + .add_system_set( + SystemSet::on_update(AppState::Game) + .with_system(post_setup_level) + .with_system(keyboard_input_system), + ) + .add_system_to_stage(CoreStage::PostUpdate, collision_event_system); + } +} + +// Events + +struct LevelStartupEvent(Entity); + +// Resources + +struct CurrentLevel(Option); + +struct CharacterMaterials { + red: Handle, + green: Handle, + blue: Handle, + yellow: Handle, + magenta: Handle, + cyan: Handle, +} + +impl FromWorld for CharacterMaterials { + fn from_world(world: &mut World) -> Self { + let mut materials = world.get_resource_mut::>().unwrap(); + Self { + red: materials.add(ColorMaterial::from(Color::rgba(1.0, 0., 0., 1.))), + green: materials.add(ColorMaterial::from(Color::rgba(0., 1.0, 0., 1.))), + blue: materials.add(ColorMaterial::from(Color::rgba(0., 0., 1.0, 1.))), + yellow: materials.add(ColorMaterial::from(Color::rgba(1.0, 1.0, 0., 1.))), + magenta: materials.add(ColorMaterial::from(Color::rgba(1.0, 0., 1.0, 1.))), + cyan: materials.add(ColorMaterial::from(Color::rgba(0., 1.0, 1.0, 1.))), + } + } +} + +struct CharacterMeshes { + square: Mesh2dHandle, +} + +impl FromWorld for CharacterMeshes { + fn from_world(world: &mut World) -> Self { + let mut meshes = world.get_resource_mut::>().unwrap(); + Self { + square: meshes + .add(Mesh::from(Quad { + size: Vec2 { x: 64.0, y: 64.0 }, + flip: false, + })) + .into(), + } + } +} + +// Components + +#[derive(Clone, Component, Copy, Eq, Hash, PartialEq)] +struct LevelId(u32); + +#[derive(Clone, Component, Copy, Eq, Hash, Ord, PartialEq, PartialOrd)] +struct CharacterId(u32); + +#[derive(Clone, Component, Copy, Eq, Hash, PartialEq)] +struct SelectedCharacterId(Option); + +#[derive(Component)] +struct CharacterIdList(BTreeSet); + +// Systems + +fn setup( + mut commands: Commands, + mut current_level: ResMut, + mut level_startup_event: EventWriter, +) { + let level_entity = commands + .spawn() + .insert(LevelId(0)) + .insert(SelectedCharacterId(None)) + .insert(CharacterIdList(BTreeSet::new())) + .id(); + current_level.0 = Some(level_entity); + + commands + .spawn_bundle(TransformBundle::from(Transform::from_xyz(0.0, -256.0, 0.0))) + .insert(Collider::cuboid(400., 10.)); + + level_startup_event.send(LevelStartupEvent(level_entity)); +} + +// This is a bad design, but it's the only way I found +fn post_setup_level( + mut commands: Commands, + character_materials: Res, + character_meshes: Res, + mut effects: ResMut>, + mut level_query: Query<(&mut SelectedCharacterId, &mut CharacterIdList)>, + mut level_startup_event: EventReader, +) { + for LevelStartupEvent(level_entity) in level_startup_event.iter() { + if let Ok((mut selected_character_id, mut character_id_list)) = + level_query.get_mut(*level_entity) + { + spawn_character( + &mut commands, + &character_meshes, + &mut effects, + &mut selected_character_id, + &mut character_id_list, + character_materials.red.clone(), + Transform::from_xyz(-128., -64., 0.), + ); + spawn_character( + &mut commands, + &character_meshes, + &mut effects, + &mut selected_character_id, + &mut character_id_list, + character_materials.green.clone(), + Transform::from_xyz(0., -64., 0.), + ); + spawn_character( + &mut commands, + &character_meshes, + &mut effects, + &mut selected_character_id, + &mut character_id_list, + character_materials.blue.clone(), + Transform::from_xyz(128., -64., 0.), + ); + } + } +} + +fn spawn_character( + commands: &mut Commands, + character_meshes: &Res, + effects: &mut ResMut>, + selected_character_id: &mut Mut, + character_id_list: &mut Mut, + material: Handle, + transform: Transform, +) { + let character_id = CharacterId( + character_id_list + .0 + .iter() + .last() + .map_or(0, |last_character_id| last_character_id.0 + 1), + ); + character_id_list.0.insert(character_id); + + let mut gradient = Gradient::new(); + gradient.add_key(0.0, Vec4::new(1.0, 0.1, 0.1, 0.0)); + gradient.add_key(0.2, Vec4::new(1.0, 0.1, 0.1, 1.0)); + gradient.add_key(1.0, Vec4::new(1.0, 0.1, 0.1, 0.0)); + commands + .spawn_bundle(MaterialMesh2dBundle { + mesh: character_meshes.square.clone(), + material, + transform, + ..default() + }) + .insert(character_id) + .insert(RigidBody::Dynamic) + .insert(Collider::cuboid(32., 32.)) + .insert(ExternalForce::default()) + .insert(Friction::new(1.0)) + .insert(Damping { + linear_damping: 0.5, + angular_damping: 0.5, + }) + .insert(ExternalImpulse::default()) + .insert(ActiveEvents::COLLISION_EVENTS) + .with_children(|c| { + c.spawn_bundle(ParticleEffectBundle { + effect: ParticleEffect::new( + effects.add( + EffectAsset { + name: "Red particles".into(), + capacity: 4096, + spawner: Spawner::rate(30.0.into()) + .with_active(selected_character_id.0.is_none()), + ..Default::default() + } + .init(PositionCircleModifier { + radius: 30.0, + speed: 20.0.into(), + dimension: ShapeDimension::Surface, + ..Default::default() + }) + .init(ParticleLifetimeModifier { lifetime: 0.8 }) + .render(SizeOverLifetimeModifier { + gradient: Gradient::constant(Vec2::splat(4.0)), + }) + .render(ColorOverLifetimeModifier { gradient }), + ), + ), + transform: Transform::from_xyz(0., 0., 0.1), + ..Default::default() + }); + }); + + // If no character is selected, then select this one + if selected_character_id.0.is_none() { + selected_character_id.0 = Some(character_id); + } +} + +fn collision_event_system( + mut commands: Commands, + current_level: Res, + mut collision_events: EventReader, + mut character_query: Query<&CharacterId>, + mut level_query: Query<(&mut SelectedCharacterId, &mut CharacterIdList)>, +) { + if let Some(level_entity) = current_level.0 { + for collision_event in collision_events.iter() { + if let CollisionEvent::Started(e1, e2, flags) = collision_event { + if flags.is_empty() { + if let (Ok(c1_id), Ok(c2_id)) = + (character_query.get(*e1), character_query.get(*e2)) + { + let (mut selected_character_id, mut character_id_list) = + level_query.get_mut(level_entity).unwrap(); + character_id_list.0.remove(c2_id); + if selected_character_id.0 == Some(*c2_id) { + selected_character_id.0 = Some(*c1_id); + } + } + } + } + } + } +} + +fn keyboard_input_system( + keyboard_input: Res>, + current_level: Res, + mut characters: Query<( + &CharacterId, + &mut ExternalImpulse, + &mut ExternalForce, + &Children, + )>, + mut level_query: Query<(&mut SelectedCharacterId, &CharacterIdList)>, + mut effect: Query<&mut ParticleEffect>, + dsp_assets: Res, + audio: Res