diff --git a/Cargo.lock b/Cargo.lock index f2fc8588dd..bbe999a2db 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "ab_glyph" -version = "0.2.22" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1061f3ff92c2f65800df1f12fc7b4ff44ee14783104187dd04dfee6f11b0fd2" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" dependencies = [ "ab_glyph_rasterizer", "owned_ttf_parser", @@ -92,15 +92,16 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.3" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" dependencies = [ "cfg-if", - "getrandom 0.2.10", + "getrandom 0.2.11", "once_cell", "serde", "version_check", + "zerocopy", ] [[package]] @@ -202,9 +203,9 @@ dependencies = [ [[package]] name = "arboard" -version = "3.2.1" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08" dependencies = [ "clipboard-win", "core-graphics", @@ -247,25 +248,27 @@ dependencies = [ [[package]] name = "async-executor" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ "async-lock", "async-task", "concurrent-queue", "fastrand 2.0.1", - "futures-lite", + "futures-lite 2.0.1", "slab", ] [[package]] name = "async-lock" -version = "2.8.0" +version = "3.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +checksum = "dea8b3453dd7cc96711834b75400d671b73e3656975fa68d9f277163b7f7e316" dependencies = [ - "event-listener 2.5.3", + "event-listener 4.0.0", + "event-listener-strategy", + "pin-project-lite", ] [[package]] @@ -282,9 +285,9 @@ checksum = "5450eca8ce5abcfd5520727e975ebab30ccca96030550406b0ca718b224ead10" [[package]] name = "atomicell" -version = "0.1.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "157342dd84c64f16899b4b16c1fb2cce54b887990362aac3c590b3d13810890f" +checksum = "bf53d6c43ea3fa42a5d18d6060081bcfddeca7c63faa64e65a59c4372bbe173b" [[package]] name = "autocfg" @@ -309,9 +312,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.4" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "bevy" @@ -422,7 +425,7 @@ checksum = "a44e4e2784a81430199e4157e02903a987a32127c773985506f020e7d501b62e" dependencies = [ "bevy_macro_utils", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -479,13 +482,14 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "bevy_egui" -version = "0.21.0" -source = "git+https://github.com/zicklag/bevy_egui?branch=feat/egui-0.23#aeb3d7f1eaaacc67cf3966974d1e31f31e8fad62" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb1c1f6ad293c60fd8559c4502cda5e832e92b0e0f3d994929b33f24d4352d70" dependencies = [ "arboard", "bevy", @@ -613,7 +617,7 @@ dependencies = [ "bevy_ecs", "bevy_utils", "console_error_panic_hook", - "tracing-log", + "tracing-log 0.1.4", "tracing-subscriber", "tracing-wasm", ] @@ -626,7 +630,7 @@ checksum = "23ddc18d489b4e57832d4958cde7cd2f349f0ad91e5892ac9e2f2ee16546b981" dependencies = [ "quote", "rustc-hash", - "syn 2.0.38", + "syn 2.0.39", "toml_edit", ] @@ -721,7 +725,7 @@ dependencies = [ "bit-set", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "uuid", ] @@ -755,7 +759,7 @@ dependencies = [ "codespan-reporting", "downcast-rs", "encase", - "futures-lite", + "futures-lite 1.13.0", "hexasphere", "image", "js-sys", @@ -782,7 +786,7 @@ dependencies = [ "bevy_macro_utils", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -842,7 +846,7 @@ dependencies = [ "async-executor", "async-task", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "wasm-bindgen-futures", ] @@ -881,7 +885,7 @@ checksum = "08d9484e32434ea84dc548cff246ce0c6f756c1336f5ea03f24ac120a48595c7" dependencies = [ "ahash", "bevy_utils_proc_macros", - "getrandom 0.2.10", + "getrandom 0.2.11", "hashbrown 0.14.2", "instant", "petgraph", @@ -898,7 +902,7 @@ checksum = "5391b242c36f556db01d5891444730c83aa9dd648b6a8fd2b755d22cb3bddb57" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -943,9 +947,9 @@ dependencies = [ [[package]] name = "bindgen" -version = "0.68.1" +version = "0.69.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2" dependencies = [ "bitflags 2.4.1", "cexpr", @@ -958,7 +962,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1046,7 +1050,7 @@ dependencies = [ [[package]] name = "bones_asset" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "anyhow", "append-only-vec", @@ -1057,8 +1061,9 @@ dependencies = [ "bs58", "dashmap", "ehttp", + "elsa", "erased-serde", - "event-listener 3.0.0", + "event-listener 3.1.0", "notify", "once_cell", "paste", @@ -1070,19 +1075,20 @@ dependencies = [ "sha2", "tracing", "ulid", + "web-sys", ] [[package]] name = "bones_bevy_renderer" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "anyhow", "bevy", "bevy_egui", "bevy_prototype_lyon", "bones_framework", - "directories 5.0.1", + "directories", "glam", "serde", "serde_yaml", @@ -1092,7 +1098,7 @@ dependencies = [ [[package]] name = "bones_ecs" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "anyhow", "atomicell", @@ -1100,6 +1106,7 @@ dependencies = [ "bones_schema", "bones_utils", "glam", + "once_map", "paste", "thiserror", ] @@ -1107,11 +1114,12 @@ dependencies = [ [[package]] name = "bones_framework" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "bones_asset", "bones_lib", "bones_schema", + "bones_scripting", "csscolorparser", "egui", "fluent", @@ -1135,7 +1143,7 @@ dependencies = [ [[package]] name = "bones_lib" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "bones_ecs", "instant", @@ -1144,7 +1152,7 @@ dependencies = [ [[package]] name = "bones_schema" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "append-only-vec", "bones_schema_macros", @@ -1155,30 +1163,48 @@ dependencies = [ "paste", "serde", "sptr", + "stable_deref_trait", "ulid", ] [[package]] name = "bones_schema_macros" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "proc-macro2", "quote", "venial", ] +[[package]] +name = "bones_scripting" +version = "0.3.0" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" +dependencies = [ + "async-channel", + "bevy_tasks", + "bones_asset", + "bones_lib", + "elsa", + "gc-arena", + "gc-arena-derive", + "piccolo", + "send_wrapper", + "tracing", + "wasm-bindgen-futures", +] + [[package]] name = "bones_utils" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ - "bevy_ptr", "bones_utils_macros", "branches", - "futures-lite", + "futures-lite 1.13.0", "fxhash", - "getrandom 0.2.10", + "getrandom 0.2.11", "hashbrown 0.14.2", "instant", "maybe-owned", @@ -1193,7 +1219,7 @@ dependencies = [ [[package]] name = "bones_utils_macros" version = "0.3.0" -source = "git+https://github.com/fishfolk/bones#3fd1ace195e2a9ac684c247cd08995b3e5a5b93b" +source = "git+https://github.com/fishfolk/bones#a0e378443c565da47bfdc29539bff8ac0bd3183c" dependencies = [ "quote", "venial", @@ -1237,7 +1263,7 @@ checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1436,9 +1462,9 @@ dependencies = [ [[package]] name = "coreaudio-sys" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d" +checksum = "f3120ebb80a9de008e638ad833d4127d50ea3d3a960ea23ea69bc66d9358a028" dependencies = [ "bindgen", ] @@ -1470,9 +1496,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.9" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" dependencies = [ "libc", ] @@ -1604,9 +1630,9 @@ checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" [[package]] name = "data-encoding" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "digest" @@ -1618,16 +1644,6 @@ dependencies = [ "crypto-common", ] -[[package]] -name = "directories" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d337a64190607d4fcca2cb78982c5dd57f4916e19696b48a575fa746b6cb0f" -dependencies = [ - "libc", - "winapi", -] - [[package]] name = "directories" version = "5.0.1" @@ -1663,7 +1679,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1736,6 +1752,15 @@ version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" +[[package]] +name = "elsa" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "714f766f3556b44e7e4776ad133fcc3445a489517c25c704ace411bb14790194" +dependencies = [ + "stable_deref_trait", +] + [[package]] name = "emath" version = "0.23.0" @@ -1775,7 +1800,7 @@ checksum = "3fe2568f851fd6144a45fa91cfed8fe5ca8fc0b56ba6797bfc1ed2771b90e37c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1789,9 +1814,9 @@ dependencies = [ [[package]] name = "enum-map" -version = "2.6.3" +version = "2.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c188012f8542dee7b3996e44dd89461d64aa471b0a7c71a1ae2f595d259e96e5" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" dependencies = [ "enum-map-derive", "serde", @@ -1799,13 +1824,13 @@ dependencies = [ [[package]] name = "enum-map-derive" -version = "0.14.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04d0b288e3bb1d861c4403c1774a6f7a798781dfc519b3647df2a3dd4ae95f25" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1816,7 +1841,7 @@ checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -1877,15 +1902,36 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] name = "event-listener" -version = "3.0.0" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29e56284f00d94c1bc7fd3c77027b4623c88c1f53d8d2394c6199f2921dea325" +checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae" dependencies = [ "concurrent-queue", "parking", "pin-project-lite", ] +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.0", + "pin-project-lite", +] + [[package]] name = "fastrand" version = "1.9.0" @@ -1903,9 +1949,9 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" [[package]] name = "fdeflate" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" dependencies = [ "simd-adler32", ] @@ -1940,12 +1986,9 @@ dependencies = [ [[package]] name = "float_next_after" -version = "0.1.5" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc612c5837986b7104a87a0df74a5460931f1c5274be12f8d0f40aa2f30d632" -dependencies = [ - "num-traits", -] +checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" [[package]] name = "fluent" @@ -1968,7 +2011,7 @@ dependencies = [ "intl-memoizer", "intl_pluralrules", "rustc-hash", - "self_cell", + "self_cell 0.10.3", "smallvec", "unic-langid", ] @@ -2014,9 +2057,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] @@ -2038,15 +2081,15 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" [[package]] name = "futures-lite" @@ -2063,6 +2106,20 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", +] + [[package]] name = "fxhash" version = "0.2.1" @@ -2072,6 +2129,28 @@ dependencies = [ "byteorder", ] +[[package]] +name = "gc-arena" +version = "0.4.0" +source = "git+https://github.com/kyren/gc-arena#e89e0c18e788bdcd004fc3ed1e90373d0f0af8a7" +dependencies = [ + "allocator-api2", + "gc-arena-derive", + "hashbrown 0.14.2", + "sptr", +] + +[[package]] +name = "gc-arena-derive" +version = "0.4.0" +source = "git+https://github.com/kyren/gc-arena#e89e0c18e788bdcd004fc3ed1e90373d0f0af8a7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "synstructure", +] + [[package]] name = "generic-array" version = "0.14.7" @@ -2084,9 +2163,9 @@ dependencies = [ [[package]] name = "gethostname" -version = "0.2.3" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177" dependencies = [ "libc", "winapi", @@ -2105,9 +2184,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" dependencies = [ "cfg-if", "js-sys", @@ -2118,9 +2197,9 @@ dependencies = [ [[package]] name = "gilrs" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62fd19844d0eb919aca41d3e4ea0e0b6bf60e1e827558b101c269015b8f5f27a" +checksum = "9e9eec02069fcbd7abe00a28adf216547774889129a777cb5e53fdfb75d59f09" dependencies = [ "fnv", "gilrs-core", @@ -2131,17 +2210,18 @@ dependencies = [ [[package]] name = "gilrs-core" -version = "0.5.7" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ccc99e9b8d63ffcaa334c4babfa31f46e156618a11f63efb6e8e6bcb37b830d" +checksum = "178769da179a47b187837d1ab2b5b9b684a21180166a77a4ca37e7e58ee3833d" dependencies = [ "core-foundation", + "inotify 0.10.2", "io-kit-sys", "js-sys", "libc", "libudev-sys", "log", - "nix 0.26.4", + "nix 0.27.1", "uuid", "vec_map", "wasm-bindgen", @@ -2151,9 +2231,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "glam" @@ -2327,9 +2407,9 @@ dependencies = [ [[package]] name = "idna" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -2363,9 +2443,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.0.2" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8adf3ddd720272c6ea8bf59463c04e0f93d0bbf7c5439b691bca2987e0270897" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" dependencies = [ "equivalent", "hashbrown 0.14.2", @@ -2382,6 +2462,17 @@ dependencies = [ "libc", ] +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "inotify-sys", + "libc", +] + [[package]] name = "inotify-sys" version = "0.1.5" @@ -2424,9 +2515,9 @@ dependencies = [ [[package]] name = "io-kit-sys" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2d4429acc1deff0fbdece0325b4997bdb02b2c245ab7023fd5deca0f6348de" +checksum = "4769cb30e5dcf1710fc6730d3e94f78c47723a014a567de385e113c737394640" dependencies = [ "core-foundation-sys", "mach2", @@ -2514,9 +2605,9 @@ checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" [[package]] name = "js-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" dependencies = [ "wasm-bindgen", ] @@ -2530,10 +2621,9 @@ dependencies = [ "bevy_tasks", "bones_bevy_renderer", "bones_framework", - "directories 1.0.2", "egui_extras", "humantime-serde", - "indexmap 2.0.2", + "indexmap 2.1.0", "nalgebra", "once_cell", "ordered-float", @@ -2563,13 +2653,14 @@ dependencies = [ [[package]] name = "kira" version = "0.8.5" -source = "git+https://github.com/zicklag/kira.git?branch=feat/sync#e587b155e862567677c114d0d6fc2963be37c14b" +source = "git+https://github.com/zicklag/kira.git?branch=feat/sync#ff184e31263652e21d94445b9087dfee04c2ea2b" dependencies = [ "atomic-arena", "cpal", "glam", "mint", "ringbuf", + "send_wrapper", "symphonia", ] @@ -2607,9 +2698,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.149" +version = "0.2.150" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libloading" @@ -2637,6 +2728,28 @@ version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + [[package]] name = "libudev-sys" version = "0.1.4" @@ -2671,9 +2784,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lyon_algorithms" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00a0349cd8f0270781bb93a824b63df6178e3b4a27794e7be3ce3763f5a44d6e" +checksum = "a3bca95f9a4955b3e4a821fbbcd5edfbd9be2a9a50bb5758173e5358bfb4c623" dependencies = [ "lyon_path", "num-traits", @@ -2702,9 +2815,9 @@ dependencies = [ [[package]] name = "lyon_tessellation" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d2124218d5428149f9e09520b9acc024334a607e671f032d06567b61008977c" +checksum = "23bcac20d47825850fabf1e869bf7c2bbe2daefa0776c3cd2eb7cb74635f6e4a" dependencies = [ "float_next_after", "lyon_path", @@ -2762,9 +2875,9 @@ checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" [[package]] name = "memoffset" -version = "0.6.5" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] @@ -2816,9 +2929,9 @@ checksum = "e53debba6bda7a793e5f99b8dacf19e626084f525f7829104ba9898f367d85ff" [[package]] name = "mio" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" dependencies = [ "libc", "log", @@ -2933,7 +3046,6 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", - "memoffset 0.6.5", ] [[package]] @@ -2945,6 +3057,18 @@ dependencies = [ "bitflags 1.3.2", "cfg-if", "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "libc", ] [[package]] @@ -2984,7 +3108,7 @@ dependencies = [ "crossbeam-channel", "filetime", "fsevent-sys", - "inotify", + "inotify 0.9.6", "kqueue", "libc", "log", @@ -3102,7 +3226,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3209,24 +3333,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" [[package]] -name = "option-ext" -version = "0.2.0" +name = "once_map" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +checksum = "eba3de7c2ff90d756ee0713daaae3a3547fa2424b3b9cca46bce0b4dcd1d7ef2" +dependencies = [ + "ahash", + "hashbrown 0.14.2", + "parking_lot", + "stable_deref_trait", +] [[package]] -name = "optional" -version = "0.5.0" +name = "option-ext" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978aa494585d3ca4ad74929863093e87cac9790d81fe7aba2b3dc2890643a0fc" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" [[package]] name = "orbclient" -version = "0.3.46" +version = "0.3.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8378ac0dfbd4e7895f2d2c1f1345cab3836910baf3a300b000d04250f0c8428f" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" dependencies = [ - "redox_syscall 0.3.5", + "libredox 0.0.2", ] [[package]] @@ -3246,9 +3376,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "owned_ttf_parser" -version = "0.19.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "706de7e2214113d63a8238d1910463cfce781129a6f263d13fdb09ff64355ba4" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" dependencies = [ "ttf-parser", ] @@ -3363,9 +3493,9 @@ checksum = "36bae92c60fa2398ce4678b98b2c4b5a7c61099961ca1fa305aec04a9ad28922" [[package]] name = "percent-encoding" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "petgraph" @@ -3374,7 +3504,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.0.2", + "indexmap 2.1.0", ] [[package]] @@ -3407,7 +3537,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -3419,6 +3549,20 @@ dependencies = [ "siphasher", ] +[[package]] +name = "piccolo" +version = "0.2.0" +source = "git+https://github.com/kyren/piccolo.git#bc2b4282a078ebb463613a9678372a0ffb6836f1" +dependencies = [ + "allocator-api2", + "anyhow", + "gc-arena", + "hashbrown 0.14.2", + "rand 0.8.5", + "rustc-hash", + "thiserror", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -3577,7 +3721,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", ] [[package]] @@ -3643,15 +3787,6 @@ 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 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.3.5" @@ -3672,12 +3807,12 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" dependencies = [ - "getrandom 0.2.10", - "redox_syscall 0.2.16", + "getrandom 0.2.11", + "libredox 0.0.1", "thiserror", ] @@ -3733,17 +3868,16 @@ checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" [[package]] name = "ring" -version = "0.16.20" +version = "0.17.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b" dependencies = [ "cc", + "getrandom 0.2.11", "libc", - "once_cell", "spin", "untrusted", - "web-sys", - "winapi", + "windows-sys 0.48.0", ] [[package]] @@ -3757,9 +3891,9 @@ dependencies = [ [[package]] name = "robust" -version = "0.2.3" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" [[package]] name = "ron" @@ -3787,9 +3921,9 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" [[package]] name = "rustls" -version = "0.21.7" +version = "0.21.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" dependencies = [ "log", "ring", @@ -3799,9 +3933,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.101.6" +version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c7d5dece342910d9ba34d259310cae3e0154b873b35408b787b59bce53d34fe" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ "ring", "untrusted", @@ -3839,9 +3973,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "sct" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ "ring", "untrusted", @@ -3849,9 +3983,18 @@ dependencies = [ [[package]] name = "self_cell" -version = "0.10.2" +version = "0.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af" +checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" +dependencies = [ + "self_cell 1.0.2", +] + +[[package]] +name = "self_cell" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e388332cd64eb80cd595a00941baf513caffae8dce9cfd0467fc9c66397dade6" [[package]] name = "semver" @@ -3862,31 +4005,37 @@ dependencies = [ "serde", ] +[[package]] +name = "send_wrapper" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" + [[package]] name = "serde" -version = "1.0.189" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.189" +version = "1.0.193" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] name = "serde_json" -version = "1.0.107" +version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ "itoa", "ryu", @@ -3895,11 +4044,11 @@ dependencies = [ [[package]] name = "serde_yaml" -version = "0.9.25" +version = "0.9.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a49e178e4452f45cb61d0cd8cebc1b0fafd3e41929e996cef79aa3aca91f574" +checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", "itoa", "ryu", "serde", @@ -3991,9 +4140,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.1" +version = "1.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "942b4a808e05215192e39f4ab80813e599068285906cc91aa64f923db842bd5a" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" dependencies = [ "serde", ] @@ -4009,21 +4158,21 @@ dependencies = [ [[package]] name = "spade" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88e65803986868d2372c582007c39ba89936a36ea5f236bf7a7728dc258f04f9" +checksum = "c3d3bf265ec2d5dd1ddf87863252123447c550491adba2c70c574173a95cd8ba" dependencies = [ + "hashbrown 0.14.2", "num-traits", - "optional", "robust", "smallvec", ] [[package]] name = "spin" -version = "0.5.2" +version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" [[package]] name = "spirv" @@ -4041,6 +4190,12 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + [[package]] name = "static_assertions" version = "1.1.0" @@ -4152,15 +4307,27 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.38" +version = "2.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e96b79aaa137db8f61e26363a0c9b47d8b4ec75da28b7d1d614c2303e232408b" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "unicode-xid", +] + [[package]] name = "sys-locale" version = "0.3.1" @@ -4192,9 +4359,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "termcolor" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" dependencies = [ "winapi-util", ] @@ -4216,7 +4383,7 @@ checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -4242,9 +4409,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d0e245e80bdc9b4e5356fc45a72184abbc3861992603f515270e9340f5a219" +checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece" dependencies = [ "displaydoc", ] @@ -4266,9 +4433,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" @@ -4276,7 +4443,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.0.2", + "indexmap 2.1.0", "toml_datetime", "winnow", ] @@ -4300,7 +4467,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", ] [[package]] @@ -4315,20 +4482,31 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -4339,7 +4517,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log", + "tracing-log 0.2.0", ] [[package]] @@ -4355,9 +4533,9 @@ dependencies = [ [[package]] name = "ttf-parser" -version = "0.19.2" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49d64318d8311fc2668e48b63969f4343e0a85c4a109aa8460d6672e364b8bd1" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" [[package]] name = "turborand" @@ -4365,7 +4543,7 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e28d61f1c96db8c016037a77961fa5da84fc3a57fe69a15283ace0ab1647bac0" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "instant", ] @@ -4454,15 +4632,15 @@ checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa" [[package]] name = "untrusted" -version = "0.7.1" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.8.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" dependencies = [ "base64", "flate2", @@ -4476,9 +4654,9 @@ dependencies = [ [[package]] name = "url" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -4500,11 +4678,11 @@ dependencies = [ [[package]] name = "uuid" -version = "1.5.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" dependencies = [ - "getrandom 0.2.10", + "getrandom 0.2.11", "serde", ] @@ -4566,9 +4744,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -4576,24 +4754,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.37" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" dependencies = [ "cfg-if", "js-sys", @@ -4603,9 +4781,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -4613,22 +4791,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" dependencies = [ "proc-macro2", "quote", - "syn 2.0.38", + "syn 2.0.39", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.87" +version = "0.2.88" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" [[package]] name = "wayland-scanner" @@ -4643,9 +4821,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.64" +version = "0.3.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" dependencies = [ "js-sys", "wasm-bindgen", @@ -4670,9 +4848,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.25.2" +version = "0.25.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "weezl" @@ -5070,9 +5248,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.5.17" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3b801d0e0a6726477cc207f60162da452f3a95adb368399bef20a946e06f65c" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" dependencies = [ "memchr", ] @@ -5099,12 +5277,12 @@ dependencies = [ [[package]] name = "x11rb" -version = "0.10.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a" dependencies = [ "gethostname", - "nix 0.24.3", + "nix 0.26.4", "winapi", "winapi-wsapoll", "x11rb-protocol", @@ -5112,11 +5290,11 @@ dependencies = [ [[package]] name = "x11rb-protocol" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc" dependencies = [ - "nix 0.24.3", + "nix 0.26.4", ] [[package]] @@ -5124,3 +5302,23 @@ name = "xml-rs" version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "zerocopy" +version = "0.7.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/Cargo.toml b/Cargo.toml index 50dbf88e8c..955330da2c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,6 @@ peg = "0.8.1" egui_extras = { version = "0.23.0", default-features = false } [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -directories = "1.0" bevy_dylib = "0.11" # anyhow = "1.0" diff --git a/assets/game.yaml b/assets/game.yaml index 2285530049..d13a495677 100644 --- a/assets/game.yaml +++ b/assets/game.yaml @@ -13,7 +13,6 @@ music: results_screen: music/11 thar she blows!.ogg credits: music/12 all hands hoay!.ogg - main_menu: title_font: family: Fairfax SM @@ -297,6 +296,7 @@ core: - /map/resources/coral.atlas.yaml map_elements: + - /plugins/anchor/element.yaml - /elements/decoration/anemones/anemones.element.yaml - /elements/decoration/seaweed/seaweed.element.yaml - /elements/environment/urchin/urchin.element.yaml diff --git a/assets/map/levels/level_1.map.yaml b/assets/map/levels/level_1.map.yaml index 82730da0f2..28274886af 100644 --- a/assets/map/levels/level_1.map.yaml +++ b/assets/map/levels/level_1.map.yaml @@ -1237,6 +1237,10 @@ layers: - 432.0 - 555.0 element: /elements/item/sword/sword.element.yaml + - pos: + - 300.0 + - 700.0 + element: /plugins/anchor/element.yaml - pos: - 480.0 - 118.5 diff --git a/assets/pack.yaml b/assets/pack.yaml index 2fd5e136ad..47d66ff22e 100644 --- a/assets/pack.yaml +++ b/assets/pack.yaml @@ -1 +1,5 @@ root: game.yaml +schemas: + - plugins/anchor/AnchorMeta.schema.yaml + - plugins/anchor/IdleAnchor.schema.yaml + - plugins/anchor/FallingAnchor.schema.yaml diff --git a/assets/plugins/anchor/AnchorMeta.schema.yaml b/assets/plugins/anchor/AnchorMeta.schema.yaml new file mode 100644 index 0000000000..3f19c8e50d --- /dev/null +++ b/assets/plugins/anchor/AnchorMeta.schema.yaml @@ -0,0 +1,17 @@ +name: AnchorMeta +full_name: core::AnchorMeta +asset_extension: anchor +kind: !Struct + fields: + - name: atlas + # Handle + schema: UntypedHandle + - name: fall_speed + schema: f32 + - name: body_size + schema: Vec2 + - name: fin_anim + schema: Ustr + - name: grab_offset + schema: Vec2 + diff --git a/assets/plugins/anchor/FallingAnchor.schema.yaml b/assets/plugins/anchor/FallingAnchor.schema.yaml new file mode 100644 index 0000000000..593fc03365 --- /dev/null +++ b/assets/plugins/anchor/FallingAnchor.schema.yaml @@ -0,0 +1,3 @@ +name: FallingAnchor +full_name: core::FallingAnchor +kind: !Struct diff --git a/assets/plugins/anchor/IdleAnchor.schema.yaml b/assets/plugins/anchor/IdleAnchor.schema.yaml new file mode 100644 index 0000000000..2f76da8cb7 --- /dev/null +++ b/assets/plugins/anchor/IdleAnchor.schema.yaml @@ -0,0 +1,3 @@ +name: IdleAnchor +full_name: core::IdleAnchor +kind: !Struct diff --git a/assets/plugins/anchor/anchor.atlas.yaml b/assets/plugins/anchor/anchor.atlas.yaml new file mode 100644 index 0000000000..af8126c24f --- /dev/null +++ b/assets/plugins/anchor/anchor.atlas.yaml @@ -0,0 +1,5 @@ +image: ./anchor.png +tile_size: [28, 35] +columns: 1 +rows: 1 + diff --git a/assets/plugins/anchor/anchor.png b/assets/plugins/anchor/anchor.png new file mode 100644 index 0000000000..a8c7c07970 Binary files /dev/null and b/assets/plugins/anchor/anchor.png differ diff --git a/assets/plugins/anchor/anchor.yaml b/assets/plugins/anchor/anchor.yaml new file mode 100644 index 0000000000..945344c7dc --- /dev/null +++ b/assets/plugins/anchor/anchor.yaml @@ -0,0 +1,5 @@ +atlas: ./anchor.atlas.yaml +grab_offset: [5, -2] +body_size: [28, 34] +fin_anim: grab_2 +fall_speed: 8 diff --git a/assets/plugins/anchor/element.yaml b/assets/plugins/anchor/element.yaml new file mode 100644 index 0000000000..77a0ef7bf3 --- /dev/null +++ b/assets/plugins/anchor/element.yaml @@ -0,0 +1,4 @@ +name: Anchor +category: Weapons +data: anchor.yaml +plugin: plugin.lua diff --git a/assets/plugins/anchor/plugin.lua b/assets/plugins/anchor/plugin.lua new file mode 100644 index 0000000000..f18cede6c6 --- /dev/null +++ b/assets/plugins/anchor/plugin.lua @@ -0,0 +1,95 @@ +local Entities = s"Entities" +local MapElementHydrated = s"MapElementHydrated" +local ElementHandle = s"ElementHandle" +local AnchorMeta = s"AnchorMeta" +local AtlasSprite = s"AtlasSprite" +local Item = s"Item" +local ItemThrow = s"ItemThrow" +local ItemGrab = s"ItemGrab" +local DehydrateOutOfBounds = s"DehydrateOutOfBounds" +local KinematicBody = s"KinematicBody" +local Transform = s"Transform" +local DropItem = s"DropItem" +local ItemUsed = s"ItemUsed" +local IdleAnchor = s"IdleAnchor" +local FallingAnchor = s"FallingAnchor" +local DamageRegion = s"DamageRegion" +local DamageRegionOwner = s"DamageRegionOwner" + +local function hydrate() + local entities = resources:get(Entities) + + for spawner_ent, element_handle in entities:iter_with(ElementHandle, MapElementHydrated:without()) do + local element = assets:get(element_handle[0]) + local anchor_meta = assets:get(element.data) + + if schema_of(anchor_meta) == AnchorMeta then + -- Spawn an anchor + local ent = entities:create() + local sprite = AtlasSprite:create(); + sprite.atlas = anchor_meta.atlas + components:insert(ent, element_handle) + components:insert(ent, MapElementHydrated:create()) + components:insert(ent, IdleAnchor:create()) + components:insert(ent, sprite) + components:insert(ent, components:get(spawner_ent, Transform)) + components:insert(ent, Item:create()) + local item_grab = ItemGrab:create() + item_grab.fin_anim = anchor_meta.fin_anim + item_grab.grab_offset = anchor_meta.grab_offset + components:insert(ent, item_grab) + components:insert(ent, ItemThrow:create()) + local dehydrate_out_of_bounds = DehydrateOutOfBounds:create() + dehydrate_out_of_bounds[0] = spawner_ent + components:insert(ent, dehydrate_out_of_bounds) + local body = KinematicBody:create() + -- TODO: Set the body shape and size. Doesn't work in lua yet because + -- the body shape is an enum. + body.gravity = assets.root.core.physics.gravity + body.has_mass = true + body.has_friction = true + body.bounciness = 0 + components:insert(ent, body) + + -- Mark spawner as hydrated + components:insert(spawner_ent, MapElementHydrated:create()) + end + end +end + +local function update() + local entities = resources:get(Entities) + + for ent in entities:iter_with(IdleAnchor) do + local element_handle = components:get(ent, ElementHandle) + local element = assets:get(element_handle[0]) + local anchor_meta = assets:get(element.data) + + local used = components:get(ent, ItemUsed) + if used then + -- components:remove(ent, ItemUsed) + components:remove(ent, KinematicBody) + components:remove(ent, IdleAnchor) + components:insert(ent, FallingAnchor:create()) + components:insert(ent, DropItem:create()) + local damage = DamageRegion:create() + damage.size = anchor_meta.body_size + components:insert(ent, damage) + local damageOwner = DamageRegionOwner:create() + damageOwner[0] = used.owner + components:insert(ent, damageOwner) + end + end + + for ent in entities:iter_with(FallingAnchor) do + local element_handle = components:get(ent, ElementHandle) + local element = assets:get(element_handle[0]) + local anchor_meta = assets:get(element.data) + + local trans = components:get(ent, Transform) + trans.translation.y = trans.translation.y - anchor_meta.fall_speed + end +end + +session:add_system_to_stage(CoreStage.PreUpdate, hydrate) +session:add_system_to_stage(CoreStage.PostUpdate, update) diff --git a/rust-toolchain b/rust-toolchain index 5e3a425662..bc8a6589c9 100644 --- a/rust-toolchain +++ b/rust-toolchain @@ -1 +1 @@ -1.73.0 +1.74 diff --git a/src/core.rs b/src/core.rs index 62bb261781..41537f6af3 100644 --- a/src/core.rs +++ b/src/core.rs @@ -38,10 +38,10 @@ pub mod prelude { } pub fn game_plugin(game: &mut Game) { - PlayerMeta::schema(); - AudioSource::schema(); - HatMeta::schema(); - MapMeta::schema(); + PlayerMeta::register_schema(); + AudioSource::register_schema(); + HatMeta::register_schema(); + MapMeta::register_schema(); game.install_plugin(elements::game_plugin) .install_plugin(bullet::game_plugin) .init_shared_resource::(); @@ -50,6 +50,8 @@ pub fn game_plugin(game: &mut Game) { pub struct MatchPlugin { pub map: MapMeta, pub player_info: [PlayerInput; MAX_PLAYERS], + /// The lua plugins to enable for this match. + pub plugins: Arc>>, } pub struct MatchPlayerInfo { @@ -63,6 +65,7 @@ impl SessionPlugin for MatchPlugin { fn install(self, session: &mut Session) { session .install_plugin(DefaultSessionPlugin) + .install_plugin(LuaPluginLoaderSessionPlugin(self.plugins)) .install_plugin(audio::session_plugin); physics::install(session); diff --git a/src/core/bullet.rs b/src/core/bullet.rs index 7c6c3128d2..f56c49d0ea 100644 --- a/src/core/bullet.rs +++ b/src/core/bullet.rs @@ -5,7 +5,7 @@ use crate::prelude::*; pub fn game_plugin(game: &mut Game) { - BulletMeta::schema(); + BulletMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/damage.rs b/src/core/damage.rs index 23797527db..e6e098279c 100644 --- a/src/core/damage.rs +++ b/src/core/damage.rs @@ -8,6 +8,9 @@ use super::utils::Rect; /// Install this module. pub fn install(session: &mut Session) { + DamageRegion::register_schema(); + DamageRegionOwner::register_schema(); + session .stages .add_system_to_stage(CoreStage::PostUpdate, kill_players_in_damage_region); @@ -18,6 +21,7 @@ pub fn install(session: &mut Session) { /// While this _might_ change in the future, damage regions will kill players immediately, so there /// is no "damage" field. #[derive(Debug, Clone, Default, HasSchema)] +#[repr(C)] pub struct DamageRegion { /// The size of the damage region in pixels pub size: Vec2, @@ -33,7 +37,9 @@ impl DamageRegion { /// A component that may be added to a damage region entity to indicate the triggering entity. /// /// If this entity is a player, it will not be harmed by the damage region. +// TODO: Make `DamageRegionOwner` a part of the `DamageRegion` component? #[derive(Debug, Clone, HasSchema, Default)] +#[repr(C)] pub struct DamageRegionOwner(pub Entity); /// System that will eliminate players that are intersecting with a damage region. diff --git a/src/core/debug.rs b/src/core/debug.rs index 00450efcaa..4f3d13e393 100644 --- a/src/core/debug.rs +++ b/src/core/debug.rs @@ -75,7 +75,8 @@ impl FromWorld for RapierDebugContext { fn from_world(world: &mut World) -> Self { let path_entity = world.resource_mut::().create(); - let mut transforms = world.components.get_mut::().unwrap(); + let transforms = world.components.get::(); + let mut transforms = transforms.borrow_mut(); transforms.insert( path_entity, Transform::from_translation(vec3(0.0, 0.0, -1.0)), diff --git a/src/core/elements.rs b/src/core/elements.rs index 6f28374646..763fabd98d 100644 --- a/src/core/elements.rs +++ b/src/core/elements.rs @@ -40,6 +40,7 @@ pub struct ElementMeta { pub category: Ustr, pub data: Handle, pub editor: ElementEditorMeta, + pub plugin: Handle, } #[derive(HasSchema, Deserialize, Clone, Debug)] @@ -65,6 +66,7 @@ impl Default for ElementEditorMeta { /// Marker component added to map elements that have been hydrated. #[derive(Clone, HasSchema, Default)] +#[repr(C)] pub struct MapElementHydrated; /// Component that contains the [`Entity`] to de-hydrate when the entity with this component is out @@ -73,10 +75,12 @@ pub struct MapElementHydrated; /// This is useful for map elements that spawn items: when the item falls off the map, it should /// de-hydrate it's spawner, so that the spawner will re-spawn the item in it's default state. #[derive(Clone, HasSchema, Default, Deref, DerefMut)] +#[repr(C)] pub struct DehydrateOutOfBounds(pub Entity); /// Component containing an element's metadata handle. #[derive(Clone, Copy, HasSchema, Default, Deref, DerefMut)] +#[repr(C)] pub struct ElementHandle(pub Handle); #[derive(Clone, HasSchema)] @@ -178,6 +182,7 @@ impl<'a> SpawnerManager<'a> { self.spawners.insert(entity, spawner); } + /// Stores the spawned elements as having come from the same group of spawners as the spawner_elements. pub fn insert_spawned_entity_into_grouped_spawner( &mut self, @@ -260,6 +265,10 @@ impl<'a> SpawnerManager<'a> { macro_rules! install_plugins { ($($module:ident),* $(,)?) => { pub fn session_plugin(session: &mut Session) { + ElementHandle::register_schema(); + MapElementHydrated::register_schema(); + DehydrateOutOfBounds::register_schema(); + session .stages .add_system_to_stage(CoreStage::First, handle_out_of_bounds_items); @@ -270,7 +279,7 @@ macro_rules! install_plugins { } pub fn game_plugin(game: &mut Game) { - ElementMeta::schema(); + ElementMeta::register_schema(); game.init_shared_resource::(); $( diff --git a/src/core/elements/crab.rs b/src/core/elements/crab.rs index db9ed41890..71150c11e2 100644 --- a/src/core/elements/crab.rs +++ b/src/core/elements/crab.rs @@ -30,7 +30,7 @@ pub fn session_plugin(session: &mut Session) { } pub fn game_plugin(game: &mut Game) { - CrabMeta::schema(); + CrabMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/crate_item.rs b/src/core/elements/crate_item.rs index 177d25cd08..956e59123c 100644 --- a/src/core/elements/crate_item.rs +++ b/src/core/elements/crate_item.rs @@ -29,7 +29,7 @@ pub struct CrateMeta { } pub fn game_plugin(game: &mut Game) { - CrateMeta::schema(); + CrateMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/decoration.rs b/src/core/elements/decoration.rs index 08ee2f411a..dc4002d469 100644 --- a/src/core/elements/decoration.rs +++ b/src/core/elements/decoration.rs @@ -12,7 +12,7 @@ pub struct AnimatedDecorationMeta { } pub fn game_plugin(game: &mut Game) { - AnimatedDecorationMeta::schema(); + AnimatedDecorationMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/fish_school.rs b/src/core/elements/fish_school.rs index c43c0ee5e5..341bae85be 100644 --- a/src/core/elements/fish_school.rs +++ b/src/core/elements/fish_school.rs @@ -19,7 +19,7 @@ pub struct FishSchoolMeta { } pub fn game_plugin(game: &mut Game) { - FishSchoolMeta::schema(); + FishSchoolMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/grenade.rs b/src/core/elements/grenade.rs index 4caa4e988e..64202e82cb 100644 --- a/src/core/elements/grenade.rs +++ b/src/core/elements/grenade.rs @@ -29,7 +29,7 @@ pub struct GrenadeMeta { } pub fn game_plugin(game: &mut Game) { - GrenadeMeta::schema(); + GrenadeMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/kick_bomb.rs b/src/core/elements/kick_bomb.rs index f9dfaa2a61..ca76ff06af 100644 --- a/src/core/elements/kick_bomb.rs +++ b/src/core/elements/kick_bomb.rs @@ -29,9 +29,8 @@ pub struct KickBombMeta { pub arm_delay: Duration, } -pub fn game_plugin(game: &mut Game) { - KickBombMeta::schema(); - game.init_shared_resource::(); +pub fn game_plugin(_game: &mut Game) { + KickBombMeta::register_schema(); } pub fn session_plugin(session: &mut Session) { @@ -63,7 +62,7 @@ fn hydrate( mut atlas_sprites: CompMut, assets: Res, mut hydrated: CompMut, - mut element_handles: CompMut, + element_handles: Comp, mut animated_sprites: CompMut, mut respawn_points: CompMut, mut spawner_manager: SpawnerManager, @@ -113,8 +112,6 @@ fn hydrate( atlas_sprites.insert(entity, AtlasSprite::new(*atlas)); respawn_points.insert(entity, DehydrateOutOfBounds(spawner_ent)); transforms.insert(entity, transform); - element_handles.insert(entity, element_handle); - hydrated.insert(entity, MapElementHydrated); animated_sprites.insert(entity, default()); bodies.insert( entity, diff --git a/src/core/elements/mine.rs b/src/core/elements/mine.rs index fc645b15f7..1624e31933 100644 --- a/src/core/elements/mine.rs +++ b/src/core/elements/mine.rs @@ -31,7 +31,7 @@ pub struct MineMeta { } pub fn game_plugin(game: &mut Game) { - MineMeta::schema(); + MineMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/musket.rs b/src/core/elements/musket.rs index 95f4011c88..d9b2e351bd 100644 --- a/src/core/elements/musket.rs +++ b/src/core/elements/musket.rs @@ -30,7 +30,7 @@ pub struct MusketMeta { } pub fn game_plugin(game: &mut Game) { - MusketMeta::schema(); + MusketMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/player_spawner.rs b/src/core/elements/player_spawner.rs index b471c0dc40..26f1841f6d 100644 --- a/src/core/elements/player_spawner.rs +++ b/src/core/elements/player_spawner.rs @@ -7,7 +7,7 @@ use crate::prelude::*; pub struct PlayerSpawnerMeta; pub fn game_plugin(game: &mut Game) { - PlayerSpawnerMeta::schema(); + PlayerSpawnerMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/slippery.rs b/src/core/elements/slippery.rs index 732d4460f3..288b246c88 100644 --- a/src/core/elements/slippery.rs +++ b/src/core/elements/slippery.rs @@ -11,7 +11,7 @@ pub struct SlipperyMeta { } pub fn game_plugin(game: &mut Game) { - SlipperyMeta::schema(); + SlipperyMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/slippery_seaweed.rs b/src/core/elements/slippery_seaweed.rs index 4f136d3f00..54d2ac8d4c 100644 --- a/src/core/elements/slippery_seaweed.rs +++ b/src/core/elements/slippery_seaweed.rs @@ -12,7 +12,7 @@ pub struct SlipperySeaweedMeta { } pub fn game_plugin(game: &mut Game) { - SlipperySeaweedMeta::schema(); + SlipperySeaweedMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/snail.rs b/src/core/elements/snail.rs index 5549cb3d04..6efaa4dbda 100644 --- a/src/core/elements/snail.rs +++ b/src/core/elements/snail.rs @@ -22,7 +22,7 @@ pub struct SnailMeta { } pub fn game_plugin(game: &mut Game) { - SnailMeta::schema(); + SnailMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/spike.rs b/src/core/elements/spike.rs index e85f5c23ae..e1cf517add 100644 --- a/src/core/elements/spike.rs +++ b/src/core/elements/spike.rs @@ -12,7 +12,7 @@ pub struct SpikeMeta { } pub fn game_plugin(game: &mut Game) { - SpikeMeta::schema(); + SpikeMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/sproinger.rs b/src/core/elements/sproinger.rs index 3ac870bcf9..f3227e0747 100644 --- a/src/core/elements/sproinger.rs +++ b/src/core/elements/sproinger.rs @@ -13,7 +13,7 @@ pub struct SproingerMeta { } pub fn game_plugin(game: &mut Game) { - SproingerMeta::schema(); + SproingerMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/stomp_boots.rs b/src/core/elements/stomp_boots.rs index 19a271482e..6549882b57 100644 --- a/src/core/elements/stomp_boots.rs +++ b/src/core/elements/stomp_boots.rs @@ -12,7 +12,7 @@ pub struct StompBootsMeta { } pub fn game_plugin(game: &mut Game) { - StompBootsMeta::schema(); + StompBootsMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/sword.rs b/src/core/elements/sword.rs index b769041513..e5f9ecd49b 100644 --- a/src/core/elements/sword.rs +++ b/src/core/elements/sword.rs @@ -20,7 +20,7 @@ pub struct SwordMeta { } pub fn game_plugin(game: &mut Game) { - SwordMeta::schema(); + SwordMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/elements/urchin.rs b/src/core/elements/urchin.rs index f6f657722f..0703ffb03b 100644 --- a/src/core/elements/urchin.rs +++ b/src/core/elements/urchin.rs @@ -13,7 +13,7 @@ pub struct UrchinMeta { } pub fn game_plugin(game: &mut Game) { - UrchinMeta::schema(); + UrchinMeta::register_schema(); game.init_shared_resource::(); } diff --git a/src/core/item.rs b/src/core/item.rs index 398700c5d0..52ab8b65a2 100644 --- a/src/core/item.rs +++ b/src/core/item.rs @@ -5,9 +5,16 @@ use crate::prelude::*; pub fn install(session: &mut Session) { + Item::register_schema(); + ItemThrow::register_schema(); + ItemGrab::register_schema(); + DropItem::register_schema(); + ItemUsed::register_schema(); + session .stages .add_system_to_stage(CoreStage::Last, grab_items) + .add_system_to_stage(CoreStage::Last, drop_items) .add_system_to_stage(CoreStage::Last, throw_dropped_items); } @@ -15,12 +22,18 @@ pub fn install(session: &mut Session) { /// /// Items are any entity that players can pick up and use. #[derive(Clone, Copy, HasSchema, Default)] +#[repr(C)] pub struct Item; /// An intventory component, indicating another entity that the player is carrying. #[derive(Clone, HasSchema, Default, Deref, DerefMut)] pub struct Inventory(pub Option); +/// Marker component that may be added to an item to cause it to be droped by a player. +#[derive(Clone, HasSchema, Default)] +#[repr(C)] +pub struct DropItem; + /// A helper struct containing a player-inventory pair that indicates the given player is holding /// the other entity in their inventory. #[derive(Debug, Clone, Copy)] @@ -37,10 +50,7 @@ impl<'a> SystemParam for PlayerInventories<'a> { type State = [Option; MAX_PLAYERS]; type Param<'s> = PlayerInventories<'s>; - fn initialize(world: &mut World) { - world.components.init::(); - world.components.init::(); - } + fn initialize(_world: &mut World) {} fn get_state(world: &World) -> Self::State { world.run_initialized_system( @@ -83,6 +93,7 @@ pub struct ItemGrabbed { /// Marker component added to items when they are used. #[derive(Clone, Copy, HasSchema, Default)] +#[repr(C)] pub struct ItemUsed { /// The player that used the item pub owner: Entity, @@ -94,12 +105,27 @@ pub struct ItemUsed { /// [`ItemGrabbed`] components for entities which have this component. /// [`Item`] is required for the system to take affect. #[derive(Clone, HasSchema, Default)] +#[repr(C)] pub struct ItemGrab { pub fin_anim: Ustr, pub grab_offset: Vec2, pub sync_animation: bool, } +/// Drop items that have the `DropItem` component added to them. +pub fn drop_items( + mut commands: Commands, + mut drop_items: CompMut, + player_inventories: PlayerInventories, +) { + for Inv { player, inventory } in player_inventories.iter().flatten() { + if drop_items.contains(*inventory) { + drop_items.remove(*inventory); + commands.add(PlayerCommand::set_inventory(*player, None)); + } + } +} + pub fn grab_items( entities: Res, item_grab: Comp, @@ -145,6 +171,7 @@ pub fn grab_items( /// [`ItemDropped`] components for entities which have this component. /// [`Item`] is required for the system to take affect. #[derive(Clone, HasSchema)] +#[repr(C)] pub struct ItemThrow { normal: Vec2, fast: Vec2, @@ -153,6 +180,7 @@ pub struct ItemThrow { lob: Vec2, roll: Vec2, spin: f32, + #[schema(opaque)] /// An optional system value that gets run once on throw. system: Option>>>, } @@ -252,8 +280,8 @@ pub fn throw_dropped_items( player_spawnwers: Comp, mut commands: Commands, ) { - for (entity, (_items, item_throw, body, transform)) in - entities.iter_with((&items, &item_throws, &mut bodies, &mut transforms)) + for (entity, (_items, item_throw, transform)) in + entities.iter_with((&items, &item_throws, &mut transforms)) { if let Some(ItemDropped { player }) = items_dropped.get(entity).cloned() { if let Some(system) = item_throw.system.clone() { @@ -291,11 +319,13 @@ pub fn throw_dropped_items( transform.translation.z = z_depth_for_map_layer(layer.layer_idx); } - body.velocity = throw_velocity * horizontal_flip_factor; - body.angular_velocity = - item_throw.spin * horizontal_flip_factor.x * throw_velocity.y.signum(); + if let Some(body) = bodies.get_mut(entity) { + body.velocity = throw_velocity * horizontal_flip_factor; + body.angular_velocity = + item_throw.spin * horizontal_flip_factor.x * throw_velocity.y.signum(); - body.is_deactivated = false; + body.is_deactivated = false; + } } } } diff --git a/src/core/metadata.rs b/src/core/metadata.rs index 94aa626fb2..ced8456cec 100644 --- a/src/core/metadata.rs +++ b/src/core/metadata.rs @@ -18,12 +18,12 @@ pub trait MatchAssetServerExt { } impl MatchAssetServerExt for &mut AssetServer { fn register_match_assets(self) -> Self { - CoreMeta::schema(); - PlayerMeta::schema(); - ElementMeta::schema(); - BulletMeta::schema(); - MapMeta::schema(); - HatMeta::schema(); + CoreMeta::register_schema(); + PlayerMeta::register_schema(); + ElementMeta::register_schema(); + BulletMeta::register_schema(); + MapMeta::register_schema(); + HatMeta::register_schema(); self } diff --git a/src/core/physics.rs b/src/core/physics.rs index bca690e391..cd6e7a649f 100644 --- a/src/core/physics.rs +++ b/src/core/physics.rs @@ -29,6 +29,9 @@ impl StageLabel for PhysicsStage { } pub fn install(session: &mut Session) { + KinematicBody::register_schema(); + ColliderShape::register_schema(); + session .stages // TODO: Think again about exactly how to organize the physics sync systems. At the time of @@ -74,6 +77,7 @@ pub struct KinematicBody { pub has_mass: bool, pub has_friction: bool, pub can_rotate: bool, + /// Whether or not physics has been disabled for this body. pub is_deactivated: bool, /// Whether or not the body should fall through jump_through platforms pub fall_through: bool, diff --git a/src/core/physics/collisions/shape.rs b/src/core/physics/collisions/shape.rs index 343e45e3e9..8f42e30756 100644 --- a/src/core/physics/collisions/shape.rs +++ b/src/core/physics/collisions/shape.rs @@ -12,7 +12,7 @@ impl ColliderShapeCache { /// The Jumpy collision shape type. #[derive(Clone, Copy, Debug, HasSchema)] -#[schema(opaque)] +#[repr(C, u8)] pub enum ColliderShape { Circle { diameter: f32 }, Rectangle { size: Vec2 }, diff --git a/src/core/player/state/stage.rs b/src/core/player/state/stage.rs index e6b0275e29..b5b8aaa52e 100644 --- a/src/core/player/state/stage.rs +++ b/src/core/player/state/stage.rs @@ -38,8 +38,6 @@ impl SystemStage for PlayerStateStageImpl { } fn initialize(&mut self, world: &mut World) { - world.components.init::(); - world.components.init::(); for system in &mut self.systems { system.initialize(world); } diff --git a/src/main.rs b/src/main.rs index 4c65d50c65..0638178b66 100644 --- a/src/main.rs +++ b/src/main.rs @@ -43,6 +43,7 @@ use bevy_dylib; #[type_data(metadata_asset("game"))] #[repr(C)] pub struct GameMeta { + pub plugins: SVec>, pub core: CoreMeta, pub default_settings: settings::Settings, pub localization: Handle, @@ -51,6 +52,22 @@ pub struct GameMeta { pub music: GameMusic, } +impl GameMeta { + /// Get the lua plugins loaded by the game. + pub fn get_plugins(&self, asset_server: &AssetServer) -> Arc>> { + let mut plugins = Vec::new(); + plugins.extend(self.plugins.iter().copied()); + plugins.extend( + self.core + .map_elements + .iter() + .map(|eh| asset_server.get(*eh).plugin) + .filter(|plugin_handle| plugin_handle != &Handle::default()), + ); + Arc::new(plugins) + } +} + #[derive(HasSchema, Clone, Debug, Default)] #[repr(C)] pub struct GameMusic { @@ -66,13 +83,13 @@ fn main() { bevy_tasks::IoTaskPool::init(bevy_tasks::TaskPool::new); // Register types that we will load from persistent storage. - settings::Settings::schema(); + settings::Settings::register_schema(); // First create bones game. let mut game = Game::new(); // Register our game asset type - GameMeta::schema(); + GameMeta::register_schema(); game // Install game plugins diff --git a/src/sessions.rs b/src/sessions.rs index 1286c1381b..2c6341abf9 100644 --- a/src/sessions.rs +++ b/src/sessions.rs @@ -2,10 +2,10 @@ use crate::prelude::*; pub struct SessionNames; impl SessionNames { - pub const GAME: &str = "game"; - pub const MAIN_MENU: &str = "main_menu"; - pub const PAUSE_MENU: &str = "pause_menu"; - pub const MUSIC_PLAYER: &str = "music_player"; + pub const GAME: &'static str = "game"; + pub const MAIN_MENU: &'static str = "main_menu"; + pub const PAUSE_MENU: &'static str = "pause_menu"; + pub const MUSIC_PLAYER: &'static str = "music_player"; } pub trait SessionExt { @@ -27,14 +27,22 @@ impl SessionExt for Sessions { #[track_caller] fn restart_game(&mut self) { - if let Some((map, player_info)) = self.get(SessionNames::GAME).map(|session| { + if let Some((map, player_info, plugins)) = self.get(SessionNames::GAME).map(|session| { let map = (*session.world.resource::().0).clone(); let match_inputs = session.world.resource::(); - (map, match_inputs.players.clone()) + ( + map, + match_inputs.players.clone(), + session.world.resource::().0.clone(), + ) }) { self.end_game(); self.create(SessionNames::GAME) - .install_plugin(crate::core::MatchPlugin { map, player_info }); + .install_plugin(crate::core::MatchPlugin { + map, + player_info, + plugins, + }); } else { panic!("Cannot restart game when game is not running"); } diff --git a/src/ui/main_menu/map_select.rs b/src/ui/main_menu/map_select.rs index 97a339b9b6..85226ec478 100644 --- a/src/ui/main_menu/map_select.rs +++ b/src/ui/main_menu/map_select.rs @@ -9,8 +9,10 @@ use super::MenuPage; pub fn widget( ui: In<&mut egui::Ui>, world: &World, + meta: Root, mut sessions: ResMut, mut session_options: ResMut, + assets: Res, ) { let select_action = world.run_initialized_system(map_select_menu, ()); @@ -35,6 +37,7 @@ pub fn widget( control: default(), } }), + plugins: meta.get_plugins(&assets), }); ui.ctx().set_state(PlayerSelectState::default()); } diff --git a/src/ui/pause_menu.rs b/src/ui/pause_menu.rs index 545825715c..6402d18482 100644 --- a/src/ui/pause_menu.rs +++ b/src/ui/pause_menu.rs @@ -20,6 +20,7 @@ fn pause_menu_system( ctx: Res, controls: Res, world: &World, + assets: Res, ) { let mut back_to_menu = false; let mut restart_game = false; @@ -99,6 +100,7 @@ fn pause_menu_system( editor_input: default(), ..match_info.players[i] }), + plugins: meta.get_plugins(&assets), }) } }