From 3d1e29b67bf7a092e6b1cd4488d1c8c4921d8d20 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 01:18:45 -0700 Subject: [PATCH 01/28] Simplify component_size_cached --- engine_interface/src/lib.rs | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/engine_interface/src/lib.rs b/engine_interface/src/lib.rs index 2043d521..915b49d0 100644 --- a/engine_interface/src/lib.rs +++ b/engine_interface/src/lib.rs @@ -104,32 +104,19 @@ fn validate_component(c: &C) { } } -/// Component size cache -pub(crate) struct SizeCache(HashMap<&'static str, usize>); - -thread_local! { - /// Thread local component size cache - static SIZE_CACHE: RefCell> = RefCell::new(Lazy::new(|| SizeCache::new())); -} - -impl SizeCache { - pub fn new() -> Self { - SizeCache(HashMap::new()) - } - - /// Get the size in bytse of the given component - #[track_caller] - pub fn size(&mut self) -> usize { - let SizeCache(map) = self; - *map.entry(C::ID) - .or_insert_with(|| max_component_size::()) - } -} - /// Get the size of a component #[track_caller] pub fn component_size_cached() -> usize { - SIZE_CACHE.with(|cache| cache.borrow_mut().size::()) + thread_local! { + /// Thread local component size cache + static SIZE_CACHE: RefCell>> = RefCell::new(Lazy::new(|| HashMap::new())); + } + SIZE_CACHE.with(|cache| { + *cache + .borrow_mut() + .entry(C::ID) + .or_insert_with(|| max_component_size::()) + }) } /// Get the ComponentId of a Component From 56370801c1f38fd1e365ff3c27746c9079abcbaf Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 01:34:19 -0700 Subject: [PATCH 02/28] Send component schema to host on first use --- Cargo.lock | 529 ++++++++++++++------------------- engine_interface/Cargo.toml | 4 +- engine_interface/src/lib.rs | 17 +- engine_interface/src/plugin.rs | 20 +- 4 files changed, 261 insertions(+), 309 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e16ddc59..e0fc3467 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,13 +4,24 @@ version = 3 [[package]] name = "addr2line" -version = "0.19.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] +[[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 = "ahash" version = "0.8.2" @@ -38,6 +49,12 @@ version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7724808837b77f4b4de9d283820f9d98bcf496d5692934b857a2399d31ff22e6" +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + [[package]] name = "async-trait" version = "0.1.60" @@ -68,9 +85,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.21.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "bincode" @@ -166,22 +183,11 @@ dependencies = [ "serde", ] -[[package]] -name = "cimvr_derive_macros" -version = "0.1.0" -dependencies = [ - "bincode", - "proc-macro2", - "quote", - "serde", - "syn", -] - [[package]] name = "cimvr_engine" version = "0.1.0" dependencies = [ - "ahash", + "ahash 0.8.2", "anyhow", "cimvr_engine_interface", "log", @@ -196,7 +202,7 @@ name = "cimvr_engine_interface" version = "0.1.0" dependencies = [ "bincode", - "cimvr_derive_macros", + "kobble", "log", "once_cell", "serde", @@ -245,27 +251,28 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862eb053fc21f991db27c73bc51494fe77aadfa09ea257cb43b62a2656fd4cc1" +checksum = "b62c772976416112fa4484cbd688cb6fb35fd430005c1c586224fc014018abad" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038a74bc85da2f6f9e237c51b7998b47229c0f9da69b4c6b0590cf6621c45d46" +checksum = "9b40ed2dd13c2ac7e24f88a3090c68ad3414eb1d066a95f8f1f7b3b819cb4e46" dependencies = [ + "arrayvec", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", + "cranelift-egraph", "cranelift-entity", "cranelift-isle", "gimli", - "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -274,33 +281,47 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb720a7955cf7cc92c58f3896952589062e6f12d8eb35ef4337e708ed2e738" +checksum = "bb927a8f1c27c34ee3759b6b0ffa528d2330405d5cc4511f0cab33fe2279f4b5" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0954f9426cf0fa7ad57910ea5822a09c5da590222a767a6c38080a8534a0af8" +checksum = "43dfa417b884a9ab488d95fd6b93b25e959321fe7bfd7a0a960ba5d7fb7ab927" + +[[package]] +name = "cranelift-egraph" +version = "0.90.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a66b39785efd8513d2cca967ede56d6cc57c8d7986a595c7c47d0c78de8dce" +dependencies = [ + "cranelift-entity", + "fxhash", + "hashbrown", + "indexmap", + "log", + "smallvec", +] [[package]] name = "cranelift-entity" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c7096c1a66cfa73899645f0a46a6f5c91641e678eeafb0fc47a19ab34069ca" +checksum = "0637ffde963cb5d759bc4d454cfa364b6509e6c74cdaa21298add0ed9276f346" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697f2fdaceb228fea413ea91baa7c6b8533fc2e61ac5a08db7acc1b31e673a2a" +checksum = "fb72b8342685e850cb037350418f62cc4fc55d6c2eb9c7ca01b82f9f1a6f3d56" dependencies = [ "cranelift-codegen", "log", @@ -310,15 +331,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f41037f4863e0c6716dbe60e551d501f4197383cb43d75038c0170159fc8fb5b" +checksum = "850579cb9e4b448f7c301f1e6e6cbad99abe3f1f1d878a4994cb66e33c6db8cd" [[package]] name = "cranelift-native" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "797c6e5643eb654bb7bf496f1f03518323a89b937b84020b786620f910364a52" +checksum = "2d0a279e5bcba3e0466c734d8d8eb6bfc1ad29e95c37f3e4955b492b5616335e" dependencies = [ "cranelift-codegen", "libc", @@ -327,9 +348,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b5fae12cefda3a2c43837e562dd525ab1d75b27989eece66de5b2c8fe120f9" +checksum = "e6b8c5e7ffb754093fb89ec4bd4f9dbb9f1c955427299e334917d284745835c2" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -551,15 +572,6 @@ dependencies = [ "serde", ] -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - [[package]] name = "fsevent-sys" version = "4.1.0" @@ -610,9 +622,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", "indexmap", @@ -633,14 +645,8 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] @@ -652,12 +658,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "hello" version = "0.1.0" @@ -691,22 +691,6 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" -[[package]] -name = "id-arena" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" - -[[package]] -name = "idna" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "indexmap" version = "1.9.2" @@ -714,7 +698,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown 0.12.3", + "hashbrown", "serde", ] @@ -738,6 +722,12 @@ dependencies = [ "libc", ] +[[package]] +name = "io-lifetimes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" + [[package]] name = "io-lifetimes" version = "1.0.3" @@ -755,8 +745,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330" dependencies = [ "hermit-abi 0.2.6", - "io-lifetimes", - "rustix", + "io-lifetimes 1.0.3", + "rustix 0.36.5", "windows-sys 0.42.0", ] @@ -771,9 +761,9 @@ dependencies = [ [[package]] name = "ittapi" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e648c437172ce7d3ac35ca11a068755072054826fa455a916b43524fa4a62a7" +checksum = "e8c4f6ff06169ce7048dac5150b1501c7e3716a929721aeb06b87e51a43e42f4" dependencies = [ "anyhow", "ittapi-sys", @@ -782,9 +772,9 @@ dependencies = [ [[package]] name = "ittapi-sys" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b32a4d23f72548178dde54f3c12c6b6a08598e25575c0d0fa5bd861e0dc1a5" +checksum = "87e078cce01485f418bae3beb34dd604aaedf2065502853c7da17fbce8e64eda" dependencies = [ "cc", ] @@ -807,6 +797,14 @@ dependencies = [ "serde", ] +[[package]] +name = "kobble" +version = "0.1.0" +dependencies = [ + "once_cell", + "serde", +] + [[package]] name = "kqueue" version = "1.0.7" @@ -845,6 +843,12 @@ version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" +[[package]] +name = "linux-raw-sys" +version = "0.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" + [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -881,23 +885,23 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix", + "rustix 0.36.5", ] [[package]] name = "memoffset" -version = "0.7.1" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" dependencies = [ "autocfg", ] [[package]] name = "memoffset" -version = "0.8.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" dependencies = [ "autocfg", ] @@ -944,21 +948,21 @@ dependencies = [ [[package]] name = "object" -version = "0.30.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown 0.13.2", + "hashbrown", "indexmap", "memchr", ] [[package]] name = "once_cell" -version = "1.16.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "particle-life" @@ -976,12 +980,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" -[[package]] -name = "percent-encoding" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1014,9 +1012,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" dependencies = [ "unicode-ident", ] @@ -1030,22 +1028,11 @@ dependencies = [ "cc", ] -[[package]] -name = "pulldown-cmark" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - [[package]] name = "quote" -version = "1.0.23" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "556d0f47a940e895261e77dc200d5eadfc6ef644c179c6f5edfc105e3a2292c8" dependencies = [ "proc-macro2", ] @@ -1133,9 +1120,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.6.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +checksum = "91b2eab54204ea0117fe9a060537e0b07a4e72f7c7d182361ecc346cab2240e5" dependencies = [ "fxhash", "log", @@ -1168,16 +1155,30 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustix" -version = "0.36.11" +version = "0.35.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes 0.7.5", + "libc", + "linux-raw-sys 0.0.46", + "windows-sys 0.42.0", +] + +[[package]] +name = "rustix" +version = "0.36.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588" dependencies = [ "bitflags", "errno", - "io-lifetimes", + "io-lifetimes 1.0.3", "libc", - "linux-raw-sys", - "windows-sys 0.45.0", + "linux-raw-sys 0.1.4", + "windows-sys 0.42.0", ] [[package]] @@ -1270,7 +1271,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck 0.3.3", + "heck", "proc-macro-error", "proc-macro2", "quote", @@ -1279,9 +1280,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.109" +version = "1.0.106" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +checksum = "09ee3a69cd2c7e06684677e5629b3878b253af05e4714964204279c6bc02cf0b" dependencies = [ "proc-macro2", "quote", @@ -1332,21 +1333,6 @@ dependencies = [ "syn", ] -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "toml" version = "0.5.10" @@ -1371,36 +1357,12 @@ dependencies = [ "serde", ] -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - [[package]] name = "unicode-ident" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-segmentation" version = "1.10.0" @@ -1413,23 +1375,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - [[package]] name = "version_check" version = "0.9.4" @@ -1455,28 +1400,27 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-encoder" -version = "0.25.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" +checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" dependencies = [ "leb128", ] [[package]] name = "wasmparser" -version = "0.100.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +checksum = "c5a4460aa3e271fa180b6a5d003e728f3963fb30e3ba0fa7c9634caa06049328" dependencies = [ "indexmap", - "url", ] [[package]] name = "wasmtime" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d137f87df6e037b2bcb960c2db7ea174e04fb897051380c14b5e5475a870669e" +checksum = "d18265705b1c49218776577d9f301d79ab06888c7f4a32e2ed24e68a55738ce7" dependencies = [ "anyhow", "async-trait", @@ -1494,30 +1438,29 @@ dependencies = [ "target-lexicon", "wasmparser", "wasmtime-cache", - "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit", "wasmtime-runtime", "wat", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-asm-macros" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad63d4175d6af44af2046186c87deae4e9a8150b92de2d4809c6f745d5ee9b38" +checksum = "a201583f6c79b96e74dcce748fa44fb2958f474ef13c93f880ea4d3bed31ae4f" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3055fb327f795b4639f47b9dadad9d3d9b185fd3001adf8db08f5fa06d07032" +checksum = "3f37efc6945b08fcb634cffafc438dd299bac55a27c836954656c634d3e63c31" dependencies = [ "anyhow", "base64", @@ -1525,40 +1468,19 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.35.13", "serde", "sha2", "toml", - "windows-sys 0.45.0", + "windows-sys 0.36.1", "zstd", ] -[[package]] -name = "wasmtime-component-macro" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cf4906f990d6ab3065d042cf5a15eb7a2a5406d1c001a45ab9615de876458a" -dependencies = [ - "anyhow", - "proc-macro2", - "quote", - "syn", - "wasmtime-component-util", - "wasmtime-wit-bindgen", - "wit-parser", -] - -[[package]] -name = "wasmtime-component-util" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ccf49c18c1ce3f682310e642dcdc00ffc67f1ce0767c89a16fc8fcf5eaeb97" - [[package]] name = "wasmtime-cranelift" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "274590ecbb1179d45a5c8d9f54b9d236e9414d9ca3b861cd8956cec085508eb0" +checksum = "fe208297e045ea0ee6702be88772ea40f918d55fbd4163981a4699aff034b634" dependencies = [ "anyhow", "cranelift-codegen", @@ -1577,9 +1499,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b4a897e6ce1f2567ba98e7b1948c0e12cae1202fd88e7639f901b8ce9203f7" +checksum = "754b97f7441ac780a7fa738db5b9c23c1b70ef4abccd8ad205ada5669d196ba2" dependencies = [ "anyhow", "cranelift-entity", @@ -1596,22 +1518,22 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b1192624694399f601de28db78975ed20fa859da8e048bf8250bd3b38d302b" +checksum = "e5f54abc960b4a055ba16b942cbbd1da641e0ad44cc97a7608f3d43c069b120e" dependencies = [ "cc", "cfg-if", - "rustix", + "rustix 0.35.13", "wasmtime-asm-macros", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f035bfe27ce5129c9d081d6288480f2e6ae9d16d0eb035a5d9e3b5b6c36658" +checksum = "32800cb6e29faabab7056593f70a4c00c65c75c365aaf05406933f2169d0c22f" dependencies = [ "addr2line", "anyhow", @@ -1625,40 +1547,41 @@ dependencies = [ "rustc-demangle", "serde", "target-lexicon", + "thiserror", "wasmtime-environ", "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit-debug" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e35d335dd2461c631ba24d2326d993bd3a4bdb4b0217e5bda4f518ba0e29f3" +checksum = "fe057012a0ba6cee3685af1e923d6e0a6cb9baf15fb3ffa4be3d7f712c7dec42" dependencies = [ "object", "once_cell", - "rustix", + "rustix 0.35.13", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "7.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8c01a070f55343f7afd309a9609c12378548b26c3f53c599bc711bb1ce42ee" +checksum = "e6bbabb309c06cc238ee91b1455b748c45f0bdcab0dda2c2db85b0a1e69fcb66" dependencies = [ "cfg-if", "libc", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-runtime" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac02cc14c8247f6e4e48c7653a79c226babac8f2cacdd933d3f15ca2a6ab20b" +checksum = "09a23b6e138e89594c0189162e524a29e217aec8f9a4e1959a34f74c64e8d17d" dependencies = [ "anyhow", "cc", @@ -1668,22 +1591,23 @@ dependencies = [ "log", "mach", "memfd", - "memoffset 0.8.0", + "memoffset 0.6.5", "paste", "rand", - "rustix", + "rustix 0.35.13", + "thiserror", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit-debug", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-types" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8dc0062ab053e1aa22d2355a2de4df482a0007fecae82ea02cc596c2329971d" +checksum = "68ec7615fde8c79737f1345d81f0b18da83b3db929a87b4604f27c932246d1e2" dependencies = [ "cranelift-entity", "serde", @@ -1691,22 +1615,11 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasmtime-wit-bindgen" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2cf93f3c8a6f443d8a9098fddc5fd887783c0fe725dc10c54ca9280546421d" -dependencies = [ - "anyhow", - "heck 0.4.1", - "wit-parser", -] - [[package]] name = "wast" -version = "55.0.0" +version = "50.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" +checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" dependencies = [ "leb128", "memchr", @@ -1716,9 +1629,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.61" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" +checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" dependencies = [ "wast", ] @@ -1756,99 +1669,103 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", ] [[package]] name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_x86_64_msvc 0.42.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] -name = "wit-parser" -version = "0.6.4" +name = "windows_x86_64_msvc" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f887c3da527a51b321076ebe6a7513026a4757b6d4d144259946552d6fc728b3" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "pulldown-cmark", - "unicode-xid", - "url", -] +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" [[package]] name = "zstd" diff --git a/engine_interface/Cargo.toml b/engine_interface/Cargo.toml index 6e42d058..ef8e5479 100644 --- a/engine_interface/Cargo.toml +++ b/engine_interface/Cargo.toml @@ -10,5 +10,7 @@ serverside = [] cimvr_derive_macros = { path = "../engine_derive_macros" } bincode = "1.3.3" serde = { version = "1", features = ["derive"] } -once_cell = "1.16.0" +once_cell = "1.17.0" log = "0.4.17" +#jkobble = { git = "https://github.com/ChatImproVR/Kobble.git" } +kobble = { path = "../../kobble" } diff --git a/engine_interface/src/lib.rs b/engine_interface/src/lib.rs index 915b49d0..13a43721 100644 --- a/engine_interface/src/lib.rs +++ b/engine_interface/src/lib.rs @@ -109,7 +109,8 @@ fn validate_component(c: &C) { pub fn component_size_cached() -> usize { thread_local! { /// Thread local component size cache - static SIZE_CACHE: RefCell>> = RefCell::new(Lazy::new(|| HashMap::new())); + static SIZE_CACHE: RefCell>> + = RefCell::new(Lazy::new(|| HashMap::new())); } SIZE_CACHE.with(|cache| { *cache @@ -129,3 +130,17 @@ pub fn component_id() -> ComponentId { size, } } + +/// Component schema information +#[derive(Clone, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)] +pub struct ComponentSchema { + pub id: ComponentId, + pub schema: kobble::Schema, +} + +impl Message for ComponentSchema { + const CHANNEL: ChannelIdStatic = ChannelIdStatic { + id: pkg_namespace!("ComponentSchema"), + locality: Locality::Local, + }; +} diff --git a/engine_interface/src/plugin.rs b/engine_interface/src/plugin.rs index b0f68676..740fa951 100644 --- a/engine_interface/src/plugin.rs +++ b/engine_interface/src/plugin.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use crate::{ component_id, pcg::Pcg, @@ -5,6 +7,7 @@ use crate::{ serial::{ deserialize, serialize, serialize_into, serialized_size, EcsData, ReceiveBuf, SendBuf, }, + ComponentSchema, }; pub use once_cell::sync::Lazy; use serde::{Deserialize, Serialize}; @@ -110,6 +113,8 @@ pub struct EngineIo { pub(crate) outbox: Vec, /// Inbox pub(crate) inbox: Inbox, + /// Schema which have been sent already + pub(crate) schema_set: HashSet, } /// Scheduling of systems @@ -293,6 +298,7 @@ impl EngineIo { pcg: Pcg::new(), outbox: vec![], inbox, + schema_set: Default::default(), } } @@ -315,8 +321,20 @@ impl EngineIo { pub fn add_component(&mut self, entity: EntityId, data: C) { let data = serialize(&data).expect("Failed to serialize component data"); + let id = component_id::(); + + // Send schema information to host on first use + if !self.schema_set.contains(&id) { + let schema = kobble::Schema::infer::(); + self.send(&ComponentSchema { + id: id.clone(), + schema, + }); + self.schema_set.insert(id.clone()); + } + self.commands - .push(EcsCommand::AddComponent(entity, component_id::(), data)); + .push(EcsCommand::AddComponent(entity, id, data)); } /// Delete an entity and all of it's components From d5d7bd887287b549aabeb4aef80f3e4bc84606fb Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 01:44:03 -0700 Subject: [PATCH 03/28] Start splitting up UI --- client/Cargo.lock | 507 ++++++++++++++----------------------- client/src/component_ui.rs | 2 + client/src/main.rs | 2 + client/src/plugin_ui.rs | 144 +++++++++++ client/src/ui.rs | 128 +--------- 5 files changed, 343 insertions(+), 440 deletions(-) create mode 100644 client/src/component_ui.rs create mode 100644 client/src/plugin_ui.rs diff --git a/client/Cargo.lock b/client/Cargo.lock index 6d2a9eb8..0719c5b6 100644 --- a/client/Cargo.lock +++ b/client/Cargo.lock @@ -20,9 +20,9 @@ checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6" [[package]] name = "addr2line" -version = "0.19.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" dependencies = [ "gimli", ] @@ -33,6 +33,17 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[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 = "ahash" version = "0.8.2" @@ -72,6 +83,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + [[package]] name = "async-trait" version = "0.1.61" @@ -97,9 +114,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.21.0" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "bincode" @@ -244,22 +261,11 @@ dependencies = [ "serde", ] -[[package]] -name = "cimvr_derive_macros" -version = "0.1.0" -dependencies = [ - "bincode", - "proc-macro2", - "quote", - "serde", - "syn", -] - [[package]] name = "cimvr_engine" version = "0.1.0" dependencies = [ - "ahash", + "ahash 0.8.2", "anyhow", "cimvr_engine_interface", "log", @@ -274,7 +280,7 @@ name = "cimvr_engine_interface" version = "0.1.0" dependencies = [ "bincode", - "cimvr_derive_macros", + "kobble", "log", "once_cell", "serde", @@ -414,27 +420,28 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "862eb053fc21f991db27c73bc51494fe77aadfa09ea257cb43b62a2656fd4cc1" +checksum = "b62c772976416112fa4484cbd688cb6fb35fd430005c1c586224fc014018abad" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "038a74bc85da2f6f9e237c51b7998b47229c0f9da69b4c6b0590cf6621c45d46" +checksum = "9b40ed2dd13c2ac7e24f88a3090c68ad3414eb1d066a95f8f1f7b3b819cb4e46" dependencies = [ + "arrayvec 0.7.2", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", + "cranelift-egraph", "cranelift-entity", "cranelift-isle", "gimli", - "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -443,33 +450,47 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fb720a7955cf7cc92c58f3896952589062e6f12d8eb35ef4337e708ed2e738" +checksum = "bb927a8f1c27c34ee3759b6b0ffa528d2330405d5cc4511f0cab33fe2279f4b5" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0954f9426cf0fa7ad57910ea5822a09c5da590222a767a6c38080a8534a0af8" +checksum = "43dfa417b884a9ab488d95fd6b93b25e959321fe7bfd7a0a960ba5d7fb7ab927" + +[[package]] +name = "cranelift-egraph" +version = "0.90.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a66b39785efd8513d2cca967ede56d6cc57c8d7986a595c7c47d0c78de8dce" +dependencies = [ + "cranelift-entity", + "fxhash", + "hashbrown", + "indexmap", + "log", + "smallvec", +] [[package]] name = "cranelift-entity" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68c7096c1a66cfa73899645f0a46a6f5c91641e678eeafb0fc47a19ab34069ca" +checksum = "0637ffde963cb5d759bc4d454cfa364b6509e6c74cdaa21298add0ed9276f346" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "697f2fdaceb228fea413ea91baa7c6b8533fc2e61ac5a08db7acc1b31e673a2a" +checksum = "fb72b8342685e850cb037350418f62cc4fc55d6c2eb9c7ca01b82f9f1a6f3d56" dependencies = [ "cranelift-codegen", "log", @@ -479,15 +500,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f41037f4863e0c6716dbe60e551d501f4197383cb43d75038c0170159fc8fb5b" +checksum = "850579cb9e4b448f7c301f1e6e6cbad99abe3f1f1d878a4994cb66e33c6db8cd" [[package]] name = "cranelift-native" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "797c6e5643eb654bb7bf496f1f03518323a89b937b84020b786620f910364a52" +checksum = "2d0a279e5bcba3e0466c734d8d8eb6bfc1ad29e95c37f3e4955b492b5616335e" dependencies = [ "cranelift-codegen", "libc", @@ -496,9 +517,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.94.0" +version = "0.90.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69b5fae12cefda3a2c43837e562dd525ab1d75b27989eece66de5b2c8fe120f9" +checksum = "e6b8c5e7ffb754093fb89ec4bd4f9dbb9f1c955427299e334917d284745835c2" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -708,7 +729,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc9fcd393c3daaaf5909008a1d948319d538b79c51871e4df0993260260a94e4" dependencies = [ - "ahash", + "ahash 0.8.2", "epaint 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "nohash-hasher", "tracing", @@ -719,7 +740,7 @@ name = "egui" version = "0.19.0" source = "git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi#244f1bbe6bf6bf9d100ca516c9ea0a6c5dc5ebfa" dependencies = [ - "ahash", + "ahash 0.8.2", "epaint 0.19.0 (git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi)", "nohash-hasher", "tracing", @@ -803,7 +824,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ba04741be7f6602b1a1b28f1082cce45948a7032961c52814f8946b28493300" dependencies = [ "ab_glyph", - "ahash", + "ahash 0.8.2", "atomic_refcell", "emath 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "nohash-hasher", @@ -816,7 +837,7 @@ version = "0.19.0" source = "git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi#244f1bbe6bf6bf9d100ca516c9ea0a6c5dc5ebfa" dependencies = [ "ab_glyph", - "ahash", + "ahash 0.8.2", "atomic_refcell", "bytemuck", "emath 0.19.0 (git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi)", @@ -941,15 +962,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" -[[package]] -name = "form_urlencoded" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" -dependencies = [ - "percent-encoding", -] - [[package]] name = "freetype-rs" version = "0.26.0" @@ -1046,9 +1058,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" dependencies = [ "fallible-iterator", "indexmap", @@ -1179,14 +1191,8 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - -[[package]] -name = "hashbrown" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash", + "ahash 0.7.6", ] [[package]] @@ -1198,12 +1204,6 @@ dependencies = [ "unicode-segmentation", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "hermit-abi" version = "0.2.6" @@ -1219,28 +1219,12 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" -[[package]] -name = "id-arena" -version = "2.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" - [[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.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "indexmap" version = "1.9.2" @@ -1248,7 +1232,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown 0.12.3", + "hashbrown", "serde", ] @@ -1294,6 +1278,12 @@ dependencies = [ "mach", ] +[[package]] +name = "io-lifetimes" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" + [[package]] name = "io-lifetimes" version = "1.0.3" @@ -1311,8 +1301,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ "hermit-abi", - "io-lifetimes", - "rustix", + "io-lifetimes 1.0.3", + "rustix 0.36.6", "windows-sys 0.42.0", ] @@ -1327,9 +1317,9 @@ dependencies = [ [[package]] name = "ittapi" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e648c437172ce7d3ac35ca11a068755072054826fa455a916b43524fa4a62a7" +checksum = "e8c4f6ff06169ce7048dac5150b1501c7e3716a929721aeb06b87e51a43e42f4" dependencies = [ "anyhow", "ittapi-sys", @@ -1338,9 +1328,9 @@ dependencies = [ [[package]] name = "ittapi-sys" -version = "0.3.3" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9b32a4d23f72548178dde54f3c12c6b6a08598e25575c0d0fa5bd861e0dc1a5" +checksum = "87e078cce01485f418bae3beb34dd604aaedf2065502853c7da17fbce8e64eda" dependencies = [ "cc", ] @@ -1389,6 +1379,14 @@ version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" +[[package]] +name = "kobble" +version = "0.1.0" +dependencies = [ + "once_cell", + "serde", +] + [[package]] name = "kqueue" version = "1.0.7" @@ -1447,6 +1445,12 @@ dependencies = [ "pkg-config", ] +[[package]] +name = "linux-raw-sys" +version = "0.0.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" + [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -1502,7 +1506,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix", + "rustix 0.36.6", ] [[package]] @@ -1532,15 +1536,6 @@ dependencies = [ "autocfg", ] -[[package]] -name = "memoffset" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" -dependencies = [ - "autocfg", -] - [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1727,21 +1722,21 @@ dependencies = [ [[package]] name = "object" -version = "0.30.3" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" dependencies = [ "crc32fast", - "hashbrown 0.13.2", + "hashbrown", "indexmap", "memchr", ] [[package]] name = "once_cell" -version = "1.17.0" +version = "1.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" [[package]] name = "openxr" @@ -1886,9 +1881,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.52" +version = "1.0.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" dependencies = [ "unicode-ident", ] @@ -1902,17 +1897,6 @@ dependencies = [ "cc", ] -[[package]] -name = "pulldown-cmark" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" -dependencies = [ - "bitflags", - "memchr", - "unicase", -] - [[package]] name = "quote" version = "1.0.23" @@ -2014,9 +1998,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.6.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" +checksum = "91b2eab54204ea0117fe9a060537e0b07a4e72f7c7d182361ecc346cab2240e5" dependencies = [ "fxhash", "log", @@ -2049,16 +2033,30 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustix" -version = "0.36.11" +version = "0.35.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes 0.7.5", + "libc", + "linux-raw-sys 0.0.46", + "windows-sys 0.42.0", +] + +[[package]] +name = "rustix" +version = "0.36.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" dependencies = [ "bitflags", "errno", - "io-lifetimes", + "io-lifetimes 1.0.3", "libc", - "linux-raw-sys", - "windows-sys 0.45.0", + "linux-raw-sys 0.1.4", + "windows-sys 0.42.0", ] [[package]] @@ -2234,7 +2232,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck 0.3.3", + "heck", "proc-macro-error", "proc-macro2", "quote", @@ -2303,7 +2301,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82" dependencies = [ "arrayref", - "arrayvec", + "arrayvec 0.5.2", "bytemuck", "cfg-if", "png", @@ -2321,21 +2319,6 @@ dependencies = [ "bytemuck", ] -[[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.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" - [[package]] name = "toml" version = "0.5.10" @@ -2377,36 +2360,12 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" -[[package]] -name = "unicase" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" -dependencies = [ - "version_check", -] - -[[package]] -name = "unicode-bidi" -version = "0.3.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" - [[package]] name = "unicode-ident" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" -[[package]] -name = "unicode-normalization" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" -dependencies = [ - "tinyvec", -] - [[package]] name = "unicode-segmentation" version = "1.10.0" @@ -2419,23 +2378,6 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" -[[package]] -name = "unicode-xid" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" - -[[package]] -name = "url" -version = "2.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", -] - [[package]] name = "uuid" version = "1.3.0" @@ -2527,28 +2469,27 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.25.0" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" +checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" dependencies = [ "leb128", ] [[package]] name = "wasmparser" -version = "0.100.0" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" +checksum = "c5a4460aa3e271fa180b6a5d003e728f3963fb30e3ba0fa7c9634caa06049328" dependencies = [ "indexmap", - "url", ] [[package]] name = "wasmtime" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d137f87df6e037b2bcb960c2db7ea174e04fb897051380c14b5e5475a870669e" +checksum = "d18265705b1c49218776577d9f301d79ab06888c7f4a32e2ed24e68a55738ce7" dependencies = [ "anyhow", "async-trait", @@ -2566,30 +2507,29 @@ dependencies = [ "target-lexicon", "wasmparser", "wasmtime-cache", - "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit", "wasmtime-runtime", "wat", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-asm-macros" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad63d4175d6af44af2046186c87deae4e9a8150b92de2d4809c6f745d5ee9b38" +checksum = "a201583f6c79b96e74dcce748fa44fb2958f474ef13c93f880ea4d3bed31ae4f" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3055fb327f795b4639f47b9dadad9d3d9b185fd3001adf8db08f5fa06d07032" +checksum = "3f37efc6945b08fcb634cffafc438dd299bac55a27c836954656c634d3e63c31" dependencies = [ "anyhow", "base64", @@ -2597,40 +2537,19 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix", + "rustix 0.35.13", "serde", "sha2", "toml", - "windows-sys 0.45.0", + "windows-sys 0.36.1", "zstd", ] -[[package]] -name = "wasmtime-component-macro" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cf4906f990d6ab3065d042cf5a15eb7a2a5406d1c001a45ab9615de876458a" -dependencies = [ - "anyhow", - "proc-macro2", - "quote", - "syn", - "wasmtime-component-util", - "wasmtime-wit-bindgen", - "wit-parser", -] - -[[package]] -name = "wasmtime-component-util" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ccf49c18c1ce3f682310e642dcdc00ffc67f1ce0767c89a16fc8fcf5eaeb97" - [[package]] name = "wasmtime-cranelift" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "274590ecbb1179d45a5c8d9f54b9d236e9414d9ca3b861cd8956cec085508eb0" +checksum = "fe208297e045ea0ee6702be88772ea40f918d55fbd4163981a4699aff034b634" dependencies = [ "anyhow", "cranelift-codegen", @@ -2649,9 +2568,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b4a897e6ce1f2567ba98e7b1948c0e12cae1202fd88e7639f901b8ce9203f7" +checksum = "754b97f7441ac780a7fa738db5b9c23c1b70ef4abccd8ad205ada5669d196ba2" dependencies = [ "anyhow", "cranelift-entity", @@ -2668,22 +2587,22 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b1192624694399f601de28db78975ed20fa859da8e048bf8250bd3b38d302b" +checksum = "e5f54abc960b4a055ba16b942cbbd1da641e0ad44cc97a7608f3d43c069b120e" dependencies = [ "cc", "cfg-if", - "rustix", + "rustix 0.35.13", "wasmtime-asm-macros", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3f035bfe27ce5129c9d081d6288480f2e6ae9d16d0eb035a5d9e3b5b6c36658" +checksum = "32800cb6e29faabab7056593f70a4c00c65c75c365aaf05406933f2169d0c22f" dependencies = [ "addr2line", "anyhow", @@ -2697,40 +2616,41 @@ dependencies = [ "rustc-demangle", "serde", "target-lexicon", + "thiserror", "wasmtime-environ", "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-jit-debug" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17e35d335dd2461c631ba24d2326d993bd3a4bdb4b0217e5bda4f518ba0e29f3" +checksum = "fe057012a0ba6cee3685af1e923d6e0a6cb9baf15fb3ffa4be3d7f712c7dec42" dependencies = [ "object", "once_cell", - "rustix", + "rustix 0.35.13", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "7.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8c01a070f55343f7afd309a9609c12378548b26c3f53c599bc711bb1ce42ee" +checksum = "e6bbabb309c06cc238ee91b1455b748c45f0bdcab0dda2c2db85b0a1e69fcb66" dependencies = [ "cfg-if", "libc", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-runtime" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ac02cc14c8247f6e4e48c7653a79c226babac8f2cacdd933d3f15ca2a6ab20b" +checksum = "09a23b6e138e89594c0189162e524a29e217aec8f9a4e1959a34f74c64e8d17d" dependencies = [ "anyhow", "cc", @@ -2740,22 +2660,23 @@ dependencies = [ "log", "mach", "memfd", - "memoffset 0.8.0", + "memoffset 0.6.5", "paste", "rand", - "rustix", + "rustix 0.35.13", + "thiserror", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit-debug", - "windows-sys 0.45.0", + "windows-sys 0.36.1", ] [[package]] name = "wasmtime-types" -version = "7.0.0" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8dc0062ab053e1aa22d2355a2de4df482a0007fecae82ea02cc596c2329971d" +checksum = "68ec7615fde8c79737f1345d81f0b18da83b3db929a87b4604f27c932246d1e2" dependencies = [ "cranelift-entity", "serde", @@ -2763,22 +2684,11 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "wasmtime-wit-bindgen" -version = "7.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd2cf93f3c8a6f443d8a9098fddc5fd887783c0fe725dc10c54ca9280546421d" -dependencies = [ - "anyhow", - "heck 0.4.1", - "wit-parser", -] - [[package]] name = "wast" -version = "55.0.0" +version = "50.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" +checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" dependencies = [ "leb128", "memchr", @@ -2788,9 +2698,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.61" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" +checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" dependencies = [ "wast", ] @@ -2926,12 +2836,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows_x86_64_msvc 0.42.0", ] [[package]] @@ -2954,43 +2864,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.45.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", + "windows_aarch64_msvc 0.42.0", + "windows_i686_gnu 0.42.0", + "windows_i686_msvc 0.42.0", + "windows_x86_64_gnu 0.42.0", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows_x86_64_msvc 0.42.0", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" [[package]] name = "windows_aarch64_msvc" @@ -3000,9 +2886,9 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" [[package]] name = "windows_i686_gnu" @@ -3012,9 +2898,9 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" [[package]] name = "windows_i686_msvc" @@ -3024,9 +2910,9 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" [[package]] name = "windows_x86_64_gnu" @@ -3036,15 +2922,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" [[package]] name = "windows_x86_64_msvc" @@ -3054,9 +2940,9 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" [[package]] name = "winit" @@ -3100,21 +2986,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wit-parser" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f887c3da527a51b321076ebe6a7513026a4757b6d4d144259946552d6fc728b3" -dependencies = [ - "anyhow", - "id-arena", - "indexmap", - "log", - "pulldown-cmark", - "unicode-xid", - "url", -] - [[package]] name = "x11-dl" version = "2.20.1" diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs new file mode 100644 index 00000000..f7281503 --- /dev/null +++ b/client/src/component_ui.rs @@ -0,0 +1,2 @@ +pub struct ComponentUi { +} diff --git a/client/src/main.rs b/client/src/main.rs index a261330e..549b45f6 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -29,6 +29,8 @@ mod desktop_input; mod gamepad; mod render; mod ui; +mod component_ui; +mod plugin_ui; use structopt::StructOpt; diff --git a/client/src/plugin_ui.rs b/client/src/plugin_ui.rs new file mode 100644 index 00000000..7f86e867 --- /dev/null +++ b/client/src/plugin_ui.rs @@ -0,0 +1,144 @@ +use std::collections::HashMap; + +use cimvr_common::ui::*; +use cimvr_engine::Engine; +use egui::{color_picker::color_edit_button_rgb, Context, DragValue, ScrollArea, TextEdit, Ui}; + +pub struct PluginUi { + elements: HashMap, +} + +struct Element { + name: String, + schema: Vec, + state: Vec, +} + +impl PluginUi { + pub fn new(engine: &mut Engine) -> Self { + engine.subscribe::(); + Self { + elements: HashMap::new(), + } + } + + pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { + if self.elements.is_empty() { + return; + } + + egui::SidePanel::left("my_side_panel").show(ctx, |ui| { + ScrollArea::vertical().show(ui, |ui| { + for (id, elem) in self.elements.iter_mut() { + ui.label(&elem.name); + if elem.show(ui) { + engine.send(UiUpdate { + id: *id, + state: elem.state.clone(), + }); + } + ui.add_space(10.); + } + }); + }); + } + + pub fn update(&mut self, engine: &mut Engine) { + // Process requests + for req in engine.inbox::() { + self.process_request(req); + } + + // Handle button declicks + for (id, elem) in &mut self.elements { + let mut any = false; + for state in &mut elem.state { + if let State::Button { clicked } = state { + if *clicked { + *clicked = false; + any = true; + } + } + } + + if any { + engine.send(UiUpdate { + id: *id, + state: elem.state.clone(), + }); + } + } + } + + fn process_request(&mut self, req: UiRequest) { + match req.op { + UiOperation::Create { + name, + schema, + init_state, + } => { + let elem = Element { + name, + schema, + state: init_state, + }; + if self.elements.insert(req.id, elem).is_some() { + log::trace!("Replaced Ui element {:?}", req.id) + } + } + UiOperation::Update(state) => { + if let Some(elem) = self.elements.get_mut(&req.id) { + elem.state = state; + } else { + log::error!("Failed to update invalid Ui element {:?}", req.id) + } + } + UiOperation::Delete => { + if self.elements.remove(&req.id).is_none() { + log::error!("Failed to remove invalid Ui element {:?}", req.id) + } + } + } + } +} + +impl Element { + /// Returns `true` if the given state updated + pub fn show(&mut self, ui: &mut Ui) -> bool { + let mut needs_update = false; + for (schema, state) in self.schema.iter().zip(&mut self.state) { + needs_update |= show(ui, schema, state); + } + needs_update + } +} + +fn show(ui: &mut Ui, schema: &Schema, state: &mut State) -> bool { + match (schema, state) { + (Schema::Label, State::Label { text }) => ui.label(text.to_owned()).changed(), + (Schema::TextInput, State::TextInput { text }) => { + ui.add(TextEdit::singleline(text)).changed() + } + (Schema::Button { text }, State::Button { clicked }) => { + *clicked = ui.button(text).clicked(); + *clicked + } + (Schema::DragValue { min, max }, State::DragValue { value }) => { + let range = min.unwrap_or(f32::MIN)..=max.unwrap_or(f32::MAX); + let dv = DragValue::new(value).clamp_range(range); + ui.add(dv).changed() + } + (Schema::ColorPicker, State::ColorPicker { rgb }) => { + color_edit_button_rgb(ui, rgb).changed() + } + (schema, state) => { + log::error!( + "Invalid UI schema and state combo: {:?} {:?}", + schema, + state + ); + false + } + } +} + diff --git a/client/src/ui.rs b/client/src/ui.rs index 94a4e08e..71e435ae 100644 --- a/client/src/ui.rs +++ b/client/src/ui.rs @@ -4,140 +4,24 @@ use cimvr_common::ui::*; use cimvr_engine::Engine; use egui::{color_picker::color_edit_button_rgb, Context, DragValue, ScrollArea, TextEdit, Ui}; -pub struct OverlayUi { - elements: HashMap, -} +use crate::plugin_ui::PluginUi; -struct Element { - name: String, - schema: Vec, - state: Vec, +pub struct OverlayUi { + plugin_ui: PluginUi, } impl OverlayUi { pub fn new(engine: &mut Engine) -> Self { - engine.subscribe::(); Self { - elements: HashMap::new(), + plugin_ui: PluginUi::new(engine), } } pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { - if self.elements.is_empty() { - return; - } - - egui::SidePanel::left("my_side_panel").show(ctx, |ui| { - ScrollArea::vertical().show(ui, |ui| { - for (id, elem) in self.elements.iter_mut() { - ui.label(&elem.name); - if elem.show(ui) { - engine.send(UiUpdate { - id: *id, - state: elem.state.clone(), - }); - } - ui.add_space(10.); - } - }); - }); + self.plugin_ui.run(ctx, engine); } pub fn update(&mut self, engine: &mut Engine) { - // Process requests - for req in engine.inbox::() { - self.process_request(req); - } - - // Handle button declicks - for (id, elem) in &mut self.elements { - let mut any = false; - for state in &mut elem.state { - if let State::Button { clicked } = state { - if *clicked { - *clicked = false; - any = true; - } - } - } - - if any { - engine.send(UiUpdate { - id: *id, - state: elem.state.clone(), - }); - } - } - } - - fn process_request(&mut self, req: UiRequest) { - match req.op { - UiOperation::Create { - name, - schema, - init_state, - } => { - let elem = Element { - name, - schema, - state: init_state, - }; - if self.elements.insert(req.id, elem).is_some() { - log::trace!("Replaced Ui element {:?}", req.id) - } - } - UiOperation::Update(state) => { - if let Some(elem) = self.elements.get_mut(&req.id) { - elem.state = state; - } else { - log::error!("Failed to update invalid Ui element {:?}", req.id) - } - } - UiOperation::Delete => { - if self.elements.remove(&req.id).is_none() { - log::error!("Failed to remove invalid Ui element {:?}", req.id) - } - } - } - } -} - -impl Element { - /// Returns `true` if the given state updated - pub fn show(&mut self, ui: &mut Ui) -> bool { - let mut needs_update = false; - for (schema, state) in self.schema.iter().zip(&mut self.state) { - needs_update |= show(ui, schema, state); - } - needs_update - } -} - -fn show(ui: &mut Ui, schema: &Schema, state: &mut State) -> bool { - match (schema, state) { - (Schema::Label, State::Label { text }) => ui.label(text.to_owned()).changed(), - (Schema::TextInput, State::TextInput { text }) => { - ui.add(TextEdit::singleline(text)).changed() - } - (Schema::Button { text }, State::Button { clicked }) => { - *clicked = ui.button(text).clicked(); - *clicked - } - (Schema::DragValue { min, max }, State::DragValue { value }) => { - let range = min.unwrap_or(f32::MIN)..=max.unwrap_or(f32::MAX); - let dv = DragValue::new(value).clamp_range(range); - ui.add(dv).changed() - } - (Schema::ColorPicker, State::ColorPicker { rgb }) => { - color_edit_button_rgb(ui, rgb).changed() - } - (schema, state) => { - log::error!( - "Invalid UI schema and state combo: {:?} {:?}", - schema, - state - ); - false - } + self.plugin_ui.update(engine) } } From ca401fc8ff8c903faf524c611aaf19cddaee68c7 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 01:57:41 -0700 Subject: [PATCH 04/28] Throw error on schema problem --- engine_interface/src/plugin.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/engine_interface/src/plugin.rs b/engine_interface/src/plugin.rs index 740fa951..d1c0ea8e 100644 --- a/engine_interface/src/plugin.rs +++ b/engine_interface/src/plugin.rs @@ -325,12 +325,16 @@ impl EngineIo { // Send schema information to host on first use if !self.schema_set.contains(&id) { - let schema = kobble::Schema::infer::(); - self.send(&ComponentSchema { - id: id.clone(), - schema, - }); - self.schema_set.insert(id.clone()); + match kobble::record_schema::() { + Ok(schema) => { + self.send(&ComponentSchema { + id: id.clone(), + schema, + }); + self.schema_set.insert(id.clone()); + } + Err(e) => crate::println!("Error generating schema for {}; {:?}", id.id, e), + } } self.commands From e7f7133e2b60585752ac16b3fbf7d94abb14dbd9 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 02:47:24 -0700 Subject: [PATCH 05/28] Subscribe to componentschema messages --- client/src/component_ui.rs | 20 ++++++++++++++++++++ client/src/ui.rs | 8 ++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index f7281503..ca337cac 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,2 +1,22 @@ +use cimvr_engine::{Engine, interface::ComponentSchema}; +use egui::Context; + pub struct ComponentUi { } + +impl ComponentUi { + pub fn new(engine: &mut Engine) -> Self { + engine.subscribe::(); + Self { + } + } + + pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { + } + + pub fn update(&mut self, engine: &mut Engine) { + for msg in engine.inbox::() { + dbg!(msg); + } + } +} diff --git a/client/src/ui.rs b/client/src/ui.rs index 71e435ae..57b69217 100644 --- a/client/src/ui.rs +++ b/client/src/ui.rs @@ -4,24 +4,28 @@ use cimvr_common::ui::*; use cimvr_engine::Engine; use egui::{color_picker::color_edit_button_rgb, Context, DragValue, ScrollArea, TextEdit, Ui}; -use crate::plugin_ui::PluginUi; +use crate::{component_ui::ComponentUi, plugin_ui::PluginUi}; pub struct OverlayUi { plugin_ui: PluginUi, + component_ui: ComponentUi, } impl OverlayUi { pub fn new(engine: &mut Engine) -> Self { Self { plugin_ui: PluginUi::new(engine), + component_ui: ComponentUi::new(engine), } } pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { self.plugin_ui.run(ctx, engine); + self.component_ui.run(ctx, engine); } pub fn update(&mut self, engine: &mut Engine) { - self.plugin_ui.update(engine) + self.plugin_ui.update(engine); + self.component_ui.update(engine); } } From 6239be469526cf3c92a114ae4dd6538fe47c8ab6 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 02:53:17 -0700 Subject: [PATCH 06/28] Show component schema --- client/src/component_ui.rs | 18 +++++++++++++++--- client/src/plugin_ui.rs | 2 +- engine_interface/src/lib.rs | 1 + 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index ca337cac..658bf5db 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,22 +1,34 @@ -use cimvr_engine::{Engine, interface::ComponentSchema}; -use egui::Context; +use std::collections::HashMap; +use cimvr_engine::{Engine, interface::{ComponentSchema, prelude::ComponentId, kobble::Schema}}; +use egui::{Context, ScrollArea}; pub struct ComponentUi { + schema: HashMap, } impl ComponentUi { pub fn new(engine: &mut Engine) -> Self { engine.subscribe::(); Self { + schema: Default::default(), } } pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { + egui::SidePanel::right("ComponentUi").show(ctx, |ui| { + //ScrollArea::vertical().show(ui, |ui| { + for (id, elem) in &self.schema { + ui.label(&id.id); + } + //}); + }); + } pub fn update(&mut self, engine: &mut Engine) { for msg in engine.inbox::() { - dbg!(msg); + let ComponentSchema { id, schema } = msg; + self.schema.insert(id, schema); } } } diff --git a/client/src/plugin_ui.rs b/client/src/plugin_ui.rs index 7f86e867..2672ce6f 100644 --- a/client/src/plugin_ui.rs +++ b/client/src/plugin_ui.rs @@ -27,7 +27,7 @@ impl PluginUi { return; } - egui::SidePanel::left("my_side_panel").show(ctx, |ui| { + egui::SidePanel::left("PluginUi").show(ctx, |ui| { ScrollArea::vertical().show(ui, |ui| { for (id, elem) in self.elements.iter_mut() { ui.label(&elem.name); diff --git a/engine_interface/src/lib.rs b/engine_interface/src/lib.rs index 13a43721..c0d08c57 100644 --- a/engine_interface/src/lib.rs +++ b/engine_interface/src/lib.rs @@ -7,6 +7,7 @@ /// Code specific to WASM plugins pub mod plugin; +pub use kobble; use std::{cell::RefCell, collections::HashMap}; mod component_validate_error; pub mod component_validation; From 47452a311fc6384a798ccdfb17f1c7889f514278 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:03:55 -0700 Subject: [PATCH 07/28] Component selection --- client/src/component_ui.rs | 46 +++++++++++++++++++++++++++++++++----- client/src/plugin_ui.rs | 2 +- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 658bf5db..3f54b341 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,9 +1,17 @@ -use std::collections::HashMap; -use cimvr_engine::{Engine, interface::{ComponentSchema, prelude::ComponentId, kobble::Schema}}; +use cimvr_engine::{ + interface::{ + kobble::Schema, + prelude::{Access, ComponentId, QueryComponent}, + ComponentSchema, + }, + Engine, +}; use egui::{Context, ScrollArea}; +use std::collections::{HashMap, HashSet}; pub struct ComponentUi { schema: HashMap, + selected: HashSet, } impl ComponentUi { @@ -11,18 +19,44 @@ impl ComponentUi { engine.subscribe::(); Self { schema: Default::default(), + selected: Default::default(), } } pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { - egui::SidePanel::right("ComponentUi").show(ctx, |ui| { + egui::SidePanel::left("ComponentUi").show(ctx, |ui| { + ui.label("Components:"); + for id in self.schema.keys() { + let has_id = self.selected.contains(id); + let marker = if has_id { '-' } else { '+' }; + let button = ui.button(format!("{}{}", marker, id.id)); + + if button.clicked() { + if has_id { + self.selected.remove(id); + } else { + self.selected.insert(id.clone()); + } + } + } + ui.separator(); + //ScrollArea::vertical().show(ui, |ui| { - for (id, elem) in &self.schema { - ui.label(&id.id); + /* + for selection in &self.schema { + let entities = engine.ecs().query(&[QueryComponent { + component: id.clone(), + access: Access::Write, + }]); + ui.label(&id.id); + for ent in &entities { + ui.label(format!(" {:?}", ent)); } + //ui.label(&format!("{:?}", schema)); + } + */ //}); }); - } pub fn update(&mut self, engine: &mut Engine) { diff --git a/client/src/plugin_ui.rs b/client/src/plugin_ui.rs index 2672ce6f..1ad2a4e3 100644 --- a/client/src/plugin_ui.rs +++ b/client/src/plugin_ui.rs @@ -27,7 +27,7 @@ impl PluginUi { return; } - egui::SidePanel::left("PluginUi").show(ctx, |ui| { + egui::SidePanel::right("PluginUi").show(ctx, |ui| { ScrollArea::vertical().show(ui, |ui| { for (id, elem) in self.elements.iter_mut() { ui.label(&elem.name); From f7e58c0ebf780903f184d3f78d82165cc563750b Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:11:07 -0700 Subject: [PATCH 08/28] Display query results --- client/src/component_ui.rs | 40 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 3f54b341..682e81d6 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,7 +1,7 @@ use cimvr_engine::{ interface::{ kobble::Schema, - prelude::{Access, ComponentId, QueryComponent}, + prelude::{Access, ComponentId, EntityId, QueryComponent}, ComponentSchema, }, Engine, @@ -12,6 +12,7 @@ use std::collections::{HashMap, HashSet}; pub struct ComponentUi { schema: HashMap, selected: HashSet, + display: Vec, } impl ComponentUi { @@ -20,11 +21,14 @@ impl ComponentUi { Self { schema: Default::default(), selected: Default::default(), + display: Default::default(), } } pub fn run(&mut self, ctx: &Context, engine: &mut Engine) { egui::SidePanel::left("ComponentUi").show(ctx, |ui| { + // Component selector + let mut needs_update = false; ui.label("Components:"); for id in self.schema.keys() { let has_id = self.selected.contains(id); @@ -37,25 +41,31 @@ impl ComponentUi { } else { self.selected.insert(id.clone()); } + needs_update = true; } } ui.separator(); - //ScrollArea::vertical().show(ui, |ui| { - /* - for selection in &self.schema { - let entities = engine.ecs().query(&[QueryComponent { - component: id.clone(), - access: Access::Write, - }]); - ui.label(&id.id); - for ent in &entities { - ui.label(format!(" {:?}", ent)); - } - //ui.label(&format!("{:?}", schema)); + // Update displayed entities + if needs_update { + let query: Vec = self + .selected + .iter() + .map(|id| QueryComponent { + component: id.clone(), + access: Access::Write, + }) + .collect(); + + self.display = engine.ecs().query(&query).into_iter().collect(); } - */ - //}); + + // Component editor + ScrollArea::vertical().show(ui, |ui| { + for &entity in &self.display { + ui.label(format!("{:?}", entity)); + } + }) }); } From aea8f1dd8d1e586c9b471e6126790d6a989a341d Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:17:44 -0700 Subject: [PATCH 09/28] Show sorted components --- client/src/component_ui.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 682e81d6..2fb57869 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -60,10 +60,19 @@ impl ComponentUi { self.display = engine.ecs().query(&query).into_iter().collect(); } + let mut sorted_components: Vec = self.selected.iter().cloned().collect(); + sorted_components.sort_by(|a, b| a.id.cmp(&b.id)); + // Component editor ScrollArea::vertical().show(ui, |ui| { for &entity in &self.display { ui.label(format!("{:?}", entity)); + for component in &sorted_components { + //let data = engine.ecs().get_raw(entity, component); + //bin + ui.label(format!("{}", component.id)); + } + ui.separator(); } }) }); From 98caadaf5896e16da850c6dbdee5524b9b3a349a Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:28:15 -0700 Subject: [PATCH 10/28] Editor fn --- client/src/component_ui.rs | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 2fb57869..8da350a6 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,12 +1,12 @@ use cimvr_engine::{ interface::{ - kobble::Schema, + kobble::{Schema, SchemaDeserializer, DynamicValue}, prelude::{Access, ComponentId, EntityId, QueryComponent}, - ComponentSchema, + ComponentSchema, serial::{deserialize, serialize, serialize_into}, }, Engine, }; -use egui::{Context, ScrollArea}; +use egui::{Context, ScrollArea, Ui}; use std::collections::{HashMap, HashSet}; pub struct ComponentUi { @@ -47,6 +47,8 @@ impl ComponentUi { ui.separator(); // Update displayed entities + // TODO: Actually update each frame? Just sort the ids. + // Might get a bit jittery with lots of plugins adding/removing entities... if needs_update { let query: Vec = self .selected @@ -60,17 +62,31 @@ impl ComponentUi { self.display = engine.ecs().query(&query).into_iter().collect(); } + // Component editor let mut sorted_components: Vec = self.selected.iter().cloned().collect(); sorted_components.sort_by(|a, b| a.id.cmp(&b.id)); - // Component editor ScrollArea::vertical().show(ui, |ui| { for &entity in &self.display { ui.label(format!("{:?}", entity)); for component in &sorted_components { - //let data = engine.ecs().get_raw(entity, component); - //bin - ui.label(format!("{}", component.id)); + let schema = self.schema[component].clone(); + let data = engine.ecs().get_raw(entity, component).unwrap(); + + SchemaDeserializer::set_schema(schema); + if let Ok(SchemaDeserializer(mut dynamic)) = deserialize(std::io::Cursor::new(data)) { + + ui.label(format!("{}", component.id)); + + if editor(&mut dynamic, ui) { + let data = engine.ecs().get_mut(entity, component).unwrap(); + serialize_into(std::io::Cursor::new(data), &dynamic).unwrap(); + } + + } else { + ui.label(format!("Failed to deserialize {}", component.id)); + } + } ui.separator(); } @@ -85,3 +101,7 @@ impl ComponentUi { } } } + +fn editor(value: &mut DynamicValue, ui: &Ui) -> bool { + false +} From 06bfd15a59ea9bd9b7823c9c880c3bc6c62e4db6 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:35:24 -0700 Subject: [PATCH 11/28] First editing! --- client/src/component_ui.rs | 42 ++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 8da350a6..656a9653 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,12 +1,13 @@ use cimvr_engine::{ interface::{ - kobble::{Schema, SchemaDeserializer, DynamicValue}, + kobble::{DynamicValue, Schema, SchemaDeserializer}, prelude::{Access, ComponentId, EntityId, QueryComponent}, - ComponentSchema, serial::{deserialize, serialize, serialize_into}, + serial::{deserialize, serialize, serialize_into}, + ComponentSchema, }, Engine, }; -use egui::{Context, ScrollArea, Ui}; +use egui::{Context, DragValue, ScrollArea, Ui}; use std::collections::{HashMap, HashSet}; pub struct ComponentUi { @@ -74,19 +75,18 @@ impl ComponentUi { let data = engine.ecs().get_raw(entity, component).unwrap(); SchemaDeserializer::set_schema(schema); - if let Ok(SchemaDeserializer(mut dynamic)) = deserialize(std::io::Cursor::new(data)) { - + if let Ok(SchemaDeserializer(mut dynamic)) = + deserialize(std::io::Cursor::new(data)) + { ui.label(format!("{}", component.id)); if editor(&mut dynamic, ui) { let data = engine.ecs().get_mut(entity, component).unwrap(); serialize_into(std::io::Cursor::new(data), &dynamic).unwrap(); } - } else { ui.label(format!("Failed to deserialize {}", component.id)); } - } ui.separator(); } @@ -102,6 +102,30 @@ impl ComponentUi { } } -fn editor(value: &mut DynamicValue, ui: &Ui) -> bool { - false +fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { + match value { + DynamicValue::F32(v) => ui.add(DragValue::new(v)).changed(), + DynamicValue::TupleStruct(name, fields) => { + ui.label(name.clone()); + let mut changed = false; + for field_val in fields { + ui.horizontal(|ui| { + changed |= editor(field_val, ui); + }); + } + changed + } + DynamicValue::Struct { name, fields } => { + ui.label(name.clone()); + let mut changed = false; + for (name, field_val) in fields { + ui.horizontal(|ui| { + ui.label(name.clone()); + changed |= editor(field_val, ui); + }); + } + changed + } + _ => false, + } } From 0340276e9f950a9649c3665a11a2fa27db237a18 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:42:50 -0700 Subject: [PATCH 12/28] Modify cube example to make it able to change via gui --- client/src/component_ui.rs | 6 +++--- example_plugins/cube/src/lib.rs | 26 +++++++++++++------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 656a9653..ab2fc4f9 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -72,7 +72,7 @@ impl ComponentUi { ui.label(format!("{:?}", entity)); for component in &sorted_components { let schema = self.schema[component].clone(); - let data = engine.ecs().get_raw(entity, component).unwrap(); + let Some(data) = engine.ecs().get_raw(entity, component) else { continue }; SchemaDeserializer::set_schema(schema); if let Ok(SchemaDeserializer(mut dynamic)) = @@ -81,7 +81,7 @@ impl ComponentUi { ui.label(format!("{}", component.id)); if editor(&mut dynamic, ui) { - let data = engine.ecs().get_mut(entity, component).unwrap(); + let Some(data) = engine.ecs().get_mut(entity, component) else { continue }; serialize_into(std::io::Cursor::new(data), &dynamic).unwrap(); } } else { @@ -104,7 +104,7 @@ impl ComponentUi { fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { match value { - DynamicValue::F32(v) => ui.add(DragValue::new(v)).changed(), + DynamicValue::F32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), DynamicValue::TupleStruct(name, fields) => { ui.label(name.clone()); let mut changed = false; diff --git a/example_plugins/cube/src/lib.rs b/example_plugins/cube/src/lib.rs index 491edec9..34c73e1c 100644 --- a/example_plugins/cube/src/lib.rs +++ b/example_plugins/cube/src/lib.rs @@ -24,25 +24,25 @@ impl UserState for ClientState { id: CUBE_HANDLE, }); + // Create an entity + let cube_ent = io.create_entity(); + // Attach a Transform component (which defaults to the origin) + io.add_component(cube_ent, &Transform::default()); + // Attach the Render component, which details how the object should be drawn + // Note that we use CUBE_HANDLE here, to tell the rendering engine to draw the cube + io.add_component( + cube_ent, + &Render::new(CUBE_HANDLE).primitive(Primitive::Triangles), + ); + // Attach the Synchronized component, which will copy the object to clients + //io.add_component(cube_ent, &Synchronized); + Self } } impl UserState for ServerState { fn new(io: &mut EngineIo, _sched: &mut EngineSchedule) -> Self { - // Create an entity - let _cube_ent = io - .create_entity() - // Attach a Transform component (which defaults to the origin) - .add_component(Transform::default()) - // Attach the Render component, which details how the object should be drawn - // Note that we use CUBE_HANDLE here, to tell the rendering engine to draw the cube - .add_component(Render::new(CUBE_HANDLE).primitive(Primitive::Triangles)) - // Attach the Synchronized component, which will copy the object to clients - .add_component(Synchronized) - // And get the entity ID - .build(); - Self } } From 241986bf33effe548184594683679bf941aba9f3 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 03:46:41 -0700 Subject: [PATCH 13/28] Better marker for remove component query --- client/src/component_ui.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index ab2fc4f9..8a878cbf 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -33,7 +33,7 @@ impl ComponentUi { ui.label("Components:"); for id in self.schema.keys() { let has_id = self.selected.contains(id); - let marker = if has_id { '-' } else { '+' }; + let marker = if has_id { "[-] " } else { "" }; let button = ui.button(format!("{}{}", marker, id.id)); if button.clicked() { From 73fc64466a9b90ed7c14568585360b4363210099 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Tue, 14 Mar 2023 04:01:41 -0700 Subject: [PATCH 14/28] Add radiobutton for enums --- client/src/component_ui.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 8a878cbf..6d62947b 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -126,6 +126,20 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { } changed } + DynamicValue::Enum(schema, sel_idx) => { + let mut changed = false; + ui.label(schema.name.clone()); + ui.horizontal(|ui| { + for (idx, variant) in schema.variants.iter().enumerate() { + let clicked = ui.radio(idx == *sel_idx as usize, variant).clicked(); + changed |= clicked; + if clicked { + *sel_idx = idx as u32; + } + } + }); + changed + } _ => false, } } From 700e75ba8510d38c315868076bee411cd591b6a6 Mon Sep 17 00:00:00 2001 From: Duncan Freeman Date: Tue, 14 Mar 2023 15:49:22 -0700 Subject: [PATCH 15/28] Fix ui example --- Cargo.lock | 1 + client/Cargo.lock | 1 + engine_interface/Cargo.toml | 4 +-- example_plugins/ui_example/src/client.rs | 41 +++++++++++++++++---- example_plugins/ui_example/src/lib.rs | 15 +++++--- example_plugins/ui_example/src/server.rs | 45 ++++++++++++++---------- 6 files changed, 75 insertions(+), 32 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e0fc3467..b7bf140e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -800,6 +800,7 @@ dependencies = [ [[package]] name = "kobble" version = "0.1.0" +source = "git+https://github.com/ChatImproVR/Kobble.git#ff172717561a2ecf03cebe11d50866d160680400" dependencies = [ "once_cell", "serde", diff --git a/client/Cargo.lock b/client/Cargo.lock index 0719c5b6..0f7d0d4d 100644 --- a/client/Cargo.lock +++ b/client/Cargo.lock @@ -1382,6 +1382,7 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kobble" version = "0.1.0" +source = "git+https://github.com/ChatImproVR/Kobble.git#ff172717561a2ecf03cebe11d50866d160680400" dependencies = [ "once_cell", "serde", diff --git a/engine_interface/Cargo.toml b/engine_interface/Cargo.toml index ef8e5479..f865a60e 100644 --- a/engine_interface/Cargo.toml +++ b/engine_interface/Cargo.toml @@ -12,5 +12,5 @@ bincode = "1.3.3" serde = { version = "1", features = ["derive"] } once_cell = "1.17.0" log = "0.4.17" -#jkobble = { git = "https://github.com/ChatImproVR/Kobble.git" } -kobble = { path = "../../kobble" } +kobble = { git = "https://github.com/ChatImproVR/Kobble.git" } +#kobble = { path = "../../kobble" } diff --git a/example_plugins/ui_example/src/client.rs b/example_plugins/ui_example/src/client.rs index e786b0cf..8b51e2b9 100644 --- a/example_plugins/ui_example/src/client.rs +++ b/example_plugins/ui_example/src/client.rs @@ -1,7 +1,10 @@ -use cimvr_common::ui::{Schema, State, UiHandle, UiStateHelper, UiUpdate}; -use cimvr_engine_interface::{dbg, prelude::*}; +use cimvr_common::{ + render::{Mesh, MeshHandle, UploadMesh, Vertex}, + ui::{Schema, State, UiHandle, UiStateHelper, UiUpdate}, +}; +use cimvr_engine_interface::{dbg, pkg_namespace, prelude::*}; -use crate::ChangeColor; +use crate::{ChangeColor, CUBE_MESH}; pub struct ClientState { ui: UiStateHelper, @@ -12,10 +15,15 @@ impl UserState for ClientState { fn new(io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { let mut ui = UiStateHelper::new(); - sched - .add_system(Self::ui_update) - .subscribe::() - .build(); + io.send(&UploadMesh { + mesh: cube(), + id: CUBE_MESH, + }); + + sched.add_system( + Self::ui_update, + SystemDescriptor::new(Stage::Update).subscribe::(), + ); let test_element = ui.add( io, @@ -59,3 +67,22 @@ impl ClientState { } } } + +fn cube() -> Mesh { + let vertices = vec![ + Vertex::new([-1.0, -1.0, -1.0], [0.0, 1.0, 1.0]), + Vertex::new([1.0, -1.0, -1.0], [1.0, 0.0, 1.0]), + Vertex::new([1.0, 1.0, -1.0], [1.0, 1.0, 0.0]), + Vertex::new([-1.0, 1.0, -1.0], [0.0, 1.0, 1.0]), + Vertex::new([-1.0, -1.0, 1.0], [1.0, 0.0, 1.0]), + Vertex::new([1.0, -1.0, 1.0], [1.0, 1.0, 0.0]), + Vertex::new([1.0, 1.0, 1.0], [0.0, 1.0, 1.0]), + Vertex::new([-1.0, 1.0, 1.0], [1.0, 0.0, 1.0]), + ]; + + let indices = vec![ + 3, 1, 0, 2, 1, 3, 2, 5, 1, 6, 5, 2, 6, 4, 5, 7, 4, 6, 7, 0, 4, 3, 0, 7, 7, 2, 3, 6, 2, 7, + 0, 5, 4, 1, 5, 0, + ]; + Mesh { vertices, indices } +} diff --git a/example_plugins/ui_example/src/lib.rs b/example_plugins/ui_example/src/lib.rs index 7c5bb483..a043fbd3 100644 --- a/example_plugins/ui_example/src/lib.rs +++ b/example_plugins/ui_example/src/lib.rs @@ -1,5 +1,4 @@ -//! UI Example -//! This example is intended to be run with other plugins such as `cube` or `fluid_sim` +use cimvr_common::render::MeshHandle; use cimvr_engine_interface::{make_app_state, pkg_namespace, prelude::*}; use serde::{Deserialize, Serialize}; @@ -10,8 +9,16 @@ use server::ServerState; make_app_state!(ClientState, ServerState); -#[derive(Message, Clone, Debug, Serialize, Deserialize)] -#[locality("Remote")] +const CUBE_MESH: MeshHandle = MeshHandle::new(pkg_namespace!("Cube")); + +#[derive(Clone, Debug, Serialize, Deserialize)] pub struct ChangeColor { rgb: [f32; 3], } + +impl Message for ChangeColor { + const CHANNEL: ChannelIdStatic = ChannelIdStatic { + id: pkg_namespace!("ChangeColor"), + locality: Locality::Remote, + }; +} diff --git a/example_plugins/ui_example/src/server.rs b/example_plugins/ui_example/src/server.rs index 378439e1..ba229432 100644 --- a/example_plugins/ui_example/src/server.rs +++ b/example_plugins/ui_example/src/server.rs @@ -1,36 +1,43 @@ -use crate::ChangeColor; +use crate::{ChangeColor, CUBE_MESH}; use cimvr_common::{ render::{Render, RenderExtra}, ui::UiUpdate, + Transform, }; +use cimvr_engine_interface::dbg; use cimvr_engine_interface::prelude::*; -pub struct ServerState; +pub struct ServerState { + cube: EntityId, +} impl UserState for ServerState { - fn new(_io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { - sched - .add_system(Self::update) - .query::(Access::Read) - .subscribe::() - .subscribe::() - .build(); + fn new(io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { + let cube = io.create_entity(); + io.add_component(cube, &Transform::default()); + io.add_component(cube, &Synchronized); + io.add_component(cube, &Render::new(CUBE_MESH)); + dbg!(cube); + + sched.add_system( + Self::update, + SystemDescriptor::new(Stage::Update) + .query::(Access::Read) + .subscribe::() + .subscribe::(), + ); - Self + Self { cube } } } impl ServerState { - fn update(&mut self, io: &mut EngineIo, query: &mut QueryResult) { + fn update(&mut self, io: &mut EngineIo, _query: &mut QueryResult) { if let Some(ChangeColor { rgb }) = io.inbox_first() { - for ent in query.iter() { - // The default shader uses RenderExtra to set the color - let mut extra = [0.; 4 * 4]; - extra[..3].copy_from_slice(&rgb); - // This value must be 1 to get the color to show. See the default vertex shader! - extra[3] = 1.; - io.add_component(ent, RenderExtra(extra)); - } + let mut extra = [0.; 4 * 4]; + extra[..3].copy_from_slice(&rgb); + extra[3] = 1.; + io.add_component(self.cube, &RenderExtra(extra)); } } } From 661ac1b442ca5cbfd4ee52fa0ac3bca75c9370d3 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Thu, 16 Mar 2023 01:01:20 -0700 Subject: [PATCH 16/28] More UI fields... --- client/src/component_ui.rs | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 6d62947b..e42cd021 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -104,7 +104,28 @@ impl ComponentUi { fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { match value { - DynamicValue::F32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::Unit => false, + DynamicValue::Bool(b) => ui.checkbox(b, "").clicked(), + DynamicValue::String(s) => { + ui.label(s.clone()); + false + } + DynamicValue::NewtypeStruct(name, field) => { + ui.horizontal(|ui| { + ui.label(name.clone()); + editor(field, ui) + }) + .inner + } + DynamicValue::Tuple(fields) => { + let mut changed = false; + for field_val in fields { + ui.horizontal(|ui| { + changed |= editor(field_val, ui); + }); + } + changed + } DynamicValue::TupleStruct(name, fields) => { ui.label(name.clone()); let mut changed = false; @@ -140,6 +161,19 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { }); changed } - _ => false, + DynamicValue::I8(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::U8(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::I16(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::U16(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::I32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::U32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::I64(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::U64(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::F32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::F64(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + other => { + ui.label(format!("Unimplemented {:?}", other)); + false + }, } } From 2029e85e3da0e6a14b7cc05139af4a51beacac97 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Thu, 16 Mar 2023 02:15:18 -0700 Subject: [PATCH 17/28] Specializations with the component gui --- client/src/component_ui.rs | 64 ++++++++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index e42cd021..4f0e742a 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -106,7 +106,7 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { match value { DynamicValue::Unit => false, DynamicValue::Bool(b) => ui.checkbox(b, "").clicked(), - DynamicValue::String(s) => { + DynamicValue::String(s) | DynamicValue::UnitStruct(s) => { ui.label(s.clone()); false } @@ -127,6 +127,14 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { changed } DynamicValue::TupleStruct(name, fields) => { + if name == "Mat4" { + return edit_matrix(value, ui); + } + + if matches!(name.as_str(), "Vec3" | "Vec4" | "Quat") { + return edit_vector(value, ui); + } + ui.label(name.clone()); let mut changed = false; for field_val in fields { @@ -149,7 +157,6 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { } DynamicValue::Enum(schema, sel_idx) => { let mut changed = false; - ui.label(schema.name.clone()); ui.horizontal(|ui| { for (idx, variant) in schema.variants.iter().enumerate() { let clicked = ui.radio(idx == *sel_idx as usize, variant).clicked(); @@ -169,11 +176,56 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { DynamicValue::U32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), DynamicValue::I64(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), DynamicValue::U64(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), + DynamicValue::I128(v) => { + ui.label(format!("{}", v)); + false + } + DynamicValue::U128(v) => { + ui.label(format!("{}", v)); + false + } + DynamicValue::Char(c) => { + ui.label(format!("{}", c)); + false + } DynamicValue::F32(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), DynamicValue::F64(v) => ui.add(DragValue::new(v).speed(0.1)).changed(), - other => { - ui.label(format!("Unimplemented {:?}", other)); - false - }, + } +} + +fn edit_matrix(value: &mut DynamicValue, ui: &mut Ui) -> bool { + if let DynamicValue::TupleStruct(_, fields) = value { + let mut changed = false; + ui.vertical(|ui| { + for row in fields.chunks_exact_mut(4) { + ui.horizontal(|ui| { + for col in row { + if let DynamicValue::F32(v) = col { + changed |= ui.add(DragValue::new(v).speed(0.1)).changed(); + } + } + }); + } + }); + changed + } else { + false + } +} + +fn edit_vector(value: &mut DynamicValue, ui: &mut Ui) -> bool { + if let DynamicValue::TupleStruct(_, fields) = value { + let mut changed = false; + ui.horizontal(|ui| { + let names = ["x: ", "y: ", "z: ", "w: "]; + for (col, name) in fields.iter_mut().zip(names) { + if let DynamicValue::F32(v) = col { + changed |= ui.add(DragValue::new(v).prefix(name).speed(0.1)).changed(); + } + } + }); + changed + } else { + false } } From 370c77c9c95ff98cef1715f91373f387b7023bef Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 02:14:58 -0700 Subject: [PATCH 18/28] Fix ui example --- Cargo.lock | 508 +++++++++++++---------- client/Cargo.lock | 494 ++++++++++++++-------- example_plugins/cube/src/lib.rs | 26 +- example_plugins/ui_example/src/client.rs | 41 +- example_plugins/ui_example/src/lib.rs | 3 - example_plugins/ui_example/src/server.rs | 43 +- 6 files changed, 652 insertions(+), 463 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b7bf140e..a6f1aeeb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,24 +4,13 @@ version = 3 [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ "gimli", ] -[[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 = "ahash" version = "0.8.2" @@ -49,12 +38,6 @@ version = "1.0.67" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7724808837b77f4b4de9d283820f9d98bcf496d5692934b857a2399d31ff22e6" -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - [[package]] name = "async-trait" version = "0.1.60" @@ -85,9 +68,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.13.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "bincode" @@ -183,11 +166,22 @@ dependencies = [ "serde", ] +[[package]] +name = "cimvr_derive_macros" +version = "0.1.0" +dependencies = [ + "bincode", + "proc-macro2", + "quote", + "serde", + "syn", +] + [[package]] name = "cimvr_engine" version = "0.1.0" dependencies = [ - "ahash 0.8.2", + "ahash", "anyhow", "cimvr_engine_interface", "log", @@ -202,6 +196,7 @@ name = "cimvr_engine_interface" version = "0.1.0" dependencies = [ "bincode", + "cimvr_derive_macros", "kobble", "log", "once_cell", @@ -251,28 +246,27 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62c772976416112fa4484cbd688cb6fb35fd430005c1c586224fc014018abad" +checksum = "862eb053fc21f991db27c73bc51494fe77aadfa09ea257cb43b62a2656fd4cc1" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b40ed2dd13c2ac7e24f88a3090c68ad3414eb1d066a95f8f1f7b3b819cb4e46" +checksum = "038a74bc85da2f6f9e237c51b7998b47229c0f9da69b4c6b0590cf6621c45d46" dependencies = [ - "arrayvec", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", - "cranelift-egraph", "cranelift-entity", "cranelift-isle", "gimli", + "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -281,47 +275,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb927a8f1c27c34ee3759b6b0ffa528d2330405d5cc4511f0cab33fe2279f4b5" +checksum = "c7fb720a7955cf7cc92c58f3896952589062e6f12d8eb35ef4337e708ed2e738" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.90.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43dfa417b884a9ab488d95fd6b93b25e959321fe7bfd7a0a960ba5d7fb7ab927" - -[[package]] -name = "cranelift-egraph" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a66b39785efd8513d2cca967ede56d6cc57c8d7986a595c7c47d0c78de8dce" -dependencies = [ - "cranelift-entity", - "fxhash", - "hashbrown", - "indexmap", - "log", - "smallvec", -] +checksum = "c0954f9426cf0fa7ad57910ea5822a09c5da590222a767a6c38080a8534a0af8" [[package]] name = "cranelift-entity" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0637ffde963cb5d759bc4d454cfa364b6509e6c74cdaa21298add0ed9276f346" +checksum = "68c7096c1a66cfa73899645f0a46a6f5c91641e678eeafb0fc47a19ab34069ca" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb72b8342685e850cb037350418f62cc4fc55d6c2eb9c7ca01b82f9f1a6f3d56" +checksum = "697f2fdaceb228fea413ea91baa7c6b8533fc2e61ac5a08db7acc1b31e673a2a" dependencies = [ "cranelift-codegen", "log", @@ -331,15 +311,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850579cb9e4b448f7c301f1e6e6cbad99abe3f1f1d878a4994cb66e33c6db8cd" +checksum = "f41037f4863e0c6716dbe60e551d501f4197383cb43d75038c0170159fc8fb5b" [[package]] name = "cranelift-native" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a279e5bcba3e0466c734d8d8eb6bfc1ad29e95c37f3e4955b492b5616335e" +checksum = "797c6e5643eb654bb7bf496f1f03518323a89b937b84020b786620f910364a52" dependencies = [ "cranelift-codegen", "libc", @@ -348,9 +328,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b8c5e7ffb754093fb89ec4bd4f9dbb9f1c955427299e334917d284745835c2" +checksum = "69b5fae12cefda3a2c43837e562dd525ab1d75b27989eece66de5b2c8fe120f9" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -572,6 +552,15 @@ dependencies = [ "serde", ] +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + [[package]] name = "fsevent-sys" version = "4.1.0" @@ -622,9 +611,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" dependencies = [ "fallible-iterator", "indexmap", @@ -645,8 +634,14 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.7.6", + "ahash", ] [[package]] @@ -658,6 +653,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hello" version = "0.1.0" @@ -691,6 +692,22 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "indexmap" version = "1.9.2" @@ -698,7 +715,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", "serde", ] @@ -722,12 +739,6 @@ dependencies = [ "libc", ] -[[package]] -name = "io-lifetimes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" - [[package]] name = "io-lifetimes" version = "1.0.3" @@ -745,8 +756,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "927609f78c2913a6f6ac3c27a4fe87f43e2a35367c0c4b0f8265e8f49a104330" dependencies = [ "hermit-abi 0.2.6", - "io-lifetimes 1.0.3", - "rustix 0.36.5", + "io-lifetimes", + "rustix", "windows-sys 0.42.0", ] @@ -761,9 +772,9 @@ dependencies = [ [[package]] name = "ittapi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c4f6ff06169ce7048dac5150b1501c7e3716a929721aeb06b87e51a43e42f4" +checksum = "2e648c437172ce7d3ac35ca11a068755072054826fa455a916b43524fa4a62a7" dependencies = [ "anyhow", "ittapi-sys", @@ -772,9 +783,9 @@ dependencies = [ [[package]] name = "ittapi-sys" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e078cce01485f418bae3beb34dd604aaedf2065502853c7da17fbce8e64eda" +checksum = "a9b32a4d23f72548178dde54f3c12c6b6a08598e25575c0d0fa5bd861e0dc1a5" dependencies = [ "cc", ] @@ -844,12 +855,6 @@ version = "0.2.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db6d7e329c562c5dfab7a46a2afabc8b987ab9a4834c9d1ca04dc54c1546cef8" -[[package]] -name = "linux-raw-sys" -version = "0.0.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" - [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -886,23 +891,23 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.5", + "rustix", ] [[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", ] [[package]] name = "memoffset" -version = "0.7.1" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" dependencies = [ "autocfg", ] @@ -949,12 +954,12 @@ dependencies = [ [[package]] name = "object" -version = "0.29.0" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "crc32fast", - "hashbrown", + "hashbrown 0.13.2", "indexmap", "memchr", ] @@ -981,6 +986,12 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1013,9 +1024,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.48" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9d89e5dba24725ae5678020bf8f1357a9aa7ff10736b551adbcd3f8d17d766f" +checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" dependencies = [ "unicode-ident", ] @@ -1029,6 +1040,17 @@ dependencies = [ "cc", ] +[[package]] +name = "pulldown-cmark" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + [[package]] name = "quote" version = "1.0.22" @@ -1121,9 +1143,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.4.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b2eab54204ea0117fe9a060537e0b07a4e72f7c7d182361ecc346cab2240e5" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" dependencies = [ "fxhash", "log", @@ -1156,30 +1178,16 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustix" -version = "0.35.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 0.7.5", - "libc", - "linux-raw-sys 0.0.46", - "windows-sys 0.42.0", -] - -[[package]] -name = "rustix" -version = "0.36.5" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3807b5d10909833d3e9acd1eb5fb988f79376ff10fce42937de71a449c4c588" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.3", + "io-lifetimes", "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", + "linux-raw-sys", + "windows-sys 0.45.0", ] [[package]] @@ -1272,7 +1280,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro-error", "proc-macro2", "quote", @@ -1334,6 +1342,21 @@ dependencies = [ "syn", ] +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "toml" version = "0.5.10" @@ -1358,12 +1381,36 @@ dependencies = [ "serde", ] +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + [[package]] name = "unicode-ident" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.10.0" @@ -1376,6 +1423,23 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "version_check" version = "0.9.4" @@ -1401,27 +1465,28 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-encoder" -version = "0.20.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] [[package]] name = "wasmparser" -version = "0.93.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a4460aa3e271fa180b6a5d003e728f3963fb30e3ba0fa7c9634caa06049328" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" dependencies = [ "indexmap", + "url", ] [[package]] name = "wasmtime" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18265705b1c49218776577d9f301d79ab06888c7f4a32e2ed24e68a55738ce7" +checksum = "d137f87df6e037b2bcb960c2db7ea174e04fb897051380c14b5e5475a870669e" dependencies = [ "anyhow", "async-trait", @@ -1439,29 +1504,30 @@ dependencies = [ "target-lexicon", "wasmparser", "wasmtime-cache", + "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit", "wasmtime-runtime", "wat", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-asm-macros" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a201583f6c79b96e74dcce748fa44fb2958f474ef13c93f880ea4d3bed31ae4f" +checksum = "ad63d4175d6af44af2046186c87deae4e9a8150b92de2d4809c6f745d5ee9b38" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f37efc6945b08fcb634cffafc438dd299bac55a27c836954656c634d3e63c31" +checksum = "f3055fb327f795b4639f47b9dadad9d3d9b185fd3001adf8db08f5fa06d07032" dependencies = [ "anyhow", "base64", @@ -1469,19 +1535,40 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.35.13", + "rustix", "serde", "sha2", "toml", - "windows-sys 0.36.1", + "windows-sys 0.45.0", "zstd", ] +[[package]] +name = "wasmtime-component-macro" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cf4906f990d6ab3065d042cf5a15eb7a2a5406d1c001a45ab9615de876458a" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn", + "wasmtime-component-util", + "wasmtime-wit-bindgen", + "wit-parser", +] + +[[package]] +name = "wasmtime-component-util" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ccf49c18c1ce3f682310e642dcdc00ffc67f1ce0767c89a16fc8fcf5eaeb97" + [[package]] name = "wasmtime-cranelift" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe208297e045ea0ee6702be88772ea40f918d55fbd4163981a4699aff034b634" +checksum = "274590ecbb1179d45a5c8d9f54b9d236e9414d9ca3b861cd8956cec085508eb0" dependencies = [ "anyhow", "cranelift-codegen", @@ -1500,9 +1587,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b97f7441ac780a7fa738db5b9c23c1b70ef4abccd8ad205ada5669d196ba2" +checksum = "05b4a897e6ce1f2567ba98e7b1948c0e12cae1202fd88e7639f901b8ce9203f7" dependencies = [ "anyhow", "cranelift-entity", @@ -1519,22 +1606,22 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f54abc960b4a055ba16b942cbbd1da641e0ad44cc97a7608f3d43c069b120e" +checksum = "01b1192624694399f601de28db78975ed20fa859da8e048bf8250bd3b38d302b" dependencies = [ "cc", "cfg-if", - "rustix 0.35.13", + "rustix", "wasmtime-asm-macros", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32800cb6e29faabab7056593f70a4c00c65c75c365aaf05406933f2169d0c22f" +checksum = "f3f035bfe27ce5129c9d081d6288480f2e6ae9d16d0eb035a5d9e3b5b6c36658" dependencies = [ "addr2line", "anyhow", @@ -1548,41 +1635,40 @@ dependencies = [ "rustc-demangle", "serde", "target-lexicon", - "thiserror", "wasmtime-environ", "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit-debug" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe057012a0ba6cee3685af1e923d6e0a6cb9baf15fb3ffa4be3d7f712c7dec42" +checksum = "17e35d335dd2461c631ba24d2326d993bd3a4bdb4b0217e5bda4f518ba0e29f3" dependencies = [ "object", "once_cell", - "rustix 0.35.13", + "rustix", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "2.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6bbabb309c06cc238ee91b1455b748c45f0bdcab0dda2c2db85b0a1e69fcb66" +checksum = "4c8c01a070f55343f7afd309a9609c12378548b26c3f53c599bc711bb1ce42ee" dependencies = [ "cfg-if", "libc", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-runtime" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a23b6e138e89594c0189162e524a29e217aec8f9a4e1959a34f74c64e8d17d" +checksum = "1ac02cc14c8247f6e4e48c7653a79c226babac8f2cacdd933d3f15ca2a6ab20b" dependencies = [ "anyhow", "cc", @@ -1592,23 +1678,22 @@ dependencies = [ "log", "mach", "memfd", - "memoffset 0.6.5", + "memoffset 0.8.0", "paste", "rand", - "rustix 0.35.13", - "thiserror", + "rustix", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit-debug", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-types" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ec7615fde8c79737f1345d81f0b18da83b3db929a87b4604f27c932246d1e2" +checksum = "c8dc0062ab053e1aa22d2355a2de4df482a0007fecae82ea02cc596c2329971d" dependencies = [ "cranelift-entity", "serde", @@ -1616,11 +1701,22 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "wasmtime-wit-bindgen" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd2cf93f3c8a6f443d8a9098fddc5fd887783c0fe725dc10c54ca9280546421d" +dependencies = [ + "anyhow", + "heck 0.4.1", + "wit-parser", +] + [[package]] name = "wast" -version = "50.0.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" +checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" dependencies = [ "leb128", "memchr", @@ -1630,9 +1726,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.52" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" +checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" dependencies = [ "wast", ] @@ -1668,19 +1764,6 @@ 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 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -1688,85 +1771,94 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc", ] [[package]] -name = "windows_aarch64_gnullvm" -version = "0.42.0" +name = "windows-sys" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.36.1" +name = "windows-targets" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] [[package]] -name = "windows_aarch64_msvc" -version = "0.42.0" +name = "windows_aarch64_gnullvm" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] -name = "windows_i686_gnu" -version = "0.36.1" +name = "windows_aarch64_msvc" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" - -[[package]] -name = "windows_i686_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.42.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" -version = "0.36.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] -name = "windows_x86_64_msvc" -version = "0.42.0" +name = "wit-parser" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "f887c3da527a51b321076ebe6a7513026a4757b6d4d144259946552d6fc728b3" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "pulldown-cmark", + "unicode-xid", + "url", +] [[package]] name = "zstd" diff --git a/client/Cargo.lock b/client/Cargo.lock index 0f7d0d4d..043cea10 100644 --- a/client/Cargo.lock +++ b/client/Cargo.lock @@ -20,9 +20,9 @@ checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6" [[package]] name = "addr2line" -version = "0.17.0" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" dependencies = [ "gimli", ] @@ -33,17 +33,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[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 = "ahash" version = "0.8.2" @@ -83,12 +72,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" -[[package]] -name = "arrayvec" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" - [[package]] name = "async-trait" version = "0.1.61" @@ -114,9 +97,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "base64" -version = "0.13.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" [[package]] name = "bincode" @@ -261,11 +244,22 @@ dependencies = [ "serde", ] +[[package]] +name = "cimvr_derive_macros" +version = "0.1.0" +dependencies = [ + "bincode", + "proc-macro2", + "quote", + "serde", + "syn", +] + [[package]] name = "cimvr_engine" version = "0.1.0" dependencies = [ - "ahash 0.8.2", + "ahash", "anyhow", "cimvr_engine_interface", "log", @@ -280,6 +274,7 @@ name = "cimvr_engine_interface" version = "0.1.0" dependencies = [ "bincode", + "cimvr_derive_macros", "kobble", "log", "once_cell", @@ -420,28 +415,27 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62c772976416112fa4484cbd688cb6fb35fd430005c1c586224fc014018abad" +checksum = "862eb053fc21f991db27c73bc51494fe77aadfa09ea257cb43b62a2656fd4cc1" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b40ed2dd13c2ac7e24f88a3090c68ad3414eb1d066a95f8f1f7b3b819cb4e46" +checksum = "038a74bc85da2f6f9e237c51b7998b47229c0f9da69b4c6b0590cf6621c45d46" dependencies = [ - "arrayvec 0.7.2", "bumpalo", "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", - "cranelift-egraph", "cranelift-entity", "cranelift-isle", "gimli", + "hashbrown 0.13.2", "log", "regalloc2", "smallvec", @@ -450,47 +444,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb927a8f1c27c34ee3759b6b0ffa528d2330405d5cc4511f0cab33fe2279f4b5" +checksum = "c7fb720a7955cf7cc92c58f3896952589062e6f12d8eb35ef4337e708ed2e738" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.90.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43dfa417b884a9ab488d95fd6b93b25e959321fe7bfd7a0a960ba5d7fb7ab927" - -[[package]] -name = "cranelift-egraph" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a66b39785efd8513d2cca967ede56d6cc57c8d7986a595c7c47d0c78de8dce" -dependencies = [ - "cranelift-entity", - "fxhash", - "hashbrown", - "indexmap", - "log", - "smallvec", -] +checksum = "c0954f9426cf0fa7ad57910ea5822a09c5da590222a767a6c38080a8534a0af8" [[package]] name = "cranelift-entity" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0637ffde963cb5d759bc4d454cfa364b6509e6c74cdaa21298add0ed9276f346" +checksum = "68c7096c1a66cfa73899645f0a46a6f5c91641e678eeafb0fc47a19ab34069ca" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb72b8342685e850cb037350418f62cc4fc55d6c2eb9c7ca01b82f9f1a6f3d56" +checksum = "697f2fdaceb228fea413ea91baa7c6b8533fc2e61ac5a08db7acc1b31e673a2a" dependencies = [ "cranelift-codegen", "log", @@ -500,15 +480,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850579cb9e4b448f7c301f1e6e6cbad99abe3f1f1d878a4994cb66e33c6db8cd" +checksum = "f41037f4863e0c6716dbe60e551d501f4197383cb43d75038c0170159fc8fb5b" [[package]] name = "cranelift-native" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a279e5bcba3e0466c734d8d8eb6bfc1ad29e95c37f3e4955b492b5616335e" +checksum = "797c6e5643eb654bb7bf496f1f03518323a89b937b84020b786620f910364a52" dependencies = [ "cranelift-codegen", "libc", @@ -517,9 +497,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.90.1" +version = "0.94.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6b8c5e7ffb754093fb89ec4bd4f9dbb9f1c955427299e334917d284745835c2" +checksum = "69b5fae12cefda3a2c43837e562dd525ab1d75b27989eece66de5b2c8fe120f9" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -729,7 +709,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc9fcd393c3daaaf5909008a1d948319d538b79c51871e4df0993260260a94e4" dependencies = [ - "ahash 0.8.2", + "ahash", "epaint 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "nohash-hasher", "tracing", @@ -740,7 +720,7 @@ name = "egui" version = "0.19.0" source = "git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi#244f1bbe6bf6bf9d100ca516c9ea0a6c5dc5ebfa" dependencies = [ - "ahash 0.8.2", + "ahash", "epaint 0.19.0 (git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi)", "nohash-hasher", "tracing", @@ -824,7 +804,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5ba04741be7f6602b1a1b28f1082cce45948a7032961c52814f8946b28493300" dependencies = [ "ab_glyph", - "ahash 0.8.2", + "ahash", "atomic_refcell", "emath 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)", "nohash-hasher", @@ -837,7 +817,7 @@ version = "0.19.0" source = "git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi#244f1bbe6bf6bf9d100ca516c9ea0a6c5dc5ebfa" dependencies = [ "ab_glyph", - "ahash 0.8.2", + "ahash", "atomic_refcell", "bytemuck", "emath 0.19.0 (git+https://github.com/Masterchef365/egui.git?branch=fix-glow-winit-dpi)", @@ -962,6 +942,15 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + [[package]] name = "freetype-rs" version = "0.26.0" @@ -1058,9 +1047,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.26.2" +version = "0.27.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" dependencies = [ "fallible-iterator", "indexmap", @@ -1191,8 +1180,14 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "ahash 0.7.6", + "ahash", ] [[package]] @@ -1204,6 +1199,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + [[package]] name = "hermit-abi" version = "0.2.6" @@ -1219,12 +1220,28 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + [[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.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + [[package]] name = "indexmap" version = "1.9.2" @@ -1232,7 +1249,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", "serde", ] @@ -1278,12 +1295,6 @@ dependencies = [ "mach", ] -[[package]] -name = "io-lifetimes" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" - [[package]] name = "io-lifetimes" version = "1.0.3" @@ -1301,8 +1312,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" dependencies = [ "hermit-abi", - "io-lifetimes 1.0.3", - "rustix 0.36.6", + "io-lifetimes", + "rustix", "windows-sys 0.42.0", ] @@ -1317,9 +1328,9 @@ dependencies = [ [[package]] name = "ittapi" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8c4f6ff06169ce7048dac5150b1501c7e3716a929721aeb06b87e51a43e42f4" +checksum = "2e648c437172ce7d3ac35ca11a068755072054826fa455a916b43524fa4a62a7" dependencies = [ "anyhow", "ittapi-sys", @@ -1328,9 +1339,9 @@ dependencies = [ [[package]] name = "ittapi-sys" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87e078cce01485f418bae3beb34dd604aaedf2065502853c7da17fbce8e64eda" +checksum = "a9b32a4d23f72548178dde54f3c12c6b6a08598e25575c0d0fa5bd861e0dc1a5" dependencies = [ "cc", ] @@ -1446,12 +1457,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "linux-raw-sys" -version = "0.0.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" - [[package]] name = "linux-raw-sys" version = "0.1.4" @@ -1507,7 +1512,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.6", + "rustix", ] [[package]] @@ -1537,6 +1542,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + [[package]] name = "minimal-lexical" version = "0.2.1" @@ -1723,12 +1737,12 @@ dependencies = [ [[package]] name = "object" -version = "0.29.0" +version = "0.30.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" dependencies = [ "crc32fast", - "hashbrown", + "hashbrown 0.13.2", "indexmap", "memchr", ] @@ -1882,9 +1896,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.49" +version = "1.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73" dependencies = [ "unicode-ident", ] @@ -1898,6 +1912,17 @@ dependencies = [ "cc", ] +[[package]] +name = "pulldown-cmark" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8" +dependencies = [ + "bitflags", + "memchr", + "unicase", +] + [[package]] name = "quote" version = "1.0.23" @@ -1999,9 +2024,9 @@ dependencies = [ [[package]] name = "regalloc2" -version = "0.4.2" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b2eab54204ea0117fe9a060537e0b07a4e72f7c7d182361ecc346cab2240e5" +checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621" dependencies = [ "fxhash", "log", @@ -2034,30 +2059,16 @@ checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustix" -version = "0.35.13" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ "bitflags", "errno", - "io-lifetimes 0.7.5", + "io-lifetimes", "libc", - "linux-raw-sys 0.0.46", - "windows-sys 0.42.0", -] - -[[package]] -name = "rustix" -version = "0.36.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" -dependencies = [ - "bitflags", - "errno", - "io-lifetimes 1.0.3", - "libc", - "linux-raw-sys 0.1.4", - "windows-sys 0.42.0", + "linux-raw-sys", + "windows-sys 0.45.0", ] [[package]] @@ -2233,7 +2244,7 @@ version = "0.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0" dependencies = [ - "heck", + "heck 0.3.3", "proc-macro-error", "proc-macro2", "quote", @@ -2302,7 +2313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82" dependencies = [ "arrayref", - "arrayvec 0.5.2", + "arrayvec", "bytemuck", "cfg-if", "png", @@ -2320,6 +2331,21 @@ dependencies = [ "bytemuck", ] +[[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.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + [[package]] name = "toml" version = "0.5.10" @@ -2361,12 +2387,36 @@ version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + [[package]] name = "unicode-ident" version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.10.0" @@ -2379,6 +2429,23 @@ version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + [[package]] name = "uuid" version = "1.3.0" @@ -2470,27 +2537,28 @@ checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "wasm-encoder" -version = "0.20.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05632e0a66a6ed8cca593c24223aabd6262f256c3693ad9822c315285f010614" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] [[package]] name = "wasmparser" -version = "0.93.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a4460aa3e271fa180b6a5d003e728f3963fb30e3ba0fa7c9634caa06049328" +checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4" dependencies = [ "indexmap", + "url", ] [[package]] name = "wasmtime" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d18265705b1c49218776577d9f301d79ab06888c7f4a32e2ed24e68a55738ce7" +checksum = "d137f87df6e037b2bcb960c2db7ea174e04fb897051380c14b5e5475a870669e" dependencies = [ "anyhow", "async-trait", @@ -2508,29 +2576,30 @@ dependencies = [ "target-lexicon", "wasmparser", "wasmtime-cache", + "wasmtime-component-macro", "wasmtime-cranelift", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit", "wasmtime-runtime", "wat", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-asm-macros" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a201583f6c79b96e74dcce748fa44fb2958f474ef13c93f880ea4d3bed31ae4f" +checksum = "ad63d4175d6af44af2046186c87deae4e9a8150b92de2d4809c6f745d5ee9b38" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f37efc6945b08fcb634cffafc438dd299bac55a27c836954656c634d3e63c31" +checksum = "f3055fb327f795b4639f47b9dadad9d3d9b185fd3001adf8db08f5fa06d07032" dependencies = [ "anyhow", "base64", @@ -2538,19 +2607,40 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.35.13", + "rustix", "serde", "sha2", "toml", - "windows-sys 0.36.1", + "windows-sys 0.45.0", "zstd", ] +[[package]] +name = "wasmtime-component-macro" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64cf4906f990d6ab3065d042cf5a15eb7a2a5406d1c001a45ab9615de876458a" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn", + "wasmtime-component-util", + "wasmtime-wit-bindgen", + "wit-parser", +] + +[[package]] +name = "wasmtime-component-util" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ccf49c18c1ce3f682310e642dcdc00ffc67f1ce0767c89a16fc8fcf5eaeb97" + [[package]] name = "wasmtime-cranelift" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe208297e045ea0ee6702be88772ea40f918d55fbd4163981a4699aff034b634" +checksum = "274590ecbb1179d45a5c8d9f54b9d236e9414d9ca3b861cd8956cec085508eb0" dependencies = [ "anyhow", "cranelift-codegen", @@ -2569,9 +2659,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "754b97f7441ac780a7fa738db5b9c23c1b70ef4abccd8ad205ada5669d196ba2" +checksum = "05b4a897e6ce1f2567ba98e7b1948c0e12cae1202fd88e7639f901b8ce9203f7" dependencies = [ "anyhow", "cranelift-entity", @@ -2588,22 +2678,22 @@ dependencies = [ [[package]] name = "wasmtime-fiber" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5f54abc960b4a055ba16b942cbbd1da641e0ad44cc97a7608f3d43c069b120e" +checksum = "01b1192624694399f601de28db78975ed20fa859da8e048bf8250bd3b38d302b" dependencies = [ "cc", "cfg-if", - "rustix 0.35.13", + "rustix", "wasmtime-asm-macros", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32800cb6e29faabab7056593f70a4c00c65c75c365aaf05406933f2169d0c22f" +checksum = "f3f035bfe27ce5129c9d081d6288480f2e6ae9d16d0eb035a5d9e3b5b6c36658" dependencies = [ "addr2line", "anyhow", @@ -2617,41 +2707,40 @@ dependencies = [ "rustc-demangle", "serde", "target-lexicon", - "thiserror", "wasmtime-environ", "wasmtime-jit-debug", "wasmtime-jit-icache-coherence", "wasmtime-runtime", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-jit-debug" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe057012a0ba6cee3685af1e923d6e0a6cb9baf15fb3ffa4be3d7f712c7dec42" +checksum = "17e35d335dd2461c631ba24d2326d993bd3a4bdb4b0217e5bda4f518ba0e29f3" dependencies = [ "object", "once_cell", - "rustix 0.35.13", + "rustix", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "2.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6bbabb309c06cc238ee91b1455b748c45f0bdcab0dda2c2db85b0a1e69fcb66" +checksum = "4c8c01a070f55343f7afd309a9609c12378548b26c3f53c599bc711bb1ce42ee" dependencies = [ "cfg-if", "libc", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-runtime" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09a23b6e138e89594c0189162e524a29e217aec8f9a4e1959a34f74c64e8d17d" +checksum = "1ac02cc14c8247f6e4e48c7653a79c226babac8f2cacdd933d3f15ca2a6ab20b" dependencies = [ "anyhow", "cc", @@ -2661,23 +2750,22 @@ dependencies = [ "log", "mach", "memfd", - "memoffset 0.6.5", + "memoffset 0.8.0", "paste", "rand", - "rustix 0.35.13", - "thiserror", + "rustix", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-fiber", "wasmtime-jit-debug", - "windows-sys 0.36.1", + "windows-sys 0.45.0", ] [[package]] name = "wasmtime-types" -version = "3.0.1" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68ec7615fde8c79737f1345d81f0b18da83b3db929a87b4604f27c932246d1e2" +checksum = "c8dc0062ab053e1aa22d2355a2de4df482a0007fecae82ea02cc596c2329971d" dependencies = [ "cranelift-entity", "serde", @@ -2685,11 +2773,22 @@ dependencies = [ "wasmparser", ] +[[package]] +name = "wasmtime-wit-bindgen" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd2cf93f3c8a6f443d8a9098fddc5fd887783c0fe725dc10c54ca9280546421d" +dependencies = [ + "anyhow", + "heck 0.4.1", + "wit-parser", +] + [[package]] name = "wast" -version = "50.0.0" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2cbb59d4ac799842791fe7e806fa5dbbf6b5554d538e51cc8e176db6ff0ae34" +checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" dependencies = [ "leb128", "memchr", @@ -2699,9 +2798,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.52" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "584aaf7a1ecf4d383bbe1a25eeab0cbb8ff96acc6796707ff65cde48f4632f15" +checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" dependencies = [ "wast", ] @@ -2837,12 +2936,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -2865,19 +2964,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.0", - "windows_i686_gnu 0.42.0", - "windows_i686_msvc 0.42.0", - "windows_x86_64_gnu 0.42.0", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.0", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -2887,9 +3010,9 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_aarch64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -2899,9 +3022,9 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -2911,9 +3034,9 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_i686_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -2923,15 +3046,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_gnu" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -2941,9 +3064,9 @@ checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "windows_x86_64_msvc" -version = "0.42.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winit" @@ -2987,6 +3110,21 @@ dependencies = [ "winapi", ] +[[package]] +name = "wit-parser" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f887c3da527a51b321076ebe6a7513026a4757b6d4d144259946552d6fc728b3" +dependencies = [ + "anyhow", + "id-arena", + "indexmap", + "log", + "pulldown-cmark", + "unicode-xid", + "url", +] + [[package]] name = "x11-dl" version = "2.20.1" diff --git a/example_plugins/cube/src/lib.rs b/example_plugins/cube/src/lib.rs index 34c73e1c..8690e015 100644 --- a/example_plugins/cube/src/lib.rs +++ b/example_plugins/cube/src/lib.rs @@ -1,5 +1,5 @@ use cimvr_common::{ - render::{Mesh, MeshHandle, Primitive, Render, UploadMesh, Vertex}, + render::{Mesh, MeshHandle, Primitive, Render, RenderExtra, UploadMesh, Vertex}, Transform, }; use cimvr_engine_interface::{make_app_state, pkg_namespace, prelude::*}; @@ -24,25 +24,23 @@ impl UserState for ClientState { id: CUBE_HANDLE, }); - // Create an entity - let cube_ent = io.create_entity(); - // Attach a Transform component (which defaults to the origin) - io.add_component(cube_ent, &Transform::default()); - // Attach the Render component, which details how the object should be drawn - // Note that we use CUBE_HANDLE here, to tell the rendering engine to draw the cube - io.add_component( - cube_ent, - &Render::new(CUBE_HANDLE).primitive(Primitive::Triangles), - ); - // Attach the Synchronized component, which will copy the object to clients - //io.add_component(cube_ent, &Synchronized); - Self } } impl UserState for ServerState { fn new(io: &mut EngineIo, _sched: &mut EngineSchedule) -> Self { + // Create an entity + io.create_entity() + // Attach a Transform component (which defaults to the origin) + .add_component(Transform::default()) + // Attach the Render component, which details how the object should be drawn + // Note that we use CUBE_HANDLE here, to tell the rendering engine to draw the cube + .add_component(Render::new(CUBE_HANDLE)) + // Attach the Synchronized component, which will copy the object to clients + .add_component(Synchronized) + .build(); + Self } } diff --git a/example_plugins/ui_example/src/client.rs b/example_plugins/ui_example/src/client.rs index 8b51e2b9..e786b0cf 100644 --- a/example_plugins/ui_example/src/client.rs +++ b/example_plugins/ui_example/src/client.rs @@ -1,10 +1,7 @@ -use cimvr_common::{ - render::{Mesh, MeshHandle, UploadMesh, Vertex}, - ui::{Schema, State, UiHandle, UiStateHelper, UiUpdate}, -}; -use cimvr_engine_interface::{dbg, pkg_namespace, prelude::*}; +use cimvr_common::ui::{Schema, State, UiHandle, UiStateHelper, UiUpdate}; +use cimvr_engine_interface::{dbg, prelude::*}; -use crate::{ChangeColor, CUBE_MESH}; +use crate::ChangeColor; pub struct ClientState { ui: UiStateHelper, @@ -15,15 +12,10 @@ impl UserState for ClientState { fn new(io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { let mut ui = UiStateHelper::new(); - io.send(&UploadMesh { - mesh: cube(), - id: CUBE_MESH, - }); - - sched.add_system( - Self::ui_update, - SystemDescriptor::new(Stage::Update).subscribe::(), - ); + sched + .add_system(Self::ui_update) + .subscribe::() + .build(); let test_element = ui.add( io, @@ -67,22 +59,3 @@ impl ClientState { } } } - -fn cube() -> Mesh { - let vertices = vec![ - Vertex::new([-1.0, -1.0, -1.0], [0.0, 1.0, 1.0]), - Vertex::new([1.0, -1.0, -1.0], [1.0, 0.0, 1.0]), - Vertex::new([1.0, 1.0, -1.0], [1.0, 1.0, 0.0]), - Vertex::new([-1.0, 1.0, -1.0], [0.0, 1.0, 1.0]), - Vertex::new([-1.0, -1.0, 1.0], [1.0, 0.0, 1.0]), - Vertex::new([1.0, -1.0, 1.0], [1.0, 1.0, 0.0]), - Vertex::new([1.0, 1.0, 1.0], [0.0, 1.0, 1.0]), - Vertex::new([-1.0, 1.0, 1.0], [1.0, 0.0, 1.0]), - ]; - - let indices = vec![ - 3, 1, 0, 2, 1, 3, 2, 5, 1, 6, 5, 2, 6, 4, 5, 7, 4, 6, 7, 0, 4, 3, 0, 7, 7, 2, 3, 6, 2, 7, - 0, 5, 4, 1, 5, 0, - ]; - Mesh { vertices, indices } -} diff --git a/example_plugins/ui_example/src/lib.rs b/example_plugins/ui_example/src/lib.rs index a043fbd3..73c96a01 100644 --- a/example_plugins/ui_example/src/lib.rs +++ b/example_plugins/ui_example/src/lib.rs @@ -1,4 +1,3 @@ -use cimvr_common::render::MeshHandle; use cimvr_engine_interface::{make_app_state, pkg_namespace, prelude::*}; use serde::{Deserialize, Serialize}; @@ -9,8 +8,6 @@ use server::ServerState; make_app_state!(ClientState, ServerState); -const CUBE_MESH: MeshHandle = MeshHandle::new(pkg_namespace!("Cube")); - #[derive(Clone, Debug, Serialize, Deserialize)] pub struct ChangeColor { rgb: [f32; 3], diff --git a/example_plugins/ui_example/src/server.rs b/example_plugins/ui_example/src/server.rs index ba229432..e8f9c624 100644 --- a/example_plugins/ui_example/src/server.rs +++ b/example_plugins/ui_example/src/server.rs @@ -1,43 +1,34 @@ -use crate::{ChangeColor, CUBE_MESH}; +use crate::ChangeColor; use cimvr_common::{ render::{Render, RenderExtra}, ui::UiUpdate, - Transform, }; -use cimvr_engine_interface::dbg; use cimvr_engine_interface::prelude::*; -pub struct ServerState { - cube: EntityId, -} +pub struct ServerState; impl UserState for ServerState { - fn new(io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { - let cube = io.create_entity(); - io.add_component(cube, &Transform::default()); - io.add_component(cube, &Synchronized); - io.add_component(cube, &Render::new(CUBE_MESH)); - dbg!(cube); - - sched.add_system( - Self::update, - SystemDescriptor::new(Stage::Update) - .query::(Access::Read) - .subscribe::() - .subscribe::(), - ); + fn new(_io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { + sched + .add_system(Self::update) + .query::(Access::Read) + .subscribe::() + .subscribe::() + .build(); - Self { cube } + Self } } impl ServerState { - fn update(&mut self, io: &mut EngineIo, _query: &mut QueryResult) { + fn update(&mut self, io: &mut EngineIo, query: &mut QueryResult) { if let Some(ChangeColor { rgb }) = io.inbox_first() { - let mut extra = [0.; 4 * 4]; - extra[..3].copy_from_slice(&rgb); - extra[3] = 1.; - io.add_component(self.cube, &RenderExtra(extra)); + for entity in query.iter() { + let mut extra = [0.; 4 * 4]; + extra[..3].copy_from_slice(&rgb); + extra[3] = 1.; + io.add_component(entity, RenderExtra(extra)); + } } } } From bc6c4a9a7d91a81ee7421e117a0ac937473042ec Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 03:02:22 -0700 Subject: [PATCH 19/28] Start adding dynamic edit interface --- client/src/component_ui.rs | 1 + engine/src/dyn_edit.rs | 7 +++++++ engine/src/ecs.rs | 6 ++++++ engine/src/lib.rs | 1 + engine_interface/src/dyn_edit.rs | 26 ++++++++++++++++++++++++++ engine_interface/src/lib.rs | 3 +++ 6 files changed, 44 insertions(+) create mode 100644 engine/src/dyn_edit.rs create mode 100644 engine_interface/src/dyn_edit.rs diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 4f0e742a..48265ca5 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -81,6 +81,7 @@ impl ComponentUi { ui.label(format!("{}", component.id)); if editor(&mut dynamic, ui) { + // TODO: Replace with edit command! let Some(data) = engine.ecs().get_mut(entity, component) else { continue }; serialize_into(std::io::Cursor::new(data), &dynamic).unwrap(); } diff --git a/engine/src/dyn_edit.rs b/engine/src/dyn_edit.rs new file mode 100644 index 00000000..1b170e7a --- /dev/null +++ b/engine/src/dyn_edit.rs @@ -0,0 +1,7 @@ +use cimvr_engine_interface::{dyn_edit::DynamicEdit, prelude::EntityId}; + +use crate::ecs::Ecs; + +fn extract_dyn(ecs: &Ecs, entity: EntityId) -> DynamicEdit { + todo!() +} diff --git a/engine/src/ecs.rs b/engine/src/ecs.rs index dba89e74..63831068 100644 --- a/engine/src/ecs.rs +++ b/engine/src/ecs.rs @@ -237,6 +237,12 @@ impl Ecs { } */ + pub fn all_components(&self, entity: EntityId) -> impl Iterator { + self.map + .iter() + .filter_map(move |(comp, entities)| Some((comp, entities.get(&entity)?.as_slice()))) + } + pub fn export(&mut self, query: &[QueryComponent]) -> EcsMap { let entities: Vec = self.query(query).into_iter().collect(); diff --git a/engine/src/lib.rs b/engine/src/lib.rs index f89ad36c..48509f0c 100644 --- a/engine/src/lib.rs +++ b/engine/src/lib.rs @@ -1,3 +1,4 @@ +pub mod dyn_edit; pub mod ecs; pub mod hotload; pub mod network; diff --git a/engine_interface/src/dyn_edit.rs b/engine_interface/src/dyn_edit.rs new file mode 100644 index 00000000..4612838b --- /dev/null +++ b/engine_interface/src/dyn_edit.rs @@ -0,0 +1,26 @@ +use std::collections::HashMap; + +use crate::pkg_namespace; +use crate::prelude::*; +use serde::{Deserialize, Serialize}; + +// TODO: Add metadata for edit requests, so that servers can intelligently filter... + +/// A dynamic edit request sent to the server +#[derive(Message, Serialize, Deserialize, Clone)] +#[locality("Remote")] +pub struct DynamicEditRequest(pub DynamicEdit); + +/// A dynamic edit command sent to the engine +#[derive(Message, Serialize, Deserialize, Clone)] +#[locality("Local")] +pub struct DynamicEditCommand(pub DynamicEdit); + +/// A dynamic edit operation +#[derive(Serialize, Deserialize, Clone)] +pub struct DynamicEdit { + /// Target entity + pub entity: EntityId, + /// Full component data state of this entity + pub components: HashMap>, +} diff --git a/engine_interface/src/lib.rs b/engine_interface/src/lib.rs index c0d08c57..3f6f829d 100644 --- a/engine_interface/src/lib.rs +++ b/engine_interface/src/lib.rs @@ -34,6 +34,9 @@ pub mod network; /// PCG algorithm for generating random universally-unique entity IDs pub mod pcg; +/// Dynamic editing feedback to server +pub mod dyn_edit; + /// Convenience imports for the lazy // #[macro_use] pub mod prelude { From 0749e2856812f97a85ca32348ad55c2a99575fcb Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 03:33:21 -0700 Subject: [PATCH 20/28] Start working on the interface for dynamic edits --- Cargo.lock | 9 ++++ Cargo.toml | 1 + client/src/component_ui.rs | 22 +++++++-- engine/src/dyn_edit.rs | 46 +++++++++++++++++-- engine/src/ecs.rs | 1 + engine_interface/src/lib.rs | 1 + .../dyn_edit_perms/.cargo/config.toml | 5 ++ example_plugins/dyn_edit_perms/.gitignore | 2 + example_plugins/dyn_edit_perms/Cargo.toml | 12 +++++ example_plugins/dyn_edit_perms/src/lib.rs | 29 ++++++++++++ 10 files changed, 121 insertions(+), 7 deletions(-) create mode 100644 example_plugins/dyn_edit_perms/.cargo/config.toml create mode 100644 example_plugins/dyn_edit_perms/.gitignore create mode 100644 example_plugins/dyn_edit_perms/Cargo.toml create mode 100644 example_plugins/dyn_edit_perms/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index a6f1aeeb..98ab3034 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -453,6 +453,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "dyn_edit_perms" +version = "0.1.0" +dependencies = [ + "cimvr_common", + "cimvr_engine_interface", + "serde", +] + [[package]] name = "ecs" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 43ca74e8..9174a11d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ members = [ "example_plugins/gamepad", "example_plugins/keyboard", "example_plugins/chat", + "example_plugins/dyn_edit_perms", ] # Causes a build issue with OpenXR if included in workspace diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 48265ca5..9682f4e5 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -1,7 +1,10 @@ use cimvr_engine::{ + dyn_edit::extract_dyn, interface::{ + component_id, + dyn_edit::{DynamicEditCommand, DynamicEditRequest}, kobble::{DynamicValue, Schema, SchemaDeserializer}, - prelude::{Access, ComponentId, EntityId, QueryComponent}, + prelude::{Access, Component, ComponentId, EntityId, QueryComponent, Synchronized}, serial::{deserialize, serialize, serialize_into}, ComponentSchema, }, @@ -81,9 +84,22 @@ impl ComponentUi { ui.label(format!("{}", component.id)); if editor(&mut dynamic, ui) { - // TODO: Replace with edit command! - let Some(data) = engine.ecs().get_mut(entity, component) else { continue }; + // Create a dynamic edit + let mut edit = extract_dyn(engine.ecs(), entity); + + // Write new data into it + let Some(data) = edit.components.get_mut(component) else { continue }; + data.fill(0); serialize_into(std::io::Cursor::new(data), &dynamic).unwrap(); + + // Request a dynamic edit locally + engine.send(DynamicEditCommand(edit.clone())); + + // If the synchronized component was attached, request a remote + // edit too + if edit.components.contains_key(&component_id::()) { + engine.send(DynamicEditRequest(edit.clone())); + } } } else { ui.label(format!("Failed to deserialize {}", component.id)); diff --git a/engine/src/dyn_edit.rs b/engine/src/dyn_edit.rs index 1b170e7a..c730f2b6 100644 --- a/engine/src/dyn_edit.rs +++ b/engine/src/dyn_edit.rs @@ -1,7 +1,45 @@ -use cimvr_engine_interface::{dyn_edit::DynamicEdit, prelude::EntityId}; +use crate::{ecs::Ecs, Engine}; +use cimvr_engine_interface::{ + dyn_edit::{DynamicEdit, DynamicEditCommand}, + prelude::EntityId, +}; -use crate::ecs::Ecs; +/// Extract a dynamic value from the ECS +pub fn extract_dyn(ecs: &Ecs, entity: EntityId) -> DynamicEdit { + DynamicEdit { + entity, + components: ecs + .all_components(entity) + .map(|(c, d)| (c.clone(), d.to_vec())) + .collect(), + } +} + +/// Insert a dynamic value into the ECS +pub fn insert_dyn(ecs: &mut Ecs, dynamic: &DynamicEdit) { + // Delete existing state + ecs.remove_entity(dynamic.entity); + ecs.import_entity(dynamic.entity); + + // Import components + for (comp_id, data) in &dynamic.components { + ecs.add_component_raw(dynamic.entity, comp_id, data); + } +} + +/// Dynamic edit command follower +pub struct DynamicEditor; + +impl DynamicEditor { + pub fn new(engine: &mut Engine) -> Self { + engine.subscribe::(); + Self + } -fn extract_dyn(ecs: &Ecs, entity: EntityId) -> DynamicEdit { - todo!() + /// Receive update events and apply them to the engine + pub fn update(engine: &mut Engine) { + for DynamicEditCommand(edit) in engine.inbox().collect::>() { + insert_dyn(engine.ecs(), &edit); + } + } } diff --git a/engine/src/ecs.rs b/engine/src/ecs.rs index 63831068..41cfeae6 100644 --- a/engine/src/ecs.rs +++ b/engine/src/ecs.rs @@ -237,6 +237,7 @@ impl Ecs { } */ + /// Get each component and its associated data on an entity pub fn all_components(&self, entity: EntityId) -> impl Iterator { self.map .iter() diff --git a/engine_interface/src/lib.rs b/engine_interface/src/lib.rs index 3f6f829d..a4c718d1 100644 --- a/engine_interface/src/lib.rs +++ b/engine_interface/src/lib.rs @@ -124,6 +124,7 @@ pub fn component_size_cached() -> usize { }) } +// TODO: This should be a method of Component! /// Get the ComponentId of a Component pub fn component_id() -> ComponentId { let size = component_size_cached::() diff --git a/example_plugins/dyn_edit_perms/.cargo/config.toml b/example_plugins/dyn_edit_perms/.cargo/config.toml new file mode 100644 index 00000000..fd1f2bee --- /dev/null +++ b/example_plugins/dyn_edit_perms/.cargo/config.toml @@ -0,0 +1,5 @@ +[build] +target = "wasm32-unknown-unknown" + +[alias] +test_pc = "test --target=x86_64-unknown-linux-gnu" diff --git a/example_plugins/dyn_edit_perms/.gitignore b/example_plugins/dyn_edit_perms/.gitignore new file mode 100644 index 00000000..4fffb2f8 --- /dev/null +++ b/example_plugins/dyn_edit_perms/.gitignore @@ -0,0 +1,2 @@ +/target +/Cargo.lock diff --git a/example_plugins/dyn_edit_perms/Cargo.toml b/example_plugins/dyn_edit_perms/Cargo.toml new file mode 100644 index 00000000..10442107 --- /dev/null +++ b/example_plugins/dyn_edit_perms/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "dyn_edit_perms" +version = "0.1.0" +edition = "2021" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +cimvr_common = { path = "../../common" } +cimvr_engine_interface = { path = "../../engine_interface" } +serde = { version = "1", features = ["derive"] } diff --git a/example_plugins/dyn_edit_perms/src/lib.rs b/example_plugins/dyn_edit_perms/src/lib.rs new file mode 100644 index 00000000..ea017efb --- /dev/null +++ b/example_plugins/dyn_edit_perms/src/lib.rs @@ -0,0 +1,29 @@ +use cimvr_engine_interface::{ + dyn_edit::{DynamicEditCommand, DynamicEditRequest}, + make_app_state, + prelude::*, +}; + +struct ServerState; + +impl ServerState { + fn update(&mut self, io: &mut EngineIo, _query: &mut QueryResult) { + // Automatically forward all edit requests into edit commands. + // Here you might filter by username, permissions, etc. + for DynamicEditRequest(edit) in io.inbox().collect::>() { + io.send(&DynamicEditCommand(edit)); + } + } +} + +impl UserState for ServerState { + fn new(_io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { + sched + .add_system(Self::update) + .subscribe::() + .build(); + Self + } +} + +make_app_state!(DummyUserState, ServerState); From a8bcb95872a971e67e941920b1e43af9a0607053 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 03:45:12 -0700 Subject: [PATCH 21/28] Implement dynamic edits into engine --- engine/src/dyn_edit.rs | 2 +- engine/src/lib.rs | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/engine/src/dyn_edit.rs b/engine/src/dyn_edit.rs index c730f2b6..013439a7 100644 --- a/engine/src/dyn_edit.rs +++ b/engine/src/dyn_edit.rs @@ -31,7 +31,7 @@ pub fn insert_dyn(ecs: &mut Ecs, dynamic: &DynamicEdit) { pub struct DynamicEditor; impl DynamicEditor { - pub fn new(engine: &mut Engine) -> Self { + pub fn sub(engine: &mut Engine) -> Self { engine.subscribe::(); Self } diff --git a/engine/src/lib.rs b/engine/src/lib.rs index 48509f0c..c42fee05 100644 --- a/engine/src/lib.rs +++ b/engine/src/lib.rs @@ -4,6 +4,7 @@ pub mod hotload; pub mod network; pub mod plugin; pub mod timing; +use dyn_edit::DynamicEditor; use serde::{Deserialize, Serialize}; use std::{collections::HashMap, path::PathBuf}; use timing::Timing; @@ -44,6 +45,8 @@ pub struct Engine { cfg: Config, /// Manages FrameTime time: Timing, + /// Dynamic value synchronization + dyn_edit: DynamicEditor, } /// Plugin management structure @@ -99,7 +102,8 @@ impl Engine { let ecs = Ecs::new(); - Ok(Self { + let mut inst = Self { + dyn_edit: DynamicEditor, time, wasm, indices: HashMap::new(), @@ -108,7 +112,11 @@ impl Engine { external_inbox: HashMap::new(), network_inbox: vec![], cfg, - }) + }; + + DynamicEditor::sub(&mut inst); + + Ok(inst) } /// Initialize plugin code. Must be called at least once! @@ -182,6 +190,11 @@ impl Engine { self.dispatch_plugin(stage, i)?; } + // TODO: ditto responsibility of something else + // OOP sucks why do I use it + // Synchronize dynamic edits + DynamicEditor::update(self); + // Distribute messages self.propagate(); From 22046a07db0be4f3449baf397bfe1a41a3f7e4d6 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 04:25:28 -0700 Subject: [PATCH 22/28] Ignore generic handles --- client/src/component_ui.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 9682f4e5..f7c626be 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -128,6 +128,28 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { false } DynamicValue::NewtypeStruct(name, field) => { + if name == "GenericHandle" { + return false; + } + + /* + dbg!(&name); + if name.ends_with("Id") { + fn shorten(n: N, name: &str) -> String { + format!("{} ({})", name, &format!("{:X}", n)[..6]) + } + match field.as_ref() { + DynamicValue::U8(v) => ui.label(shorten(v, name)), + DynamicValue::U16(v) => ui.label(shorten(v, name)), + DynamicValue::U32(v) => ui.label(shorten(v, name)), + DynamicValue::U64(v) => ui.label(shorten(v, name)), + DynamicValue::U128(v) => ui.label(shorten(v, name)), + _ => ui.label(name.clone()), + }; + return false; + } + */ + ui.horizontal(|ui| { ui.label(name.clone()); editor(field, ui) From 5311d7ad105c9909bb5f5889a812be75716a1f79 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 04:31:59 -0700 Subject: [PATCH 23/28] Smart entity selection --- client/src/component_ui.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index f7c626be..40d9f0ee 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -72,7 +72,22 @@ impl ComponentUi { ScrollArea::vertical().show(ui, |ui| { for &entity in &self.display { - ui.label(format!("{:?}", entity)); + let EntityId(id_number) = entity; + + if ui.button(format!("Entity {:X}", id_number)).clicked() { + // Set the selected components equal to those on the given Entity, + // and which have useable schema + self.selected = engine + .ecs() + .all_components(entity) + .map(|(c, _)| c.clone()) + .filter(|c| self.schema.contains_key(c)) + .collect(); + // Display only the selected entity + self.display = vec![entity]; + return; + } + for component in &sorted_components { let schema = self.schema[component].clone(); let Some(data) = engine.ecs().get_raw(entity, component) else { continue }; From 1217687b5c510aa520a3165e1a761ac196321974 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 04:38:15 -0700 Subject: [PATCH 24/28] Fix ID formatting --- client/src/component_ui.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 40d9f0ee..ab9de240 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -147,11 +147,9 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { return false; } - /* - dbg!(&name); if name.ends_with("Id") { fn shorten(n: N, name: &str) -> String { - format!("{} ({})", name, &format!("{:X}", n)[..6]) + format!("{} ({})", name, &format!("{:06X}", n)[..6]) } match field.as_ref() { DynamicValue::U8(v) => ui.label(shorten(v, name)), @@ -163,7 +161,6 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { }; return false; } - */ ui.horizontal(|ui| { ui.label(name.clone()); From 9e671dc0fda81c7a2cc81375d3d10f46d85b4760 Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Fri, 24 Mar 2023 04:51:41 -0700 Subject: [PATCH 25/28] Sort component ids --- client/src/component_ui.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index ab9de240..26de1a19 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -10,7 +10,7 @@ use cimvr_engine::{ }, Engine, }; -use egui::{Context, DragValue, ScrollArea, Ui}; +use egui::{Context, DragValue, ScrollArea, Ui, WidgetText}; use std::collections::{HashMap, HashSet}; pub struct ComponentUi { @@ -34,7 +34,9 @@ impl ComponentUi { // Component selector let mut needs_update = false; ui.label("Components:"); - for id in self.schema.keys() { + let mut sorted_keys: Vec = self.schema.keys().cloned().collect(); + sorted_keys.sort_by(|a, b| a.id.cmp(&b.id)); + for id in &sorted_keys { let has_id = self.selected.contains(id); let marker = if has_id { "[-] " } else { "" }; let button = ui.button(format!("{}{}", marker, id.id)); @@ -48,6 +50,11 @@ impl ComponentUi { needs_update = true; } } + + if ui.button("Clear").clicked() { + self.selected.clear(); + needs_update = true; + } ui.separator(); // Update displayed entities @@ -96,7 +103,7 @@ impl ComponentUi { if let Ok(SchemaDeserializer(mut dynamic)) = deserialize(std::io::Cursor::new(data)) { - ui.label(format!("{}", component.id)); + ui.label(component_text_fmt(&component.id)); if editor(&mut dynamic, ui) { // Create a dynamic edit @@ -280,3 +287,7 @@ fn edit_vector(value: &mut DynamicValue, ui: &mut Ui) -> bool { false } } + +fn component_text_fmt(name: &str) -> WidgetText { + WidgetText::from(name).strong() +} From 2234b2a997c78fdc3b1c0110701c61e7aa59833e Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Sun, 16 Apr 2023 22:18:33 -0700 Subject: [PATCH 26/28] update kobble --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 98ab3034..1829f9f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -820,7 +820,7 @@ dependencies = [ [[package]] name = "kobble" version = "0.1.0" -source = "git+https://github.com/ChatImproVR/Kobble.git#ff172717561a2ecf03cebe11d50866d160680400" +source = "git+https://github.com/ChatImproVR/Kobble.git#5054d71810510b11e8a9b3f2f307ef76e1539223" dependencies = [ "once_cell", "serde", From a65bced62615961c3e3a8f2d2066edb04c806cbb Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Mon, 17 Apr 2023 00:34:15 -0700 Subject: [PATCH 27/28] Make component UI compatible with the newest kobble version --- Cargo.lock | 2 +- client/Cargo.lock | 2 +- client/src/component_ui.rs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1829f9f7..1954a567 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -820,7 +820,7 @@ dependencies = [ [[package]] name = "kobble" version = "0.1.0" -source = "git+https://github.com/ChatImproVR/Kobble.git#5054d71810510b11e8a9b3f2f307ef76e1539223" +source = "git+https://github.com/ChatImproVR/Kobble.git#51c168dac16348f000c56b985cdcfe281c3074b8" dependencies = [ "once_cell", "serde", diff --git a/client/Cargo.lock b/client/Cargo.lock index 043cea10..d0000d33 100644 --- a/client/Cargo.lock +++ b/client/Cargo.lock @@ -1393,7 +1393,7 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" [[package]] name = "kobble" version = "0.1.0" -source = "git+https://github.com/ChatImproVR/Kobble.git#ff172717561a2ecf03cebe11d50866d160680400" +source = "git+https://github.com/ChatImproVR/Kobble.git#51c168dac16348f000c56b985cdcfe281c3074b8" dependencies = [ "once_cell", "serde", diff --git a/client/src/component_ui.rs b/client/src/component_ui.rs index 26de1a19..3d6e2ac9 100644 --- a/client/src/component_ui.rs +++ b/client/src/component_ui.rs @@ -175,7 +175,7 @@ fn editor(value: &mut DynamicValue, ui: &mut Ui) -> bool { }) .inner } - DynamicValue::Tuple(fields) => { + DynamicValue::UniformSequence(fields) | DynamicValue::Tuple(fields) => { let mut changed = false; for field_val in fields { ui.horizontal(|ui| { From 59afad13cfedf1ef5d38bcf1897bbbf6b4b2d40e Mon Sep 17 00:00:00 2001 From: Masterchef365 Date: Mon, 17 Apr 2023 02:05:30 -0700 Subject: [PATCH 28/28] Work on enabling component schema download --- engine_interface/src/dyn_edit.rs | 4 ++ example_plugins/dyn_edit_perms/src/lib.rs | 46 +++++++++++++++++++++-- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/engine_interface/src/dyn_edit.rs b/engine_interface/src/dyn_edit.rs index 4612838b..c98dc7b9 100644 --- a/engine_interface/src/dyn_edit.rs +++ b/engine_interface/src/dyn_edit.rs @@ -7,11 +7,13 @@ use serde::{Deserialize, Serialize}; // TODO: Add metadata for edit requests, so that servers can intelligently filter... /// A dynamic edit request sent to the server +/// Emitted by e.g. the component GUI to change entities containing the Synchronized component. #[derive(Message, Serialize, Deserialize, Clone)] #[locality("Remote")] pub struct DynamicEditRequest(pub DynamicEdit); /// A dynamic edit command sent to the engine +/// Emitted by e.g. the component GUI to locally change entities #[derive(Message, Serialize, Deserialize, Clone)] #[locality("Local")] pub struct DynamicEditCommand(pub DynamicEdit); @@ -21,6 +23,8 @@ pub struct DynamicEditCommand(pub DynamicEdit); pub struct DynamicEdit { /// Target entity pub entity: EntityId, + // TODO: This is a potentially harmful thing to expose. + // We should provide a wrapper around it! /// Full component data state of this entity pub components: HashMap>, } diff --git a/example_plugins/dyn_edit_perms/src/lib.rs b/example_plugins/dyn_edit_perms/src/lib.rs index ea017efb..6e5ba782 100644 --- a/example_plugins/dyn_edit_perms/src/lib.rs +++ b/example_plugins/dyn_edit_perms/src/lib.rs @@ -1,11 +1,25 @@ use cimvr_engine_interface::{ + dbg, dyn_edit::{DynamicEditCommand, DynamicEditRequest}, - make_app_state, + make_app_state, pkg_namespace, prelude::*, + println, ComponentSchema, }; +use serde::{Deserialize, Serialize}; struct ServerState; +impl UserState for ServerState { + fn new(_io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { + sched + .add_system(Self::update) + .subscribe::() + .subscribe::() + .build(); + Self + } +} + impl ServerState { fn update(&mut self, io: &mut EngineIo, _query: &mut QueryResult) { // Automatically forward all edit requests into edit commands. @@ -13,17 +27,41 @@ impl ServerState { for DynamicEditRequest(edit) in io.inbox().collect::>() { io.send(&DynamicEditCommand(edit)); } + + // The second purpose of this plugin: + // Receive component schema server-side, and forward them + // client-side for display/editing + for component_schema in io.inbox::().collect::>() { + io.send(&ComponentSchemaDownload(component_schema)); + } } } -impl UserState for ServerState { +#[derive(Message, Serialize, Deserialize, Debug)] +#[locality("Remote")] +struct ComponentSchemaDownload(ComponentSchema); + +struct ClientState; + +impl UserState for ClientState { fn new(_io: &mut EngineIo, sched: &mut EngineSchedule) -> Self { sched .add_system(Self::update) - .subscribe::() + .subscribe::() .build(); Self } } -make_app_state!(DummyUserState, ServerState); +impl ClientState { + fn update(&mut self, io: &mut EngineIo, _query: &mut QueryResult) { + // Download component schema data from server and make it available client-side. + for ComponentSchemaDownload(component_schema) in + io.inbox::().collect::>() + { + io.send(&component_schema); + } + } +} + +make_app_state!(ClientState, ServerState);