More mutations work

This commit is contained in:
JMS55 2023-12-10 15:44:27 -08:00
parent 0900104891
commit d8f688de37
7 changed files with 341 additions and 117 deletions

325
Cargo.lock generated
View file

@ -245,23 +245,33 @@ version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
dependencies = [ dependencies = [
"async-lock", "async-lock 3.2.0",
"async-task", "async-task",
"concurrent-queue", "concurrent-queue",
"fastrand", "fastrand 2.0.1",
"futures-lite", "futures-lite 2.1.0",
"slab", "slab",
] ]
[[package]] [[package]]
name = "async-fs" name = "async-fs"
version = "2.1.0" version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd1f344136bad34df1f83a47f3fd7f2ab85d75cb8a940af4ccf6d482a84ea01b" checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
dependencies = [ dependencies = [
"async-lock", "async-lock 2.8.0",
"autocfg",
"blocking", "blocking",
"futures-lite", "futures-lite 1.13.0",
]
[[package]]
name = "async-lock"
version = "2.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
dependencies = [
"event-listener 2.5.3",
] ]
[[package]] [[package]]
@ -334,7 +344,7 @@ checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
[[package]] [[package]]
name = "bevy" name = "bevy"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_internal", "bevy_internal",
] ]
@ -342,18 +352,18 @@ dependencies = [
[[package]] [[package]]
name = "bevy_a11y" name = "bevy_a11y"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"accesskit", "accesskit",
"bevy_app", "bevy_app",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
] ]
[[package]] [[package]]
name = "bevy_animation" name = "bevy_animation"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
@ -371,9 +381,9 @@ dependencies = [
[[package]] [[package]]
name = "bevy_app" name = "bevy_app"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_reflect", "bevy_reflect",
"bevy_tasks", "bevy_tasks",
@ -386,11 +396,11 @@ dependencies = [
[[package]] [[package]]
name = "bevy_asset" name = "bevy_asset"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"async-broadcast", "async-broadcast",
"async-fs", "async-fs",
"async-lock", "async-lock 2.8.0",
"bevy_app", "bevy_app",
"bevy_asset_macros", "bevy_asset_macros",
"bevy_ecs", "bevy_ecs",
@ -403,7 +413,7 @@ dependencies = [
"crossbeam-channel", "crossbeam-channel",
"downcast-rs", "downcast-rs",
"futures-io", "futures-io",
"futures-lite", "futures-lite 1.13.0",
"js-sys", "js-sys",
"parking_lot", "parking_lot",
"ron", "ron",
@ -417,9 +427,9 @@ dependencies = [
[[package]] [[package]]
name = "bevy_asset_macros" name = "bevy_asset_macros"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_macro_utils", "bevy_macro_utils 0.12.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.39", "syn 2.0.39",
@ -428,11 +438,11 @@ dependencies = [
[[package]] [[package]]
name = "bevy_audio" name = "bevy_audio"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_math", "bevy_math",
"bevy_reflect", "bevy_reflect",
@ -445,7 +455,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_core" name = "bevy_core"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_ecs", "bevy_ecs",
@ -459,12 +469,12 @@ dependencies = [
[[package]] [[package]]
name = "bevy_core_pipeline" name = "bevy_core_pipeline"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_core", "bevy_core",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_log", "bevy_log",
"bevy_math", "bevy_math",
@ -480,9 +490,20 @@ dependencies = [
[[package]] [[package]]
name = "bevy_derive" name = "bevy_derive"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_macro_utils", "bevy_macro_utils 0.12.0",
"quote",
"syn 2.0.39",
]
[[package]]
name = "bevy_derive"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f484318350462c58ba3942a45a656c1fd6b6e484a6b6b7abc3a787ad1a51e500"
dependencies = [
"bevy_macro_utils 0.12.1",
"quote", "quote",
"syn 2.0.39", "syn 2.0.39",
] ]
@ -490,7 +511,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_diagnostic" name = "bevy_diagnostic"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_core", "bevy_core",
@ -506,13 +527,14 @@ name = "bevy_dioxus"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"bevy", "bevy",
"bevy_mod_picking",
"dioxus", "dioxus",
] ]
[[package]] [[package]]
name = "bevy_ecs" name = "bevy_ecs"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"async-channel 1.9.0", "async-channel 1.9.0",
"bevy_ecs_macros", "bevy_ecs_macros",
@ -532,9 +554,9 @@ dependencies = [
[[package]] [[package]]
name = "bevy_ecs_macros" name = "bevy_ecs_macros"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_macro_utils", "bevy_macro_utils 0.12.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.39", "syn 2.0.39",
@ -543,16 +565,49 @@ dependencies = [
[[package]] [[package]]
name = "bevy_encase_derive" name = "bevy_encase_derive"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_macro_utils", "bevy_macro_utils 0.12.0",
"encase_derive_impl", "encase_derive_impl",
] ]
[[package]]
name = "bevy_eventlistener"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db8ee25ddf3d72e8501eb11d99870f7b6a484a111a91f52cef22c3e39302c9b0"
dependencies = [
"bevy_eventlistener_core",
"bevy_eventlistener_derive",
]
[[package]]
name = "bevy_eventlistener_core"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "790c6a7ff1f6857a2927becb24b24fe16817bb998903f44342e73c1ed720c369"
dependencies = [
"bevy_app",
"bevy_ecs",
"bevy_hierarchy",
"bevy_utils",
]
[[package]]
name = "bevy_eventlistener_derive"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9b1150b00713155ef8e9ba879ebbaaaaba43192eaf7fb87555ba1ceb21f71708"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.39",
]
[[package]] [[package]]
name = "bevy_gilrs" name = "bevy_gilrs"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_ecs", "bevy_ecs",
@ -567,7 +622,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_gizmos" name = "bevy_gizmos"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
@ -586,7 +641,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_gltf" name = "bevy_gltf"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"base64 0.13.1", "base64 0.13.1",
"bevy_animation", "bevy_animation",
@ -615,7 +670,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_hierarchy" name = "bevy_hierarchy"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_core", "bevy_core",
@ -629,7 +684,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_input" name = "bevy_input"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_ecs", "bevy_ecs",
@ -642,7 +697,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_internal" name = "bevy_internal"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_a11y", "bevy_a11y",
"bevy_animation", "bevy_animation",
@ -651,7 +706,7 @@ dependencies = [
"bevy_audio", "bevy_audio",
"bevy_core", "bevy_core",
"bevy_core_pipeline", "bevy_core_pipeline",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_diagnostic", "bevy_diagnostic",
"bevy_ecs", "bevy_ecs",
"bevy_gilrs", "bevy_gilrs",
@ -680,7 +735,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_log" name = "bevy_log"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"android_log-sys", "android_log-sys",
"bevy_app", "bevy_app",
@ -695,7 +750,20 @@ dependencies = [
[[package]] [[package]]
name = "bevy_macro_utils" name = "bevy_macro_utils"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [
"proc-macro2",
"quote",
"rustc-hash",
"syn 2.0.39",
"toml_edit 0.20.7",
]
[[package]]
name = "bevy_macro_utils"
version = "0.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e566640c6b6dced73d2006c764c2cffebe1a82be4809486c4a5d7b4b50efed4d"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -707,7 +775,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_math" name = "bevy_math"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"glam", "glam",
"serde", "serde",
@ -716,20 +784,39 @@ dependencies = [
[[package]] [[package]]
name = "bevy_mikktspace" name = "bevy_mikktspace"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"glam", "glam",
] ]
[[package]]
name = "bevy_mod_picking"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2392df63bc272d5a546633e0a19ef6d428173e3dd22bad0da0a59c6fddd6f2cf"
dependencies = [
"bevy_app",
"bevy_core",
"bevy_ecs",
"bevy_eventlistener",
"bevy_math",
"bevy_picking_core",
"bevy_picking_input",
"bevy_reflect",
"bevy_render",
"bevy_utils",
"bevy_window",
]
[[package]] [[package]]
name = "bevy_pbr" name = "bevy_pbr"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_core_pipeline", "bevy_core_pipeline",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_math", "bevy_math",
"bevy_reflect", "bevy_reflect",
@ -746,15 +833,50 @@ dependencies = [
"thread_local", "thread_local",
] ]
[[package]]
name = "bevy_picking_core"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0799488c4505d68886209afd77ff9c898b634abf7f97fffa8ae37a356cbc8ab2"
dependencies = [
"bevy_app",
"bevy_derive 0.12.1",
"bevy_ecs",
"bevy_eventlistener",
"bevy_math",
"bevy_reflect",
"bevy_render",
"bevy_utils",
"bevy_window",
]
[[package]]
name = "bevy_picking_input"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16a2b375461e3965c2bd4357d53c772eeafa4747812f54be09de373c0c203da4"
dependencies = [
"bevy_app",
"bevy_ecs",
"bevy_hierarchy",
"bevy_input",
"bevy_math",
"bevy_picking_core",
"bevy_reflect",
"bevy_render",
"bevy_utils",
"bevy_window",
]
[[package]] [[package]]
name = "bevy_ptr" name = "bevy_ptr"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
[[package]] [[package]]
name = "bevy_reflect" name = "bevy_reflect"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_math", "bevy_math",
"bevy_ptr", "bevy_ptr",
@ -772,9 +894,9 @@ dependencies = [
[[package]] [[package]]
name = "bevy_reflect_derive" name = "bevy_reflect_derive"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_macro_utils", "bevy_macro_utils 0.12.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.39", "syn 2.0.39",
@ -784,13 +906,13 @@ dependencies = [
[[package]] [[package]]
name = "bevy_render" name = "bevy_render"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"async-channel 1.9.0", "async-channel 1.9.0",
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_core", "bevy_core",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_encase_derive", "bevy_encase_derive",
"bevy_hierarchy", "bevy_hierarchy",
@ -809,7 +931,7 @@ dependencies = [
"codespan-reporting", "codespan-reporting",
"downcast-rs", "downcast-rs",
"encase", "encase",
"futures-lite", "futures-lite 1.13.0",
"hexasphere", "hexasphere",
"image", "image",
"js-sys", "js-sys",
@ -829,9 +951,9 @@ dependencies = [
[[package]] [[package]]
name = "bevy_render_macros" name = "bevy_render_macros"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_macro_utils", "bevy_macro_utils 0.12.0",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.39", "syn 2.0.39",
@ -840,17 +962,18 @@ dependencies = [
[[package]] [[package]]
name = "bevy_scene" name = "bevy_scene"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_hierarchy", "bevy_hierarchy",
"bevy_reflect", "bevy_reflect",
"bevy_render", "bevy_render",
"bevy_transform", "bevy_transform",
"bevy_utils", "bevy_utils",
"ron",
"serde", "serde",
"thiserror", "thiserror",
"uuid", "uuid",
@ -859,12 +982,12 @@ dependencies = [
[[package]] [[package]]
name = "bevy_sprite" name = "bevy_sprite"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_core_pipeline", "bevy_core_pipeline",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_log", "bevy_log",
"bevy_math", "bevy_math",
@ -884,20 +1007,20 @@ dependencies = [
[[package]] [[package]]
name = "bevy_tasks" name = "bevy_tasks"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"async-channel 1.9.0", "async-channel 1.9.0",
"async-executor", "async-executor",
"async-task", "async-task",
"concurrent-queue", "concurrent-queue",
"futures-lite", "futures-lite 1.13.0",
"wasm-bindgen-futures", "wasm-bindgen-futures",
] ]
[[package]] [[package]]
name = "bevy_text" name = "bevy_text"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"ab_glyph", "ab_glyph",
"bevy_app", "bevy_app",
@ -918,7 +1041,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_time" name = "bevy_time"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_ecs", "bevy_ecs",
@ -931,7 +1054,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_transform" name = "bevy_transform"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_app", "bevy_app",
"bevy_ecs", "bevy_ecs",
@ -944,13 +1067,13 @@ dependencies = [
[[package]] [[package]]
name = "bevy_ui" name = "bevy_ui"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_a11y", "bevy_a11y",
"bevy_app", "bevy_app",
"bevy_asset", "bevy_asset",
"bevy_core_pipeline", "bevy_core_pipeline",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_hierarchy", "bevy_hierarchy",
"bevy_input", "bevy_input",
@ -973,7 +1096,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_utils" name = "bevy_utils"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"ahash", "ahash",
"bevy_utils_proc_macros", "bevy_utils_proc_macros",
@ -990,7 +1113,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_utils_proc_macros" name = "bevy_utils_proc_macros"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -1000,7 +1123,7 @@ dependencies = [
[[package]] [[package]]
name = "bevy_window" name = "bevy_window"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"bevy_a11y", "bevy_a11y",
"bevy_app", "bevy_app",
@ -1015,13 +1138,13 @@ dependencies = [
[[package]] [[package]]
name = "bevy_winit" name = "bevy_winit"
version = "0.12.0" version = "0.12.0"
source = "git+https://github.com/JMS55/bevy?branch=query_new#cd2efa7033f0505260ea81ee7adc9a75c5b45f5a" source = "git+https://github.com/JMS55/bevy?branch=query_new_12#b7d4e386802c5f62ec9fd1d457753e734be486f8"
dependencies = [ dependencies = [
"accesskit_winit", "accesskit_winit",
"approx", "approx",
"bevy_a11y", "bevy_a11y",
"bevy_app", "bevy_app",
"bevy_derive", "bevy_derive 0.12.0",
"bevy_ecs", "bevy_ecs",
"bevy_hierarchy", "bevy_hierarchy",
"bevy_input", "bevy_input",
@ -1131,11 +1254,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
dependencies = [ dependencies = [
"async-channel 2.1.1", "async-channel 2.1.1",
"async-lock", "async-lock 3.2.0",
"async-task", "async-task",
"fastrand", "fastrand 2.0.1",
"futures-io", "futures-io",
"futures-lite", "futures-lite 2.1.0",
"piper", "piper",
"tracing", "tracing",
] ]
@ -1708,6 +1831,15 @@ dependencies = [
"pin-project-lite", "pin-project-lite",
] ]
[[package]]
name = "fastrand"
version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
dependencies = [
"instant",
]
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "2.0.1" version = "2.0.1"
@ -1808,13 +1940,28 @@ version = "0.3.29"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
[[package]]
name = "futures-lite"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
dependencies = [
"fastrand 1.9.0",
"futures-core",
"futures-io",
"memchr",
"parking",
"pin-project-lite",
"waker-fn",
]
[[package]] [[package]]
name = "futures-lite" name = "futures-lite"
version = "2.1.0" version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143"
dependencies = [ dependencies = [
"fastrand", "fastrand 2.0.1",
"futures-core", "futures-core",
"futures-io", "futures-io",
"parking", "parking",
@ -2198,9 +2345,9 @@ dependencies = [
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "1.0.9" version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
[[package]] [[package]]
name = "jni" name = "jni"
@ -2310,9 +2457,9 @@ dependencies = [
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.150" version = "0.2.151"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
[[package]] [[package]]
name = "libloading" name = "libloading"
@ -2864,7 +3011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
dependencies = [ dependencies = [
"atomic-waker", "atomic-waker",
"fastrand", "fastrand 2.0.1",
"futures-io", "futures-io",
] ]
@ -2927,9 +3074,9 @@ dependencies = [
[[package]] [[package]]
name = "profiling" name = "profiling"
version = "1.0.11" version = "1.0.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f89dff0959d98c9758c88826cc002e2c3d0b9dfac4139711d1f30de442f1139b" checksum = "1de09527cd2ea2c2d59fb6c2f8c1ab8c71709ed9d1b6d60b0e1c9fbb6fdcb33c"
[[package]] [[package]]
name = "quote" name = "quote"
@ -3094,9 +3241,9 @@ dependencies = [
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.15" version = "1.0.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
[[package]] [[package]]
name = "same-file" name = "same-file"
@ -3572,6 +3719,12 @@ version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]]
name = "waker-fn"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
[[package]] [[package]]
name = "walkdir" name = "walkdir"
version = "2.4.0" version = "2.4.0"
@ -4077,18 +4230,18 @@ checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
[[package]] [[package]]
name = "zerocopy" name = "zerocopy"
version = "0.7.29" version = "0.7.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5d075cf85bbb114e933343e087b92f2146bac0d55b534cbb8188becf0039948e" checksum = "306dca4455518f1f31635ec308b6b3e4eb1b11758cefafc782827d0aa7acb5c7"
dependencies = [ dependencies = [
"zerocopy-derive", "zerocopy-derive",
] ]
[[package]] [[package]]
name = "zerocopy-derive" name = "zerocopy-derive"
version = "0.7.29" version = "0.7.30"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86cd5ca076997b97ef09d3ad65efe811fa68c9e874cb636ccb211223a813b0c2" checksum = "be912bf68235a88fbefd1b73415cb218405958d1655b2ece9035a19920bdf6ba"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

View file

@ -4,8 +4,21 @@ version = "0.1.0"
edition = "2021" edition = "2021"
[dependencies] [dependencies]
bevy = { git = "https://github.com/JMS55/bevy", branch = "query_new" } bevy = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
dioxus = "0.4" dioxus = "0.4"
bevy_mod_picking = { version = "0.17", default-features = false }
[patch.crates-io]
bevy_app = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_core = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_ecs = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_hierarchy = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_input = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_math = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_reflect = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_render = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_utils = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
bevy_window = { git = "https://github.com/JMS55/bevy", branch = "query_new_12" }
[[example]] [[example]]
name = "basic" name = "basic"

View file

@ -5,11 +5,14 @@ use bevy::{
ui::node_bundles::NodeBundle, ui::node_bundles::NodeBundle,
DefaultPlugins, DefaultPlugins,
}; };
use bevy_dioxus::{dioxus::prelude::*, DioxusUiBundle, DioxusUiPlugin, DioxusUiRoot}; use bevy_dioxus::{
bevy_mod_picking::DefaultPickingPlugins, dioxus::prelude::*, DioxusUiBundle, DioxusUiPlugin,
DioxusUiRoot,
};
fn main() { fn main() {
App::new() App::new()
.add_plugins((DefaultPlugins, DioxusUiPlugin)) .add_plugins((DefaultPlugins, DioxusUiPlugin, DefaultPickingPlugins))
.add_systems(Startup, |mut commands: Commands| { .add_systems(Startup, |mut commands: Commands| {
commands.spawn(DioxusUiBundle { commands.spawn(DioxusUiBundle {
dioxus_ui_root: DioxusUiRoot::new(ui_root), dioxus_ui_root: DioxusUiRoot::new(ui_root),

View file

@ -3,15 +3,19 @@ use bevy::{
hierarchy::BuildChildren, hierarchy::BuildChildren,
prelude::default, prelude::default,
text::{Text, TextStyle}, text::{Text, TextStyle},
ui::node_bundles::{NodeBundle, TextBundle}, ui::{
utils::HashMap, node_bundles::{NodeBundle, TextBundle},
*,
},
utils::{HashMap, HashSet},
}; };
use dioxus::core::{ElementId, Mutation, Mutations, Template, TemplateNode}; use dioxus::core::{ElementId, Mutation, Mutations, Template, TemplateAttribute, TemplateNode};
pub fn apply_mutations( pub fn apply_mutations(
mutations: Mutations, mutations: Mutations,
hierarchy: &mut HashMap<(Entity, u8), Entity>, hierarchy: &mut HashMap<(Entity, u8), Entity>,
element_id_to_bevy_ui_entity: &mut HashMap<ElementId, Entity>, element_id_to_bevy_ui_entity: &mut HashMap<ElementId, Entity>,
event_listeners: &mut HashSet<(Event, ElementId)>,
templates: &mut HashMap<String, BevyTemplate>, templates: &mut HashMap<String, BevyTemplate>,
root_entity: Entity, root_entity: Entity,
commands: &mut Commands, commands: &mut Commands,
@ -23,14 +27,13 @@ pub fn apply_mutations(
); );
} }
let map = element_id_to_bevy_ui_entity; element_id_to_bevy_ui_entity.insert(ElementId(0), root_entity);
map.insert(ElementId(0), root_entity);
let mut stack = vec![root_entity]; let mut stack = vec![root_entity];
for edit in mutations.edits { for edit in mutations.edits {
match edit { match edit {
Mutation::AppendChildren { id, m } => { Mutation::AppendChildren { id, m } => {
let mut parent = commands.entity(map[&id]); let mut parent = commands.entity(element_id_to_bevy_ui_entity[&id]);
let parent_existing_children_count = let parent_existing_children_count =
hierarchy.keys().filter(|(p, _)| *p == parent.id()).count(); hierarchy.keys().filter(|(p, _)| *p == parent.id()).count();
for i in 1..=m { for i in 1..=m {
@ -47,7 +50,7 @@ pub fn apply_mutations(
Mutation::CreateTextNode { value, id } => { Mutation::CreateTextNode { value, id } => {
let entity = BevyTemplateNode::from_dioxus(&TemplateNode::Text { text: value }) let entity = BevyTemplateNode::from_dioxus(&TemplateNode::Text { text: value })
.spawn(commands, hierarchy); .spawn(commands, hierarchy);
map.insert(id, entity); element_id_to_bevy_ui_entity.insert(id, entity);
stack.push(entity); stack.push(entity);
} }
Mutation::HydrateText { path, value, id } => { Mutation::HydrateText { path, value, id } => {
@ -58,11 +61,11 @@ pub fn apply_mutations(
commands commands
.entity(entity) .entity(entity)
.insert(Text::from_section(value, TextStyle::default())); .insert(Text::from_section(value, TextStyle::default()));
map.insert(id, entity); element_id_to_bevy_ui_entity.insert(id, entity);
} }
Mutation::LoadTemplate { name, index, id } => { Mutation::LoadTemplate { name, index, id } => {
let entity = templates[name].roots[index].spawn(commands, hierarchy); let entity = templates[name].roots[index].spawn(commands, hierarchy);
map.insert(id, entity); element_id_to_bevy_ui_entity.insert(id, entity);
stack.push(entity); stack.push(entity);
} }
Mutation::ReplaceWith { id, m } => todo!(), Mutation::ReplaceWith { id, m } => todo!(),
@ -76,10 +79,14 @@ pub fn apply_mutations(
ns, ns,
} => todo!(), } => todo!(),
Mutation::SetText { value, id } => todo!(), Mutation::SetText { value, id } => todo!(),
Mutation::NewEventListener { name, id } => todo!(), Mutation::NewEventListener { name, id } => {
Mutation::RemoveEventListener { name, id } => todo!(), event_listeners.insert((Event::from_dioxus(name), id));
}
Mutation::RemoveEventListener { name, id } => {
event_listeners.remove(&(Event::from_dioxus(name), id));
}
Mutation::Remove { id } => todo!(), Mutation::Remove { id } => todo!(),
Mutation::PushRoot { id } => todo!(), Mutation::PushRoot { id } => stack.push(element_id_to_bevy_ui_entity[&id]),
} }
} }
} }
@ -89,7 +96,7 @@ pub struct BevyTemplate {
} }
enum BevyTemplateNode { enum BevyTemplateNode {
Node { children: Box<[Self]> }, Node { style: Style, children: Box<[Self]> },
TextNode(Text), TextNode(Text),
} }
@ -111,7 +118,7 @@ impl BevyTemplateNode {
TemplateNode::Element { TemplateNode::Element {
tag, tag,
namespace: _, namespace: _,
attrs: _, attrs,
children, children,
} => { } => {
if *tag != "div" { if *tag != "div" {
@ -120,6 +127,7 @@ impl BevyTemplateNode {
); );
} }
Self::Node { Self::Node {
style: parse_style_attributes(attrs),
children: children.iter().map(Self::from_dioxus).collect(), children: children.iter().map(Self::from_dioxus).collect(),
} }
} }
@ -127,6 +135,7 @@ impl BevyTemplateNode {
Self::TextNode(Text::from_section(*text, TextStyle::default())) Self::TextNode(Text::from_section(*text, TextStyle::default()))
} }
TemplateNode::Dynamic { id: _ } => Self::Node { TemplateNode::Dynamic { id: _ } => Self::Node {
style: Style::default(),
children: Box::new([]), children: Box::new([]),
}, },
TemplateNode::DynamicText { id: _ } => { TemplateNode::DynamicText { id: _ } => {
@ -141,14 +150,17 @@ impl BevyTemplateNode {
hierarchy: &mut HashMap<(Entity, u8), Entity>, hierarchy: &mut HashMap<(Entity, u8), Entity>,
) -> Entity { ) -> Entity {
match self { match self {
BevyTemplateNode::Node { children } => { BevyTemplateNode::Node { style, children } => {
// TODO: Can probably use with_children() instead // TODO: Can probably use with_children() instead
let children = children let children = children
.iter() .iter()
.map(|child| child.spawn(commands, hierarchy)) .map(|child| child.spawn(commands, hierarchy))
.collect::<Box<[_]>>(); .collect::<Box<[_]>>();
let parent = commands let parent = commands
.spawn(NodeBundle::default()) .spawn(NodeBundle {
style: style.clone(),
..default()
})
.push_children(&children) .push_children(&children)
.id(); .id();
for (i, child) in children.iter().enumerate() { for (i, child) in children.iter().enumerate() {
@ -165,3 +177,40 @@ impl BevyTemplateNode {
} }
} }
} }
#[derive(PartialEq, Eq, Hash, Clone, Copy)]
pub enum Event {
Click,
}
impl Event {
pub fn from_dioxus(event: &str) -> Self {
match event {
"click" => Self::Click,
_ => panic!("Encountered unsupported bevy_dioxus event `{event}`."),
}
}
}
fn parse_style_attributes(attributes: &[TemplateAttribute]) -> Style {
let mut style = Style::default();
for attribute in attributes {
if let TemplateAttribute::Static {
name,
value,
namespace: _,
} = attribute
{
// TODO: The rest of Style
match (*name, *value) {
("display", "flex") => style.display = Display::Flex,
("display", "grid") => style.display = Display::Grid,
("display", "none") => style.display = Display::None,
("position", "relative") => style.position_type = PositionType::Relative,
("position", "absolute") => style.position_type = PositionType::Absolute,
_ => panic!("Encountered unsupported bevy_dioxus attribute `{name}: {value}`."),
}
}
}
style
}

View file

@ -3,7 +3,7 @@ use crate::{
tick::EcsContext, tick::EcsContext,
}; };
use bevy::ecs::{ use bevy::ecs::{
query::{QueryState, ReadOnlyWorldQueryData, WorldQueryFilter}, query::{QueryState, ReadOnlyWorldQuery},
system::{IntoSystem, Query, Resource}, system::{IntoSystem, Query, Resource},
world::{unsafe_world_cell::UnsafeWorldCell, World}, world::{unsafe_world_cell::UnsafeWorldCell, World},
}; };
@ -16,12 +16,12 @@ pub trait DioxusUiHooks {
fn use_query<'a, Q>(&'a self) -> DioxusUiQuery<'a, Q, ()> fn use_query<'a, Q>(&'a self) -> DioxusUiQuery<'a, Q, ()>
where where
Q: ReadOnlyWorldQueryData; Q: ReadOnlyWorldQuery;
fn use_query_filtered<'a, Q, F>(&'a self) -> DioxusUiQuery<'a, Q, F> fn use_query_filtered<'a, Q, F>(&'a self) -> DioxusUiQuery<'a, Q, F>
where where
Q: ReadOnlyWorldQueryData, Q: ReadOnlyWorldQuery,
F: WorldQueryFilter; F: ReadOnlyWorldQuery;
fn use_system<S>(&self, system: S) -> DeferredSystem fn use_system<S>(&self, system: S) -> DeferredSystem
where where
@ -40,15 +40,15 @@ impl DioxusUiHooks for ScopeState {
fn use_query<'a, Q>(&'a self) -> DioxusUiQuery<'a, Q, ()> fn use_query<'a, Q>(&'a self) -> DioxusUiQuery<'a, Q, ()>
where where
Q: ReadOnlyWorldQueryData, Q: ReadOnlyWorldQuery,
{ {
Self::use_query_filtered(self) Self::use_query_filtered(self)
} }
fn use_query_filtered<'a, Q, F>(&'a self) -> DioxusUiQuery<'a, Q, F> fn use_query_filtered<'a, Q, F>(&'a self) -> DioxusUiQuery<'a, Q, F>
where where
Q: ReadOnlyWorldQueryData, Q: ReadOnlyWorldQuery,
F: WorldQueryFilter, F: ReadOnlyWorldQuery,
{ {
let world = EcsContext::get_world(self); let world = EcsContext::get_world(self);
DioxusUiQuery { DioxusUiQuery {
@ -66,15 +66,15 @@ impl DioxusUiHooks for ScopeState {
} }
} }
pub struct DioxusUiQuery<'a, Q: ReadOnlyWorldQueryData, F: WorldQueryFilter> { pub struct DioxusUiQuery<'a, Q: ReadOnlyWorldQuery, F: ReadOnlyWorldQuery> {
query_state: QueryState<Q, F>, query_state: QueryState<Q, F>,
world_cell: UnsafeWorldCell<'a>, world_cell: UnsafeWorldCell<'a>,
} }
impl<'a, Q, F> DioxusUiQuery<'a, Q, F> impl<'a, Q, F> DioxusUiQuery<'a, Q, F>
where where
Q: ReadOnlyWorldQueryData, Q: ReadOnlyWorldQuery,
F: WorldQueryFilter, F: ReadOnlyWorldQuery,
{ {
pub fn query(&self) -> Query<Q, F> { pub fn query(&self) -> Query<Q, F> {
unsafe { unsafe {

View file

@ -4,7 +4,7 @@ mod hooks;
mod tick; mod tick;
use self::{ use self::{
apply_mutations::BevyTemplate, apply_mutations::{BevyTemplate, Event},
deferred_system::DeferredSystemRegistry, deferred_system::DeferredSystemRegistry,
tick::{tick_dioxus_ui, VirtualDomUnsafe}, tick::{tick_dioxus_ui, VirtualDomUnsafe},
}; };
@ -12,7 +12,7 @@ use bevy::{
app::{App, Plugin, Update}, app::{App, Plugin, Update},
ecs::{bundle::Bundle, component::Component, entity::Entity}, ecs::{bundle::Bundle, component::Component, entity::Entity},
ui::node_bundles::NodeBundle, ui::node_bundles::NodeBundle,
utils::HashMap, utils::{HashMap, HashSet},
}; };
use dioxus::core::{Element, ElementId, Scope}; use dioxus::core::{Element, ElementId, Scope};
@ -20,6 +20,7 @@ pub use self::{
deferred_system::DeferredSystem, deferred_system::DeferredSystem,
hooks::{DioxusUiHooks, DioxusUiQuery}, hooks::{DioxusUiHooks, DioxusUiQuery},
}; };
pub use bevy_mod_picking;
pub use dioxus; pub use dioxus;
pub struct DioxusUiPlugin; pub struct DioxusUiPlugin;
@ -42,6 +43,7 @@ pub struct DioxusUiRoot {
virtual_dom: VirtualDomUnsafe, virtual_dom: VirtualDomUnsafe,
hierarchy: HashMap<(Entity, u8), Entity>, hierarchy: HashMap<(Entity, u8), Entity>,
element_id_to_bevy_ui_entity: HashMap<ElementId, Entity>, element_id_to_bevy_ui_entity: HashMap<ElementId, Entity>,
event_listeners: HashSet<(Event, ElementId)>,
templates: HashMap<String, BevyTemplate>, templates: HashMap<String, BevyTemplate>,
needs_rebuild: bool, needs_rebuild: bool,
} }
@ -52,6 +54,7 @@ impl DioxusUiRoot {
virtual_dom: VirtualDomUnsafe::new(root_component), virtual_dom: VirtualDomUnsafe::new(root_component),
hierarchy: HashMap::new(), hierarchy: HashMap::new(),
element_id_to_bevy_ui_entity: HashMap::new(), element_id_to_bevy_ui_entity: HashMap::new(),
event_listeners: HashSet::new(),
templates: HashMap::new(), templates: HashMap::new(),
needs_rebuild: true, needs_rebuild: true,
} }

View file

@ -29,6 +29,7 @@ pub fn tick_dioxus_ui(world: &mut World) {
virtual_dom, virtual_dom,
hierarchy, hierarchy,
element_id_to_bevy_ui_entity, element_id_to_bevy_ui_entity,
event_listeners,
templates, templates,
needs_rebuild, needs_rebuild,
} = &mut *dioxus_ui_root; } = &mut *dioxus_ui_root;
@ -46,6 +47,7 @@ pub fn tick_dioxus_ui(world: &mut World) {
virtual_dom.rebuild(), virtual_dom.rebuild(),
hierarchy, hierarchy,
element_id_to_bevy_ui_entity, element_id_to_bevy_ui_entity,
event_listeners,
templates, templates,
root_entity, root_entity,
&mut commands, &mut commands,
@ -57,6 +59,7 @@ pub fn tick_dioxus_ui(world: &mut World) {
virtual_dom.render_immediate(), virtual_dom.render_immediate(),
hierarchy, hierarchy,
element_id_to_bevy_ui_entity, element_id_to_bevy_ui_entity,
event_listeners,
templates, templates,
root_entity, root_entity,
&mut commands, &mut commands,