From cfbda24da7646026e98a76c94c8bde9ca57507e7 Mon Sep 17 00:00:00 2001 From: Mark Moissette Date: Mon, 5 Feb 2024 23:01:19 +0100 Subject: [PATCH] feat(tools/bevy_blueprints): bevy plugin + blender addon for components UI to more easily create components (#70) * adds a new crate: ```bevy_registry_export``` to be able to create a json import of the registered component/type definitions * adds a new Blender addon: ```bevy_components``` that takes that json data to generate custom UIs for components , to be to add & edit components easily in Blender * also adds component metadata per object for more advanced features * etc * updates to bevy_gltf_components & bevy_gltf_blueprints to add legacy_mode to support the "old"/current style component definitions * same with gltf_auto_export Blender add_on * closes #60 --- Cargo.toml | 2 + README-workflow-classic.md | 73 + README-workflow-ui.md | 40 + README.md | 104 +- crates/bevy_gltf_blueprints/Cargo.toml | 5 +- crates/bevy_gltf_blueprints/README.md | 25 +- crates/bevy_gltf_blueprints/src/lib.rs | 7 +- crates/bevy_gltf_components/Cargo.toml | 2 +- crates/bevy_gltf_components/README.md | 29 +- .../src/gltf_to_components.rs | 148 +- crates/bevy_gltf_components/src/lib.rs | 26 +- .../bevy_gltf_components/src/process_gltfs.rs | 18 +- crates/bevy_gltf_save_load/Cargo.toml | 4 +- crates/bevy_registry_export/Cargo.toml | 21 + crates/bevy_registry_export/LICENSE.md | 4 + crates/bevy_registry_export/LICENSE_APACHE.md | 201 + crates/bevy_registry_export/LICENSE_MIT.md | 21 + crates/bevy_registry_export/README.md | 130 + .../bevy_registry_export/src/export_types.rs | 267 + crates/bevy_registry_export/src/lib.rs | 48 + docs/bevy_components.png | Bin 0 -> 54455 bytes .../bevy_gltf_components/basic/src/main.rs | 2 +- .../basic_wasm/src/main.rs | 2 +- examples/bevy_gltf_save_load/basic/Cargo.toml | 2 +- .../bevy_registry_export/basic/Cargo.lock | 4629 +++++++ .../bevy_registry_export/basic/Cargo.toml | 14 + examples/bevy_registry_export/basic/README.md | 15 + .../basic/assets/assets_core.assets.ron | 1 + .../basic/assets/assets_game.assets.ron | 6 + .../basic/assets/basic.blend | Bin 0 -> 1401076 bytes .../basic/assets/models/World.glb | Bin 0 -> 12304 bytes .../basic/assets/models/library/Container.glb | Bin 0 -> 6016 bytes .../assets/models/library/Health_Pickup.glb | Bin 0 -> 5460 bytes .../assets/models/library/MagicTeapot.glb | Bin 0 -> 23956 bytes .../basic/assets/models/library/Pillar.glb | Bin 0 -> 3872 bytes .../basic/assets/models/library/Player.glb | Bin 0 -> 29176 bytes .../models/library/Unused_in_level_test.glb | Bin 0 -> 5568 bytes .../basic/assets/registry.json | 10548 ++++++++++++++++ .../basic/src/assets/assets_core.rs | 5 + .../basic/src/assets/assets_game.rs | 13 + .../basic/src/assets/mod.rs | 35 + .../src/core/camera/camera_replace_proxies.rs | 24 + .../basic/src/core/camera/camera_tracking.rs | 52 + .../basic/src/core/camera/mod.rs | 24 + .../core/lighting/lighting_replace_proxies.rs | 25 + .../basic/src/core/lighting/mod.rs | 18 + .../basic/src/core/mod.rs | 38 + .../basic/src/core/physics/controls.rs | 12 + .../basic/src/core/physics/mod.rs | 37 + .../core/physics/physics_replace_proxies.rs | 101 + .../basic/src/core/physics/utils.rs | 175 + .../basic/src/core/physics/utils_old.rs | 75 + .../basic/src/core/relationships/mod.rs | 11 + ...lationships_insert_dependant_components.rs | 15 + .../basic/src/game/in_game.rs | 132 + .../basic/src/game/in_main_menu.rs | 113 + .../basic/src/game/mod.rs | 90 + .../basic/src/game/picking.rs | 34 + .../bevy_registry_export/basic/src/main.rs | 33 + .../bevy_registry_export/basic/src/state.rs | 54 + .../basic/src/test_components.rs | 136 + tools/bevy_components/README.md | 199 + tools/bevy_components/TODO.md | 139 + tools/bevy_components/__init__.py | 143 + tools/bevy_components/blueprints.py | 41 + .../components}/__init__.py | 0 .../components/definitions_list.py | 56 + tools/bevy_components/components/lists.py | 170 + tools/bevy_components/components/metadata.py | 236 + tools/bevy_components/components/operators.py | 153 + tools/bevy_components/components/ui.py | 212 + tools/bevy_components/docs/add_component.png | Bin 0 -> 19691 bytes .../docs/blender_addon_install.png | Bin 0 -> 12012 bytes .../docs/blender_addon_install2.png | Bin 0 -> 5135 bytes .../docs/blender_addon_install_zip.png | Bin 0 -> 2895 bytes .../docs/complex_components2.png | Bin 0 -> 23319 bytes .../bevy_components/docs/components_list.png | Bin 0 -> 16676 bytes .../bevy_components/docs/components_list2.png | Bin 0 -> 35796 bytes tools/bevy_components/docs/configuration.png | Bin 0 -> 25577 bytes tools/bevy_components/docs/configuration2.png | Bin 0 -> 26458 bytes tools/bevy_components/docs/configuration3.png | Bin 0 -> 16328 bytes tools/bevy_components/docs/copy_component.png | Bin 0 -> 34640 bytes tools/bevy_components/docs/edit_component.png | Bin 0 -> 21317 bytes .../bevy_components/docs/edit_component2.png | Bin 0 -> 14206 bytes tools/bevy_components/docs/enums.png | Bin 0 -> 25408 bytes tools/bevy_components/docs/enums2.png | Bin 0 -> 19451 bytes .../docs/filter_components.png | Bin 0 -> 14115 bytes .../docs/invalid_components.png | Bin 0 -> 14119 bytes .../docs/missing_registry_data.png | Bin 0 -> 16931 bytes tools/bevy_components/docs/other_options.png | Bin 0 -> 8575 bytes tools/bevy_components/docs/other_options2.png | Bin 0 -> 4638 bytes .../bevy_components/docs/paste_component.png | Bin 0 -> 40389 bytes tools/bevy_components/docs/toggle_details.png | Bin 0 -> 22122 bytes .../docs/unregistered_types.png | Bin 0 -> 18251 bytes tools/bevy_components/docs/vecs_lists.png | Bin 0 -> 21126 bytes tools/bevy_components/helpers.py | 31 + tools/bevy_components/propGroups/__init__.py | 0 .../bevy_components/propGroups/conversions.py | 221 + tools/bevy_components/propGroups/operators.py | 0 .../propGroups/process_component.py | 95 + .../propGroups/process_enum.py | 69 + .../propGroups/process_list.py | 33 + .../propGroups/process_structs.py | 46 + .../propGroups/process_tupples.py | 53 + .../bevy_components/propGroups/prop_groups.py | 38 + tools/bevy_components/propGroups/utils.py | 60 + tools/bevy_components/registry/__init__.py | 0 tools/bevy_components/registry/operators.py | 84 + tools/bevy_components/registry/registry.py | 216 + tools/bevy_components/registry/ui.py | 116 + tools/gltf_auto_export/README.md | 6 + .../auto_export/export_blueprints.py | 3 +- .../auto_export/export_main_scenes.py | 7 +- .../gltf_auto_export/auto_export/operators.py | 4 +- .../auto_export/preferences.py | 6 + .../helpers/helpers_scenes.py | 10 +- tools/gltf_auto_export/ui/main.py | 1 + 117 files changed, 19916 insertions(+), 178 deletions(-) create mode 100644 README-workflow-classic.md create mode 100644 README-workflow-ui.md create mode 100644 crates/bevy_registry_export/Cargo.toml create mode 100644 crates/bevy_registry_export/LICENSE.md create mode 100644 crates/bevy_registry_export/LICENSE_APACHE.md create mode 100644 crates/bevy_registry_export/LICENSE_MIT.md create mode 100644 crates/bevy_registry_export/README.md create mode 100644 crates/bevy_registry_export/src/export_types.rs create mode 100644 crates/bevy_registry_export/src/lib.rs create mode 100644 docs/bevy_components.png create mode 100644 examples/bevy_registry_export/basic/Cargo.lock create mode 100644 examples/bevy_registry_export/basic/Cargo.toml create mode 100644 examples/bevy_registry_export/basic/README.md create mode 100644 examples/bevy_registry_export/basic/assets/assets_core.assets.ron create mode 100644 examples/bevy_registry_export/basic/assets/assets_game.assets.ron create mode 100644 examples/bevy_registry_export/basic/assets/basic.blend create mode 100644 examples/bevy_registry_export/basic/assets/models/World.glb create mode 100644 examples/bevy_registry_export/basic/assets/models/library/Container.glb create mode 100644 examples/bevy_registry_export/basic/assets/models/library/Health_Pickup.glb create mode 100644 examples/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb create mode 100644 examples/bevy_registry_export/basic/assets/models/library/Pillar.glb create mode 100644 examples/bevy_registry_export/basic/assets/models/library/Player.glb create mode 100644 examples/bevy_registry_export/basic/assets/models/library/Unused_in_level_test.glb create mode 100644 examples/bevy_registry_export/basic/assets/registry.json create mode 100644 examples/bevy_registry_export/basic/src/assets/assets_core.rs create mode 100644 examples/bevy_registry_export/basic/src/assets/assets_game.rs create mode 100644 examples/bevy_registry_export/basic/src/assets/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/core/camera/camera_replace_proxies.rs create mode 100644 examples/bevy_registry_export/basic/src/core/camera/camera_tracking.rs create mode 100644 examples/bevy_registry_export/basic/src/core/camera/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/core/lighting/lighting_replace_proxies.rs create mode 100644 examples/bevy_registry_export/basic/src/core/lighting/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/core/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/core/physics/controls.rs create mode 100644 examples/bevy_registry_export/basic/src/core/physics/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/core/physics/physics_replace_proxies.rs create mode 100644 examples/bevy_registry_export/basic/src/core/physics/utils.rs create mode 100644 examples/bevy_registry_export/basic/src/core/physics/utils_old.rs create mode 100644 examples/bevy_registry_export/basic/src/core/relationships/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/core/relationships/relationships_insert_dependant_components.rs create mode 100644 examples/bevy_registry_export/basic/src/game/in_game.rs create mode 100644 examples/bevy_registry_export/basic/src/game/in_main_menu.rs create mode 100644 examples/bevy_registry_export/basic/src/game/mod.rs create mode 100644 examples/bevy_registry_export/basic/src/game/picking.rs create mode 100644 examples/bevy_registry_export/basic/src/main.rs create mode 100644 examples/bevy_registry_export/basic/src/state.rs create mode 100644 examples/bevy_registry_export/basic/src/test_components.rs create mode 100644 tools/bevy_components/README.md create mode 100644 tools/bevy_components/TODO.md create mode 100644 tools/bevy_components/__init__.py create mode 100644 tools/bevy_components/blueprints.py rename tools/{gltf_auto_export/ui => bevy_components/components}/__init__.py (100%) create mode 100644 tools/bevy_components/components/definitions_list.py create mode 100644 tools/bevy_components/components/lists.py create mode 100644 tools/bevy_components/components/metadata.py create mode 100644 tools/bevy_components/components/operators.py create mode 100644 tools/bevy_components/components/ui.py create mode 100644 tools/bevy_components/docs/add_component.png create mode 100644 tools/bevy_components/docs/blender_addon_install.png create mode 100644 tools/bevy_components/docs/blender_addon_install2.png create mode 100644 tools/bevy_components/docs/blender_addon_install_zip.png create mode 100644 tools/bevy_components/docs/complex_components2.png create mode 100644 tools/bevy_components/docs/components_list.png create mode 100644 tools/bevy_components/docs/components_list2.png create mode 100644 tools/bevy_components/docs/configuration.png create mode 100644 tools/bevy_components/docs/configuration2.png create mode 100644 tools/bevy_components/docs/configuration3.png create mode 100644 tools/bevy_components/docs/copy_component.png create mode 100644 tools/bevy_components/docs/edit_component.png create mode 100644 tools/bevy_components/docs/edit_component2.png create mode 100644 tools/bevy_components/docs/enums.png create mode 100644 tools/bevy_components/docs/enums2.png create mode 100644 tools/bevy_components/docs/filter_components.png create mode 100644 tools/bevy_components/docs/invalid_components.png create mode 100644 tools/bevy_components/docs/missing_registry_data.png create mode 100644 tools/bevy_components/docs/other_options.png create mode 100644 tools/bevy_components/docs/other_options2.png create mode 100644 tools/bevy_components/docs/paste_component.png create mode 100644 tools/bevy_components/docs/toggle_details.png create mode 100644 tools/bevy_components/docs/unregistered_types.png create mode 100644 tools/bevy_components/docs/vecs_lists.png create mode 100644 tools/bevy_components/helpers.py create mode 100644 tools/bevy_components/propGroups/__init__.py create mode 100644 tools/bevy_components/propGroups/conversions.py create mode 100644 tools/bevy_components/propGroups/operators.py create mode 100644 tools/bevy_components/propGroups/process_component.py create mode 100644 tools/bevy_components/propGroups/process_enum.py create mode 100644 tools/bevy_components/propGroups/process_list.py create mode 100644 tools/bevy_components/propGroups/process_structs.py create mode 100644 tools/bevy_components/propGroups/process_tupples.py create mode 100644 tools/bevy_components/propGroups/prop_groups.py create mode 100644 tools/bevy_components/propGroups/utils.py create mode 100644 tools/bevy_components/registry/__init__.py create mode 100644 tools/bevy_components/registry/operators.py create mode 100644 tools/bevy_components/registry/registry.py create mode 100644 tools/bevy_components/registry/ui.py diff --git a/Cargo.toml b/Cargo.toml index 71a2c6a..c2a2ef9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ members = [ "crates/bevy_gltf_components", "crates/bevy_gltf_blueprints", "crates/bevy_gltf_save_load", + "crates/bevy_registry_export", "examples/bevy_gltf_components/basic/", "examples/bevy_gltf_components/basic_wasm/", "examples/bevy_gltf_blueprints/basic/", @@ -15,6 +16,7 @@ members = [ "examples/bevy_gltf_blueprints/multiple_levels_multiple_blendfiles", "examples/bevy_gltf_blueprints/materials/", "examples/bevy_gltf_save_load/basic/", + "examples/bevy_registry_export/basic" ] resolver = "2" diff --git a/README-workflow-classic.md b/README-workflow-classic.md new file mode 100644 index 0000000..3eab7e1 --- /dev/null +++ b/README-workflow-classic.md @@ -0,0 +1,73 @@ +# Workflow: classic + +The workflow goes as follows (once you got your Bevy code setup) + +- create & register all your components you want to be able to set from the Blender side (this is basic Bevy, no specific work needed) + +![component registration](./docs/component_registration.png) + +## Component creation +- Create an object / collection (for reuse) in Blender +- Go to object properties => add a property, and add your component data + - unit structs, enums, and more complex strucs / components are all supported, (if the fields are basic data types at least, + have not tried more complex ones yet, but should also work) + - for structs with no params (unit structs): use a **STRING** property & an empty value + - for structs with params: use a RON representation of your fields (see below) + - for tupple strucs you can use any of the built in Blender custom property types: Strings, Booleans, floats, Vectors, etc + + ![unit struct components in Blender](./docs/components_blender.png) + + In rust: + + ![unit struct components in Bevy](./docs/demo_simple_components.png) + + (the Rust struct for these components for reference is [here](./examples/basic/game.rs#34) ) + + + ![complex components in Blender](./docs/components_blender_parameters.png) + + In rust: + + ![complex components in Blender](./docs/camera_tracking_component.png) + + (the Rust struct for this component for reference is [here](./examples/basic/core/camera/camera_tracking.rs#21) ) + + There is an other examples of using various Component types: Enums, Tupple structs, strucs with fields etc [here](./examples/basic/test_components.rs), + even colors, Vecs (arrays), Vec2, Vec3 etc are all supported + + ![complex components in Blender](./docs/components_blender_parameters2.png) + +- for collections & their instances: + * I usually create a library scene with nested collections + * the leaf collections are the assets you use in your level + * add an empty called xxxx_components + * add the components as explained in the previous part + + ![blender collection asset](./docs/blender_collections.png) + + * In the Level/world itself, just create an instance of the collection (standard Blender, ie Shift+A -> collection instance -> pick the collection) + +## Exporting to gltf + +- export your level as a glb/gltf file : + - using Blender's default gltf exporter + !!**IMPORTANT** you need to check the following: + - custom properties + - cameras & lights if you want a complete level (as in this example) + ![gltf_export](./docs/gltf_export.png) + - or much better, using [gltf_auto_export](./tools/gltf_auto_export/) + +## Now use your gltf files in Bevy + +- load it in Bevy (see the various examples for this) +- you should see the components attached to your entities in Bevy + +![components in bevy](./docs/components_bevy.png) +![components in bevy](./docs/components_bevy2.png) +![components in bevy](./docs/components_bevy3.png) + + +> note: you get a warning if there are any unregistered components in your gltf file (they get ignored) +you will get a warning **per entity** + +![missing components warnings](./docs/component_warnings.png) diff --git a/README-workflow-ui.md b/README-workflow-ui.md new file mode 100644 index 0000000..268bb1d --- /dev/null +++ b/README-workflow-ui.md @@ -0,0 +1,40 @@ +# Workflow: UI + +The workflow goes as follows (once you got your Bevy code setup) + +## Bevy side +- create & register all your components you want to be able to set from the Blender side (this is basic Bevy, no specific work needed) +- follow the instructions in the [bevy_registry_export](./crates/bevy_registry_export/) to generate a registry export + +## Component creation + +Setup the Blender [bevy_components](./tools/bevy_components/README.md) add-on +to add & edit your components visually & reliably + +![bevy_components](./docs/bevy_components.png) + + +## Exporting to gltf + +- export your level as a glb/gltf file : + - using Blender's default gltf exporter + !!**IMPORTANT** you need to check the following: + - custom properties + - cameras & lights if you want a complete level (as in this example) + ![gltf_export](./docs/gltf_export.png) + - or much better, using [gltf_auto_export](./tools/gltf_auto_export/) + +## Now use your gltf files in Bevy + +- load it in Bevy (see the various examples for this) +- you should see the components attached to your entities in Bevy + +![components in bevy](./docs/components_bevy.png) +![components in bevy](./docs/components_bevy2.png) +![components in bevy](./docs/components_bevy3.png) + + +> note: you get a warning if there are any unregistered components in your gltf file (they get ignored) +you will get a warning **per entity** + +![missing components warnings](./docs/component_warnings.png) diff --git a/README.md b/README.md index abb17cd..4703885 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,8 @@ It also allows you to setup 'blueprints' in Blender by using collections (the re * Useful if you want to use Blender (or any editor allowing to export gltf with configurable gltf_extras) as your Editor * define Bevy components as custom properties in Blender (some visually , some using RON, though an older JSON version is also available) -* no plugin or extra tools needed in Blender (but I provide a [little Blender plugin](./tools/gltf_auto_export/README.md) to auto-export to gltf on save (and more !) if you want !) +* no plugin or extra tools needed in Blender (but I provide a [little Blender add-on](./tools/gltf_auto_export/README.md) to auto-export to gltf on save (and more !) if you want !) +* now also with a nice UI tool to add & edit Bevy components in [Blender](./tools/bevy_components/README.md) * define components in Blender Collections & override any of them in your collection instances if you want * ability to automatically turn your Blender collections into [gltf Blueprints](./crates/bevy_gltf_blueprints/README.md) for reuse * minimal setup & code, you can have something basic running fast @@ -29,18 +30,23 @@ It also allows you to setup 'blueprints' in Blender by using collections (the re ## Crates - [bevy_gltf_components](./crates/bevy_gltf_components/) This crate allows you to define components direclty inside gltf files and instanciate/inject the components on the Bevy side. -There is a [video tutorial/explanation](https://youtu.be/-lcScjQCA3c) if you want, or you can read the crate docs. -The examples for the crate are [here](./examples/bevy_gltf_components/) + + There is a [video tutorial/explanation](https://youtu.be/-lcScjQCA3c) if you want, or you can read the crate docs. + The examples for the crate are [here](./examples/bevy_gltf_components/) - [bevy_gltf_blueprints](./crates/bevy_gltf_blueprints/) This crate adds the ability to define Blueprints/Prefabs for Bevy inside gltf files and spawn them in Bevy. With the ability to override and add components when spawning, efficient "level" loading etc -There is a [video tutorial/explanation](https://youtu.be/CgyNtwgYwdM) for this one too, or you can read the crate docs -The examples for the crate are [here](./examples/bevy_gltf_blueprints/) -> Note: this is the recomended crate to use and uses ```bevy_gltf_components``` under the hood + + There is a [video tutorial/explanation](https://youtu.be/CgyNtwgYwdM) for this one too, or you can read the crate docs + The examples for the crate are [here](./examples/bevy_gltf_blueprints/) + > Note: this is the recomended crate to use and uses ```bevy_gltf_components``` under the hood - [bevy_gltf_save_load](./crates/bevy_gltf_save_load/) This crate adds the ability to save & load your game state in a relatively simple way, by leveraging the blueprint functionality of bevy_gltf_blueprints to only save a minimal subset of dynamic data, seperating dynamic & static parts of levels etc. The examples for the crate are [here](./examples/bevy_gltf_save_load/) -> Note: this uses ```bevy_gltf_blueprints``` under the hood + > Note: this uses ```bevy_gltf_blueprints``` under the hood + +- [bevy_registry_export](./crates/bevy_registry_export/) This crate adds the ability to export your project's Bevy registry to json, in order to be able to generate custom component UIs on the Blender side in the Blender [bevy_components](./tools/bevy_components/README.md) add-on + ## Tools @@ -51,6 +57,13 @@ The examples for the crate are [here](./examples/bevy_gltf_save_load/) Please read the [README]((./tools/gltf_auto_export/README.md)) of the add-on for installation & use instructions +### Blender: bevy_components + +- an add-on for Blender to allow easilly adding & editing Bevy components , using automatically generated UIs for each component + +Please read the [README]((./tools/bevy_components/README.md)) of the add-on for installation & use instructions + + ## Examples @@ -62,6 +75,12 @@ you can find all examples, by crate as seperate crates for clearer dependencies - [bevy_gltf_blueprints](./examples/bevy_gltf_blueprints/) * [basic](./examples/bevy_gltf_blueprints/basic/) more advanced example : use of ```bevy_gltf_blueprints``` to spawn a level and then populate it with entities coming from different gltf files, live (at runtime) spawning of entities etc * [animation](./examples/bevy_gltf_blueprints/animation/) how to use and trigger animations from gltf files (a feature of ```bevy_gltf_blueprints```) + * & lots more + +- [bevy_gltf_save_load](./examples/bevy_gltf_save_load/) + +- [bevy_registry_export](./examples/bevy_registry_export/) + ## Workflow @@ -70,74 +89,12 @@ The workflow goes as follows (once you got your Bevy code setup) - create & register all your components you want to be able to set from the Blender side (this is basic Bevy, no specific work needed) ![component registration](./docs/component_registration.png) -- Create an object / collection (for reuse) in Blender -- Go to object properties => add a property, and add your component data - - unit structs, enums, and more complex strucs / components are all supported, (if the fields are basic data types at least, - have not tried more complex ones yet, but should also work) - - for structs with no params (unit structs): use a **STRING** property & an empty value - - for structs with params: use a RON representation of your fields (see below) - - for tupple strucs you can use any of the built in Blender custom property types: Strings, Booleans, floats, Vectors, etc - - ![unit struct components in Blender](./docs/components_blender.png) - - In rust: - - ![unit struct components in Bevy](./docs/demo_simple_components.png) - - (the Rust struct for these components for reference is [here](./examples/basic/game.rs#34) ) - - - ![complex components in Blender](./docs/components_blender_parameters.png) - - In rust: - - ![complex components in Blender](./docs/camera_tracking_component.png) - - (the Rust struct for this component for reference is [here](./examples/basic/core/camera/camera_tracking.rs#21) ) - - There is an other examples of using various Component types: Enums, Tupple structs, strucs with fields etc [here](./examples/basic/test_components.rs), - even colors, Vecs (arrays), Vec2, Vec3 etc are all supported - - ![complex components in Blender](./docs/components_blender_parameters2.png) - -- for collections & their instances: - * I usually create a library scene with nested collections - * the leaf collections are the assets you use in your level - * add an empty called xxxx_components - * add the components as explained in the previous part - - ![blender collection asset](./docs/blender_collections.png) - - * In the Level/world itself, just create an instance of the collection (standard Blender, ie Shift+A -> collection instance -> pick the collection) - - -- export your level as a glb/gltf file : - - using Blender's default gltf exporter - !!**IMPORTANT** you need to check the following: - - custom properties - - cameras & lights if you want a complete level (as in this example) - ![gltf_export](./docs/gltf_export.png) - - or much better, using [gltf_auto_export](./tools/gltf_auto_export/) - - - -- load it in Bevy (see the demo main file for this) -- you should see the components attached to your entities in Bevy - -![components in bevy](./docs/components_bevy.png) -![components in bevy](./docs/components_bevy2.png) -![components in bevy](./docs/components_bevy3.png) - - -> note: you get a warning if there are any unregistered components in your gltf file (they get ignored) -you will get a warning **per entity** - -![missing components warnings](./docs/component_warnings.png) - +- then you have two options + - add your components to objects in Blender **manually** as **custom properties** : see [here](./README-workflow-classic.md) for more details + - add your components to objects in Blender **with a nice UI** see [here](./README-workflow-ui.md) for more details ## Limitations / issues -- some components have to be defined in ```text``` in Blender, might try using the AppTypeRegistry and some Python code on the Blender side for a nicer UI (although this loses the "fast & easy, no tooling" approach) - Some of `bevy_rapier`/physics code / ways to define colliders could perhaps be done better/visually within Blender (currently it also goes via RON) ## Future work @@ -153,6 +110,9 @@ Thanks to all the contributors helping out with this project ! Big kudos to you, - [GitGhillie](https://github.com/GitGhillie) - [Azorlogh](https://github.com/Azorlogh) +- [BSDGuyShawn](https://github.com/BSDGuyShawn) +- [yukkop](https://github.com/yukkop) +- [killercup](https://github.com/killercup) ## License diff --git a/crates/bevy_gltf_blueprints/Cargo.toml b/crates/bevy_gltf_blueprints/Cargo.toml index 15b99df..bee65b1 100644 --- a/crates/bevy_gltf_blueprints/Cargo.toml +++ b/crates/bevy_gltf_blueprints/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_gltf_blueprints" -version = "0.6.0" +version = "0.7.0" authors = ["Mark 'kaosat-dev' Moissette"] description = "Adds the ability to define Blueprints/Prefabs for [Bevy](https://bevyengine.org/) inside gltf files and spawn them in Bevy." homepage = "https://github.com/kaosat-dev/Blender_bevy_components_workflow" @@ -17,5 +17,6 @@ workspace = true bevy = { version = "0.12", default-features = false, features = ["bevy_asset", "bevy_scene", "bevy_gltf", "bevy_animation", "animation"] } [dependencies] -bevy_gltf_components = "0.2" +bevy_gltf_components = "0.3" +#bevy_gltf_components = { path = "../bevy_gltf_components" } bevy = { version = "0.12", default-features = false, features = ["bevy_asset", "bevy_scene", "bevy_gltf", "bevy_animation", "animation"] } diff --git a/crates/bevy_gltf_blueprints/README.md b/crates/bevy_gltf_blueprints/README.md index 48ac9c1..59c57c7 100644 --- a/crates/bevy_gltf_blueprints/README.md +++ b/crates/bevy_gltf_blueprints/README.md @@ -26,7 +26,7 @@ Here's a minimal usage example: # Cargo.toml [dependencies] bevy="0.12" -bevy_gltf_blueprints = { version = "0.6"} +bevy_gltf_blueprints = { version = "0.7"} ``` @@ -64,7 +64,7 @@ fn spawn_blueprint( Add the following to your `[dependencies]` section in `Cargo.toml`: ```toml -bevy_gltf_blueprints = "0.6" +bevy_gltf_blueprints = "0.7" ``` Or use `cargo add`: @@ -307,6 +307,25 @@ see https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/exa Generating optimised blueprints and material libraries can be automated using the latests version of the [Blender plugin](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/tools/gltf_auto_export) + +## Legacy mode + +Starting in version 0.7 there is a new parameter ```legacy_mode``` for backwards compatibility + +To disable the legacy mode: (enabled by default) + +```rust no_run +BlueprintsPlugin{legacy_mode: false} +``` + + +You **need** to disable legacy mode if you want to use the [```bevy_components```](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/tools_bevy_blueprints/tools/bevy_components) Blender addon + the [```bevy_registry_export crate```](https://crates.io/crates/bevy_registry_export) ! +As it create custom properties that are writen in real **ron** file format instead of a simplified version (the one in the legacy mode) + + +> Note: the legacy mode support will be dropped in future versions, and the default behaviour will be NO legacy mode + + ## Examples https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/bevy_gltf_blueprints/basic @@ -333,7 +352,7 @@ The main branch is compatible with the latest Bevy release, while the branch `be Compatibility of `bevy_gltf_blueprints` versions: | `bevy_gltf_blueprints` | `bevy` | | :-- | :-- | -| `0.3 - 0.6` | `0.12` | +| `0.3 - 0.7` | `0.12` | | `0.1 - 0.2` | `0.11` | | branch `main` | `0.12` | | branch `bevy_main` | `main` | diff --git a/crates/bevy_gltf_blueprints/src/lib.rs b/crates/bevy_gltf_blueprints/src/lib.rs index e335437..f6bd24b 100644 --- a/crates/bevy_gltf_blueprints/src/lib.rs +++ b/crates/bevy_gltf_blueprints/src/lib.rs @@ -78,6 +78,8 @@ impl fmt::Display for GltfFormat { #[derive(Debug, Clone)] /// Plugin for gltf blueprints pub struct BlueprintsPlugin { + pub legacy_mode: bool, // flag that gets passed on to bevy_gltf_components + pub format: GltfFormat, /// The base folder where library/blueprints assets are loaded from, relative to the executable. pub library_folder: PathBuf, @@ -91,6 +93,7 @@ pub struct BlueprintsPlugin { impl Default for BlueprintsPlugin { fn default() -> Self { Self { + legacy_mode: true, format: GltfFormat::GLB, library_folder: PathBuf::from("models/library"), aabbs: false, @@ -110,7 +113,9 @@ fn materials_library_enabled(blueprints_config: Res) -> bool { impl Plugin for BlueprintsPlugin { fn build(&self, app: &mut App) { - app.add_plugins(ComponentsFromGltfPlugin) + app.add_plugins(ComponentsFromGltfPlugin{ + legacy_mode: self.legacy_mode + }) .register_type::() .register_type::() .register_type::() diff --git a/crates/bevy_gltf_components/Cargo.toml b/crates/bevy_gltf_components/Cargo.toml index 56092bf..0d6c56b 100644 --- a/crates/bevy_gltf_components/Cargo.toml +++ b/crates/bevy_gltf_components/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_gltf_components" -version = "0.2.2" +version = "0.3.0" authors = ["Mark 'kaosat-dev' Moissette"] description = "Allows you to define [Bevy](https://bevyengine.org/) components direclty inside gltf files and instanciate the components on the Bevy side." homepage = "https://github.com/kaosat-dev/Blender_bevy_components_workflow" diff --git a/crates/bevy_gltf_components/README.md b/crates/bevy_gltf_components/README.md index 554ec64..7a6243d 100644 --- a/crates/bevy_gltf_components/README.md +++ b/crates/bevy_gltf_components/README.md @@ -24,7 +24,7 @@ Here's a minimal usage example: # Cargo.toml [dependencies] bevy="0.12" -bevy_gltf_components = { version = "0.2"} +bevy_gltf_components = { version = "0.3"} ``` @@ -33,7 +33,7 @@ bevy_gltf_components = { version = "0.2"} fn main() { App::new() .add_plugins(DefaultPlugins) - .add_plugin(ComponentsFromGltfPlugin) + .add_plugin(ComponentsFromGltfPlugin::default()) .add_system(spawn_level) .run(); } @@ -60,7 +60,7 @@ bevy_gltf_components = { version = "0.2"} Add the following to your `[dependencies]` section in `Cargo.toml`: ```toml -bevy_gltf_components = "0.2" +bevy_gltf_components = "0.3" ``` Or use `cargo add`: @@ -69,6 +69,27 @@ Or use `cargo add`: cargo add bevy_gltf_components ``` +## Configuration + +starting with version 0.3, this plugin is configurable +Use the default configuration: + +```rust no_run +ComponentsFromGltfPlugin::default() +``` + +Or disable the legacy mode: (enabled by default) + +```rust no_run +ComponentsFromGltfPlugin{legacy_mode: false} +``` + +You **need** to disable legacy mode if you want to use the [```bevy_components```](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/tools_bevy_blueprints/tools/bevy_components) Blender addon + the [```bevy_registry_export crate```](https://crates.io/crates/bevy_registry_export) ! +As it create custom properties that are writen in real **ron** file format +instead of a simplified version (the one in the legacy mode) + +> Note: the legacy mode support will be dropped in future versions, and the default behaviour will be NO legacy mode + ## SystemSet the ordering of systems is very important ! @@ -96,7 +117,7 @@ The main branch is compatible with the latest Bevy release, while the branch `be Compatibility of `bevy_gltf_components` versions: | `bevy_gltf_components` | `bevy` | | :-- | :-- | -| `0.2` | `0.12` | +| `0.2 - 0.3` | `0.12` | | `0.1` | `0.11` | | branch `main` | `0.12` | | branch `bevy_main` | `main` | diff --git a/crates/bevy_gltf_components/src/gltf_to_components.rs b/crates/bevy_gltf_components/src/gltf_to_components.rs index cf319f6..8a051f0 100644 --- a/crates/bevy_gltf_components/src/gltf_to_components.rs +++ b/crates/bevy_gltf_components/src/gltf_to_components.rs @@ -1,11 +1,12 @@ +use bevy::ecs::component::Component; +use bevy::render::color::Color; use core::ops::Deref; - use ron::Value; use serde::de::DeserializeSeed; use bevy::ecs::{entity::Entity, reflect::ReflectComponent}; use bevy::gltf::{Gltf, GltfExtras}; -use bevy::reflect::serde::UntypedReflectDeserializer; // ReflectSerializer +use bevy::reflect::serde::UntypedReflectDeserializer; use bevy::reflect::{Reflect, TypeInfo, TypeRegistry}; use bevy::scene::Scene; use bevy::utils::HashMap; @@ -16,9 +17,18 @@ use bevy::{ use super::capitalize_first_letter; +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestColor(Color); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct VecOfColors(Vec); + pub fn ronstring_to_reflect_component( ron_string: &String, type_registry: &TypeRegistry, + simplified_types: bool, ) -> Vec> { let lookup: HashMap = ron::from_str(ron_string.as_str()).unwrap(); let mut components: Vec> = Vec::new(); @@ -38,82 +48,72 @@ pub fn ronstring_to_reflect_component( type_registry.get_with_short_type_path(capitalized_type_name.as_str()) { debug!("TYPE INFO {:?}", type_registration.type_info()); - match type_registration.type_info() { - TypeInfo::TupleStruct(info) => { - // we handle tupple strucs with only one field differently, as Blender's custom properties with custom ui (float, int, bool, etc) always give us a tupple struct - if info.field_len() == 1 { - let field = info - .field_at(0) - .expect("we should always have at least one field here"); - let field_name = field.type_path(); - // TODO: find a way to cast with typeId instead of this matching - /*match field.type_id(){ - TypeId::of::() => { - println!("WE HAVE A f32"); - } - } - Vec3 => { - println!("WE HAVE A VEC3"); - let bla:Vec3 = ron::from_str(&parsed_value).unwrap(); - println!("bla {}", bla) - } - _ =>{} - }*/ - - let mut formated = parsed_value.clone(); - match field_name { - "f32" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "f64" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "u8" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "u16" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "u32" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "u64" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "u128" => { - formated = parsed_value.parse::().unwrap().to_string(); - } - "glam::Vec2" => { - let parsed: Vec = ron::from_str(&parsed_value).unwrap(); - formated = format!("(x:{},y:{})", parsed[0], parsed[1]); - } - "glam::Vec3" => { - let parsed: Vec = ron::from_str(&parsed_value).unwrap(); - formated = - format!("(x:{},y:{},z:{})", parsed[0], parsed[1], parsed[2]); - } - "bevy_render::color::Color" => { - let parsed: Vec = ron::from_str(&parsed_value).unwrap(); - if parsed.len() == 3 { + if simplified_types { + match type_registration.type_info() { + TypeInfo::TupleStruct(info) => { + // we handle tupple strucs with only one field differently, as Blender's custom properties with custom ui (float, int, bool, etc) always give us a tupple struct + if info.field_len() == 1 { + let field = info + .field_at(0) + .expect("we should always have at least one field here"); + let field_name = field.type_path(); + let mut formated = parsed_value.clone(); + match field_name { + "f32" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "f64" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "u8" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "u16" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "u32" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "u64" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "u128" => { + formated = parsed_value.parse::().unwrap().to_string(); + } + "glam::Vec2" => { + let parsed: Vec = ron::from_str(&parsed_value).unwrap(); + formated = format!("(x:{},y:{})", parsed[0], parsed[1]); + } + "glam::Vec3" => { + let parsed: Vec = ron::from_str(&parsed_value).unwrap(); formated = format!( - "Rgba(red:{},green:{},blue:{}, alpha: 1.0)", + "(x:{},y:{},z:{})", parsed[0], parsed[1], parsed[2] ); } - if parsed.len() == 4 { - formated = format!( - "Rgba(red:{},green:{},blue:{}, alpha:{})", - parsed[0], parsed[1], parsed[2], parsed[3] - ); + "bevy_render::color::Color" => { + let parsed: Vec = ron::from_str(&parsed_value).unwrap(); + if parsed.len() == 3 { + formated = format!( + "Rgba(red:{},green:{},blue:{}, alpha: 1.0)", + parsed[0], parsed[1], parsed[2] + ); + } + if parsed.len() == 4 { + formated = format!( + "Rgba(red:{},green:{},blue:{}, alpha:{})", + parsed[0], parsed[1], parsed[2], parsed[3] + ); + } } + _ => {} } - _ => {} - } - parsed_value = format!("({formated})"); + parsed_value = format!("({formated})"); + } } + _ => {} } - _ => {} } // println!("parsed value {}",parsed_value); @@ -128,7 +128,7 @@ pub fn ronstring_to_reflect_component( ); // usefull to determine what an entity looks like Serialized - /*let test_struct = Enemy::default(); + /*let test_struct = VecOfColors(vec![Color::Rgba { red: 0., green: 0.0, blue: 0.0, alpha: 0.0 }]);//TuppleTestColor(Color::Rgba { red: 0., green: 0.0, blue: 0.0, alpha: 0.0 }); let serializer = ReflectSerializer::new(&test_struct, &type_registry); let serialized = ron::ser::to_string_pretty(&serializer, ron::ser::PrettyConfig::default()).unwrap(); @@ -162,8 +162,13 @@ pub fn gltf_extras_to_components( gltf: &mut Gltf, scenes: &mut ResMut>, type_registry: impl Deref, + legacy_mode: bool ) { let mut added_components = 0; + let simplified_types = legacy_mode; + if simplified_types { + warn!("using simplified component definitions is deprecated since 0.3, prefer defining components with real ron values (use the bevy_components tool for Blender for simplicity) "); + } for (_name, scene) in &gltf.named_scenes { debug!("gltf: scene name {:?}", _name); @@ -173,7 +178,8 @@ pub fn gltf_extras_to_components( let mut entity_components: HashMap>> = HashMap::new(); for (entity, name, extras, parent) in query.iter(&scene.world) { debug!("Name: {}, entity {:?}, parent: {:?}", name, entity, parent); - let reflect_components = ronstring_to_reflect_component(&extras.value, &type_registry); + let reflect_components = + ronstring_to_reflect_component(&extras.value, &type_registry, simplified_types); added_components = reflect_components.len(); debug!("Found components {}", added_components); diff --git a/crates/bevy_gltf_components/src/lib.rs b/crates/bevy_gltf_components/src/lib.rs index 7f78a25..aaa312f 100644 --- a/crates/bevy_gltf_components/src/lib.rs +++ b/crates/bevy_gltf_components/src/lib.rs @@ -7,7 +7,7 @@ pub use gltf_to_components::*; pub mod process_gltfs; pub use process_gltfs::*; -use bevy::prelude::{App, IntoSystemConfigs, Plugin, SystemSet, Update}; +use bevy::{ecs::system::Resource, prelude::{App, IntoSystemConfigs, Plugin, SystemSet, Update}}; /// A Bevy plugin for extracting components from gltf files and automatically adding them to the relevant entities /// It will automatically run every time you load a gltf file @@ -34,7 +34,7 @@ use bevy::prelude::{App, IntoSystemConfigs, Plugin, SystemSet, Update}; /// ){ /// if keycode.just_pressed(KeyCode::Return) { /// commands.spawn(SceneBundle { -/// scene: asset_server.load("basic/models/level1.glb#Scene0"), +/// scene: asset_server.load("basic/models/level1.glb"), /// transform: Transform::from_xyz(2.0, 0.0, -5.0), /// ..Default::default() /// }); @@ -48,11 +48,29 @@ pub enum GltfComponentsSet { Injection, } -#[derive(Default)] -pub struct ComponentsFromGltfPlugin; +#[derive(Clone, Resource)] +pub struct GltfComponentsConfig { + pub(crate) legacy_mode: bool, +} + +pub struct ComponentsFromGltfPlugin { + pub legacy_mode: bool +} + +impl Default for ComponentsFromGltfPlugin { + fn default() -> Self { + Self { + legacy_mode: true + } + } +} + impl Plugin for ComponentsFromGltfPlugin { fn build(&self, app: &mut App) { app.insert_resource(GltfLoadingTracker::new()) + .insert_resource(GltfComponentsConfig { + legacy_mode: self.legacy_mode + }) .add_systems(Update, (track_new_gltf, process_loaded_scenes)) .add_systems( Update, diff --git a/crates/bevy_gltf_components/src/process_gltfs.rs b/crates/bevy_gltf_components/src/process_gltfs.rs index f83266c..18e26af 100644 --- a/crates/bevy_gltf_components/src/process_gltfs.rs +++ b/crates/bevy_gltf_components/src/process_gltfs.rs @@ -4,20 +4,20 @@ use bevy::gltf::Gltf; use bevy::utils::HashSet; use bevy::{asset::LoadState, prelude::*}; -use crate::gltf_extras_to_components; +use crate::{gltf_extras_to_components, GltfComponentsConfig}; #[derive(Resource)] /// component to keep track of gltfs' loading state pub struct GltfLoadingTracker { pub loading_gltfs: HashSet>, - pub loaded_gltfs: HashSet>, + pub processed_gltfs: HashSet, } impl GltfLoadingTracker { pub fn new() -> GltfLoadingTracker { GltfLoadingTracker { - loaded_gltfs: HashSet::new(), loading_gltfs: HashSet::new(), + processed_gltfs: HashSet::new(), } } pub fn add_gltf(&mut self, handle: Handle) { @@ -55,6 +55,7 @@ pub fn process_loaded_scenes( mut scenes: ResMut>, app_type_registry: Res, asset_server: Res, + gltf_components_config: Res, ) { let mut loaded_gltfs = Vec::new(); for gltf in &tracker.loading_gltfs { @@ -75,10 +76,15 @@ pub fn process_loaded_scenes( for gltf_handle in &loaded_gltfs { if let Some(gltf) = gltfs.get_mut(gltf_handle) { - gltf_extras_to_components(gltf, &mut scenes, &*type_registry); + gltf_extras_to_components(gltf, &mut scenes, &*type_registry, gltf_components_config.legacy_mode); + + if let Some(path) = gltf_handle.path() { + tracker.processed_gltfs.insert(path.to_string()); + } + } else { + warn!("could not find gltf asset, cannot process it"); } tracker.loading_gltfs.remove(gltf_handle); - tracker.loaded_gltfs.insert(gltf_handle.clone()); - debug!("Done loading scene"); + debug!("Done loading gltf file"); } } diff --git a/crates/bevy_gltf_save_load/Cargo.toml b/crates/bevy_gltf_save_load/Cargo.toml index 9006566..659726e 100644 --- a/crates/bevy_gltf_save_load/Cargo.toml +++ b/crates/bevy_gltf_save_load/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bevy_gltf_save_load" -version = "0.1.0" +version = "0.2.0" authors = ["Mark 'kaosat-dev' Moissette"] description = "Save & load your bevy games" homepage = "https://github.com/kaosat-dev/Blender_bevy_components_workflow" @@ -18,4 +18,4 @@ bevy = { version = "0.12", default-features = false, features = ["bevy_asset", " [dependencies] bevy = { version = "0.12", default-features = false, features = ["bevy_asset", "bevy_scene", "bevy_gltf"] } -bevy_gltf_blueprints = "0.6" +bevy_gltf_blueprints = "0.7" diff --git a/crates/bevy_registry_export/Cargo.toml b/crates/bevy_registry_export/Cargo.toml new file mode 100644 index 0000000..3aa0228 --- /dev/null +++ b/crates/bevy_registry_export/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "bevy_registry_export" +version = "0.1.0" +authors = ["Mark 'kaosat-dev' Moissette"] +description = "Allows you to define [Bevy](https://bevyengine.org/) components direclty inside gltf files and instanciate the components on the Bevy side." +homepage = "https://github.com/kaosat-dev/Blender_bevy_components_workflow" +repository = "https://github.com/kaosat-dev/Blender_bevy_components_workflow" +keywords = ["gamedev", "bevy", "assets", "gltf", "components"] +categories = ["game-development"] +edition = "2021" +license = "MIT OR Apache-2.0" + +[dev-dependencies] +bevy = { version = "0.12", default-features = false, features = ["bevy_asset", "bevy_scene", "bevy_gltf"] } + +[dependencies] +bevy = { version = "0.12", default-features = false, features = ["bevy_scene"] } +bevy_reflect = { version = "0.12.1", default-features = false } +bevy_app = { version = "0.12.1", default-features = false, features = ["bevy_reflect"] } +bevy_ecs = { version = "0.12.1", default-features = false, features = ["bevy_reflect"] } +serde_json = "1.0.108" \ No newline at end of file diff --git a/crates/bevy_registry_export/LICENSE.md b/crates/bevy_registry_export/LICENSE.md new file mode 100644 index 0000000..ad21aac --- /dev/null +++ b/crates/bevy_registry_export/LICENSE.md @@ -0,0 +1,4 @@ +This crate is available under either: + +* The [MIT License](./LICENSE_MIT) +* The [Apache License, Version 2.0](./LICENSE_APACHE) \ No newline at end of file diff --git a/crates/bevy_registry_export/LICENSE_APACHE.md b/crates/bevy_registry_export/LICENSE_APACHE.md new file mode 100644 index 0000000..43c47c4 --- /dev/null +++ b/crates/bevy_registry_export/LICENSE_APACHE.md @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2024] [Mark "kaosat-dev" Moissette] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/crates/bevy_registry_export/LICENSE_MIT.md b/crates/bevy_registry_export/LICENSE_MIT.md new file mode 100644 index 0000000..c7e0144 --- /dev/null +++ b/crates/bevy_registry_export/LICENSE_MIT.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Mark "kaosat-dev" Moissette + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/crates/bevy_registry_export/README.md b/crates/bevy_registry_export/README.md new file mode 100644 index 0000000..df85616 --- /dev/null +++ b/crates/bevy_registry_export/README.md @@ -0,0 +1,130 @@ +[![Crates.io](https://img.shields.io/crates/v/bevy_registry_export)](https://crates.io/crates/bevy_registry_export) +[![Docs](https://img.shields.io/docsrs/bevy_registry_export)](https://docs.rs/bevy_registry_export/latest/bevy_registry_export/) +[![License](https://img.shields.io/crates/l/bevy_registry_export)](https://github.com/kaosat-dev/Blender_bevy_components_workflow/blob/main/crates/bevy_registry_export/License.md) +[![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-released%20version-lightblue)](https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking) + +# bevy_registry_export + +This plugin allows you to create a Json export of all your components/ registered types. +Its main use case is as a backbone for the [```bevy_components``` Blender add-on](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/tools/bevy_components), that allows you to add & edit components directly in Blender, using the actual type definitions from Bevy +(and any of your custom types & components that you register in Bevy). + + +## Usage + +Here's a minimal usage example: + +```toml +# Cargo.toml +[dependencies] +bevy="0.12" +bevy_registry_export = "0.1" +``` + +```rust no_run +use bevy::prelude::*; +use bevy_registry_export::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins, + ExportRegistryPlugin::default() // will save your registry schema json file to assets/registry.json + )) + .run(); +} + +``` + +take a look at the [example]('https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/bevy_registry_export/basic/src/core/mod.rs) for more clarity + + +## Installation + +Add the following to your `[dependencies]` section in `Cargo.toml`: + +```toml +bevy_registry_export = "0.1" + +``` + +Or use `cargo add`: + +```toml +cargo add bevy_registry_export +``` + +## Setup + +```rust no_run +use bevy::prelude::*; +use bevy_registry_export::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins + ExportRegistryPlugin::default() + )) + .run(); +} + +``` + +you can also configure the output path + +```rust no_run +use bevy::prelude::*; +use bevy_registry_export::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins + ExportRegistryPlugin { + save_path: "assets/registry.json".into(), + ..Default::default() + }, + )) + .run(); +} + +``` + +## Usage + +- The output file will be generated in the ```Startup``` schedule whenever you run your app. +- Every time you compile & run your app, the output json file will be updated. + +## Examples + +All examples are here: + +> the examples use ```bevy_gltf_blueprints``` with the **legacy_mode** set to **FALSE** as the new custom properties generated by the Blender add-on require newer/ non legacy logic. + +- https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/bevy_registry_export/basic + + +## Compatible Bevy versions + +The main branch is compatible with the latest Bevy release, while the branch `bevy_main` tries to track the `main` branch of Bevy (PRs updating the tracked commit are welcome). + +Compatibility of `bevy_registry_export` versions: +| `bevy_registry_export` | `bevy` | `bevy_components (Blender add-on)` | +| :-- | :-- |:-- | +| `0.1 ` | `0.12` | `0.1.0` | +| branch `main` | `0.12` | `0.1.0` | +| branch `bevy_main` | `main` | `n/a` | + + +## Contributors + +Thanks to all the contributors helping out with this project ! Big kudos to you, contributions are always appreciated ! :) +A big shout out to [killercup](https://github.com/killercup), that did the bulk of the Bevy side code ! + +## License + +This crate, all its code, contents & assets is Dual-licensed under either of + +- Apache License, Version 2.0, ([LICENSE-APACHE](./LICENSE_APACHE.md) or https://www.apache.org/licenses/LICENSE-2.0) +- MIT license ([LICENSE-MIT](./LICENSE_MIT.md) or https://opensource.org/licenses/MIT) \ No newline at end of file diff --git a/crates/bevy_registry_export/src/export_types.rs b/crates/bevy_registry_export/src/export_types.rs new file mode 100644 index 0000000..06c0573 --- /dev/null +++ b/crates/bevy_registry_export/src/export_types.rs @@ -0,0 +1,267 @@ +use std::fs::File; + +use bevy::log::info; +use bevy_ecs::{ + reflect::{AppTypeRegistry, ReflectComponent, ReflectResource}, + world::World, +}; +use bevy_reflect::{TypeInfo, TypeRegistration, VariantInfo}; // TypePath // DynamicTypePath +use serde_json::{json, Map, Value}; + +use crate::ExportComponentsConfig; + +pub fn export_types(world: &mut World) { + let config = world + .get_resource::() + .expect("ExportComponentsConfig should exist at this stage"); + + let writer = + File::create(config.save_path.to_path_buf()).expect("should have created schema file"); + + let types = world.resource_mut::(); + let types = types.read(); + let schemas = types.iter().map(export_type).collect::>(); + + serde_json::to_writer_pretty( + writer, + &json!({ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "bevy component registry schema", + "$defs": schemas, + }), + ) + .expect("valid json"); + + info!("Done exporting registry schema") +} + +pub fn export_type(reg: &TypeRegistration) -> (String, Value) { + let t = reg.type_info(); + let binding = t.type_path_table(); + let short_name = binding.short_path(); + let mut schema = match t { + TypeInfo::Struct(info) => { + let properties = info + .iter() + .enumerate() + .map(|(idx, field)| { + ( + field.name().to_owned(), + add_min_max(json!({ "type": typ(field.type_path()) }), reg, idx, None), + ) + }) + .collect::>(); + + json!({ + "type": "object", + "typeInfo": "Struct", + "title": t.type_path(), + "properties": properties, + "additionalProperties": false, + "required": info + .iter() + .filter(|field| !field.type_path().starts_with("core::option::Option")) + .map(|field| field.name()) + .collect::>(), + }) + } + TypeInfo::Enum(info) => { + let simple = info + .iter() + .all(|variant| matches!(variant, VariantInfo::Unit(_))); + if simple { + json!({ + "type": "string", + "typeInfo": "Enum", + "title": t.type_path(), + "oneOf": info + .iter() + .map(|variant| match variant { + VariantInfo::Unit(v) => v.name(), + _ => unreachable!(), + }) + .collect::>(), + }) + } else { + let variants = info + .iter() + .enumerate() + .map(|(field_idx, variant)| match variant { + //let binding = t.type_path_table(); + //let short_name = binding.short_path(); + VariantInfo::Struct(v) => json!({ + "type": "object", + "typeInfo": "Struct", + "title": v.name(), + "short_name": v.name().split("::").last().unwrap_or(v.name()), + "properties": v + .iter() + .enumerate() + .map(|(variant_idx, field)| (field.name().to_owned(), add_min_max(json!({"type": typ(field.type_path()), "title": field.name()}), reg, field_idx, Some(variant_idx)))) + .collect::>(), + "additionalProperties": false, + "required": v + .iter() + .filter(|field| !field.type_path().starts_with("core::option::Option")) + .map(|field| field.name()) + .collect::>(), + }), + VariantInfo::Tuple(v) => json!({ + "type": "array", + "typeInfo": "Tuple", + "title": v.name(), + "short_name":v.name(), + "prefixItems": v + .iter() + .enumerate() + .map(|(variant_idx, field)| add_min_max(json!({"type": typ(field.type_path())}), reg, field_idx, Some(variant_idx))) + .collect::>(), + "items": false, + }), + VariantInfo::Unit(v) => json!({ + "title": v.name(), + }), + }) + .collect::>(); + + json!({ + "type": "object", + "typeInfo": "Enum", + "title": t.type_path(), + "oneOf": variants, + }) + } + } + TypeInfo::TupleStruct(info) => json!({ + "title": t.type_path(), + "type": "array", + "typeInfo": "TupleStruct", + "prefixItems": info + .iter() + .enumerate() + .map(|(idx, field)| add_min_max(json!({"type": typ(field.type_path())}), reg, idx, None)) + .collect::>(), + "items": false, + }), + TypeInfo::List(info) => { + json!({ + "title": t.type_path(), + "type": "array", + "typeInfo": "List", + "items": json!({"type": typ(info.item_type_path_table().path())}), + }) + } + TypeInfo::Array(info) => json!({ + "title": t.type_path(), + "type": "array", + "typeInfo": "Array", + "items": json!({"type": typ(info.item_type_path_table().path())}), + }), + TypeInfo::Map(info) => json!({ + "title": t.type_path(), + "type": "object", + "typeInfo": "Map", + "additionalProperties": json!({"type": typ(info.value_type_path_table().path())}), + }), + TypeInfo::Tuple(info) => json!({ + "title": t.type_path(), + "type": "array", + "typeInfo": "Tuple", + "prefixItems": info + .iter() + .enumerate() + .map(|(idx, field)| add_min_max(json!({"type": typ(field.type_path())}), reg, idx, None)) + .collect::>(), + "items": false, + }), + TypeInfo::Value(info) => json!({ + "title": t.type_path(), + "type": map_json_type(info.type_path()), + "typeInfo": "Value", + }), + }; + schema.as_object_mut().unwrap().insert( + "isComponent".to_owned(), + reg.data::().is_some().into(), + ); + schema.as_object_mut().unwrap().insert( + "isResource".to_owned(), + reg.data::().is_some().into(), + ); + + schema + .as_object_mut() + .unwrap() + .insert("short_name".to_owned(), short_name.into()); + + (t.type_path().to_owned(), schema) +} + +fn typ(t: &str) -> Value { + json!({ "$ref": format!("#/$defs/{t}") }) +} + +fn map_json_type(t: &str) -> Value { + match t { + "bool" => "boolean", + "u8" | "u16" | "u32" | "u64" | "u128" | "usize" => "uint", + "i8" | "i16" | "i32" | "i64" | "i128" | "isize" => "int", + "f32" | "f64" => "float", + "char" | "str" | "alloc::string::String" => "string", + _ => "object", + } + .into() +} + +fn add_min_max( + mut val: Value, + reg: &TypeRegistration, + field_index: usize, + variant_index: Option, +) -> Value { + #[cfg(feature = "support-inspector")] + fn get_min_max( + reg: &TypeRegistration, + field_index: usize, + variant_index: Option, + ) -> Option<(Option, Option)> { + use bevy_inspector_egui::inspector_options::{ + std_options::NumberOptions, ReflectInspectorOptions, Target, + }; + + reg.data::() + .and_then(|ReflectInspectorOptions(o)| { + o.get(if let Some(variant_index) = variant_index { + Target::VariantField { + variant_index, + field_index, + } + } else { + Target::Field(field_index) + }) + }) + .and_then(|o| o.downcast_ref::>()) + .map(|num| (num.min, num.max)) + } + + #[cfg(not(feature = "support-inspector"))] + fn get_min_max( + _reg: &TypeRegistration, + _field_index: usize, + _variant_index: Option, + ) -> Option<(Option, Option)> { + None + } + + let Some((min, max)) = get_min_max(reg, field_index, variant_index) else { + return val; + }; + let obj = val.as_object_mut().unwrap(); + if let Some(min) = min { + obj.insert("minimum".to_owned(), min.into()); + } + if let Some(max) = max { + obj.insert("maximum".to_owned(), max.into()); + } + val +} diff --git a/crates/bevy_registry_export/src/lib.rs b/crates/bevy_registry_export/src/lib.rs new file mode 100644 index 0000000..fa8e29d --- /dev/null +++ b/crates/bevy_registry_export/src/lib.rs @@ -0,0 +1,48 @@ +pub mod export_types; +use std::path::PathBuf; + +use bevy_app::Startup; +use bevy_ecs::system::Resource; +pub use export_types::*; + +use bevy::{ + prelude::{App, Plugin}, + scene::SceneFilter, +}; + +// Plugin configuration +#[derive(Clone, Resource)] +pub struct ExportComponentsConfig { + pub(crate) save_path: PathBuf, + #[allow(dead_code)] + pub(crate) component_filter: SceneFilter, // unused for now + #[allow(dead_code)] + pub(crate) resource_filter: SceneFilter, // unused for now +} + +pub struct ExportRegistryPlugin { + pub component_filter: SceneFilter, + pub resource_filter: SceneFilter, + pub save_path: PathBuf, +} + +impl Default for ExportRegistryPlugin { + fn default() -> Self { + Self { + component_filter: SceneFilter::default(), // unused for now + resource_filter: SceneFilter::default(), // unused for now + save_path: PathBuf::from("assets/registry.json"), + } + } +} + +impl Plugin for ExportRegistryPlugin { + fn build(&self, app: &mut App) { + app.insert_resource(ExportComponentsConfig { + save_path: self.save_path.clone(), + component_filter: self.component_filter.clone(), + resource_filter: self.resource_filter.clone(), + }) + .add_systems(Startup, export_types); + } +} diff --git a/docs/bevy_components.png b/docs/bevy_components.png new file mode 100644 index 0000000000000000000000000000000000000000..b26a4d1a0fe62e128f50f302acbe77ead2bce164 GIT binary patch literal 54455 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::default(), RapierDebugRenderPlugin::default(), // our custom plugins - ComponentsFromGltfPlugin, + ComponentsFromGltfPlugin::default(), CorePlugin, // reusable plugins DemoPlugin, // specific to our game ComponentsTestPlugin, // Showcases different type of components /structs diff --git a/examples/bevy_gltf_components/basic_wasm/src/main.rs b/examples/bevy_gltf_components/basic_wasm/src/main.rs index 4795411..8827730 100644 --- a/examples/bevy_gltf_components/basic_wasm/src/main.rs +++ b/examples/bevy_gltf_components/basic_wasm/src/main.rs @@ -34,7 +34,7 @@ fn main() { RapierPhysicsPlugin::::default(), RapierDebugRenderPlugin::default(), // our custom plugins - ComponentsFromGltfPlugin, + ComponentsFromGltfPlugin::default(), CorePlugin, // reusable plugins DemoPlugin, // specific to our game ComponentsTestPlugin, // Showcases different type of components /structs diff --git a/examples/bevy_gltf_save_load/basic/Cargo.toml b/examples/bevy_gltf_save_load/basic/Cargo.toml index 71138df..5f8676f 100644 --- a/examples/bevy_gltf_save_load/basic/Cargo.toml +++ b/examples/bevy_gltf_save_load/basic/Cargo.toml @@ -6,7 +6,7 @@ license = "MIT OR Apache-2.0" [dependencies] bevy="0.12" -bevy_gltf_blueprints = "0.6" +bevy_gltf_blueprints = "0.7" bevy_gltf_save_load = { path = "../../../crates/bevy_gltf_save_load" } bevy_rapier3d = { version = "0.23.0", features = [ "serde-serialize", "debug-render-3d", "enhanced-determinism"] } diff --git a/examples/bevy_registry_export/basic/Cargo.lock b/examples/bevy_registry_export/basic/Cargo.lock new file mode 100644 index 0000000..5063b29 --- /dev/null +++ b/examples/bevy_registry_export/basic/Cargo.lock @@ -0,0 +1,4629 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ab_glyph" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80179d7dd5d7e8c285d67c4a1e652972a92de7475beddfb92028c76463b13225" +dependencies = [ + "ab_glyph_rasterizer", + "owned_ttf_parser", +] + +[[package]] +name = "ab_glyph_rasterizer" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c71b1793ee61086797f5c80b6efa2b8ffa6d5dd703f118545808a7f2e27f7046" + +[[package]] +name = "accesskit" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca8410747ed85a17c4a1e9ed3f5a74d3e7bdcc876cf9a18ff40ae21d645997b2" + +[[package]] +name = "accesskit_consumer" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c17cca53c09fbd7288667b22a201274b9becaa27f0b91bf52a526db95de45e6" +dependencies = [ + "accesskit", +] + +[[package]] +name = "accesskit_macos" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd3b6ae1eabbfbced10e840fd3fce8a93ae84f174b3e4ba892ab7bcb42e477a7" +dependencies = [ + "accesskit", + "accesskit_consumer", + "objc2", + "once_cell", +] + +[[package]] +name = "accesskit_windows" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afcae27ec0974fc7c3b0b318783be89fd1b2e66dd702179fe600166a38ff4a0b" +dependencies = [ + "accesskit", + "accesskit_consumer", + "once_cell", + "paste", + "static_assertions", + "windows 0.48.0", +] + +[[package]] +name = "accesskit_winit" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88e39fcec2e10971e188730b7a76bab60647dacc973d4591855ebebcadfaa738" +dependencies = [ + "accesskit", + "accesskit_macos", + "accesskit_windows", + "winit", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "getrandom", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "alsa" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47" +dependencies = [ + "alsa-sys", + "bitflags 1.3.2", + "libc", + "nix 0.24.3", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android-activity" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64529721f27c2314ced0890ce45e469574a73e5e6fdd6e9da1860eb29285f5e0" +dependencies = [ + "android-properties", + "bitflags 1.3.2", + "cc", + "jni-sys", + "libc", + "log", + "ndk", + "ndk-context", + "ndk-sys", + "num_enum 0.6.1", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "arboard" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac57f2b058a76363e357c056e4f74f1945bf734d37b8b3ef49066c4787dde0fc" +dependencies = [ + "clipboard-win", + "core-graphics", + "image", + "log", + "objc", + "objc-foundation", + "objc_id", + "parking_lot", + "thiserror", + "winapi", + "x11rb", +] + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener", + "futures-core", +] + +[[package]] +name = "async-executor" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0" +dependencies = [ + "async-lock", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock", + "autocfg", + "blocking", + "futures-lite", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener", +] + +[[package]] +name = "async-task" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "bevy" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "329e344f835f5a9a4c46a6d1d57371f726aa2c482d1bd669b2b9c4eb1ee91fd7" +dependencies = [ + "bevy_internal", +] + +[[package]] +name = "bevy-inspector-egui" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65b98d6fca1209c36c4d403c377f303aad22d940281fe1a9e431217516f0622" +dependencies = [ + "bevy-inspector-egui-derive", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_egui", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_utils", + "bevy_window", + "egui", + "image", + "once_cell", + "pretty-type-name", + "smallvec", +] + +[[package]] +name = "bevy-inspector-egui-derive" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec800b7cf98151b5dbff80f0eb6dffcb4bcfceef6e457888b395ead4eb7e75ba" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_a11y" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271b812e5734f5056a400f7d64592dd82d6c0e6179389c2f066f433ab8bc7692" +dependencies = [ + "accesskit", + "bevy_app", + "bevy_derive", + "bevy_ecs", +] + +[[package]] +name = "bevy_animation" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab94187a1253433e14f175293d8a86ec1c2822fda2a17807908f11ec21f45f00" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_time", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_app" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "172d532ea812e5954fa814dae003c207f2a0b20c6e50431787c94a7159677ece" +dependencies = [ + "bevy_derive", + "bevy_ecs", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "bevy_asset" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccb2b67984088b23e223cfe9ec1befd89a110665a679acb06839bc4334ed37d6" +dependencies = [ + "async-broadcast", + "async-fs", + "async-lock", + "bevy_app", + "bevy_asset_macros", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bevy_winit", + "blake3", + "crossbeam-channel", + "downcast-rs", + "futures-io", + "futures-lite", + "js-sys", + "parking_lot", + "ron", + "serde", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "bevy_asset_loader" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d797cc907daa293a2776fea1517ed79f9e54d9901dfd35410743cbe536d4c2b" +dependencies = [ + "anyhow", + "bevy", + "bevy_asset_loader_derive", + "bevy_common_assets", + "path-slash", + "serde", +] + +[[package]] +name = "bevy_asset_loader_derive" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d43820afc6e2a7a9e09adb5f13a760bd9a973f391c106411f0bf229d9958c61d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_asset_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b3245193e90fc8abcf1059a467cb224501dcda083d114c67c10ac66b7171e3a" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_audio" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478de80ff25cb7decbcb22797774d1597e8c32914e81431c67d64faadc08f84a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_transform", + "bevy_utils", + "oboe", + "rodio", +] + +[[package]] +name = "bevy_common_assets" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9397adf1558aa3f08e20aa567538a7238b451362fc8c6b678d409c040c221799" +dependencies = [ + "anyhow", + "bevy", + "ron", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025e6800b73048092a55c3611e9327ad4c4c17b60517ec1c0086bb40b4b19ea8" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "bytemuck", + "serde", +] + +[[package]] +name = "bevy_core_pipeline" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e4b08a2d53ba62d9ec1fca3f7f4e0f556e9f59e1c8e63a4b7c2a18c0701152c" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags 2.4.1", + "radsort", + "serde", +] + +[[package]] +name = "bevy_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24bf40259be12a1a24d9fd536f5ff18d31eeb5665b77e2732899783be6edc5d6" +dependencies = [ + "bevy_macro_utils", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_diagnostic" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41b5a99a9fb6cd7d1eb1714fad193944a0317f0887a15cccb8309c8d37951132" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_log", + "bevy_time", + "bevy_utils", + "sysinfo", +] + +[[package]] +name = "bevy_ecs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae11a1f467c372b50e9d4b55e78370f5420c9db7416200cc441cc84f08174dd3" +dependencies = [ + "async-channel", + "bevy_ecs_macros", + "bevy_ptr", + "bevy_reflect", + "bevy_tasks", + "bevy_utils", + "downcast-rs", + "event-listener", + "fixedbitset", + "rustc-hash", + "serde", + "thiserror", + "thread_local", +] + +[[package]] +name = "bevy_ecs_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f642c2b67c4d0daf8edf15074f6351457eb487a34b3de1290c760d8f3ac9ec16" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_editor_pls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "170e3ee3293f70be7fa1b82e8ffe52dcb190c68b2f0ef4847afe65626b417ad7" +dependencies = [ + "bevy", + "bevy_editor_pls_core", + "bevy_editor_pls_default_windows", + "egui", + "egui-gizmo", +] + +[[package]] +name = "bevy_editor_pls_core" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9bab331de653d7d976a1fb0ab3ae8eff1dc821c5991c09bdbe945e70234839c" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "egui_dock", + "indexmap 2.1.0", +] + +[[package]] +name = "bevy_editor_pls_default_windows" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833e3b3d5c69b92527e766b470b27cb4745406e2087be19be81b595cc48792c" +dependencies = [ + "bevy", + "bevy-inspector-egui", + "bevy_editor_pls_core", + "bevy_mod_debugdump", + "egui-gizmo", + "indexmap 2.1.0", + "opener", + "pretty-type-name", +] + +[[package]] +name = "bevy_egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85450af551b7e1cb766f710763b60a12a82ffd6323945a8f776c6334c59ccdc1" +dependencies = [ + "arboard", + "bevy", + "egui", + "thread_local", + "webbrowser", +] + +[[package]] +name = "bevy_encase_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65b9fb5a62c4e3ab70caaa839470d35fa932001b1b34b08bc7f7f1909bd2b3a7" +dependencies = [ + "bevy_macro_utils", + "encase_derive_impl", +] + +[[package]] +name = "bevy_gilrs" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad31cc2c84315e0759d793d6c5bcb7d8789bbc16359c98d1b766e708c1bbae49" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_log", + "bevy_time", + "bevy_utils", + "gilrs", + "thiserror", +] + +[[package]] +name = "bevy_gizmos" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d1cc978b91f416b23eb16f00e69f95c3a04582021827d8082e92d4725cc510" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", +] + +[[package]] +name = "bevy_gltf" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f933745c0c86e2c07948def581259b466f99708328657054e956275430ccfd7" +dependencies = [ + "base64 0.13.1", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_core_pipeline", + "bevy_ecs", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_tasks", + "bevy_transform", + "bevy_utils", + "gltf", + "percent-encoding", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "bevy_gltf_blueprints" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_gltf_components", +] + +[[package]] +name = "bevy_gltf_blueprints_basic_example" +version = "0.3.0" +dependencies = [ + "bevy", + "bevy_asset_loader", + "bevy_editor_pls", + "bevy_gltf_blueprints", + "bevy_rapier3d", + "rand", +] + +[[package]] +name = "bevy_gltf_components" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd745a2988c631286404e12d184d4a30a634fbbba1deceaaa1ca7fcbc607cc7a" +dependencies = [ + "bevy", + "ron", + "serde", +] + +[[package]] +name = "bevy_hierarchy" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64fa240011fce8ee23f9b46e5a26a628a31d7860d6d2e4e0e361bb3ea6d5a703" +dependencies = [ + "bevy_app", + "bevy_core", + "bevy_ecs", + "bevy_log", + "bevy_reflect", + "bevy_utils", + "smallvec", +] + +[[package]] +name = "bevy_input" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e86e241b3a10b79f65a69205552546723b855d3d4c1bd8261637c076144d32f" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_internal" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55124e486814c4d3632d5cfad9c4f4e46d052c028593ec46fef5bfbfb0f840b1" +dependencies = [ + "bevy_a11y", + "bevy_animation", + "bevy_app", + "bevy_asset", + "bevy_audio", + "bevy_core", + "bevy_core_pipeline", + "bevy_derive", + "bevy_diagnostic", + "bevy_ecs", + "bevy_gilrs", + "bevy_gizmos", + "bevy_gltf", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_pbr", + "bevy_ptr", + "bevy_reflect", + "bevy_render", + "bevy_scene", + "bevy_sprite", + "bevy_tasks", + "bevy_text", + "bevy_time", + "bevy_transform", + "bevy_ui", + "bevy_utils", + "bevy_window", + "bevy_winit", +] + +[[package]] +name = "bevy_log" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "011417debf7868b45932bb97fc0d5bfdeaf9304e324aa94840e2f1e6deeed69d" +dependencies = [ + "android_log-sys", + "bevy_app", + "bevy_ecs", + "bevy_utils", + "console_error_panic_hook", + "tracing-log", + "tracing-subscriber", + "tracing-wasm", +] + +[[package]] +name = "bevy_macro_utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf6fba87c6d069fcbcd8a48625ca8ab4392ad40d2b260863ce7d641a0f42986d" +dependencies = [ + "proc-macro2", + "quote", + "rustc-hash", + "syn 2.0.39", + "toml_edit 0.20.7", +] + +[[package]] +name = "bevy_math" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "752764558a1f429c20704c3b836a019fa308961c43fdfef4f08e339d456c96be" +dependencies = [ + "glam", + "serde", +] + +[[package]] +name = "bevy_mikktspace" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b596c41a56f2268ec7cde560edc588bc7b5886e4b49c8b27c4dcc9f7c743424c" +dependencies = [ + "glam", +] + +[[package]] +name = "bevy_mod_debugdump" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4db8601f41ea570b7d32f3177292a608196c59bdf3298001a9e202d5e7439438" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_render", + "bevy_utils", + "once_cell", + "petgraph", + "pretty-type-name", +] + +[[package]] +name = "bevy_pbr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeb6a35a78d355cc21c10f277dcd171eca65e30a90e76eb89f4dacf606621fe1" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.4.1", + "bytemuck", + "fixedbitset", + "naga_oil", + "radsort", + "smallvec", + "thread_local", +] + +[[package]] +name = "bevy_ptr" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "308a02679f6ce21ef71de20fae6d6a2016c07baa21d8e8d0558e6b7851e8adf2" + +[[package]] +name = "bevy_rapier3d" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3f0a2641af76c9eb17da0dcb0fb20cd9d615b93b67be0b85f1867487e956b5a" +dependencies = [ + "bevy", + "bitflags 2.4.1", + "log", + "nalgebra", + "rapier3d", + "serde", +] + +[[package]] +name = "bevy_reflect" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdd56914a8ad57621d7a1a099f7e6b1f7482c9c76cedc9c3d4c175a203939c5d" +dependencies = [ + "bevy_math", + "bevy_ptr", + "bevy_reflect_derive", + "bevy_utils", + "downcast-rs", + "erased-serde", + "glam", + "serde", + "smallvec", + "smol_str", + "thiserror", +] + +[[package]] +name = "bevy_reflect_derive" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f627907c40ac552f798423447fc331fc1ddacd94c5f7a2a70942eb06bc8447" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", + "uuid", +] + +[[package]] +name = "bevy_render" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90d777f4c51bd58e9e40777c6cb8dde0778df7e2c5298b3f9e3455bd12a9856c" +dependencies = [ + "async-channel", + "bevy_app", + "bevy_asset", + "bevy_core", + "bevy_derive", + "bevy_ecs", + "bevy_encase_derive", + "bevy_hierarchy", + "bevy_log", + "bevy_math", + "bevy_mikktspace", + "bevy_reflect", + "bevy_render_macros", + "bevy_tasks", + "bevy_time", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bitflags 2.4.1", + "bytemuck", + "codespan-reporting", + "downcast-rs", + "encase", + "futures-lite", + "hexasphere", + "image", + "js-sys", + "ktx2", + "naga", + "naga_oil", + "ruzstd", + "serde", + "smallvec", + "thiserror", + "thread_local", + "wasm-bindgen", + "web-sys", + "wgpu", +] + +[[package]] +name = "bevy_render_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35b00c3d0abff94a729460fc9aa95c2ceac71b49b3041166bb5ba3098e9657e7" +dependencies = [ + "bevy_macro_utils", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_scene" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba6294396a6375f0b14341d8003408c10aa040e3f833ac8bd49677170ec55d73" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "ron", + "serde", + "thiserror", + "uuid", +] + +[[package]] +name = "bevy_sprite" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4f7d1f88a6e5497fdafd95c20984a1d1b5517bc39d51600b4988cd60c51837a" +dependencies = [ + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_transform", + "bevy_utils", + "bitflags 2.4.1", + "bytemuck", + "fixedbitset", + "guillotiere", + "radsort", + "rectangle-pack", + "thiserror", +] + +[[package]] +name = "bevy_tasks" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a45be906618192515bc613e46546150089adbb4a82178dc462045acd1e89e92" +dependencies = [ + "async-channel", + "async-executor", + "async-task", + "concurrent-queue", + "futures-lite", + "wasm-bindgen-futures", +] + +[[package]] +name = "bevy_text" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c136af700af4f87c94f68d6e019528c371bf09ebf4a8ff7468bb3c73806b34f5" +dependencies = [ + "ab_glyph", + "bevy_app", + "bevy_asset", + "bevy_ecs", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_transform", + "bevy_utils", + "bevy_window", + "glyph_brush_layout", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_time" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b29709cadf22d318a0b7c79f763e9c5ac414292bd0e850066fa935959021b276" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_reflect", + "bevy_utils", + "crossbeam-channel", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_transform" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70262c51e915b6224129206d23823364e650cf5eb5f4b6ce3ee379f608c180d2" +dependencies = [ + "bevy_app", + "bevy_ecs", + "bevy_hierarchy", + "bevy_math", + "bevy_reflect", + "serde", + "thiserror", +] + +[[package]] +name = "bevy_ui" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd5ecbf2dceaab118769dd870e34d780bfde556af561fd10d8d613b0f237297e" +dependencies = [ + "bevy_a11y", + "bevy_app", + "bevy_asset", + "bevy_core_pipeline", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_log", + "bevy_math", + "bevy_reflect", + "bevy_render", + "bevy_sprite", + "bevy_text", + "bevy_transform", + "bevy_utils", + "bevy_window", + "bytemuck", + "serde", + "smallvec", + "taffy", + "thiserror", +] + +[[package]] +name = "bevy_utils" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8e75d4a34ef0b15dffd1ee9079ef1f0f5139527e192b9d5708b3e158777c753" +dependencies = [ + "ahash", + "bevy_utils_proc_macros", + "getrandom", + "hashbrown 0.14.2", + "instant", + "nonmax", + "petgraph", + "thiserror", + "tracing", + "uuid", +] + +[[package]] +name = "bevy_utils_proc_macros" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7dfd3735a61a1b681ed1e176afe4eae731bbb03e51ad871e9eb39e76a2d170e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "bevy_window" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e60d1830b3fbd7db5bfea7ac9fcd0f5e1d1af88c91ab469e697ab176d8b3140b" +dependencies = [ + "bevy_a11y", + "bevy_app", + "bevy_ecs", + "bevy_input", + "bevy_math", + "bevy_reflect", + "bevy_utils", + "raw-window-handle", + "serde", +] + +[[package]] +name = "bevy_winit" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f8294e78c6a1f9c34d36501a377c5d20bf0fa23a0958187bb270187741448ba" +dependencies = [ + "accesskit_winit", + "approx", + "bevy_a11y", + "bevy_app", + "bevy_derive", + "bevy_ecs", + "bevy_hierarchy", + "bevy_input", + "bevy_math", + "bevy_tasks", + "bevy_utils", + "bevy_window", + "crossbeam-channel", + "raw-window-handle", + "wasm-bindgen", + "web-sys", + "winit", +] + +[[package]] +name = "bindgen" +version = "0.68.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "726e4313eb6ec35d2730258ad4e15b547ee75d6afaa1361a922e78e59b7d8078" +dependencies = [ + "bitflags 2.4.1", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.39", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +dependencies = [ + "serde", +] + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-sys" +version = "0.1.0-beta.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "block2" +version = "0.2.0-alpha.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42" +dependencies = [ + "block-sys", + "objc2-encode", +] + +[[package]] +name = "blocking" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a" +dependencies = [ + "async-channel", + "async-lock", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite", + "piper", + "tracing", +] + +[[package]] +name = "bstr" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c" +dependencies = [ + "memchr", + "regex-automata 0.4.3", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "jobserver", + "libc", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading 0.7.4", +] + +[[package]] +name = "clipboard-win" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362" +dependencies = [ + "error-code", + "str-buf", + "winapi", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "com-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642" + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + +[[package]] +name = "const_panic" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6051f239ecec86fde3410901ab7860d458d160371533842974fc61f96d15879b" + +[[package]] +name = "const_soft_float" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ca1caa64ef4ed453e68bb3db612e51cf1b2f5b871337f0fcab1c8f87cc3dff" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "constgebra" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edd23e864550e6dafc1e41ac78ce4f1ccddc8672b40c403524a04ff3f0518420" +dependencies = [ + "const_soft_float", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "core-graphics" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-graphics-types", + "foreign-types 0.3.2", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" +dependencies = [ + "bitflags 1.3.2", + "core-foundation-sys", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8478e5bdad14dce236b9898ea002eabfa87cbe14f0aa538dbe3b6a4bec4332d" +dependencies = [ + "bindgen", +] + +[[package]] +name = "cpal" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c" +dependencies = [ + "alsa", + "core-foundation-sys", + "coreaudio-rs", + "dasp_sample", + "jni 0.19.0", + "js-sys", + "libc", + "mach2", + "ndk", + "ndk-context", + "oboe", + "once_cell", + "parking_lot", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.46.0", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c" +dependencies = [ + "cfg-if", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "d3d12" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20" +dependencies = [ + "bitflags 2.4.1", + "libloading 0.8.1", + "winapi", +] + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "data-encoding" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "duplicate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" +dependencies = [ + "heck", + "proc-macro-error", +] + +[[package]] +name = "ecolor" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfdf4e52dbbb615cfd30cf5a5265335c217b5fd8d669593cea74a517d9c605af" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "egui" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bd69fed5fcf4fbb8225b24e80ea6193b61e17a625db105ef0c4d71dde6eb8b7" +dependencies = [ + "ahash", + "epaint", + "nohash-hasher", +] + +[[package]] +name = "egui-gizmo" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f732ad247afe275d6cf901e0f134025ad735007c8f4d82e667a6871f1b4a5441" +dependencies = [ + "egui", + "glam", +] + +[[package]] +name = "egui_dock" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a52f67bcab0eb6050cf8051c614966c1c57129fab23dbeae9c157214779053c7" +dependencies = [ + "duplicate", + "egui", + "paste", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "emath" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ef2b29de53074e575c18b694167ccbe6e5191f7b25fe65175a0d905a32eeec0" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "encase" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fce2eeef77fd4a293a54b62aa00ac9daebfbcda4bf8998c5a815635b004aa1c" +dependencies = [ + "const_panic", + "encase_derive", + "glam", + "thiserror", +] + +[[package]] +name = "encase_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e520cde08cbf4f7cc097f61573ec06ce467019803de8ae82fb2823fa1554a0e" +dependencies = [ + "encase_derive_impl", +] + +[[package]] +name = "encase_derive_impl" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fe2568f851fd6144a45fa91cfed8fe5ca8fc0b56ba6797bfc1ed2771b90e37c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "epaint" +version = "0.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58067b840d009143934d91d8dcb8ded054d8301d7c11a517ace0a99bb1e1595e" +dependencies = [ + "ab_glyph", + "ahash", + "bytemuck", + "ecolor", + "emath", + "nohash-hasher", + "parking_lot", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "erased-serde" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c" +dependencies = [ + "serde", +] + +[[package]] +name = "error-code" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21" +dependencies = [ + "libc", + "str-buf", +] + +[[package]] +name = "euclid" +version = "0.22.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f253bc5c813ca05792837a0ff4b3a580336b224512d48f7eda1d7dd9210787" +dependencies = [ + "num-traits", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fdeflate" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures-core" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" + +[[package]] +name = "futures-io" +version = "0.3.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +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]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gilrs" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e9eec02069fcbd7abe00a28adf216547774889129a777cb5e53fdfb75d59f09" +dependencies = [ + "fnv", + "gilrs-core", + "log", + "uuid", + "vec_map", +] + +[[package]] +name = "gilrs-core" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e11f4e03be4f1beda399e4791c11d33102fa48f368e864259e4e810d3a3d2ff5" +dependencies = [ + "core-foundation", + "inotify", + "io-kit-sys", + "js-sys", + "libc", + "libudev-sys", + "log", + "nix 0.27.1", + "uuid", + "vec_map", + "wasm-bindgen", + "web-sys", + "windows 0.51.1", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" +dependencies = [ + "bytemuck", + "serde", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glow" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "gltf" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad2dcfb6dd7a66f9eb3d181a29dcfb22d146b0bcdc2e1ed1713cbf03939a88ea" +dependencies = [ + "byteorder", + "gltf-json", + "lazy_static", +] + +[[package]] +name = "gltf-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2cbcea5dd47e7ad4e9ee6f040384fcd7204bbf671aa4f9e7ca7dfc9bfa1de20" +dependencies = [ + "inflections", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "gltf-json" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5b810806b78dde4b71a95cc0e6fdcab34c4c617da3574df166f9987be97d03" +dependencies = [ + "gltf-derive", + "serde", + "serde_derive", + "serde_json", +] + +[[package]] +name = "glyph_brush_layout" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38" +dependencies = [ + "ab_glyph", + "approx", + "xi-unicode", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.4.1", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "gpu-allocator" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce95f9e2e11c2c6fadfce42b5af60005db06576f231f5c92550fdded43c423e8" +dependencies = [ + "backtrace", + "log", + "thiserror", + "winapi", + "windows 0.44.0", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.4.1", + "gpu-descriptor-types", + "hashbrown 0.14.2", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "grid" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eec1c01eb1de97451ee0d60de7d81cf1e72aabefb021616027f3d1c3ec1c723c" + +[[package]] +name = "guillotiere" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782" +dependencies = [ + "euclid", + "svg_fmt", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156" +dependencies = [ + "ahash", + "allocator-api2", + "serde", +] + +[[package]] +name = "hassle-rs" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0" +dependencies = [ + "bitflags 1.3.2", + "com-rs", + "libc", + "libloading 0.7.4", + "thiserror", + "widestring", + "winapi", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hexasphere" +version = "9.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cb3df16a7bcb1b5bc092abd55e14f77ca70aea14445026e264586fc62889a10" +dependencies = [ + "constgebra", + "glam", +] + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.2", +] + +[[package]] +name = "inflections" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" + +[[package]] +name = "inotify" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdd168d97690d0b8c412d6b6c10360277f4d7ee495c5d0d5d5fe0854923255cc" +dependencies = [ + "bitflags 1.3.2", + "futures-core", + "inotify-sys", + "libc", + "tokio", +] + +[[package]] +name = "inotify-sys" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" +dependencies = [ + "libc", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "io-kit-sys" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4769cb30e5dcf1710fc6730d3e94f78c47723a014a567de385e113c737394640" +dependencies = [ + "core-foundation-sys", + "mach2", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + +[[package]] +name = "js-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "khronos-egl" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3" +dependencies = [ + "libc", + "libloading 0.7.4", + "pkg-config", +] + +[[package]] +name = "ktx2" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87d65e08a9ec02e409d27a0139eaa6b9756b4d81fe7cde71f6941a83730ce838" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.150" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall 0.4.1", +] + +[[package]] +name = "libudev-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "623b5e6cefd76e58f774bd3cc0c6f5c7615c58c03a97815245a25c3c9bdee318" +dependencies = [ + "bitflags 2.4.1", + "block", + "core-graphics-types", + "foreign-types 0.5.0", + "log", + "objc", + "paste", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "naga" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ceaaa4eedaece7e4ec08c55c640ba03dbb73fb812a6570a59bcf1930d0f70e" +dependencies = [ + "bit-set", + "bitflags 2.4.1", + "codespan-reporting", + "hexf-parse", + "indexmap 1.9.3", + "log", + "num-traits", + "pp-rs", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "naga_oil" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1fa9518ff79ae8a98c3abe3897d873a85561d1b5642981c2245c1c4b9b2429d" +dependencies = [ + "bit-set", + "codespan-reporting", + "data-encoding", + "indexmap 1.9.3", + "naga", + "once_cell", + "regex", + "regex-syntax 0.7.5", + "rustc-hash", + "thiserror", + "tracing", + "unicode-ident", +] + +[[package]] +name = "nalgebra" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "serde", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys", + "num_enum 0.5.11", + "raw-window-handle", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.1", + "cfg-if", + "libc", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nonmax" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4a593ea4fffed8684ad13d75c82cf0b6dc2b88947e0ed85b9e70f555a7e422" + +[[package]] +name = "normpath" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec60c60a693226186f5d6edf073232bfb6464ed97eb22cf3b01c1e8198fd97f5" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", + "serde", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1" +dependencies = [ + "num_enum_derive 0.6.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc-sys" +version = "0.2.0-beta.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7" + +[[package]] +name = "objc2" +version = "0.3.0-beta.3.patch-leaks.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e01640f9f2cb1220bbe80325e179e532cb3379ebcd1bf2279d703c19fe3a468" +dependencies = [ + "block2", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-encode" +version = "2.0.0-pre.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512" +dependencies = [ + "objc-sys", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "oboe" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" +dependencies = [ + "jni 0.20.0", + "ndk", + "ndk-context", + "num-derive", + "num-traits", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2" +dependencies = [ + "cc", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "opener" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c62dcb6174f9cb326eac248f07e955d5d559c272730b6c03e396b443b562788" +dependencies = [ + "bstr", + "normpath", + "winapi", +] + +[[package]] +name = "orbclient" +version = "0.3.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52f0d54bde9774d3a51dcf281a5def240c71996bc6ca05d2c847ec8b2b216166" +dependencies = [ + "libredox", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "owned_ttf_parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4586edfe4c648c71797a74c84bacb32b52b212eff5dfe2bb9f2c599844023e7" +dependencies = [ + "ttf-parser", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.4.1", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "parry3d" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55dc0e6db79bddbc5fd583569f7356cdcc63e1e9b2b93a9ab70dd8e717160e0" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "indexmap 1.9.3", + "nalgebra", + "num-derive", + "num-traits", + "rustc-hash", + "serde", + "simba", + "slab", + "smallvec", + "spade", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "path-slash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.1.0", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "pp-rs" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb458bb7f6e250e6eb79d5026badc10a3ebb8f9a15d1fff0f13d17c71f4d6dee" +dependencies = [ + "unicode-xid", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "pretty-type-name" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f73cdaf19b52e6143685c3606206e114a4dfa969d6b14ec3894c88eb38bd4b" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89dff0959d98c9758c88826cc002e2c3d0b9dfac4139711d1f30de442f1139b" + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radsort" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "range-alloc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" + +[[package]] +name = "rapier3d" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62a8a0bd9d3135f7b4eb45d0796540e7bab47b6b7c974f90567ccc5a0454f42b" +dependencies = [ + "approx", + "arrayvec", + "bit-vec", + "bitflags 1.3.2", + "crossbeam", + "downcast-rs", + "nalgebra", + "num-derive", + "num-traits", + "parry3d", + "rustc-hash", + "serde", + "simba", +] + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rectangle-pack" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb" + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.3", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "renderdoc-sys" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" + +[[package]] +name = "robust" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + +[[package]] +name = "rodio" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b1bb7b48ee48471f55da122c0044fcc7600cfcc85db88240b89cb832935e611" +dependencies = [ + "cpal", + "lewton", +] + +[[package]] +name = "ron" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94" +dependencies = [ + "base64 0.21.5", + "bitflags 2.4.1", + "serde", + "serde_derive", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "ruzstd" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3ffab8f9715a0d455df4bbb9d21e91135aab3cd3ca187af0cd0c3c3f868fdc" +dependencies = [ + "byteorder", + "thiserror-core", + "twox-hash", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "serde" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.192" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "libm", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +dependencies = [ + "serde", +] + +[[package]] +name = "smol_str" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74212e6bbe9a4352329b2f68ba3130c15a3f26fe88ff22dbdc6cdd58fa85e99c" +dependencies = [ + "serde", +] + +[[package]] +name = "socket2" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +dependencies = [ + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "spade" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c39e369d9638e42586b226e67df08a7358d1e02eb80629d596b944b7c16f44f" +dependencies = [ + "hashbrown 0.14.2", + "num-traits", + "robust", + "smallvec", +] + +[[package]] +name = "spirv" +version = "0.2.0+1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags 1.3.2", + "num-traits", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str-buf" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0" + +[[package]] +name = "svg_fmt" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "taffy" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c2287b6d7f721ada4cddf61ade5e760b2c6207df041cac9bfaa192897362fd3" +dependencies = [ + "arrayvec", + "grid", + "num-traits", + "slotmap", +] + +[[package]] +name = "termcolor" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-core" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d97345f6437bb2004cd58819d8a9ef8e36cdd7661c2abc4bbde0a7c40d9f497" +dependencies = [ + "thiserror-core-impl", +] + +[[package]] +name = "thiserror-core-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10ac1c5050e43014d16b2f94d0d2ce79e65ffdd8b38d8048f9c8f6a8a6da62ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "thread_local" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.34.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +dependencies = [ + "backtrace", + "libc", + "mio", + "pin-project-lite", + "socket2", + "windows-sys 0.48.0", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +dependencies = [ + "indexmap 2.1.0", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "tracing-wasm" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4575c663a174420fa2d78f4108ff68f65bf2fbb7dd89f33749b6e826b3626e07" +dependencies = [ + "tracing", + "tracing-subscriber", + "wasm-bindgen", +] + +[[package]] +name = "ttf-parser" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "static_assertions", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[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.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[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-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[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.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc" +dependencies = [ + "getrandom", + "serde", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "vec_map" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b" + +[[package]] +name = "wayland-scanner" +version = "0.29.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53" +dependencies = [ + "proc-macro2", + "quote", + "xml-rs", +] + +[[package]] +name = "web-sys" +version = "0.3.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webbrowser" +version = "0.8.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71" +dependencies = [ + "core-foundation", + "home", + "jni 0.21.1", + "log", + "ndk-context", + "objc", + "raw-window-handle", + "url", + "web-sys", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wgpu" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed547920565c56c7a29afb4538ac5ae5048865a5d2f05bff3ad4fbeb921a9a2c" +dependencies = [ + "arrayvec", + "cfg-if", + "js-sys", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f8a44dd301a30ceeed3c27d8c0090433d3da04d7b2a4042738095a424d12ae7" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.4.1", + "codespan-reporting", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a80bf0e3c77399bb52850cb0830af9bad073d5cfcb9dd8253bef8125c42db17" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.4.1", + "block", + "core-graphics-types", + "d3d12", + "glow", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.1", + "log", + "metal", + "naga", + "objc", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee64d7398d0c2f9ca48922c902ef69c42d000c759f3db41e355f4a570b052b67" +dependencies = [ + "bitflags 2.4.1", + "js-sys", + "web-sys", +] + +[[package]] +name = "wide" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-wsapoll" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.44.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-implement" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e2ee588991b9e7e6c8338edf3333fbe4da35dc72092643958ebb43f0ab2c49c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-interface" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6fb8df20c9bcaa8ad6ab513f7b40104840c8867d5751126e4df3b08388d0cc7" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winit" +version = "0.28.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9596d90b45384f5281384ab204224876e8e8bf7d58366d9b795ad99aa9894b94" +dependencies = [ + "android-activity", + "bitflags 1.3.2", + "cfg_aliases", + "core-foundation", + "core-graphics", + "dispatch", + "instant", + "libc", + "log", + "mio", + "ndk", + "objc2", + "once_cell", + "orbclient", + "percent-encoding", + "raw-window-handle", + "redox_syscall 0.3.5", + "wasm-bindgen", + "wayland-scanner", + "web-sys", + "windows-sys 0.45.0", + "x11-dl", +] + +[[package]] +name = "winnow" +version = "0.5.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b" +dependencies = [ + "memchr", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] + +[[package]] +name = "x11rb" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507" +dependencies = [ + "gethostname", + "nix 0.24.3", + "winapi", + "winapi-wsapoll", + "x11rb-protocol", +] + +[[package]] +name = "x11rb-protocol" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67" +dependencies = [ + "nix 0.24.3", +] + +[[package]] +name = "xi-unicode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a" + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "zerocopy" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.39", +] diff --git a/examples/bevy_registry_export/basic/Cargo.toml b/examples/bevy_registry_export/basic/Cargo.toml new file mode 100644 index 0000000..9bdecc5 --- /dev/null +++ b/examples/bevy_registry_export/basic/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "bevy_bevy_registry_export_basic_example" +version = "0.3.0" +edition = "2021" +license = "MIT OR Apache-2.0" + +[dependencies] +bevy="0.12" +bevy_gltf_blueprints = { path = "../../../crates/bevy_gltf_blueprints" } +bevy_registry_export = { path = "../../../crates/bevy_registry_export" } +bevy_rapier3d = { version = "0.23.0", features = [ "serde-serialize", "debug-render-3d", "enhanced-determinism"] } +bevy_asset_loader = { version = "0.18", features = ["standard_dynamic_assets" ]} +bevy_editor_pls = { version = "0.6" } +rand = "0.8.5" diff --git a/examples/bevy_registry_export/basic/README.md b/examples/bevy_registry_export/basic/README.md new file mode 100644 index 0000000..5d2e087 --- /dev/null +++ b/examples/bevy_registry_export/basic/README.md @@ -0,0 +1,15 @@ +# Bevy registry export example/demo + +This example showcases +* the use of the bevy_registry_export crate to extract all components & types information into a json file. +* That file is then used by the [Blender addon](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/tools/bevy_components) to create Uis for each component, +to be able to add & edit Bevy components easilly in Blender ! + + +## Running this example + +``` +cargo run --features bevy/dynamic_linking +``` + +Running the example also regenerates the registry.json file. diff --git a/examples/bevy_registry_export/basic/assets/assets_core.assets.ron b/examples/bevy_registry_export/basic/assets/assets_core.assets.ron new file mode 100644 index 0000000..8d0a099 --- /dev/null +++ b/examples/bevy_registry_export/basic/assets/assets_core.assets.ron @@ -0,0 +1 @@ +({}) \ No newline at end of file diff --git a/examples/bevy_registry_export/basic/assets/assets_game.assets.ron b/examples/bevy_registry_export/basic/assets/assets_game.assets.ron new file mode 100644 index 0000000..5b1e969 --- /dev/null +++ b/examples/bevy_registry_export/basic/assets/assets_game.assets.ron @@ -0,0 +1,6 @@ +({ + "world":File (path: "models/World.glb"), + "models": Folder ( + path: "models/library", + ), +}) \ No newline at end of file diff --git a/examples/bevy_registry_export/basic/assets/basic.blend b/examples/bevy_registry_export/basic/assets/basic.blend new file mode 100644 index 0000000000000000000000000000000000000000..bcfe0ffd2076d9f231249b3d1cd59783a6c76cd3 GIT binary patch literal 1401076 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�(B_$#kk7#bn+r&?`@cYeJ0F;*)RvB?MYqE1^K$1)b%{dcRnoebut$E`WTCR zeHrUmd&g~wFN5(ZEXBSImXpQ`%$3BKcM(7H_4^;?CBI{2%_-MYPqMcv%)f?jU<+(TrrgWFCG2Gz( z=v&C~k9FG!EBW}rH;{2_AZ=nGZ9<-Tlj+;>ll6@w%v*P0-{~9VuP@#g^$j+n|FgcN zf5|?-e0$C6!@G%}jIq}0b5dUsYLBm`_9JBDR<;-Y_mS8AggXESaX)0%^C0SD2yI2) zVj7BmL(z|O|Ad#{8u=Mhp52r3%Sqn<)Q3F}WXiYD4%0S|U_T1Sh+{Z1kXtS9ZuTSFy?iEJpM*oIVo+_E$`;YJlLVPB0U**Wn7f+7M{Xi=1_8` zTFy&Ld7tL`4B>vKJkBCh=D5;sWskU}*+xgwfB#F5QUAklH1j0Z0_|f6GlsGpLs^bC z67#l{e5>mse&>8+4c~vt=9_wy-v!?|<02pC>A^>XE@3X_Oy^}YU*oB#3B;d(>dBJLD_xR-~J4Aw{|1&cGAWdm2DO6Qjx-};l!@AF7+=o*jDQFk(j7i25-z4KH zZqMMkMc2B-|w(@W~%Pk4o_Bj!6ta`w%7ANe(IZ{RJg;-2vilZ9@jg)%1xIa6d{ z+Tg=)wgho)2M0L81#XaY0&=dvgFP5RzzaSIg+veri6K06GI{;0TsbfAlzno(>xBj? z3A*Is#vKvL7!O&!A4Y0%>;+h7%;Zd&HK(Rb{?cw_{G$I;9%YeRE>zxs`-J^8WO4nzY^?iL z1>D-xM&=Ut1g2^Cb{}jxrFb%))lx4g=i{~(rVU^Ex+-HPNF=mF&CZDs(=WKsItuXnSzs(9| ztqu8eLZ=&ZLuVQDh-2wG#~kxd;}+lF)gK zFY^dLkMNv9z^y4}GvY8~;(jcv3H;U&4I1Z%x!fw37mU&A-Bg>YMm_bq$}-@`We0k*>q*a^E#xr-+~0$#$O@CshT8+Z%vfRDW?KB}NNkf98)K@ix%0nS9^58T*` zXiI4s93jVkDs-7~2fO4onClSe$9>3)DdpgXYizT0$#m4Q-$;w1f800Xjk_=nP$;D|CbI&;xoxFX#<@ARhX& zPSh9k|I~FK&{-4-0Dw0va7aX9HxTv2E+~lIvtcDz5wZ7zUC(l-*cGt>0ygX@2+|?~ z(wj&}Iz&o9Y65{I6njO``{qxG@7}%3dtYXEW@mQ){dZ?~XXoF2A`J5sPt%@f=)ki) z$Md|vi|nJXNk?HPI`a};=t?(U<`rJ$HD0GXZ}28>@iy=9F7MHU_xXUH^x{K$(}$1f zOF#NEfPv)mF@yMo!M52U!l8W1ForXNk&I$AV;IXg#xsG>n8@c$Vlvxo>r;eNnZ|Tx zFq1Es#cbv3Le9brYn!7iu?b>h?j;a^x_fY5d%N$3#)#zUt4sh)|K)pL4Q}1@q>JxuguW$T4 zKky?z@iV{hE5EUw-`T-V{@_odq;H%>HR7asR6Xez*GT%uH4|4w$v}1HK=T@ynOChO zwDIRVM&^sl&&2Jf@hU85k+-teB$seJs4c!on4NgWbTUYuLDB|g(&|VH{WOZa!L_Ei z@Em|WGG(imq}9#j9jq>^NUN6&$>a~yCDKyMmLqKFO|PE*q}-vIazo$E20Ad+Pb$`3 zLvL%XMJ^S`DCzR$vX?T#a(k9s)iHnXB=q-pe??dj50}?{a>M)5kp0-711ife$-GH6 ziVjp>kvF}Dwz`81hjL3iT_fD5I@o+3b>4W0@Nr={=jyGYE3`EoDy~s7+VZI@6p5 zZrU?Ale0LR7Ua>Ab2yjtIG+o+kXBqoYoFy}>!l5sa4DCG567I#rCnk8O0ME+uHjnK zTqo^%Zs104;%4i(t?(9ZHGCVlbBFOeS?E0eF8S}4{~rFyy~gjet=-Q9{EL6{AP>=w zhk1lYdCc^W%l8CN8h%Rnw6fcq&ohQQ@GQ^qy!026VeyO7IvNgb4xNOZc}aQ~y3&o8 zd4*S%^%}3s)7^A!_0xYt{F}VR+q}cO(%z#7@ACmYP{D1Y5}RBr96MSFB7@b%A%w`rjxX=fA!v_WVZic*FK1TX>^*Lgw0J*E0~h z)(CG+-ZhP0KYxchd!^rba+A!UJzt{QbOkDUK(kjcpnl;G+_4BTK8x!O3 z`lo8pX%6JQ6HWp{bWwzRMR!* zG{dKJ24`{>XVZc_T5=BOavtY%0TH0#oI zdffc~wgvw6Jzb`Z%X!ketFF&;57)0(DCbJ+tTw&$YYp!Szbb7LU9HTWwxesrUn@`O zL*3Licb)N2uUs#@fg8Dra6DLSTgcb0y50A6vt@2eHP;L49ppm&cZ+gveV-4)>UzHGLZw z#+`f**LhFmfz{_(R|S^YJtO&_=LN#Hqo+XpVjAueEp|=2B<`3lb*~^S$FjInx-9OT zxVEcx0iV|HLqMkKbH?}*S*DEoavKN7WFahM`>BqH~lK^m)4K_r=`&V%O3j4 z4YVBjRPB@Lax+)&axO8n&s4Qz? zS`;s$z_NXr7Avb*zT&E7YabQb9t*`4R>rwb@tKzR+)FcMglmO%?#HwvV7zfsHfY$f}dX*Sqyy!kmUNlW65>85y-ur%F0-oI*J3vJuse7@rM zlV$3eayGMt(A#6HaD;VV?mG+Z<=c#Z%{P3@cYI&DE?a3I{UHtQ%YVHGz*&Yi=FsjO zeyN4xC%;zo3 zthb$MxqFS}#>*?$qjn(c?N9l1zK^nUD$WI}NY?gPkX*Xx4t)8<*U(PMYw^Zc~ z^=P=qTtmK^Io|)1lN;Akjz^J2waI38X?2vh2YXUiTs?8E{N^Od+3Ne)s?4pGWrl6o S^OK|}QOnkOXPd$Q{QU>jkhjPH literal 0 HcmV?d00001 diff --git a/examples/bevy_registry_export/basic/assets/models/World.glb b/examples/bevy_registry_export/basic/assets/models/World.glb new file mode 100644 index 0000000000000000000000000000000000000000..7ed6e738f8dc8e2d66fe2a8c1929165e378d2e4b GIT binary patch literal 12304 zcmds-*^=AXd4TCHi5(}glQ_Ob;YzAPGdS3Ri#Vf}m$d$OGm34*(J*(94W{6;?NvgR}hS-XDS{0?4n7_Ixi&e2P<_s|&Ewa@tD~-?o^@VZijqS1LnU;B(m7Ba+ z(b*Z>=10rS-dEX5nl}Hn$!2Eq*8J6{uO^Fpeo<{E>+Nb8^&%|!!JHNg*}+?7+2hD{qA&`B$n!iqP%ceg6!@OwM~<&lY^x{$o_wVNudd8Q zg?8v$W_7jB*w_r%rWHE^Zp&PyOKJREHe`N$_mM4crr^v>?B;2sA!zzdCRMgvPwFm= zE@qj0w=HEkmTP&IZv|FpMOJJn8kMCS3lNoODc@4TyN^KD4q{s@UZ#2}@LZ-$^}#&V zjc>|y`iFcqe{p`UDQQ0VBAdDo-X~5lwk_i-@gli@ot#L+!-s5TS}fPaDqBIAWmYk* z;H_=yZenl+%Ul$z`J~zBS$26f(U&rt=bNg$nq=?SMOjVG(oH_)C0(u;S&~ePQmz{2 z_C8@N8u%o+VX2|!$u<{|Z6MWq)Em^hdk0anReH7%o>DcD8aV5T*nC-3sSuUXC-&Hl zT-)`0Cvk z2a>U&)n>6eE$WdwF=UKM7V3~VkWjFL&Vx^XX^~Dvku>n2x z!=%jCi*%Yz)@AWN&-l<;r+sYL{xU7|bX83rrHch(0LQl-%*1Vwxs+XrUTT>Cmu0bC z&DiH=nhIOIwa2jw)?&pCR&=~Tlw%;e(vO2M4B%$bm&d(Y&TKTjh~aHI85l%QHc-^6 z^H>6*l&zf5cM*Uv4p4wlRK&^l9FYs(bA16WcIjj*^mpKRvGj6;;t^x$r(C46Cx2M0 zklxIVz&dV#evQUK6a+Gx-jM{D9EPyZb#UdS+zCJH?a8QqH znEOx_DexY-Y!^EC4sW7%6i+S$3PO(^#GVjEIUvkYA;gP3E`o~~4TJvj_=XO_ejJOA z<02Hk6Z@{~Mr_jdW#izDNml{(yKv@*a1U#>4Cs{V;fzM0*+xSKejJ7> zbRz$57@wu{eEKF!*F|+Jgq?na@VR5y0^owk4`XG6BFh~|p@S_$Qn8`1k987`T{sF9 zB62Qm;Sqp++32X=uIKT|Y?jxq*E2lSmu0ce$_mX0>3ZHrnXdD!bZ1F2yF%4y#aia` zd^R~NW>-ma%Um~oI?}ZQL*sHFGodX%Ckm8}NcvFurfG0O@RS>ceYBCSX^qu^|K>3mKboXXRZ;eSk$$6=Ljb=Sr)7H8{&l5Wl>cVpZgz_WXzsxteb~kKs zTpDfv2+wY=?GE+{pL~FD+dN6O`9$2@B}1c!0{DK$-E#vhBy+}5jeXk-T*t@4TIQLV zL|we8E`W=oSia7x3b$#H-Nl8Ntn+oYfGv{bO!_AYzP}y;JVz58yf<)Z_&0f#O_m^E zSX=ixl_)@(pXpY}2@_`L`9c_~T|s(R7bPx6vB1qf@yF-|`9(H%%Ey53KTkHrd9}(! zdK~PQ?iB`z4K|I*F9@b4YXo3&UJ?stt0_U4Hx5M)i;7b!QUUWVim&!Pkm>^RB`3If zjuu61JifC>qlOMKLW>Mwfz{x5nDvqZi2ughCN+uH=rMn|2&@$G41-SOcEUe<2D|3K6r27 zIcURY+-s=c{PuT3+^=D8y%^8uX*v0N$0W_rr)l}SnnOD34FES4j%lMOA$N^wEIVcm zgC?5dJTH-+%_7Iwon`9^FBOFN^YWo0EX1FNqbv}hArz)PP;Xr^eX`mvMO+ry`yrxyD@}4ZXXmY< zTx&_5E{b%I=NfzQPQ9?1&d>uB^y{KPVs+?j&NkQqSw9FT^ z&3Uq_m}=NB(1LMB;3MgWcHaKD8@>!IJ(UpZ8@nH;dKlM%86^;voS6h@>p^Y5cW&lc zLAIvEp_w-EYZE3OOrV3oeM`eRwF=+)FwlLOEzd~dUF0lVbA&qJ^{zJ5*@kKLv?!<9 zlS|x-H#_xzD?WxHCUbGqTsJS&?1P+-9hD42>8i+t48a6JuWs>k%A~`4Sm{3xFoo|do?THm?QbQ72YyD`4 zgm}ImdN*z2G5NEb;J?H1-4AV^nti0J`IhK)GHa#=r^nDhSGRU&x~Eu{Nc z=Aq7w9|awlx(Bc3XXyjV6l|0!=4F0C#)Dln!7BY|!q|P@MH7OvqiCYW?B4mlnQ(nC zyro>v7e6B0k>_mIF6Vc zzJ&B?90|6eM6UNvgl?$^-Duz$KVZF^mG-t*Kxr&(VhmVXLt9#SWx&!JN0wGNx@X&j z3p>_WbG<;(+Dia9GLgg69GXZC(6Ncs({{~a0`cks73=NH6)V;zhJ|EENAU~R-wvrD zt&LipV|7^7GKRWq$!@y$%tUAOyN41M)D;B6yC$1+x;+!4+SU(9{n=z!9G^g*ih+m! zbFU^W(NRUmLEwq^LnpKy$=ZN$i7edo-{oc?2aPY zLDKcs33tCFxIX9unJ1=^}{hcvSH`$WCI9RLOBx zd7wagV|@nRZdiI(l5k<{L#|Ympg1}p&Xg2_W70CZFd|SuSV~S23HlQ@K*1*9)PS5S zpz$wUE0J>+of;7m95?_Ikv~&0Md(m+AY>GMMdm~b0*XQbS$JAKVs;`FPB=JZh`orO zF{LzEn`9)_1kl`uH1Sk%+P1TSZqmWHXYcbnywHW@g9fnXe zbP;Hm+A;laY;q`-krWA4A92x`gCjveVTK#}fI1_^8~6v{fWmVq)qqRkZb$`PIBY<( z##_UUPnK&=pzL9zC`Z4U2%C84QQW?@+B{qQlmSC>U` zs$yTk#=am^mqoE5DhjC@OQF|^giI}=(bS49yPUhARu#o$UYjP58V)rrGRTs7t$PtY zQ5#0qd$>G_D9GB>Tpib!YOGGzYC>bB$bBPla*AgxOvPCQr^#UJ2&_K&LJY|%rPiqG z!!RI$;?`y@XN@j(E^b5+^QGa?N?VsNtLyTk1NmIV*vKsGZst^k+>!jHSpc zskUdFBqEzNeN}Ad7j?@2gUK17Oh?F1$@%DmSp-hld7nxzY|YsixDq1YuT4lQ2bN@+ zc0%?^Y+kRpYa5en)_pe@`qb49<1ZH}C$@BHtw}*@dZblV=4V?MeDV6TH=n(D z4(crP`HNT2KKUGsTIQQ4zd3#J;??5`LAaohaGE?eLrDI#c#{-CSFFWvY8;Av+Vj>m zp<%lw1&!{SQmxpn8L|vpOs7DwDax8&XWR4hto(v>mWEwNh;q*BjXu!kb2>&ub1O-D zmRY7G1K#@N4J=>EhvZIpKhX_bX=#|`izlZpP9fy%%nw5DnE$rX&NmqC^wtL9{k3(Y z-W$7Y)_#5Z$>*QE>Wydf{qcL;P|0qP!?8R|b6t%Zg%aoQ4$MHdyJo))H5!iQG~Sy& z;RLw-@IG!NLEj$c+YR622G!RNZ;``x_Jr*+l4hc_t1A0ETg|0bgCAkadwbRp`KZ!z zE(b_mkE02D9=UUx7T^2cV^PQlW0iBXuzL&8PIRE3AXc-1OXzzwIt# z+wViqZJXS0dv3qqcK_2o_IBGE&3KKzYkk$Qw{(z}7DoN`T3_o&=9Qnu|8)&V-Jq}i zc?Q;!o`NfVm-(*sV}C5)c64s~NYA!y2ZPKZziWN%&%;{nn6{7ZPP@L#`0K+y|NU>x zyWIJgcljCgmAT|Dzu(Jy^ZnnYP5N<{{_<|{-@X4{`ZV9$aoxN0m-pkl%-4?V-ld`XL{FIQpy6-;91V`We@sjs9u$&!eA@e#-TyqrV^h-RK`i-{<;$DT@C?o{@Z zgr#zGD)(8)Vn2;yxhem48b@K2)cR1VZ46l0V{z@(Pwm>7(NG$OF4yHV7AHXzLRf1k z@)MF&6)YZCH*N-la7QCrE zWXUN<%wTfOhN76TIhEOY8v6j4%6maS=xs#3$?G^epTOqJ;GFefq8klIQOLqH@rEq* zA$tLDGsLd&#aoE20B=TvL4f!HxkLU`Ar_1j!_HOf@*oQPUS_nz&L$r3V%86mG@f|u zd=$m0*YT5}i-|uR4Op|;jbikp(+RjqPIxgJ4g4C&JdbK+ z)LC$}YyJRxb*MH})v*l2Rt?=W4a;%rH)3Juuoq!6@KatF*wd#C;-v5nUXD}6+j{Q-YicmqxhxYdkE$by?Unmu*^WZK_o^ZxN@xu<0z@bl2L{U=wNfyGQ{p?fJ>?j89Hj{3c+3@Z{wW z>A_@#6J@HJMNj59#8(FD7}v%*y)t<2`8f^n332#Tt>d+zdCHaKH(Q%Je}{|U*pBPK zuTsa=d2@BGWE~q`R_9C}nvN(l>-(F}x1aBo01$f_;CHr8$;4=%obYdT zyk)5$_vy1;H(U$X(lo=mUYCR2R9kg%W{Q?go2vYVw(S*V8!z~hvVI%K9phcXR#k1q z_*Gde#jP6ZEdnoXm})7vuwGVo+*?>LIj^ZW4@-&1H7=?ztGr^l>9&PyzE=C?Q%Tx* zwM+jPFVWHX>>9dNkXc6)4)Ai!Dw=c!zlw$*)VM!a(XE2aI+}3EmcXf^NmuZzXsq!z z%LbZfG;xY~Tjh&&;)|RJ89oPJH15NSEm{+LJcij^x}^JT?gwAZWQfk=#ya#v&1?7-$77Po)`ebi zBzc;zj)W)liX+LU+? zAhV7p9I_>Fs%X*`{3;r2yv?$K<{3?#JSTiY-Mr;CpJ6_m+u$ppsqwtbILW&_Cp4RJ z7Vo$mu`(QDmUOWu>@De%4#^82vbm5c;asl40e>A1)h)-T5kFqX5U#-%@oA)XO!I8L zMLf_FMv|v_4Zq@eOfuQJ&?}B4PxIB0@PuA*BsrQdkKaFe@K)LW^Acn0D*A^fyR^<_ z*3lWx+X7CB&U86{4c#jEvz9LS&{{_q{1G^0cZn|eAaJ;h;3LPE$Q!j8@2hKXMTU!0 ozR_kh&TfDMj8$7)Kf@L{IS-hk(HdVT#!PS*JfXWP^MC#S1!}y!8w^ED7A=aDNlJ-B%j*R&0M`a~;oSvA zh@vf5ZmDwl;2)5)e?Y2o0#lW~!j{~*wg?*{&aJ(@ncFWG z%tFyI^2WZ1lOPJ=Y!^)9C~t^^RD?X0Tuns7aCePM7q`5QpNcr}+lePSL6QXf!b{Rv zgspVXxSltXI!-lQGeZfs9U7tE!JOfFspxb)>Ec}!emmXst_1ZjdR-hJMh(HwZ%ei;lMQuWjg7TvaA7hX4x4g!G%?HmQYUI1Q4tY>!W zD6{{QObho94$vnETdu2xQ}FIH$NEh;H1@lJh@FP(Hipt7lb8kfYEayD_01!!&bW@$ zRAwh@NxKRz!BMHpi)lnXT=h1p2fdKSJ%J9%I^cp|muOP1Z5*|@lmYh;4GRY%PiZAw(S(HB|C2x7ESq6u}XHSRB%sT}W%KLHMYXtj-Yom~YaEN)? zz^s?{yWGC3n_C;_x3(cv)M$AAL6CTUJ80oG%#IBsuN`y(Jgjm8!e;`H`9kEFUGOCG zLxz_)P2-@}OL=%`T-n@S+gaP(kWbmh=GNtvb;Gp~CN0=Aa2Mgqk7$uS(Gfh%ufuSJ4Ch@IoyHNqm;J_C1_HD9-RPL?ViOTkM|B{ zIGqV`?fj}EpHlrOOMAGc9W`q|61$tKGp33XGqU~Lt1Ig(TLzcMn1P%FWE5I9Gi#X=G~9lJ9)NaRyY~$cxRkTmWM{( zLGR$AbGh435S?4wpm%=!zWV9k|8b1Z!8DAoe7g0`563@0@Xx_K7=G1evnl=W0WWj> z%zq|k4jdmJ{5LON*8FE;)gSnGV%^z^sGvpNW}6rU~aZFJ@omKND;H!kVZ)I)Rz1Rwr{|O%v5e zobN2GbYP#Em~+cCxqT0qbx{7NVYvSLIP*UhXSywOO-;iH!ga-YsrP3l=2+-o6>}oa z?nUM@4`vR?OXYqlX0FT`j_Q4wiM8BS{V@L%m>Fa`sQ!|7J#Ajof#WD0PT-#xeyBS1 z?V$W>>-f6|kE`$A_?SO=yv*}hAMjYs^H}*$+pEw2_ox3zu7$s~kM)=svmS(XK7%<_ znZpGCDxazQ^B&&IF?nqgA3e?le|gr7bB|BUow+I>4OexoG+bq_DqqciFoB!AiwXWx zhY9{N7u{dOa%~b%&4;yB+?2mOE91#n%?}vsd1?ADPn*wl9v~k3s2bBXIT2sWaaoT) zg=ckwKgV01FfTdieBh(%bCSP|lliNdBY!=Po)@2;Y0g@ye7TPlma(*Z8Tsomb#8i0 z=%9K>-VNg1#Vzxf>$<-dXP{xe3l)>=L1D#{<0$_-W1jFwj-$6i!&7z8v{mnqtRsy- z>&7wVJoCu%<=!8?8=1ChFZZV8JZ-P;ui>fr>Txuz@{;G?5og2!xhTy3qg*sBHC6X` zM;xvVxqgSg(t&$K>A*a=#^mRebEPioETRYLX*^6%)5G)ty+m)ozCpjDU(&DXdD!Ra zae9h!^d{_^^b9>l&yj!?^cg)%zoP&)pa#7_FVh0-0{w9>@p7&fLBoh6r!V2>yvlWeNOR%wwOI#27c>-cx9LhsQE>3(_y_7U2lP5LwK!tT;GU86_o zN!Tapue3!UQwO#~2lN+uf@-ieYSRTOk_YS28d>xihpfBkb>@B)M5%uUR*srKh{{!quXOsW{ literal 0 HcmV?d00001 diff --git a/examples/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb b/examples/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb new file mode 100644 index 0000000000000000000000000000000000000000..47c37cd331994202b99eb561a2b3a05eb2d36b2a GIT binary patch literal 23956 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 X8@i8dbT;)z_s>XlHH|{2)j0ZpA+Trq literal 0 HcmV?d00001 diff --git a/examples/bevy_registry_export/basic/assets/models/library/Pillar.glb b/examples/bevy_registry_export/basic/assets/models/library/Pillar.glb new file mode 100644 index 0000000000000000000000000000000000000000..9a6f3e0fa3cc452991f7bfcf0426302a831c6b20 GIT binary patch literal 3872 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 X->$VChcUxQdX|SsGh$}s zSTQC&hdmn(i>|xthGo04%{i<%UH2UR1vc;xbisF@=gCj8WGmQ5*WbLk@80iz@7^bO zdv|X7EO`BJ7$lBm zUO}>@u-EgU1YRt8gLv2z3z>yI$IO}8%*eT#&*ih3hx~XYljRqg^o{l+o55l+!_n5g zUE#HQTq&OJ`0e|rPffq;cdmt<5njGMLIr*sKJBnS2m=u$u?yB7Gd*3>l^YYy8oe;+ zx~T*$u{(05iA2}OF^pWXHwdG|ZF#ZZ#)H=%^n~NI!w7b;Gs0>-25uwrin zJ(oWj>GTBO>4gtQ=)XZLx{bcW5VV`&u)7n8SdI(2N8tR!NUOoFn8mzVvMQEk7xGmr zYvwAZ{3+*)Rk zvgJ*!7m?TQ#aTt1w;z(76~R6g0j;a@uP-gGEH({pyHf_btWwg}C=n|sUvL;V8+!7} z+V-~mo<++fUex8UTnJaP_@X=sHpk|ZaP#g*PfzBy%`z9GrMFLON$b$a+n7nTQ0BeM zMAw#A>F||oqZYk?gulnLF#f%ue?RxZ(ZVOq<9RUr8XNC#N&hFnb&j9w$?=?6>A?QyVy=y2GM^{FbiqmtE z{O7@GEz*A;%v_l#eAWGMF4k&S{lokxFy~EcSMw#$de*w81IJN1OyCdyT&-=59v$QF z;a~pwpW44Z9UTAdnGcTesWZkJuOF&)_EY||_Rfm)*?<4R8c^;}y<>c24Olx${To`| z2IrjR&wErHotvIl-#f)$=F;=({>XX(k zYtj8RT-W1kc!JLqe;GgZXI#_wrg^zf>RP?ES?gM#u#f7ox}I0lMAnn)KN0f+f5|iD zz%lB2Or4v~0Y0iH8&mvcoYY^%9Q)6zi*qafn$MwzSx@D2sNo5H^mUylbWpQX*SV$s zQioaoTFi;OTFfI2bN?_;)ej1D|0oU<{-{y)JlCr*&qZy@y`k0{?5owH?jM;K>wN#n zzDQ$A|1{>by+?}kJbSe`>Ris$`&eGCi}OzKe=N?J12j~a{ng$>4eN1K56FJg^jEVW z*XP_j&a3I5W>)fliat*-&{Oz4N6*l==r!2a=&SSv`Wn3i`x0HIuh94Cb=cSG>+~gh zk+xyC$)j)3_h|=qhuZW_`Zg`VE>MQPLpdtLmgx$8mwrHR!oEoc{g8@Og{{($=ncwJ z1RGJ8uF{X`0QP`ldW-T@hpkhE3Uq^3U{|O?C92UP>>@ezQ(C1aY?I!mpU^cL!H(#U zv_yC40qg_%1HD7HXajbGZqvK;G+lzdM0aV8eomXPo3u{%=!^6`?DO<1`WgL_`mlZ4 zqhHXMsRi4j9$hD!Tv(Tu$s&_pg?*K_=qCM!o`roDclxjC6?z%=W%?ZbmIMu82lPAY ckWUG0LIK^U-_t(qKJ8LSLwW@Jh#u1a0Qq$x3IG5A literal 0 HcmV?d00001 diff --git a/examples/bevy_registry_export/basic/assets/registry.json b/examples/bevy_registry_export/basic/assets/registry.json new file mode 100644 index 0000000..5eeefca --- /dev/null +++ b/examples/bevy_registry_export/basic/assets/registry.json @@ -0,0 +1,10548 @@ +{ + "$defs": { + "(f32, f32)": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + }, + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "(f32, f32)", + "title": "(f32, f32)", + "type": "array", + "typeInfo": "Tuple" + }, + "alloc::borrow::Cow": { + "isComponent": false, + "isResource": false, + "short_name": "Cow", + "title": "alloc::borrow::Cow", + "type": "object", + "typeInfo": "Value" + }, + "alloc::borrow::Cow": { + "isComponent": false, + "isResource": false, + "short_name": "Cow", + "title": "alloc::borrow::Cow", + "type": "object", + "typeInfo": "Value" + }, + "alloc::string::String": { + "isComponent": false, + "isResource": false, + "short_name": "String", + "title": "alloc::string::String", + "type": "string", + "typeInfo": "Value" + }, + "alloc::vec::Vec<(f32, f32)>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/(f32, f32)" + } + }, + "short_name": "Vec<(f32, f32)>", + "title": "alloc::vec::Vec<(f32, f32)>", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::TuppleVec3" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextSection" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "bevy_animation::AnimationClip": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "curves": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec>" + } + }, + "duration": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "paths": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + } + }, + "required": [ + "curves", + "paths", + "duration" + ], + "short_name": "AnimationClip", + "title": "bevy_animation::AnimationClip", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::AnimationPlayer": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "animation": { + "type": { + "$ref": "#/$defs/bevy_animation::PlayingAnimation" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "paused", + "animation" + ], + "short_name": "AnimationPlayer", + "title": "bevy_animation::AnimationPlayer", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_asset::handle::Handle<()>": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId<()>" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle<()>", + "title": "bevy_asset::handle::Handle<()>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId<()>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId<()>", + "title": "bevy_asset::id::AssetId<()>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_example::core::camera::camera_tracking::CameraTrackable": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CameraTrackable", + "title": "bevy_bevy_registry_export_basic_example::core::camera::camera_tracking::CameraTrackable", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::core::camera::camera_tracking::CameraTracking": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "offset": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "offset" + ], + "short_name": "CameraTracking", + "title": "bevy_bevy_registry_export_basic_example::core::camera::camera_tracking::CameraTracking", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::core::camera::camera_tracking::CameraTrackingOffset": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "CameraTrackingOffset", + "title": "bevy_bevy_registry_export_basic_example::core::camera::camera_tracking::CameraTrackingOffset", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::core::physics::physics_replace_proxies::AutoAABBCollider": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Cuboid", + "Ball", + "Capsule" + ], + "short_name": "AutoAABBCollider", + "title": "bevy_bevy_registry_export_basic_example::core::physics::physics_replace_proxies::AutoAABBCollider", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_example::core::physics::physics_replace_proxies::Collider": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Ball", + "title": "Ball", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "Cuboid", + "title": "Cuboid", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Capsule", + "title": "Capsule", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Mesh" + } + ], + "short_name": "Collider", + "title": "bevy_bevy_registry_export_basic_example::core::physics::physics_replace_proxies::Collider", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_example::game::Interactible": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Interactible", + "title": "bevy_bevy_registry_export_basic_example::game::Interactible", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::game::Player": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Player", + "title": "bevy_bevy_registry_export_basic_example::game::Player", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::game::SoundMaterial": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Metal", + "Wood", + "Rock", + "Cloth", + "Squishy", + "None" + ], + "short_name": "SoundMaterial", + "title": "bevy_bevy_registry_export_basic_example::game::SoundMaterial", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_example::game::picking::Pickable": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Pickable", + "title": "bevy_bevy_registry_export_basic_example::game::picking::Pickable", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::test_components::BasicTest": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "a": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "b": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "c": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "a", + "b", + "c" + ], + "short_name": "BasicTest", + "title": "bevy_bevy_registry_export_basic_example::test_components::BasicTest", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::test_components::EnumComplex": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Float", + "title": "Float", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "Wood", + "title": "Wood", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::BasicTest" + } + } + ], + "short_name": "Vec", + "title": "Vec", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "SomeThing" + }, + { + "title": "None" + } + ], + "short_name": "EnumComplex", + "title": "bevy_bevy_registry_export_basic_example::test_components::EnumComplex", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_example::test_components::EnumTest": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Metal", + "Wood", + "Rock", + "Cloth", + "Squishy", + "None" + ], + "short_name": "EnumTest", + "title": "bevy_bevy_registry_export_basic_example::test_components::EnumTest", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_example::test_components::NestedTuppleStuff": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + }, + { + "type": { + "$ref": "#/$defs/u64" + } + }, + { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::NestingTestLevel2" + } + } + ], + "short_name": "NestedTuppleStuff", + "title": "bevy_bevy_registry_export_basic_example::test_components::NestedTuppleStuff", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::NestingTestLevel2": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "basic": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::BasicTest" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::TuppleTestColor" + } + }, + "colors_list": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::VecOfColors" + } + }, + "enable": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "enum_inner": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::EnumTest" + } + }, + "nested": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::NestingTestLevel3" + } + }, + "text": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "toggle": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::TuppleTestBool" + } + } + }, + "required": [ + "text", + "enable", + "enum_inner", + "color", + "toggle", + "basic", + "nested", + "colors_list" + ], + "short_name": "NestingTestLevel2", + "title": "bevy_bevy_registry_export_basic_example::test_components::NestingTestLevel2", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::test_components::NestingTestLevel3": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "vec": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_example::test_components::TuppleVec3" + } + } + }, + "required": [ + "vec" + ], + "short_name": "NestingTestLevel3", + "title": "bevy_bevy_registry_export_basic_example::test_components::NestingTestLevel3", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleTest2": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + }, + { + "type": { + "$ref": "#/$defs/u64" + } + }, + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "TuppleTest2", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleTest2", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleTestBool": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "TuppleTestBool", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleTestBool", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleTestColor": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "TuppleTestColor", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleTestColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleTestF32": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "TuppleTestF32", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleTestF32", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleTestStr": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "TuppleTestStr", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleTestStr", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleTestU64": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u64" + } + } + ], + "short_name": "TuppleTestU64", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleTestU64", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleVec": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "TuppleVec", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleVec", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleVec2": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "TuppleVec2", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleVec2", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleVec3": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "TuppleVec3", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleVec3", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::TuppleVecF32F32": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec<(f32, f32)>" + } + } + ], + "short_name": "TuppleVecF32F32", + "title": "bevy_bevy_registry_export_basic_example::test_components::TuppleVecF32F32", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::UnitTest": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "UnitTest", + "title": "bevy_bevy_registry_export_basic_example::test_components::UnitTest", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_example::test_components::VecOfColors": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "VecOfColors", + "title": "bevy_bevy_registry_export_basic_example::test_components::VecOfColors", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_example::test_components::VecOfVec3s2": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "VecOfVec3s2", + "title": "bevy_bevy_registry_export_basic_example::test_components::VecOfVec3s2", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_core::name::Name": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "hash": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "name": { + "type": { + "$ref": "#/$defs/alloc::borrow::Cow" + } + } + }, + "required": [ + "hash", + "name" + ], + "short_name": "Name", + "title": "bevy_core::name::Name", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::bloom::settings::BloomCompositeMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "EnergyConserving", + "Additive" + ], + "short_name": "BloomCompositeMode", + "title": "bevy_core_pipeline::bloom::settings::BloomCompositeMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold_softness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "threshold", + "threshold_softness" + ], + "short_name": "BloomPrefilterSettings", + "title": "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::bloom::settings::BloomSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "composite_mode": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::bloom::settings::BloomCompositeMode" + } + }, + "high_pass_frequency": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low_frequency_boost": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low_frequency_boost_curvature": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "prefilter_settings": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::bloom::settings::BloomPrefilterSettings" + } + } + }, + "required": [ + "intensity", + "low_frequency_boost", + "low_frequency_boost_curvature", + "high_pass_frequency", + "prefilter_settings", + "composite_mode" + ], + "short_name": "BloomSettings", + "title": "bevy_core_pipeline::bloom::settings::BloomSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::clear_color::ClearColor": { + "isComponent": false, + "isResource": true, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "ClearColor", + "title": "bevy_core_pipeline::clear_color::ClearColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_core_pipeline::clear_color::ClearColorConfig": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Default" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "Custom", + "title": "Custom", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "None" + } + ], + "short_name": "ClearColorConfig", + "title": "bevy_core_pipeline::clear_color::ClearColorConfig", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "denoise": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "sharpening_strength": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "enabled", + "sharpening_strength", + "denoise" + ], + "short_name": "ContrastAdaptiveSharpeningSettings", + "title": "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_2d::camera_2d::Camera2d": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "clear_color": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::clear_color::ClearColorConfig" + } + } + }, + "required": [ + "clear_color" + ], + "short_name": "Camera2d", + "title": "bevy_core_pipeline::core_2d::camera_2d::Camera2d", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3d": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "clear_color": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::clear_color::ClearColorConfig" + } + }, + "depth_load_op": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp" + } + }, + "depth_texture_usages": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage" + } + }, + "screen_space_specular_transmission_quality": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality" + } + }, + "screen_space_specular_transmission_steps": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "clear_color", + "depth_load_op", + "depth_texture_usages", + "screen_space_specular_transmission_steps", + "screen_space_specular_transmission_quality" + ], + "short_name": "Camera3d", + "title": "bevy_core_pipeline::core_3d::camera_3d::Camera3d", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Clear", + "title": "Clear", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Load" + } + ], + "short_name": "Camera3dDepthLoadOp", + "title": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::fxaa::Fxaa": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "edge_threshold": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::fxaa::Sensitivity" + } + }, + "edge_threshold_min": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::fxaa::Sensitivity" + } + }, + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled", + "edge_threshold", + "edge_threshold_min" + ], + "short_name": "Fxaa", + "title": "bevy_core_pipeline::fxaa::Fxaa", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::DepthPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "DepthPrepass", + "title": "bevy_core_pipeline::prepass::DepthPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::NormalPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NormalPrepass", + "title": "bevy_core_pipeline::prepass::NormalPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::tonemapping::DebandDither": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Disabled", + "Enabled" + ], + "short_name": "DebandDither", + "title": "bevy_core_pipeline::tonemapping::DebandDither", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::tonemapping::Tonemapping": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "None", + "Reinhard", + "ReinhardLuminance", + "AcesFitted", + "AgX", + "SomewhatBoringDisplayTransform", + "TonyMcMapface", + "BlenderFilmic" + ], + "short_name": "Tonemapping", + "title": "bevy_core_pipeline::tonemapping::Tonemapping", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ecs::Entity": { + "isComponent": false, + "isResource": false, + "short_name": "Entity", + "title": "bevy_ecs::Entity", + "type": "object", + "typeInfo": "Value" + }, + "bevy_egui::EguiSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "default_open_url_target": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "scale_factor" + ], + "short_name": "EguiSettings", + "title": "bevy_egui::EguiSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf::GltfExtras": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value" + ], + "short_name": "GltfExtras", + "title": "bevy_gltf::GltfExtras", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_blueprints::animation::Animations": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "named_animations": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + }, + "required": [ + "named_animations" + ], + "short_name": "Animations", + "title": "bevy_gltf_blueprints::animation::Animations", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_blueprints::materials::MaterialInfo": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "source": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name", + "source" + ], + "short_name": "MaterialInfo", + "title": "bevy_gltf_blueprints::materials::MaterialInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_blueprints::spawn_from_blueprints::BlueprintName": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "BlueprintName", + "title": "bevy_gltf_blueprints::spawn_from_blueprints::BlueprintName", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_gltf_blueprints::spawn_from_blueprints::SpawnHere": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "SpawnHere", + "title": "bevy_gltf_blueprints::spawn_from_blueprints::SpawnHere", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_hierarchy::components::children::Children": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/smallvec::SmallVec<[bevy_ecs::Entity; 8]>" + } + } + ], + "short_name": "Children", + "title": "bevy_hierarchy::components::children::Children", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_hierarchy::components::parent::Parent": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + ], + "short_name": "Parent", + "title": "bevy_hierarchy::components::parent::Parent", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::ButtonState": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Pressed", + "Released" + ], + "short_name": "ButtonState", + "title": "bevy_input::ButtonState", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::AxisSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "deadzone_lowerbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "deadzone_upperbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "livezone_lowerbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "livezone_upperbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "livezone_upperbound", + "deadzone_upperbound", + "deadzone_lowerbound", + "livezone_lowerbound", + "threshold" + ], + "short_name": "AxisSettings", + "title": "bevy_input::gamepad::AxisSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::ButtonAxisSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "high": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "high", + "low", + "threshold" + ], + "short_name": "ButtonAxisSettings", + "title": "bevy_input::gamepad::ButtonAxisSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::ButtonSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "press_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "release_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "press_threshold", + "release_threshold" + ], + "short_name": "ButtonSettings", + "title": "bevy_input::gamepad::ButtonSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::Gamepad": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "id": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "id" + ], + "short_name": "Gamepad", + "title": "bevy_input::gamepad::Gamepad", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxis": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "axis_type": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadAxisType" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + } + }, + "required": [ + "gamepad", + "axis_type" + ], + "short_name": "GamepadAxis", + "title": "bevy_input::gamepad::GamepadAxis", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxisType": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "LeftStickX" + }, + { + "title": "LeftStickY" + }, + { + "title": "LeftZ" + }, + { + "title": "RightStickX" + }, + { + "title": "RightStickY" + }, + { + "title": "RightZ" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "Other", + "title": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadAxisType", + "title": "bevy_input::gamepad::GamepadAxisType", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadButton": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "button_type": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButtonType" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + } + }, + "required": [ + "gamepad", + "button_type" + ], + "short_name": "GamepadButton", + "title": "bevy_input::gamepad::GamepadButton", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "button": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButton" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + } + }, + "required": [ + "button", + "state" + ], + "short_name": "GamepadButtonInput", + "title": "bevy_input::gamepad::GamepadButtonInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonType": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "South" + }, + { + "title": "East" + }, + { + "title": "North" + }, + { + "title": "West" + }, + { + "title": "C" + }, + { + "title": "Z" + }, + { + "title": "LeftTrigger" + }, + { + "title": "LeftTrigger2" + }, + { + "title": "RightTrigger" + }, + { + "title": "RightTrigger2" + }, + { + "title": "Select" + }, + { + "title": "Start" + }, + { + "title": "Mode" + }, + { + "title": "LeftThumb" + }, + { + "title": "RightThumb" + }, + { + "title": "DPadUp" + }, + { + "title": "DPadDown" + }, + { + "title": "DPadLeft" + }, + { + "title": "DPadRight" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "Other", + "title": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadButtonType", + "title": "bevy_input::gamepad::GamepadButtonType", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadConnection": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadInfo" + } + } + ], + "short_name": "Connected", + "title": "Connected", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Disconnected" + } + ], + "short_name": "GamepadConnection", + "title": "bevy_input::gamepad::GamepadConnection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "axis_settings": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + }, + "button_axis_settings": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + }, + "button_settings": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + }, + "default_axis_settings": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::AxisSettings" + } + }, + "default_button_axis_settings": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::ButtonAxisSettings" + } + }, + "default_button_settings": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::ButtonSettings" + } + } + }, + "required": [ + "default_button_settings", + "default_axis_settings", + "default_button_axis_settings", + "button_settings", + "axis_settings", + "button_axis_settings" + ], + "short_name": "GamepadSettings", + "title": "bevy_input::gamepad::GamepadSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::keyboard::KeyCode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Key1", + "Key2", + "Key3", + "Key4", + "Key5", + "Key6", + "Key7", + "Key8", + "Key9", + "Key0", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "Escape", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "F13", + "F14", + "F15", + "F16", + "F17", + "F18", + "F19", + "F20", + "F21", + "F22", + "F23", + "F24", + "Snapshot", + "Scroll", + "Pause", + "Insert", + "Home", + "Delete", + "End", + "PageDown", + "PageUp", + "Left", + "Up", + "Right", + "Down", + "Back", + "Return", + "Space", + "Compose", + "Caret", + "Numlock", + "Numpad0", + "Numpad1", + "Numpad2", + "Numpad3", + "Numpad4", + "Numpad5", + "Numpad6", + "Numpad7", + "Numpad8", + "Numpad9", + "AbntC1", + "AbntC2", + "NumpadAdd", + "Apostrophe", + "Apps", + "Asterisk", + "Plus", + "At", + "Ax", + "Backslash", + "Calculator", + "Capital", + "Colon", + "Comma", + "Convert", + "NumpadDecimal", + "NumpadDivide", + "Equals", + "Grave", + "Kana", + "Kanji", + "AltLeft", + "BracketLeft", + "ControlLeft", + "ShiftLeft", + "SuperLeft", + "Mail", + "MediaSelect", + "MediaStop", + "Minus", + "NumpadMultiply", + "Mute", + "MyComputer", + "NavigateForward", + "NavigateBackward", + "NextTrack", + "NoConvert", + "NumpadComma", + "NumpadEnter", + "NumpadEquals", + "Oem102", + "Period", + "PlayPause", + "Power", + "PrevTrack", + "AltRight", + "BracketRight", + "ControlRight", + "ShiftRight", + "SuperRight", + "Semicolon", + "Slash", + "Sleep", + "Stop", + "NumpadSubtract", + "Sysrq", + "Tab", + "Underline", + "Unlabeled", + "VolumeDown", + "VolumeUp", + "Wake", + "WebBack", + "WebFavorites", + "WebForward", + "WebHome", + "WebRefresh", + "WebSearch", + "WebStop", + "Yen", + "Copy", + "Paste", + "Cut" + ], + "short_name": "KeyCode", + "title": "bevy_input::keyboard::KeyCode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::keyboard::KeyboardInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "key_code": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scan_code": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "scan_code", + "state", + "window" + ], + "short_name": "KeyboardInput", + "title": "bevy_input::keyboard::KeyboardInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::keyboard::ScanCode": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "ScanCode", + "title": "bevy_input::keyboard::ScanCode", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::mouse::MouseButton": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Left" + }, + { + "title": "Right" + }, + { + "title": "Middle" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "Other", + "title": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "MouseButton", + "title": "bevy_input::mouse::MouseButton", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::mouse::MouseButtonInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "button": { + "type": { + "$ref": "#/$defs/bevy_input::mouse::MouseButton" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "button", + "state", + "window" + ], + "short_name": "MouseButtonInput", + "title": "bevy_input::mouse::MouseButtonInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::mouse::MouseMotion": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "delta": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "delta" + ], + "short_name": "MouseMotion", + "title": "bevy_input::mouse::MouseMotion", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::mouse::MouseScrollUnit": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Line", + "Pixel" + ], + "short_name": "MouseScrollUnit", + "title": "bevy_input::mouse::MouseScrollUnit", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::mouse::MouseWheel": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "unit": { + "type": { + "$ref": "#/$defs/bevy_input::mouse::MouseScrollUnit" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "unit", + "x", + "y", + "window" + ], + "short_name": "MouseWheel", + "title": "bevy_input::mouse::MouseWheel", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::touch::ForceTouch": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "altitude_angle": { + "title": "altitude_angle", + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "force": { + "title": "force", + "type": { + "$ref": "#/$defs/f64" + } + }, + "max_possible_force": { + "title": "max_possible_force", + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "force", + "max_possible_force" + ], + "short_name": "Calibrated", + "title": "Calibrated", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "Normalized", + "title": "Normalized", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ForceTouch", + "title": "bevy_input::touch::ForceTouch", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::touch::TouchInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "force": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "id": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "phase": { + "type": { + "$ref": "#/$defs/bevy_input::touch::TouchPhase" + } + }, + "position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "phase", + "position", + "id" + ], + "short_name": "TouchInput", + "title": "bevy_input::touch::TouchInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::touch::TouchPhase": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Started", + "Moved", + "Ended", + "Canceled" + ], + "short_name": "TouchPhase", + "title": "bevy_input::touch::TouchPhase", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::touchpad::TouchpadMagnify": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "TouchpadMagnify", + "title": "bevy_input::touchpad::TouchpadMagnify", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::touchpad::TouchpadRotate": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "TouchpadRotate", + "title": "bevy_input::touchpad::TouchpadRotate", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_math::Rect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "max": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "min": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "min", + "max" + ], + "short_name": "Rect", + "title": "bevy_math::Rect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::alpha::AlphaMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Opaque" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Mask", + "title": "Mask", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Blend" + }, + { + "title": "Premultiplied" + }, + { + "title": "Add" + }, + { + "title": "Multiply" + } + ], + "short_name": "AlphaMode", + "title": "bevy_pbr::alpha::AlphaMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::bundle::CascadesVisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CascadesVisibleEntities", + "title": "bevy_pbr::bundle::CascadesVisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::bundle::CubemapVisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CubemapVisibleEntities", + "title": "bevy_pbr::bundle::CubemapVisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::environment_map::EnvironmentMapLight": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "diffuse_map": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "specular_map": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "diffuse_map", + "specular_map" + ], + "short_name": "EnvironmentMapLight", + "title": "bevy_pbr::environment_map::EnvironmentMapLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::fog::FogSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "directional_light_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "directional_light_exponent": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "falloff": { + "type": { + "$ref": "#/$defs/bevy_pbr::fog::FogFalloff" + } + } + }, + "required": [ + "color", + "directional_light_color", + "directional_light_exponent", + "falloff" + ], + "short_name": "FogSettings", + "title": "bevy_pbr::fog::FogSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::AmbientLight": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "brightness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + }, + "required": [ + "color", + "brightness" + ], + "short_name": "AmbientLight", + "title": "bevy_pbr::light::AmbientLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::Cascade": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "projection": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + }, + "texel_size": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "view_projection": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + }, + "view_transform": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + } + }, + "required": [ + "view_transform", + "projection", + "view_projection", + "texel_size" + ], + "short_name": "Cascade", + "title": "bevy_pbr::light::Cascade", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::CascadeShadowConfig": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "bounds": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "minimum_distance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "overlap_proportion": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "bounds", + "overlap_proportion", + "minimum_distance" + ], + "short_name": "CascadeShadowConfig", + "title": "bevy_pbr::light::CascadeShadowConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::Cascades": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "cascades": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + }, + "required": [ + "cascades" + ], + "short_name": "Cascades", + "title": "bevy_pbr::light::Cascades", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::ClusterConfig": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "title": "Single" + }, + { + "additionalProperties": false, + "properties": { + "dimensions": { + "title": "dimensions", + "type": { + "$ref": "#/$defs/glam::UVec3" + } + }, + "dynamic_resizing": { + "title": "dynamic_resizing", + "type": { + "$ref": "#/$defs/bool" + } + }, + "z_config": { + "title": "z_config", + "type": { + "$ref": "#/$defs/bevy_pbr::light::ClusterZConfig" + } + } + }, + "required": [ + "dimensions", + "z_config", + "dynamic_resizing" + ], + "short_name": "XYZ", + "title": "XYZ", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "dynamic_resizing": { + "title": "dynamic_resizing", + "type": { + "$ref": "#/$defs/bool" + } + }, + "total": { + "title": "total", + "type": { + "$ref": "#/$defs/u32" + } + }, + "z_config": { + "title": "z_config", + "type": { + "$ref": "#/$defs/bevy_pbr::light::ClusterZConfig" + } + }, + "z_slices": { + "title": "z_slices", + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "total", + "z_slices", + "z_config", + "dynamic_resizing" + ], + "short_name": "FixedZ", + "title": "FixedZ", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "ClusterConfig", + "title": "bevy_pbr::light::ClusterConfig", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::light::ClusterFarZMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "MaxLightRange" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Constant", + "title": "Constant", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ClusterFarZMode", + "title": "bevy_pbr::light::ClusterFarZMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::light::ClusterZConfig": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "far_z_mode": { + "type": { + "$ref": "#/$defs/bevy_pbr::light::ClusterFarZMode" + } + }, + "first_slice_depth": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "first_slice_depth", + "far_z_mode" + ], + "short_name": "ClusterZConfig", + "title": "bevy_pbr::light::ClusterZConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::DirectionalLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "illuminance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_normal_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadows_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "color", + "illuminance", + "shadows_enabled", + "shadow_depth_bias", + "shadow_normal_bias" + ], + "short_name": "DirectionalLight", + "title": "bevy_pbr::light::DirectionalLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::DirectionalLightShadowMap": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "DirectionalLightShadowMap", + "title": "bevy_pbr::light::DirectionalLightShadowMap", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::NotShadowCaster": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NotShadowCaster", + "title": "bevy_pbr::light::NotShadowCaster", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::NotShadowReceiver": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NotShadowReceiver", + "title": "bevy_pbr::light::NotShadowReceiver", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::PointLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "radius": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "range": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_normal_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadows_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "color", + "intensity", + "range", + "radius", + "shadows_enabled", + "shadow_depth_bias", + "shadow_normal_bias" + ], + "short_name": "PointLight", + "title": "bevy_pbr::light::PointLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::PointLightShadowMap": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "PointLightShadowMap", + "title": "bevy_pbr::light::PointLightShadowMap", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::ShadowFilteringMethod": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Hardware2x2", + "Castano13", + "Jimenez14" + ], + "short_name": "ShadowFilteringMethod", + "title": "bevy_pbr::light::ShadowFilteringMethod", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_pbr::light::SpotLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "inner_angle": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "outer_angle": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "radius": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "range": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_normal_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadows_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "color", + "intensity", + "range", + "radius", + "shadows_enabled", + "shadow_depth_bias", + "shadow_normal_bias", + "outer_angle", + "inner_angle" + ], + "short_name": "SpotLight", + "title": "bevy_pbr::light::SpotLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::material::DefaultOpaqueRendererMethod": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_pbr::material::OpaqueRendererMethod" + } + } + ], + "short_name": "DefaultOpaqueRendererMethod", + "title": "bevy_pbr::material::DefaultOpaqueRendererMethod", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_pbr::pbr_material::StandardMaterial": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "alpha_mode": { + "type": { + "$ref": "#/$defs/bevy_pbr::alpha::AlphaMode" + } + }, + "attenuation_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "attenuation_distance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "base_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "base_color_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "deferred_lighting_pass_id": { + "type": { + "$ref": "#/$defs/u8" + } + }, + "depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "depth_map": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "diffuse_transmission": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "double_sided": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "emissive": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "emissive_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "flip_normal_map_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "fog_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "ior": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_parallax_layer_count": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "metallic": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "metallic_roughness_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "normal_map_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "occlusion_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "opaque_render_method": { + "type": { + "$ref": "#/$defs/bevy_pbr::material::OpaqueRendererMethod" + } + }, + "parallax_depth_scale": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "parallax_mapping_method": { + "type": { + "$ref": "#/$defs/bevy_pbr::parallax::ParallaxMappingMethod" + } + }, + "perceptual_roughness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "reflectance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "specular_transmission": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "thickness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "unlit": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "base_color", + "emissive", + "perceptual_roughness", + "metallic", + "reflectance", + "diffuse_transmission", + "specular_transmission", + "thickness", + "ior", + "attenuation_distance", + "attenuation_color", + "flip_normal_map_y", + "double_sided", + "unlit", + "fog_enabled", + "alpha_mode", + "depth_bias", + "parallax_depth_scale", + "parallax_mapping_method", + "max_parallax_layer_count", + "opaque_render_method", + "deferred_lighting_pass_id" + ], + "short_name": "StandardMaterial", + "title": "bevy_pbr::pbr_material::StandardMaterial", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "quality_level": { + "type": { + "$ref": "#/$defs/bevy_pbr::ssao::ScreenSpaceAmbientOcclusionQualityLevel" + } + } + }, + "required": [ + "quality_level" + ], + "short_name": "ScreenSpaceAmbientOcclusionSettings", + "title": "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::wireframe::NoWireframe": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NoWireframe", + "title": "bevy_pbr::wireframe::NoWireframe", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::wireframe::Wireframe": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Wireframe", + "title": "bevy_pbr::wireframe::Wireframe", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::wireframe::WireframeConfig": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "default_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "global": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "global", + "default_color" + ], + "short_name": "WireframeConfig", + "title": "bevy_pbr::wireframe::WireframeConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::AdditionalMassProperties": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Mass", + "title": "Mass", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_rapier3d::dynamics::rigid_body::MassProperties" + } + } + ], + "short_name": "MassProperties", + "title": "MassProperties", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "AdditionalMassProperties", + "title": "bevy_rapier3d::dynamics::rigid_body::AdditionalMassProperties", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_rapier3d::dynamics::rigid_body::Ccd": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled" + ], + "short_name": "Ccd", + "title": "bevy_rapier3d::dynamics::rigid_body::Ccd", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::Damping": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "angular_damping": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "linear_damping": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "linear_damping", + "angular_damping" + ], + "short_name": "Damping", + "title": "bevy_rapier3d::dynamics::rigid_body::Damping", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::Dominance": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "groups": { + "type": { + "$ref": "#/$defs/i8" + } + } + }, + "required": [ + "groups" + ], + "short_name": "Dominance", + "title": "bevy_rapier3d::dynamics::rigid_body::Dominance", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::ExternalForce": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "force": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "torque": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "force", + "torque" + ], + "short_name": "ExternalForce", + "title": "bevy_rapier3d::dynamics::rigid_body::ExternalForce", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::ExternalImpulse": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "impulse": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "torque_impulse": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "impulse", + "torque_impulse" + ], + "short_name": "ExternalImpulse", + "title": "bevy_rapier3d::dynamics::rigid_body::ExternalImpulse", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::GravityScale": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "GravityScale", + "title": "bevy_rapier3d::dynamics::rigid_body::GravityScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::dynamics::rigid_body::LockedAxes": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "LockedAxes", + "title": "bevy_rapier3d::dynamics::rigid_body::LockedAxes", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::dynamics::rigid_body::MassProperties": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "local_center_of_mass": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "mass": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "principal_inertia": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "principal_inertia_local_frame": { + "type": { + "$ref": "#/$defs/glam::Quat" + } + } + }, + "required": [ + "local_center_of_mass", + "mass", + "principal_inertia_local_frame", + "principal_inertia" + ], + "short_name": "MassProperties", + "title": "bevy_rapier3d::dynamics::rigid_body::MassProperties", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::RigidBody": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Dynamic", + "Fixed", + "KinematicPositionBased", + "KinematicVelocityBased" + ], + "short_name": "RigidBody", + "title": "bevy_rapier3d::dynamics::rigid_body::RigidBody", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_rapier3d::dynamics::rigid_body::Sleeping": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "angular_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "linear_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "sleeping": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "linear_threshold", + "angular_threshold", + "sleeping" + ], + "short_name": "Sleeping", + "title": "bevy_rapier3d::dynamics::rigid_body::Sleeping", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::Velocity": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "angvel": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "linvel": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "linvel", + "angvel" + ], + "short_name": "Velocity", + "title": "bevy_rapier3d::dynamics::rigid_body::Velocity", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::CollidingEntities": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_utils::HashSet" + } + } + ], + "short_name": "CollidingEntities", + "title": "bevy_rapier3d::geometry::collider::CollidingEntities", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::geometry::collider::CollisionGroups": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "filters": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + }, + "memberships": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + } + }, + "required": [ + "memberships", + "filters" + ], + "short_name": "CollisionGroups", + "title": "bevy_rapier3d::geometry::collider::CollisionGroups", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::ContactForceEventThreshold": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "ContactForceEventThreshold", + "title": "bevy_rapier3d::geometry::collider::ContactForceEventThreshold", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::geometry::collider::Friction": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "coefficient": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "combine_rule": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::dynamics::CoefficientCombineRule" + } + } + }, + "required": [ + "coefficient", + "combine_rule" + ], + "short_name": "Friction", + "title": "bevy_rapier3d::geometry::collider::Friction", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::Group": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Group", + "title": "bevy_rapier3d::geometry::collider::Group", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::geometry::collider::Restitution": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "coefficient": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "combine_rule": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::dynamics::CoefficientCombineRule" + } + } + }, + "required": [ + "coefficient", + "combine_rule" + ], + "short_name": "Restitution", + "title": "bevy_rapier3d::geometry::collider::Restitution", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::Sensor": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Sensor", + "title": "bevy_rapier3d::geometry::collider::Sensor", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::SolverGroups": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "filters": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + }, + "memberships": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + } + }, + "required": [ + "memberships", + "filters" + ], + "short_name": "SolverGroups", + "title": "bevy_rapier3d::geometry::collider::SolverGroups", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::render::DebugRenderContext": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled" + ], + "short_name": "DebugRenderContext", + "title": "bevy_rapier3d::render::DebugRenderContext", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::camera::Camera": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "hdr": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "is_active": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "msaa_writeback": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "order": { + "type": { + "$ref": "#/$defs/isize" + } + }, + "viewport": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "order", + "is_active", + "hdr", + "msaa_writeback" + ], + "short_name": "Camera", + "title": "bevy_render::camera::camera::Camera", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::camera::CameraRenderGraph": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::borrow::Cow" + } + } + ], + "short_name": "CameraRenderGraph", + "title": "bevy_render::camera::camera::CameraRenderGraph", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::camera::camera::RenderTarget": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowRef" + } + } + ], + "short_name": "Window", + "title": "Window", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Image", + "title": "Image", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::manual_texture_view::ManualTextureViewHandle" + } + } + ], + "short_name": "TextureView", + "title": "TextureView", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "RenderTarget", + "title": "bevy_render::camera::camera::RenderTarget", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::camera::Viewport": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "depth": { + "type": { + "$ref": "#/$defs/core::ops::Range" + } + }, + "physical_position": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + }, + "physical_size": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + } + }, + "required": [ + "physical_position", + "physical_size", + "depth" + ], + "short_name": "Viewport", + "title": "bevy_render::camera::camera::Viewport", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::OrthographicProjection": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "area": { + "type": { + "$ref": "#/$defs/bevy_math::Rect" + } + }, + "far": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "near": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scale": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scaling_mode": { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::ScalingMode" + } + }, + "viewport_origin": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "near", + "far", + "viewport_origin", + "scaling_mode", + "scale", + "area" + ], + "short_name": "OrthographicProjection", + "title": "bevy_render::camera::projection::OrthographicProjection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::PerspectiveProjection": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "aspect_ratio": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "far": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "fov": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "near": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "fov", + "aspect_ratio", + "near", + "far" + ], + "short_name": "PerspectiveProjection", + "title": "bevy_render::camera::projection::PerspectiveProjection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::Projection": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::PerspectiveProjection" + } + } + ], + "short_name": "Perspective", + "title": "Perspective", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::OrthographicProjection" + } + } + ], + "short_name": "Orthographic", + "title": "Orthographic", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Projection", + "title": "bevy_render::camera::projection::Projection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::projection::ScalingMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "height": { + "title": "height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "width": { + "title": "width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "width", + "height" + ], + "short_name": "Fixed", + "title": "Fixed", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "WindowSize", + "title": "WindowSize", + "type": "array", + "typeInfo": "Tuple" + }, + { + "additionalProperties": false, + "properties": { + "min_height": { + "title": "min_height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_width": { + "title": "min_width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "min_width", + "min_height" + ], + "short_name": "AutoMin", + "title": "AutoMin", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "max_height": { + "title": "max_height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_width": { + "title": "max_width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "max_width", + "max_height" + ], + "short_name": "AutoMax", + "title": "AutoMax", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "FixedVertical", + "title": "FixedVertical", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "FixedHorizontal", + "title": "FixedHorizontal", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ScalingMode", + "title": "bevy_render::camera::projection::ScalingMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::color::Color": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "blue": { + "title": "blue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "green": { + "title": "green", + "type": { + "$ref": "#/$defs/f32" + } + }, + "red": { + "title": "red", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "red", + "green", + "blue", + "alpha" + ], + "short_name": "Rgba", + "title": "Rgba", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "blue": { + "title": "blue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "green": { + "title": "green", + "type": { + "$ref": "#/$defs/f32" + } + }, + "red": { + "title": "red", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "red", + "green", + "blue", + "alpha" + ], + "short_name": "RgbaLinear", + "title": "RgbaLinear", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "title": "hue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "title": "lightness", + "type": { + "$ref": "#/$defs/f32" + } + }, + "saturation": { + "title": "saturation", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "hue", + "saturation", + "lightness", + "alpha" + ], + "short_name": "Hsla", + "title": "Hsla", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "chroma": { + "title": "chroma", + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "title": "hue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "title": "lightness", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "lightness", + "chroma", + "hue", + "alpha" + ], + "short_name": "Lcha", + "title": "Lcha", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "Color", + "title": "bevy_render::color::Color", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::globals::GlobalsUniform": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "delta_time": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "frame_count": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "time": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "time", + "delta_time", + "frame_count" + ], + "short_name": "GlobalsUniform", + "title": "bevy_render::globals::GlobalsUniform", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::mesh::Indices": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "U16", + "title": "U16", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "U32", + "title": "U32", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Indices", + "title": "bevy_render::mesh::mesh::Indices", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::mesh::mesh::Mesh": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "indices": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "morph_target_names": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "morph_targets": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + } + }, + "required": [], + "short_name": "Mesh", + "title": "bevy_render::mesh::mesh::Mesh", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::mesh::skinning::SkinnedMesh": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "inverse_bindposes": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "joints": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "inverse_bindposes", + "joints" + ], + "short_name": "SkinnedMesh", + "title": "bevy_render::mesh::mesh::skinning::SkinnedMesh", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::morph::MeshMorphWeights": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "weights": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "weights" + ], + "short_name": "MeshMorphWeights", + "title": "bevy_render::mesh::morph::MeshMorphWeights", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::morph::MorphWeights": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "first_mesh": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "weights": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "weights" + ], + "short_name": "MorphWeights", + "title": "bevy_render::mesh::morph::MorphWeights", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::Aabb": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "center": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "half_extents": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "center", + "half_extents" + ], + "short_name": "Aabb", + "title": "bevy_render::primitives::Aabb", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::CascadesFrusta": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CascadesFrusta", + "title": "bevy_render::primitives::CascadesFrusta", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::CubemapFrusta": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CubemapFrusta", + "title": "bevy_render::primitives::CubemapFrusta", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::Frustum": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Frustum", + "title": "bevy_render::primitives::Frustum", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::texture::image::Image": { + "isComponent": false, + "isResource": false, + "short_name": "Image", + "title": "bevy_render::texture::image::Image", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::view::ColorGrading": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "exposure": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "gamma": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "post_saturation": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "pre_saturation": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "exposure", + "gamma", + "pre_saturation", + "post_saturation" + ], + "short_name": "ColorGrading", + "title": "bevy_render::view::ColorGrading", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::Msaa": { + "isComponent": false, + "isResource": true, + "oneOf": [ + "Off", + "Sample2", + "Sample4", + "Sample8" + ], + "short_name": "Msaa", + "title": "bevy_render::view::Msaa", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_render::view::visibility::InheritedVisibility": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "InheritedVisibility", + "title": "bevy_render::view::visibility::InheritedVisibility", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::view::visibility::NoFrustumCulling": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NoFrustumCulling", + "title": "bevy_render::view::visibility::NoFrustumCulling", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::ViewVisibility": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "ViewVisibility", + "title": "bevy_render::view::visibility::ViewVisibility", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::view::visibility::Visibility": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Inherited", + "Hidden", + "Visible" + ], + "short_name": "Visibility", + "title": "bevy_render::view::visibility::Visibility", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_render::view::visibility::VisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "VisibleEntities", + "title": "bevy_render::view::visibility::VisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::render_layers::RenderLayers": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "RenderLayers", + "title": "bevy_render::view::visibility::render_layers::RenderLayers", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_sprite::mesh2d::color_material::ColorMaterial": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + } + }, + "required": [ + "color" + ], + "short_name": "ColorMaterial", + "title": "bevy_sprite::mesh2d::color_material::ColorMaterial", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::mesh2d::mesh::Mesh2dHandle": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Mesh2dHandle", + "title": "bevy_sprite::mesh2d::mesh::Mesh2dHandle", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_sprite::sprite::Anchor": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Center" + }, + { + "title": "BottomLeft" + }, + { + "title": "BottomCenter" + }, + { + "title": "BottomRight" + }, + { + "title": "CenterLeft" + }, + { + "title": "CenterRight" + }, + { + "title": "TopLeft" + }, + { + "title": "TopCenter" + }, + { + "title": "TopRight" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "Custom", + "title": "Custom", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Anchor", + "title": "bevy_sprite::sprite::Anchor", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_sprite::sprite::Sprite": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "anchor": { + "type": { + "$ref": "#/$defs/bevy_sprite::sprite::Anchor" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "custom_size": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "rect": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "color", + "flip_x", + "flip_y", + "anchor" + ], + "short_name": "Sprite", + "title": "bevy_sprite::sprite::Sprite", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_atlas::TextureAtlas": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "texture_handles": { + "type": { + "$ref": "#/$defs/core::option::Option, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>>" + } + }, + "textures": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "texture", + "size", + "textures" + ], + "short_name": "TextureAtlas", + "title": "bevy_sprite::texture_atlas::TextureAtlas", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_atlas::TextureAtlasSprite": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "anchor": { + "type": { + "$ref": "#/$defs/bevy_sprite::sprite::Anchor" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "custom_size": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "index": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "color", + "index", + "flip_x", + "flip_y", + "anchor" + ], + "short_name": "TextureAtlasSprite", + "title": "bevy_sprite::texture_atlas::TextureAtlasSprite", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::pipeline::TextLayoutInfo": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "glyphs": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "logical_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "glyphs", + "logical_size" + ], + "short_name": "TextLayoutInfo", + "title": "bevy_text::pipeline::TextLayoutInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text2d::Text2dBounds": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "size" + ], + "short_name": "Text2dBounds", + "title": "bevy_text::text2d::Text2dBounds", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::BreakLineOn": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "WordBoundary", + "AnyCharacter", + "NoWrap" + ], + "short_name": "BreakLineOn", + "title": "bevy_text::text::BreakLineOn", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_text::text::Text": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "alignment": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextAlignment" + } + }, + "linebreak_behavior": { + "type": { + "$ref": "#/$defs/bevy_text::text::BreakLineOn" + } + }, + "sections": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "sections", + "alignment", + "linebreak_behavior" + ], + "short_name": "Text", + "title": "bevy_text::text::Text", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::TextAlignment": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Left", + "Center", + "Right" + ], + "short_name": "TextAlignment", + "title": "bevy_text::text::TextAlignment", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_text::text::TextSection": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "style": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextStyle" + } + }, + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value", + "style" + ], + "short_name": "TextSection", + "title": "bevy_text::text::TextSection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::TextStyle": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "font": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "font_size": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "font", + "font_size", + "color" + ], + "short_name": "TextStyle", + "title": "bevy_text::text::TextStyle", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::stopwatch::Stopwatch": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "elapsed", + "paused" + ], + "short_name": "Stopwatch", + "title": "bevy_time::stopwatch::Stopwatch", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time<()>": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/()" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time<()>", + "title": "bevy_time::time::Time<()>", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/bevy_time::fixed::Fixed" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time", + "title": "bevy_time::time::Time", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/bevy_time::real::Real" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time", + "title": "bevy_time::time::Time", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/bevy_time::virt::Virtual" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time", + "title": "bevy_time::time::Time", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::timer::Timer": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "duration": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "finished": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "mode": { + "type": { + "$ref": "#/$defs/bevy_time::timer::TimerMode" + } + }, + "stopwatch": { + "type": { + "$ref": "#/$defs/bevy_time::stopwatch::Stopwatch" + } + }, + "times_finished_this_tick": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "stopwatch", + "duration", + "mode", + "finished", + "times_finished_this_tick" + ], + "short_name": "Timer", + "title": "bevy_time::timer::Timer", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_transform::components::global_transform::GlobalTransform": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Affine3A" + } + } + ], + "short_name": "GlobalTransform", + "title": "bevy_transform::components::global_transform::GlobalTransform", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_transform::components::transform::Transform": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "rotation": { + "type": { + "$ref": "#/$defs/glam::Quat" + } + }, + "scale": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "translation", + "rotation", + "scale" + ], + "short_name": "Transform", + "title": "bevy_transform::components::transform::Transform", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::UiScale": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "UiScale", + "title": "bevy_ui::UiScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::camera_config::UiCameraConfig": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "show_ui": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "show_ui" + ], + "short_name": "UiCameraConfig", + "title": "bevy_ui::camera_config::UiCameraConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::focus::FocusPolicy": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Block", + "Pass" + ], + "short_name": "FocusPolicy", + "title": "bevy_ui::focus::FocusPolicy", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::focus::Interaction": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Pressed", + "Hovered", + "None" + ], + "short_name": "Interaction", + "title": "bevy_ui::focus::Interaction", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::focus::RelativeCursorPosition": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "normalized": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "normalized_visible_node_rect": { + "type": { + "$ref": "#/$defs/bevy_math::Rect" + } + } + }, + "required": [ + "normalized_visible_node_rect" + ], + "short_name": "RelativeCursorPosition", + "title": "bevy_ui::focus::RelativeCursorPosition", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::geometry::UiRect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "bottom": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "left": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "right": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "top": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "left", + "right", + "top", + "bottom" + ], + "short_name": "UiRect", + "title": "bevy_ui::geometry::UiRect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::geometry::Val": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Auto" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Px", + "title": "Px", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Percent", + "title": "Percent", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Vw", + "title": "Vw", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Vh", + "title": "Vh", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "VMin", + "title": "VMin", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "VMax", + "title": "VMax", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Val", + "title": "bevy_ui::geometry::Val", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::measurement::ContentSize": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "ContentSize", + "title": "bevy_ui::measurement::ContentSize", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::AlignContent": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "short_name": "AlignContent", + "title": "bevy_ui::ui_node::AlignContent", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::AlignItems": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "AlignItems", + "title": "bevy_ui::ui_node::AlignItems", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::AlignSelf": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Auto", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "AlignSelf", + "title": "bevy_ui::ui_node::AlignSelf", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::BackgroundColor": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "BackgroundColor", + "title": "bevy_ui::ui_node::BackgroundColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::BorderColor": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "BorderColor", + "title": "bevy_ui::ui_node::BorderColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::CalculatedClip": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "clip": { + "type": { + "$ref": "#/$defs/bevy_math::Rect" + } + } + }, + "required": [ + "clip" + ], + "short_name": "CalculatedClip", + "title": "bevy_ui::ui_node::CalculatedClip", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Direction": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Inherit", + "LeftToRight", + "RightToLeft" + ], + "short_name": "Direction", + "title": "bevy_ui::ui_node::Direction", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::Display": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Flex", + "Grid", + "None" + ], + "short_name": "Display", + "title": "bevy_ui::ui_node::Display", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::FlexDirection": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Row", + "Column", + "RowReverse", + "ColumnReverse" + ], + "short_name": "FlexDirection", + "title": "bevy_ui::ui_node::FlexDirection", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::FlexWrap": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "NoWrap", + "Wrap", + "WrapReverse" + ], + "short_name": "FlexWrap", + "title": "bevy_ui::ui_node::FlexWrap", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::GridAutoFlow": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Row", + "Column", + "RowDense", + "ColumnDense" + ], + "short_name": "GridAutoFlow", + "title": "bevy_ui::ui_node::GridAutoFlow", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::GridPlacement": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "end": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "span": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "start": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [], + "short_name": "GridPlacement", + "title": "bevy_ui::ui_node::GridPlacement", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::GridTrack": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "max_sizing_function": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::MaxTrackSizingFunction" + } + }, + "min_sizing_function": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::MinTrackSizingFunction" + } + } + }, + "required": [ + "min_sizing_function", + "max_sizing_function" + ], + "short_name": "GridTrack", + "title": "bevy_ui::ui_node::GridTrack", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::JustifyContent": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "short_name": "JustifyContent", + "title": "bevy_ui::ui_node::JustifyContent", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifyItems": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "JustifyItems", + "title": "bevy_ui::ui_node::JustifyItems", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifySelf": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Auto", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "JustifySelf", + "title": "bevy_ui::ui_node::JustifySelf", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::Node": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "calculated_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "outline_offset": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "outline_width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "stack_index": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "unrounded_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "stack_index", + "calculated_size", + "outline_width", + "outline_offset", + "unrounded_size" + ], + "short_name": "Node", + "title": "bevy_ui::ui_node::Node", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Outline": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "offset": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "width", + "offset", + "color" + ], + "short_name": "Outline", + "title": "bevy_ui::ui_node::Outline", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Overflow": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::OverflowAxis" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::OverflowAxis" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "Overflow", + "title": "bevy_ui::ui_node::Overflow", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::OverflowAxis": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Visible", + "Clip" + ], + "short_name": "OverflowAxis", + "title": "bevy_ui::ui_node::OverflowAxis", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::PositionType": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Relative", + "Absolute" + ], + "short_name": "PositionType", + "title": "bevy_ui::ui_node::PositionType", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::RepeatedGridTrack": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "repetition": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridTrackRepetition" + } + }, + "tracks": { + "type": { + "$ref": "#/$defs/smallvec::SmallVec<[bevy_ui::ui_node::GridTrack; 1]>" + } + } + }, + "required": [ + "repetition", + "tracks" + ], + "short_name": "RepeatedGridTrack", + "title": "bevy_ui::ui_node::RepeatedGridTrack", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Style": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "align_content": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::AlignContent" + } + }, + "align_items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::AlignItems" + } + }, + "align_self": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::AlignSelf" + } + }, + "aspect_ratio": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "border": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::UiRect" + } + }, + "bottom": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "column_gap": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "direction": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::Direction" + } + }, + "display": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::Display" + } + }, + "flex_basis": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "flex_direction": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::FlexDirection" + } + }, + "flex_grow": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "flex_shrink": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "flex_wrap": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::FlexWrap" + } + }, + "grid_auto_columns": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "grid_auto_flow": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridAutoFlow" + } + }, + "grid_auto_rows": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "grid_column": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridPlacement" + } + }, + "grid_row": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridPlacement" + } + }, + "grid_template_columns": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "grid_template_rows": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "height": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "justify_content": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::JustifyContent" + } + }, + "justify_items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::JustifyItems" + } + }, + "justify_self": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::JustifySelf" + } + }, + "left": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "margin": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::UiRect" + } + }, + "max_height": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "max_width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "min_height": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "min_width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "overflow": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::Overflow" + } + }, + "padding": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::UiRect" + } + }, + "position_type": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::PositionType" + } + }, + "right": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "row_gap": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "top": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "display", + "position_type", + "overflow", + "direction", + "left", + "right", + "top", + "bottom", + "width", + "height", + "min_width", + "min_height", + "max_width", + "max_height", + "align_items", + "justify_items", + "align_self", + "justify_self", + "align_content", + "justify_content", + "margin", + "padding", + "border", + "flex_direction", + "flex_wrap", + "flex_grow", + "flex_shrink", + "flex_basis", + "row_gap", + "column_gap", + "grid_auto_flow", + "grid_template_rows", + "grid_template_columns", + "grid_auto_rows", + "grid_auto_columns", + "grid_row", + "grid_column" + ], + "short_name": "Style", + "title": "bevy_ui::ui_node::Style", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::UiImage": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "texture", + "flip_x", + "flip_y" + ], + "short_name": "UiImage", + "title": "bevy_ui::ui_node::UiImage", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::UiTextureAtlasImage": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "index": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "index", + "flip_x", + "flip_y" + ], + "short_name": "UiTextureAtlasImage", + "title": "bevy_ui::ui_node::UiTextureAtlasImage", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::ZIndex": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/i32" + } + } + ], + "short_name": "Local", + "title": "Local", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/i32" + } + } + ], + "short_name": "Global", + "title": "Global", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ZIndex", + "title": "bevy_ui::ui_node::ZIndex", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::widget::button::Button": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Button", + "title": "bevy_ui::widget::button::Button", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::image::UiImageSize": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "size" + ], + "short_name": "UiImageSize", + "title": "bevy_ui::widget::image::UiImageSize", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::label::Label": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Label", + "title": "bevy_ui::widget::label::Label", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::text::TextFlags": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "needs_new_measure_func": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "needs_recompute": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "needs_new_measure_func", + "needs_recompute" + ], + "short_name": "TextFlags", + "title": "bevy_ui::widget::text::TextFlags", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_utils::Duration": { + "isComponent": false, + "isResource": false, + "short_name": "Duration", + "title": "bevy_utils::Duration", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::HashSet": { + "isComponent": false, + "isResource": false, + "short_name": "HashSet", + "title": "bevy_utils::HashSet", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::Instant": { + "isComponent": false, + "isResource": false, + "short_name": "Instant", + "title": "bevy_utils::Instant", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::Uuid": { + "isComponent": false, + "isResource": false, + "short_name": "Uuid", + "title": "bevy_utils::Uuid", + "type": "object", + "typeInfo": "Value" + }, + "bevy_window::cursor::CursorIcon": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Crosshair", + "Hand", + "Arrow", + "Move", + "Text", + "Wait", + "Help", + "Progress", + "NotAllowed", + "ContextMenu", + "Cell", + "VerticalText", + "Alias", + "Copy", + "NoDrop", + "Grab", + "Grabbing", + "AllScroll", + "ZoomIn", + "ZoomOut", + "EResize", + "NResize", + "NeResize", + "NwResize", + "SResize", + "SeResize", + "SwResize", + "WResize", + "EwResize", + "NsResize", + "NeswResize", + "NwseResize", + "ColResize", + "RowResize" + ], + "short_name": "CursorIcon", + "title": "bevy_window::cursor::CursorIcon", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::event::ApplicationLifetime": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Started", + "Suspended", + "Resumed" + ], + "short_name": "ApplicationLifetime", + "title": "bevy_window::event::ApplicationLifetime", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::event::CursorEntered": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "CursorEntered", + "title": "bevy_window::event::CursorEntered", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::CursorLeft": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "CursorLeft", + "title": "bevy_window::event::CursorLeft", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::CursorMoved": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "position" + ], + "short_name": "CursorMoved", + "title": "bevy_window::event::CursorMoved", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::FileDragAndDrop": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "path_buf": { + "title": "path_buf", + "type": { + "$ref": "#/$defs/std::path::PathBuf" + } + }, + "window": { + "title": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "path_buf" + ], + "short_name": "DroppedFile", + "title": "DroppedFile", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "path_buf": { + "title": "path_buf", + "type": { + "$ref": "#/$defs/std::path::PathBuf" + } + }, + "window": { + "title": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "path_buf" + ], + "short_name": "HoveredFile", + "title": "HoveredFile", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "window": { + "title": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "HoveredFileCanceled", + "title": "HoveredFileCanceled", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "FileDragAndDrop", + "title": "bevy_window::event::FileDragAndDrop", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::event::ReceivedCharacter": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "char": { + "type": { + "$ref": "#/$defs/char" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "char" + ], + "short_name": "ReceivedCharacter", + "title": "bevy_window::event::ReceivedCharacter", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::RequestRedraw": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "RequestRedraw", + "title": "bevy_window::event::RequestRedraw", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowBackendScaleFactorChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "scale_factor" + ], + "short_name": "WindowBackendScaleFactorChanged", + "title": "bevy_window::event::WindowBackendScaleFactorChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowCloseRequested": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowCloseRequested", + "title": "bevy_window::event::WindowCloseRequested", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowClosed": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowClosed", + "title": "bevy_window::event::WindowClosed", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowCreated": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowCreated", + "title": "bevy_window::event::WindowCreated", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowFocused": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "focused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "focused" + ], + "short_name": "WindowFocused", + "title": "bevy_window::event::WindowFocused", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowMoved": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "entity": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "position": { + "type": { + "$ref": "#/$defs/glam::IVec2" + } + } + }, + "required": [ + "entity", + "position" + ], + "short_name": "WindowMoved", + "title": "bevy_window::event::WindowMoved", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowResized": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "width", + "height" + ], + "short_name": "WindowResized", + "title": "bevy_window::event::WindowResized", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowScaleFactorChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "scale_factor" + ], + "short_name": "WindowScaleFactorChanged", + "title": "bevy_window::event::WindowScaleFactorChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowThemeChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "theme": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowTheme" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "theme" + ], + "short_name": "WindowThemeChanged", + "title": "bevy_window::event::WindowThemeChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::CompositeAlphaMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Auto", + "Opaque", + "PreMultiplied", + "PostMultiplied", + "Inherit" + ], + "short_name": "CompositeAlphaMode", + "title": "bevy_window::window::CompositeAlphaMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::Cursor": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "grab_mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::CursorGrabMode" + } + }, + "hit_test": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "icon": { + "type": { + "$ref": "#/$defs/bevy_window::cursor::CursorIcon" + } + }, + "visible": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "icon", + "visible", + "grab_mode", + "hit_test" + ], + "short_name": "Cursor", + "title": "bevy_window::window::Cursor", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::CursorGrabMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "None", + "Confined", + "Locked" + ], + "short_name": "CursorGrabMode", + "title": "bevy_window::window::CursorGrabMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::EnabledButtons": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "close": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "maximize": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "minimize": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "minimize", + "maximize", + "close" + ], + "short_name": "EnabledButtons", + "title": "bevy_window::window::EnabledButtons", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::InternalWindowState": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "maximize_request": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "minimize_request": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "physical_cursor_position": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [], + "short_name": "InternalWindowState", + "title": "bevy_window::window::InternalWindowState", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::MonitorSelection": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Current" + }, + { + "title": "Primary" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/usize" + } + } + ], + "short_name": "Index", + "title": "Index", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "MonitorSelection", + "title": "bevy_window::window::MonitorSelection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::window::PresentMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "AutoVsync", + "AutoNoVsync", + "Fifo", + "FifoRelaxed", + "Immediate", + "Mailbox" + ], + "short_name": "PresentMode", + "title": "bevy_window::window::PresentMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::PrimaryWindow": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "PrimaryWindow", + "title": "bevy_window::window::PrimaryWindow", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::Window": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "canvas": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "composite_alpha_mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::CompositeAlphaMode" + } + }, + "cursor": { + "type": { + "$ref": "#/$defs/bevy_window::window::Cursor" + } + }, + "decorations": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "enabled_buttons": { + "type": { + "$ref": "#/$defs/bevy_window::window::EnabledButtons" + } + }, + "fit_canvas_to_parent": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "focused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "ime_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "ime_position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "internal": { + "type": { + "$ref": "#/$defs/bevy_window::window::InternalWindowState" + } + }, + "mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowMode" + } + }, + "position": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowPosition" + } + }, + "present_mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::PresentMode" + } + }, + "prevent_default_event_handling": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "resizable": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "resize_constraints": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowResizeConstraints" + } + }, + "resolution": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowResolution" + } + }, + "title": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "transparent": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "visible": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "window_level": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowLevel" + } + }, + "window_theme": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "cursor", + "present_mode", + "mode", + "position", + "resolution", + "title", + "composite_alpha_mode", + "resize_constraints", + "resizable", + "enabled_buttons", + "decorations", + "transparent", + "focused", + "window_level", + "fit_canvas_to_parent", + "prevent_default_event_handling", + "internal", + "ime_enabled", + "ime_position", + "visible" + ], + "short_name": "Window", + "title": "bevy_window::window::Window", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowLevel": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "AlwaysOnBottom", + "Normal", + "AlwaysOnTop" + ], + "short_name": "WindowLevel", + "title": "bevy_window::window::WindowLevel", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Windowed", + "BorderlessFullscreen", + "SizedFullscreen", + "Fullscreen" + ], + "short_name": "WindowMode", + "title": "bevy_window::window::WindowMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowPosition": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Automatic" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_window::window::MonitorSelection" + } + } + ], + "short_name": "Centered", + "title": "Centered", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::IVec2" + } + } + ], + "short_name": "At", + "title": "At", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "WindowPosition", + "title": "bevy_window::window::WindowPosition", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowResizeConstraints": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "max_height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_width": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "min_width", + "min_height", + "max_width", + "max_height" + ], + "short_name": "WindowResizeConstraints", + "title": "bevy_window::window::WindowResizeConstraints", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowResolution": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "physical_height": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "physical_width": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "scale_factor_override": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "physical_width", + "physical_height", + "scale_factor" + ], + "short_name": "WindowResolution", + "title": "bevy_window::window::WindowResolution", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowTheme": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Light", + "Dark" + ], + "short_name": "WindowTheme", + "title": "bevy_window::window::WindowTheme", + "type": "string", + "typeInfo": "Enum" + }, + "bool": { + "isComponent": false, + "isResource": false, + "short_name": "bool", + "title": "bool", + "type": "boolean", + "typeInfo": "Value" + }, + "char": { + "isComponent": false, + "isResource": false, + "short_name": "char", + "title": "char", + "type": "string", + "typeInfo": "Value" + }, + "core::ops::Range": { + "isComponent": false, + "isResource": false, + "short_name": "Range", + "title": "core::ops::Range", + "type": "object", + "typeInfo": "Value" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "title": "core::option::Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "title": "core::option::Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::camera::Viewport" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::mesh::mesh::Indices" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "f32": { + "isComponent": false, + "isResource": false, + "short_name": "f32", + "title": "f32", + "type": "float", + "typeInfo": "Value" + }, + "f64": { + "isComponent": false, + "isResource": false, + "short_name": "f64", + "title": "f64", + "type": "float", + "typeInfo": "Value" + }, + "glam::Affine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::Mat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "Affine2", + "title": "glam::Affine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Affine3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::Mat3A" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "Affine3A", + "title": "glam::Affine3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "BVec2", + "title": "glam::BVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "BVec3", + "title": "glam::BVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3A": { + "isComponent": false, + "isResource": false, + "short_name": "BVec3A", + "title": "glam::BVec3A", + "type": "object", + "typeInfo": "Value" + }, + "glam::BVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "BVec4", + "title": "glam::BVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec4A": { + "isComponent": false, + "isResource": false, + "short_name": "BVec4A", + "title": "glam::BVec4A", + "type": "object", + "typeInfo": "Value" + }, + "glam::DAffine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::DMat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "DAffine2", + "title": "glam::DAffine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DAffine3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::DMat3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "DAffine3", + "title": "glam::DAffine3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "DMat2", + "title": "glam::DMat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "DMat3", + "title": "glam::DMat3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis", + "w_axis" + ], + "short_name": "DMat4", + "title": "glam::DMat4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DQuat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DQuat", + "title": "glam::DQuat", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "DVec2", + "title": "glam::DVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "DVec3", + "title": "glam::DVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DVec4", + "title": "glam::DVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "IVec2", + "title": "glam::IVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "IVec3", + "title": "glam::IVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "IVec4", + "title": "glam::IVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "Mat2", + "title": "glam::Mat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "Mat3", + "title": "glam::Mat3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "Mat3A", + "title": "glam::Mat3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + }, + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis", + "w_axis" + ], + "short_name": "Mat4", + "title": "glam::Mat4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Quat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "Quat", + "title": "glam::Quat", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "UVec2", + "title": "glam::UVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "UVec3", + "title": "glam::UVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "UVec4", + "title": "glam::UVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "Vec2", + "title": "glam::Vec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "Vec3", + "title": "glam::Vec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "Vec3A", + "title": "glam::Vec3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "Vec4", + "title": "glam::Vec4", + "type": "object", + "typeInfo": "Struct" + }, + "i128": { + "isComponent": false, + "isResource": false, + "short_name": "i128", + "title": "i128", + "type": "int", + "typeInfo": "Value" + }, + "i16": { + "isComponent": false, + "isResource": false, + "short_name": "i16", + "title": "i16", + "type": "int", + "typeInfo": "Value" + }, + "i32": { + "isComponent": false, + "isResource": false, + "short_name": "i32", + "title": "i32", + "type": "int", + "typeInfo": "Value" + }, + "i64": { + "isComponent": false, + "isResource": false, + "short_name": "i64", + "title": "i64", + "type": "int", + "typeInfo": "Value" + }, + "i8": { + "isComponent": false, + "isResource": false, + "short_name": "i8", + "title": "i8", + "type": "int", + "typeInfo": "Value" + }, + "isize": { + "isComponent": false, + "isResource": false, + "short_name": "isize", + "title": "isize", + "type": "int", + "typeInfo": "Value" + }, + "smallvec::SmallVec<[bevy_ecs::Entity; 8]>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "short_name": "SmallVec<[Entity; 8]>", + "title": "smallvec::SmallVec<[bevy_ecs::Entity; 8]>", + "type": "array", + "typeInfo": "List" + }, + "std::ffi::OsString": { + "isComponent": false, + "isResource": false, + "short_name": "OsString", + "title": "std::ffi::OsString", + "type": "object", + "typeInfo": "Value" + }, + "std::path::PathBuf": { + "isComponent": false, + "isResource": false, + "short_name": "PathBuf", + "title": "std::path::PathBuf", + "type": "object", + "typeInfo": "Value" + }, + "u128": { + "isComponent": false, + "isResource": false, + "short_name": "u128", + "title": "u128", + "type": "uint", + "typeInfo": "Value" + }, + "u16": { + "isComponent": false, + "isResource": false, + "short_name": "u16", + "title": "u16", + "type": "uint", + "typeInfo": "Value" + }, + "u32": { + "isComponent": false, + "isResource": false, + "short_name": "u32", + "title": "u32", + "type": "uint", + "typeInfo": "Value" + }, + "u64": { + "isComponent": false, + "isResource": false, + "short_name": "u64", + "title": "u64", + "type": "uint", + "typeInfo": "Value" + }, + "u8": { + "isComponent": false, + "isResource": false, + "short_name": "u8", + "title": "u8", + "type": "uint", + "typeInfo": "Value" + }, + "usize": { + "isComponent": false, + "isResource": false, + "short_name": "usize", + "title": "usize", + "type": "uint", + "typeInfo": "Value" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "bevy component registry schema" +} \ No newline at end of file diff --git a/examples/bevy_registry_export/basic/src/assets/assets_core.rs b/examples/bevy_registry_export/basic/src/assets/assets_core.rs new file mode 100644 index 0000000..29b577a --- /dev/null +++ b/examples/bevy_registry_export/basic/src/assets/assets_core.rs @@ -0,0 +1,5 @@ +use bevy::prelude::*; +use bevy_asset_loader::prelude::*; + +#[derive(AssetCollection, Resource)] +pub struct CoreAssets {} diff --git a/examples/bevy_registry_export/basic/src/assets/assets_game.rs b/examples/bevy_registry_export/basic/src/assets/assets_game.rs new file mode 100644 index 0000000..b8e0665 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/assets/assets_game.rs @@ -0,0 +1,13 @@ +use bevy::gltf::Gltf; +use bevy::prelude::*; +use bevy::utils::HashMap; +use bevy_asset_loader::prelude::*; + +#[derive(AssetCollection, Resource)] +pub struct GameAssets { + #[asset(key = "world")] + pub world: Handle, + + #[asset(key = "models", collection(typed, mapped))] + pub models: HashMap>, +} diff --git a/examples/bevy_registry_export/basic/src/assets/mod.rs b/examples/bevy_registry_export/basic/src/assets/mod.rs new file mode 100644 index 0000000..a2c8b22 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/assets/mod.rs @@ -0,0 +1,35 @@ +pub mod assets_core; +pub use assets_core::*; + +pub mod assets_game; +pub use assets_game::*; + +use bevy::prelude::*; +use bevy_asset_loader::prelude::*; + +use crate::state::AppState; + +pub struct AssetsPlugin; +impl Plugin for AssetsPlugin { + fn build(&self, app: &mut App) { + app + // load core assets (ie assets needed in the main menu, and everywhere else before loading more assets in game) + .add_loading_state( + LoadingState::new(AppState::CoreLoading).continue_to_state(AppState::MenuRunning), + ) + .add_dynamic_collection_to_loading_state::<_, StandardDynamicAssetCollection>( + AppState::CoreLoading, + "assets_core.assets.ron", + ) + .add_collection_to_loading_state::<_, CoreAssets>(AppState::CoreLoading) + // load game assets + .add_loading_state( + LoadingState::new(AppState::AppLoading).continue_to_state(AppState::AppRunning), + ) + .add_dynamic_collection_to_loading_state::<_, StandardDynamicAssetCollection>( + AppState::AppLoading, + "assets_game.assets.ron", + ) + .add_collection_to_loading_state::<_, GameAssets>(AppState::AppLoading); + } +} diff --git a/examples/bevy_registry_export/basic/src/core/camera/camera_replace_proxies.rs b/examples/bevy_registry_export/basic/src/core/camera/camera_replace_proxies.rs new file mode 100644 index 0000000..9055c95 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/camera/camera_replace_proxies.rs @@ -0,0 +1,24 @@ +use bevy::core_pipeline::bloom::{BloomCompositeMode, BloomSettings}; +use bevy::core_pipeline::tonemapping::{DebandDither, Tonemapping}; +use bevy::prelude::*; + +use super::CameraTrackingOffset; + +pub fn camera_replace_proxies( + mut commands: Commands, + mut added_cameras: Query<(Entity, &mut Camera), (Added, With)>, +) { + for (entity, mut camera) in added_cameras.iter_mut() { + info!("detected added camera, updating proxy"); + camera.hdr = true; + commands + .entity(entity) + .insert(DebandDither::Enabled) + .insert(Tonemapping::BlenderFilmic) + .insert(BloomSettings { + intensity: 0.01, + composite_mode: BloomCompositeMode::Additive, + ..default() + }); + } +} diff --git a/examples/bevy_registry_export/basic/src/core/camera/camera_tracking.rs b/examples/bevy_registry_export/basic/src/core/camera/camera_tracking.rs new file mode 100644 index 0000000..c498617 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/camera/camera_tracking.rs @@ -0,0 +1,52 @@ +use bevy::prelude::*; + +#[derive(Component, Reflect, Debug)] +#[reflect(Component)] +/// Component for cameras, with an offset from the Trackable target +/// +pub struct CameraTracking { + pub offset: Vec3, +} +impl Default for CameraTracking { + fn default() -> Self { + CameraTracking { + offset: Vec3::new(0.0, 6.0, 8.0), + } + } +} + +#[derive(Component, Reflect, Debug, Deref, DerefMut)] +#[reflect(Component)] +/// Component for cameras, with an offset from the Trackable target +pub struct CameraTrackingOffset(Vec3); +impl Default for CameraTrackingOffset { + fn default() -> Self { + CameraTrackingOffset(Vec3::new(0.0, 6.0, 8.0)) + } +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Add this component to an entity if you want it to be tracked by a Camera +pub struct CameraTrackable; + +pub fn camera_track( + mut tracking_cameras: Query< + (&mut Transform, &CameraTrackingOffset), + ( + With, + With, + Without, + ), + >, + camera_tracked: Query<&Transform, With>, +) { + for (mut camera_transform, tracking_offset) in tracking_cameras.iter_mut() { + for tracked_transform in camera_tracked.iter() { + let target_position = tracked_transform.translation + tracking_offset.0; + let eased_position = camera_transform.translation.lerp(target_position, 0.1); + camera_transform.translation = eased_position; // + tracking.offset;// tracked_transform.translation + tracking.offset; + *camera_transform = camera_transform.looking_at(tracked_transform.translation, Vec3::Y); + } + } +} diff --git a/examples/bevy_registry_export/basic/src/core/camera/mod.rs b/examples/bevy_registry_export/basic/src/core/camera/mod.rs new file mode 100644 index 0000000..a6bbb65 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/camera/mod.rs @@ -0,0 +1,24 @@ +pub mod camera_tracking; +pub use camera_tracking::*; + +pub mod camera_replace_proxies; +pub use camera_replace_proxies::*; + +use bevy::prelude::*; +use bevy_gltf_blueprints::GltfBlueprintsSet; + +pub struct CameraPlugin; +impl Plugin for CameraPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .add_systems( + Update, + ( + camera_replace_proxies.after(GltfBlueprintsSet::AfterSpawn), + camera_track, + ), + ); + } +} diff --git a/examples/bevy_registry_export/basic/src/core/lighting/lighting_replace_proxies.rs b/examples/bevy_registry_export/basic/src/core/lighting/lighting_replace_proxies.rs new file mode 100644 index 0000000..48c0908 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/lighting/lighting_replace_proxies.rs @@ -0,0 +1,25 @@ +use bevy::prelude::*; + +use bevy::pbr::{CascadeShadowConfig, CascadeShadowConfigBuilder}; + +// fixme might be too specific to might needs, should it be moved out ? also these are all for lights, not models +pub fn lighting_replace_proxies( + mut added_dirights: Query<(Entity, &mut DirectionalLight), Added>, + mut added_spotlights: Query<&mut SpotLight, Added>, + mut commands: Commands, +) { + for (entity, mut light) in added_dirights.iter_mut() { + light.illuminance *= 5.0; + light.shadows_enabled = true; + let shadow_config: CascadeShadowConfig = CascadeShadowConfigBuilder { + first_cascade_far_bound: 15.0, + maximum_distance: 135.0, + ..default() + } + .into(); + commands.entity(entity).insert(shadow_config); + } + for mut light in added_spotlights.iter_mut() { + light.shadows_enabled = true; + } +} diff --git a/examples/bevy_registry_export/basic/src/core/lighting/mod.rs b/examples/bevy_registry_export/basic/src/core/lighting/mod.rs new file mode 100644 index 0000000..c9688cd --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/lighting/mod.rs @@ -0,0 +1,18 @@ +mod lighting_replace_proxies; +use lighting_replace_proxies::*; + +use bevy::pbr::{DirectionalLightShadowMap, NotShadowCaster}; +use bevy::prelude::*; + +pub struct LightingPlugin; +impl Plugin for LightingPlugin { + fn build(&self, app: &mut App) { + app + .insert_resource(DirectionalLightShadowMap { size: 4096 }) + // FIXME: adding these since they are missing + .register_type::() + + .add_systems(PreUpdate, lighting_replace_proxies) // FIXME: you should actually run this in a specific state most likely + ; + } +} diff --git a/examples/bevy_registry_export/basic/src/core/mod.rs b/examples/bevy_registry_export/basic/src/core/mod.rs new file mode 100644 index 0000000..7404994 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/mod.rs @@ -0,0 +1,38 @@ +pub mod camera; +pub use camera::*; + +pub mod lighting; +pub use lighting::*; + +pub mod relationships; +pub use relationships::*; + +pub mod physics; +pub use physics::*; + +use bevy::prelude::*; +use bevy_gltf_blueprints::*; + +use bevy_registry_export::*; + +pub struct CorePlugin; +impl Plugin for CorePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(( + ExportRegistryPlugin { + save_path: "assets/registry.json".into(), + ..Default::default() + }, + LightingPlugin, + CameraPlugin, + PhysicsPlugin, + BlueprintsPlugin { + legacy_mode: false, + library_folder: "models/library".into(), + format: GltfFormat::GLB, + aabbs: true, + ..Default::default() + }, + )); + } +} diff --git a/examples/bevy_registry_export/basic/src/core/physics/controls.rs b/examples/bevy_registry_export/basic/src/core/physics/controls.rs new file mode 100644 index 0000000..b478d12 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/physics/controls.rs @@ -0,0 +1,12 @@ +use bevy::{log::info, prelude::ResMut}; +use bevy_rapier3d::prelude::RapierConfiguration; + +pub fn pause_physics(mut physics_config: ResMut) { + info!("pausing physics"); + physics_config.physics_pipeline_active = false; +} + +pub fn resume_physics(mut physics_config: ResMut) { + info!("unpausing physics"); + physics_config.physics_pipeline_active = true; +} diff --git a/examples/bevy_registry_export/basic/src/core/physics/mod.rs b/examples/bevy_registry_export/basic/src/core/physics/mod.rs new file mode 100644 index 0000000..cd7d523 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/physics/mod.rs @@ -0,0 +1,37 @@ +pub mod physics_replace_proxies; +use bevy_rapier3d::{ + prelude::{NoUserData, RapierPhysicsPlugin}, + render::RapierDebugRenderPlugin, +}; +pub use physics_replace_proxies::*; + +pub mod utils; + +pub mod controls; +pub use controls::*; + +use crate::state::GameState; +use bevy::prelude::*; +// use super::blueprints::GltfBlueprintsSet; +use bevy_gltf_blueprints::GltfBlueprintsSet; +// use crate::Collider; +pub struct PhysicsPlugin; +impl Plugin for PhysicsPlugin { + fn build(&self, app: &mut App) { + app.add_plugins(( + RapierPhysicsPlugin::::default(), + RapierDebugRenderPlugin::default(), + )) + .register_type::() + .register_type::() + // find a way to make serde's stuff serializable + // .register_type::() + //bevy_rapier3d::dynamics::CoefficientCombineRule + .add_systems( + Update, + physics_replace_proxies.after(GltfBlueprintsSet::AfterSpawn), + ) + .add_systems(OnEnter(GameState::InGame), resume_physics) + .add_systems(OnExit(GameState::InGame), pause_physics); + } +} diff --git a/examples/bevy_registry_export/basic/src/core/physics/physics_replace_proxies.rs b/examples/bevy_registry_export/basic/src/core/physics/physics_replace_proxies.rs new file mode 100644 index 0000000..b91462c --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/physics/physics_replace_proxies.rs @@ -0,0 +1,101 @@ +use bevy::prelude::*; +// use bevy::render::primitives::Aabb; +use bevy_rapier3d::geometry::Collider as RapierCollider; +use bevy_rapier3d::prelude::{ActiveCollisionTypes, ActiveEvents, ComputedColliderShape}; + +use super::utils::*; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum Collider { + Ball(f32), + Cuboid(Vec3), + Capsule(Vec3, Vec3, f32), + #[default] + Mesh, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum AutoAABBCollider { + #[default] + Cuboid, + Ball, + Capsule, +} + +// replaces all physics stand-ins with the actual rapier types +pub fn physics_replace_proxies( + meshes: Res>, + mesh_handles: Query<&Handle>, + mut proxy_colliders: Query< + (Entity, &Collider, &Name, &mut Visibility), + (Without, Added), + >, + // needed for tri meshes + children: Query<&Children>, + + mut commands: Commands, +) { + for proxy_colider in proxy_colliders.iter_mut() { + let (entity, collider_proxy, name, mut visibility) = proxy_colider; + // we hide the collider meshes: perhaps they should be removed altogether once processed ? + if name.ends_with("_collider") || name.ends_with("_sensor") { + *visibility = Visibility::Hidden; + } + + let mut rapier_collider: RapierCollider; + match collider_proxy { + Collider::Ball(radius) => { + info!("generating collider from proxy: ball"); + rapier_collider = RapierCollider::ball(*radius); + commands.entity(entity) + .insert(rapier_collider) + .insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!! + ; + } + Collider::Cuboid(size) => { + info!("generating collider from proxy: cuboid"); + rapier_collider = RapierCollider::cuboid(size.x, size.y, size.z); + commands.entity(entity) + .insert(rapier_collider) + .insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!! + ; + } + Collider::Capsule(a, b, radius) => { + info!("generating collider from proxy: capsule"); + rapier_collider = RapierCollider::capsule(*a, *b, *radius); + commands.entity(entity) + .insert(rapier_collider) + .insert(ActiveEvents::COLLISION_EVENTS) // FIXME: this is just for demo purposes !!! + ; + } + Collider::Mesh => { + info!("generating collider from proxy: mesh"); + for (_, collider_mesh) in + Mesh::search_in_children(entity, &children, &meshes, &mesh_handles) + { + rapier_collider = RapierCollider::from_bevy_mesh( + collider_mesh, + &ComputedColliderShape::TriMesh, + ) + .unwrap(); + commands + .entity(entity) + .insert(rapier_collider) + // FIXME: this is just for demo purposes !!! + .insert( + ActiveCollisionTypes::default() + | ActiveCollisionTypes::KINEMATIC_STATIC + | ActiveCollisionTypes::STATIC_STATIC + | ActiveCollisionTypes::DYNAMIC_STATIC, + ) + .insert(ActiveEvents::COLLISION_EVENTS); + // .insert(ActiveEvents::COLLISION_EVENTS) + // break; + // RapierCollider::convex_hull(points) + } + } + } + } +} diff --git a/examples/bevy_registry_export/basic/src/core/physics/utils.rs b/examples/bevy_registry_export/basic/src/core/physics/utils.rs new file mode 100644 index 0000000..7886710 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/physics/utils.rs @@ -0,0 +1,175 @@ +use bevy::prelude::*; +use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues}; +// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/src/util/trait_extension.rs + +pub(crate) trait Vec3Ext: Copy { + fn is_approx_zero(self) -> bool; + fn split(self, up: Vec3) -> SplitVec3; +} +impl Vec3Ext for Vec3 { + #[inline] + fn is_approx_zero(self) -> bool { + self.length_squared() < 1e-5 + } + + #[inline] + fn split(self, up: Vec3) -> SplitVec3 { + let vertical = up * self.dot(up); + let horizontal = self - vertical; + SplitVec3 { + vertical, + horizontal, + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq)] +pub(crate) struct SplitVec3 { + pub(crate) vertical: Vec3, + pub(crate) horizontal: Vec3, +} + +pub(crate) trait Vec2Ext: Copy { + fn is_approx_zero(self) -> bool; + fn x0y(self) -> Vec3; +} +impl Vec2Ext for Vec2 { + #[inline] + fn is_approx_zero(self) -> bool { + self.length_squared() < 1e-5 + } + + #[inline] + fn x0y(self) -> Vec3 { + Vec3::new(self.x, 0., self.y) + } +} + +pub(crate) trait MeshExt { + fn transform(&mut self, transform: Transform); + fn transformed(&self, transform: Transform) -> Mesh; + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]>; + fn search_in_children<'a>( + parent: Entity, + children: &'a Query<&Children>, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> Vec<(Entity, &'a Mesh)>; +} + +impl MeshExt for Mesh { + fn transform(&mut self, transform: Transform) { + for coords in self.read_coords_mut(Mesh::ATTRIBUTE_POSITION.clone()) { + let vec3 = (*coords).into(); + let transformed = transform.transform_point(vec3); + *coords = transformed.into(); + } + for normal in self.read_coords_mut(Mesh::ATTRIBUTE_NORMAL.clone()) { + let vec3 = (*normal).into(); + let transformed = transform.rotation.mul_vec3(vec3); + *normal = transformed.into(); + } + } + + fn transformed(&self, transform: Transform) -> Mesh { + let mut mesh = self.clone(); + mesh.transform(transform); + mesh + } + + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]> { + // Guaranteed by Bevy for the current usage + match self + .attribute_mut(id) + .expect("Failed to read unknown mesh attribute") + { + VertexAttributeValues::Float32x3(values) => values, + // Guaranteed by Bevy for the current usage + _ => unreachable!(), + } + } + + fn search_in_children<'a>( + parent: Entity, + children_query: &'a Query<&Children>, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> Vec<(Entity, &'a Mesh)> { + if let Ok(children) = children_query.get(parent) { + let mut result: Vec<_> = children + .iter() + .filter_map(|entity| mesh_handles.get(*entity).ok().map(|mesh| (*entity, mesh))) + .map(|(entity, mesh_handle)| { + ( + entity, + meshes + .get(mesh_handle) + .expect("Failed to get mesh from handle"), + ) + }) + .map(|(entity, mesh)| { + assert_eq!(mesh.primitive_topology(), PrimitiveTopology::TriangleList); + (entity, mesh) + }) + .collect(); + let mut inner_result = children + .iter() + .flat_map(|entity| { + Self::search_in_children(*entity, children_query, meshes, mesh_handles) + }) + .collect(); + result.append(&mut inner_result); + result + } else { + Vec::new() + } + } +} + +pub(crate) trait F32Ext: Copy { + fn is_approx_zero(self) -> bool; + fn squared(self) -> f32; + fn lerp(self, other: f32, ratio: f32) -> f32; +} + +impl F32Ext for f32 { + #[inline] + fn is_approx_zero(self) -> bool { + self.abs() < 1e-5 + } + + #[inline] + fn squared(self) -> f32 { + self * self + } + + #[inline] + fn lerp(self, other: f32, ratio: f32) -> f32 { + self.mul_add(1. - ratio, other * ratio) + } +} + +pub(crate) trait TransformExt: Copy { + fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform; + fn lerp(self, other: Transform, ratio: f32) -> Transform; +} + +impl TransformExt for Transform { + fn horizontally_looking_at(self, target: Vec3, up: Vec3) -> Transform { + let direction = target - self.translation; + let horizontal_direction = direction - up * direction.dot(up); + let look_target = self.translation + horizontal_direction; + self.looking_at(look_target, up) + } + + fn lerp(self, other: Transform, ratio: f32) -> Transform { + let translation = self.translation.lerp(other.translation, ratio); + let rotation = self.rotation.slerp(other.rotation, ratio); + let scale = self.scale.lerp(other.scale, ratio); + Transform { + translation, + rotation, + scale, + } + } +} diff --git a/examples/bevy_registry_export/basic/src/core/physics/utils_old.rs b/examples/bevy_registry_export/basic/src/core/physics/utils_old.rs new file mode 100644 index 0000000..c210dd3 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/physics/utils_old.rs @@ -0,0 +1,75 @@ +use bevy::prelude::*; +use bevy::render::mesh::{MeshVertexAttributeId, PrimitiveTopology, VertexAttributeValues}; +// TAKEN VERBATIB FROM https://github.com/janhohenheim/foxtrot/blob/6e31fc02652fc9d085a4adde0a73ab007dbbb0dc/src/util/trait_extension.rs + +pub trait Vec3Ext { + #[allow(clippy::wrong_self_convention)] // Because [`Vec3`] is [`Copy`] + fn is_approx_zero(self) -> bool; + fn x0z(self) -> Vec3; +} +impl Vec3Ext for Vec3 { + fn is_approx_zero(self) -> bool { + [self.x, self.y, self.z].iter().all(|&x| x.abs() < 1e-5) + } + fn x0z(self) -> Vec3 { + Vec3::new(self.x, 0., self.z) + } +} + +pub trait MeshExt { + fn transform(&mut self, transform: Transform); + fn transformed(&self, transform: Transform) -> Mesh; + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]>; + fn search_in_children<'a>( + children: &'a Children, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> (Entity, &'a Mesh); +} + +impl MeshExt for Mesh { + fn transform(&mut self, transform: Transform) { + for attribute in [Mesh::ATTRIBUTE_POSITION, Mesh::ATTRIBUTE_NORMAL] { + for coords in self.read_coords_mut(attribute.clone()) { + let vec3 = (*coords).into(); + let transformed = transform.transform_point(vec3); + *coords = transformed.into(); + } + } + } + + fn transformed(&self, transform: Transform) -> Mesh { + let mut mesh = self.clone(); + mesh.transform(transform); + mesh + } + + fn read_coords_mut(&mut self, id: impl Into) -> &mut Vec<[f32; 3]> { + match self.attribute_mut(id).unwrap() { + VertexAttributeValues::Float32x3(values) => values, + // Guaranteed by Bevy + _ => unreachable!(), + } + } + + fn search_in_children<'a>( + children: &'a Children, + meshes: &'a Assets, + mesh_handles: &'a Query<&Handle>, + ) -> (Entity, &'a Mesh) { + let entity_handles: Vec<_> = children + .iter() + .filter_map(|entity| mesh_handles.get(*entity).ok().map(|mesh| (*entity, mesh))) + .collect(); + assert_eq!( + entity_handles.len(), + 1, + "Collider must contain exactly one mesh, but found {}", + entity_handles.len() + ); + let (entity, mesh_handle) = entity_handles.first().unwrap(); + let mesh = meshes.get(mesh_handle).unwrap(); + assert_eq!(mesh.primitive_topology(), PrimitiveTopology::TriangleList); + (*entity, mesh) + } +} diff --git a/examples/bevy_registry_export/basic/src/core/relationships/mod.rs b/examples/bevy_registry_export/basic/src/core/relationships/mod.rs new file mode 100644 index 0000000..4128453 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/relationships/mod.rs @@ -0,0 +1,11 @@ +pub mod relationships_insert_dependant_components; +pub use relationships_insert_dependant_components::*; + +use bevy::prelude::*; + +pub struct EcsRelationshipsPlugin; +impl Plugin for EcsRelationshipsPlugin { + fn build(&self, app: &mut App) { + app; + } +} diff --git a/examples/bevy_registry_export/basic/src/core/relationships/relationships_insert_dependant_components.rs b/examples/bevy_registry_export/basic/src/core/relationships/relationships_insert_dependant_components.rs new file mode 100644 index 0000000..4e9ad17 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/core/relationships/relationships_insert_dependant_components.rs @@ -0,0 +1,15 @@ +use bevy::prelude::*; + +pub fn insert_dependant_component< + Dependant: Component, + Dependency: Component + std::default::Default, +>( + mut commands: Commands, + entities_without_depency: Query<(Entity, &Name), (With, Without)>, +) { + for (entity, name) in entities_without_depency.iter() { + let name = name.clone().to_string(); + commands.entity(entity).insert(Dependency::default()); + warn!("found an entity called {} with a {} component but without an {}, please check your assets", name.clone(), std::any::type_name::(), std::any::type_name::()); + } +} diff --git a/examples/bevy_registry_export/basic/src/game/in_game.rs b/examples/bevy_registry_export/basic/src/game/in_game.rs new file mode 100644 index 0000000..2a077f7 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/game/in_game.rs @@ -0,0 +1,132 @@ +use bevy::prelude::*; + +use crate::{ + assets::GameAssets, + state::{GameState, InAppRunning}, +}; +use bevy_gltf_blueprints::{BluePrintBundle, BlueprintName, GameWorldTag}; + +use bevy_rapier3d::prelude::Velocity; +use rand::Rng; + +pub fn setup_game( + mut commands: Commands, + game_assets: Res, + models: Res>, + mut next_game_state: ResMut>, +) { + println!("setting up all stuff"); + commands.insert_resource(AmbientLight { + color: Color::WHITE, + brightness: 0.2, + }); + // here we actually spawn our game world/level + + commands.spawn(( + SceneBundle { + // note: because of this issue https://github.com/bevyengine/bevy/issues/10436, "world" is now a gltf file instead of a scene + scene: models + .get(game_assets.world.id()) + .expect("main level should have been loaded") + .scenes[0] + .clone(), + ..default() + }, + bevy::prelude::Name::from("world"), + GameWorldTag, + InAppRunning, + )); + + next_game_state.set(GameState::InGame) +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct UnregisteredComponent; + +pub fn spawn_test( + keycode: Res>, + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, +) { + if keycode.just_pressed(KeyCode::T) { + let world = game_world.single_mut(); + let world = world.1[0]; + + let mut rng = rand::thread_rng(); + let range = 5.5; + let x: f32 = rng.gen_range(-range..range); + let y: f32 = rng.gen_range(-range..range); + + let mut rng = rand::thread_rng(); + let range = 0.8; + let vel_x: f32 = rng.gen_range(-range..range); + let vel_y: f32 = rng.gen_range(2.0..2.5); + let vel_z: f32 = rng.gen_range(-range..range); + + let name_index: u64 = rng.gen(); + + let new_entity = commands + .spawn(( + BluePrintBundle { + blueprint: BlueprintName("Health_Pickup".to_string()), + ..Default::default() + }, + bevy::prelude::Name::from(format!("test{}", name_index)), + // BlueprintName("Health_Pickup".to_string()), + // SpawnHere, + TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + Velocity { + linvel: Vec3::new(vel_x, vel_y, vel_z), + angvel: Vec3::new(0.0, 0.0, 0.0), + }, + )) + .id(); + commands.entity(world).add_child(new_entity); + } +} + +pub fn spawn_test_unregisted_components( + keycode: Res>, + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, +) { + if keycode.just_pressed(KeyCode::U) { + let world = game_world.single_mut(); + let world = world.1[0]; + + let mut rng = rand::thread_rng(); + let range = 5.5; + let x: f32 = rng.gen_range(-range..range); + let y: f32 = rng.gen_range(-range..range); + + let mut rng = rand::thread_rng(); + let range = 0.8; + let vel_x: f32 = rng.gen_range(-range..range); + let vel_y: f32 = rng.gen_range(2.0..2.5); + let vel_z: f32 = rng.gen_range(-range..range); + + let name_index: u64 = rng.gen(); + + let new_entity = commands + .spawn(( + BluePrintBundle { + blueprint: BlueprintName("Health_Pickup".to_string()), + ..Default::default() + }, + bevy::prelude::Name::from(format!("test{}", name_index)), + // BlueprintName("Health_Pickup".to_string()), + // SpawnHere, + TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + Velocity { + linvel: Vec3::new(vel_x, vel_y, vel_z), + angvel: Vec3::new(0.0, 0.0, 0.0), + }, + UnregisteredComponent, + )) + .id(); + commands.entity(world).add_child(new_entity); + } +} diff --git a/examples/bevy_registry_export/basic/src/game/in_main_menu.rs b/examples/bevy_registry_export/basic/src/game/in_main_menu.rs new file mode 100644 index 0000000..586063a --- /dev/null +++ b/examples/bevy_registry_export/basic/src/game/in_main_menu.rs @@ -0,0 +1,113 @@ +use bevy::prelude::*; + +use crate::state::{AppState, InMainMenu}; + +pub fn setup_main_menu(mut commands: Commands) { + commands.spawn((Camera2dBundle::default(), InMainMenu)); + + commands.spawn(( + TextBundle::from_section( + "SOME GAME TITLE !!", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(100.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + commands.spawn(( + TextBundle::from_section( + "New Game (press Enter to start, press T once the game is started for demo spawning)", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(200.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + /* + commands.spawn(( + TextBundle::from_section( + "Load Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(250.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + )); + + commands.spawn(( + TextBundle::from_section( + "Exit Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(300.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + ));*/ +} + +pub fn teardown_main_menu(bla: Query>, mut commands: Commands) { + for bli in bla.iter() { + commands.entity(bli).despawn_recursive(); + } +} + +pub fn main_menu( + keycode: Res>, + + mut next_app_state: ResMut>, + // mut next_game_state: ResMut>, + // mut save_requested_events: EventWriter, + // mut load_requested_events: EventWriter, +) { + if keycode.just_pressed(KeyCode::Return) { + next_app_state.set(AppState::AppLoading); + // next_game_state.set(GameState::None); + } + + if keycode.just_pressed(KeyCode::L) { + next_app_state.set(AppState::AppLoading); + // load_requested_events.send(LoadRequest { path: "toto".into() }) + } + + if keycode.just_pressed(KeyCode::S) { + // save_requested_events.send(SaveRequest { path: "toto".into() }) + } +} diff --git a/examples/bevy_registry_export/basic/src/game/mod.rs b/examples/bevy_registry_export/basic/src/game/mod.rs new file mode 100644 index 0000000..1318ee1 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/game/mod.rs @@ -0,0 +1,90 @@ +pub mod in_game; +pub use in_game::*; + +pub mod in_main_menu; +pub use in_main_menu::*; + +pub mod picking; +pub use picking::*; + +use crate::state::{AppState, GameState}; +use bevy::prelude::*; + +// this file is just for demo purposes, contains various types of components, systems etc + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum SoundMaterial { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo marker component +pub struct Player; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo component showing auto injection of components +pub struct ShouldBeWithPlayer; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +/// Demo marker component +pub struct Interactible; + +fn player_move_demo( + keycode: Res>, + mut players: Query<&mut Transform, With>, +) { + let speed = 0.2; + if let Ok(mut player) = players.get_single_mut() { + if keycode.pressed(KeyCode::Left) { + player.translation.x += speed; + } + if keycode.pressed(KeyCode::Right) { + player.translation.x -= speed; + } + + if keycode.pressed(KeyCode::Up) { + player.translation.z += speed; + } + if keycode.pressed(KeyCode::Down) { + player.translation.z -= speed; + } + } +} + +pub struct GamePlugin; +impl Plugin for GamePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(PickingPlugin) + .register_type::() + .register_type::() + .register_type::() + // little helper utility, to automatically inject components that are dependant on an other component + // ie, here an Entity with a Player component should also always have a ShouldBeWithPlayer component + // you get a warning if you use this, as I consider this to be stop-gap solution (usually you should have either a bundle, or directly define all needed components) + .add_systems( + Update, + ( + // insert_dependant_component::, + player_move_demo, //.run_if(in_state(AppState::Running)), + // test_collision_events + spawn_test, + spawn_test_unregisted_components, + ) + .run_if(in_state(GameState::InGame)), + ) + .add_systems(OnEnter(AppState::MenuRunning), setup_main_menu) + .add_systems(OnExit(AppState::MenuRunning), teardown_main_menu) + .add_systems(Update, main_menu.run_if(in_state(AppState::MenuRunning))) + .add_systems(OnEnter(AppState::AppRunning), setup_game); + } +} diff --git a/examples/bevy_registry_export/basic/src/game/picking.rs b/examples/bevy_registry_export/basic/src/game/picking.rs new file mode 100644 index 0000000..6731bbb --- /dev/null +++ b/examples/bevy_registry_export/basic/src/game/picking.rs @@ -0,0 +1,34 @@ +use super::Player; +use bevy::prelude::*; +use bevy_gltf_blueprints::GltfBlueprintsSet; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct Pickable; + +// very simple, crude picking (as in picking up objects) implementation + +pub fn picking( + players: Query<&GlobalTransform, With>, + pickables: Query<(Entity, &GlobalTransform), With>, + mut commands: Commands, +) { + for player_transforms in players.iter() { + for (pickable, pickable_transforms) in pickables.iter() { + let distance = player_transforms + .translation() + .distance(pickable_transforms.translation()); + if distance < 2.5 { + commands.entity(pickable).despawn_recursive(); + } + } + } +} + +pub struct PickingPlugin; +impl Plugin for PickingPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .add_systems(Update, (picking.after(GltfBlueprintsSet::AfterSpawn),)); + } +} diff --git a/examples/bevy_registry_export/basic/src/main.rs b/examples/bevy_registry_export/basic/src/main.rs new file mode 100644 index 0000000..6edba33 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/main.rs @@ -0,0 +1,33 @@ +use bevy::prelude::*; +use bevy_editor_pls::prelude::*; + +mod core; +use crate::core::*; + +pub mod assets; +use assets::*; + +pub mod state; +use state::*; + +mod game; +use game::*; + +mod test_components; +use test_components::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins.set(AssetPlugin::default()), + // editor + EditorPlugin::default(), + // our custom plugins + StatePlugin, + AssetsPlugin, + CorePlugin, // reusable plugins + GamePlugin, // specific to our game + ComponentsTestPlugin, // Showcases different type of components /structs + )) + .run(); +} diff --git a/examples/bevy_registry_export/basic/src/state.rs b/examples/bevy_registry_export/basic/src/state.rs new file mode 100644 index 0000000..8e983d9 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/state.rs @@ -0,0 +1,54 @@ +use bevy::app::AppExit; +use bevy::prelude::*; + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Default, States)] +pub enum AppState { + #[default] + CoreLoading, + MenuRunning, + AppLoading, + AppRunning, + AppEnding, + + // FIXME: not sure + LoadingGame, +} + +#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Default, States)] +pub enum GameState { + #[default] + None, + + InMenu, + InGame, + + InGameOver, + + InSaving, + InLoading, +} + +// tag components for all entities within a certain state (for despawning them if needed) , FIXME: seems kinda hack-ish +#[derive(Component)] +pub struct InCoreLoading; +#[derive(Component, Default)] +pub struct InMenuRunning; +#[derive(Component)] +pub struct InAppLoading; +#[derive(Component)] +pub struct InAppRunning; + +// components for tagging in game vs in game menu stuff +#[derive(Component, Default)] +pub struct InMainMenu; +#[derive(Component, Default)] +pub struct InMenu; +#[derive(Component, Default)] +pub struct InGame; + +pub struct StatePlugin; +impl Plugin for StatePlugin { + fn build(&self, app: &mut App) { + app.add_state::().add_state::(); + } +} diff --git a/examples/bevy_registry_export/basic/src/test_components.rs b/examples/bevy_registry_export/basic/src/test_components.rs new file mode 100644 index 0000000..39cd711 --- /dev/null +++ b/examples/bevy_registry_export/basic/src/test_components.rs @@ -0,0 +1,136 @@ +use bevy::prelude::*; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct UnitTest; + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TuppleTestF32(f32); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TuppleTestU64(u64); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +pub struct TuppleTestStr(String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTest2(f32, u64, String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestBool(bool); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec2(Vec2); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec3(Vec3); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVec(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleVecF32F32(Vec<(f32, f32)>); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TuppleTestColor(Color); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct BasicTest { + a: f32, + b: u64, + c: String, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum EnumTest { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct NestingTestLevel2 { + text: String, + enable: bool, + enum_inner: EnumTest, + color: TuppleTestColor, + toggle: TuppleTestBool, + basic: BasicTest, + pub nested: NestingTestLevel3, + colors_list: VecOfColors, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct NestingTestLevel3 { + vec: TuppleVec3, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct NestedTuppleStuff(f32, u64, NestingTestLevel2); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum EnumComplex { + Float(f32), + Wood(String), + Vec(BasicTest), + SomeThing, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct VecOfVec3s2(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct VecOfColors(Vec); +pub struct ComponentsTestPlugin; +impl Plugin for ComponentsTestPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::>() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::<(f32, f32)>() + .register_type::>() + .register_type::>() + .register_type::>() + .register_type::(); + } +} diff --git a/tools/bevy_components/README.md b/tools/bevy_components/README.md new file mode 100644 index 0000000..426e127 --- /dev/null +++ b/tools/bevy_components/README.md @@ -0,0 +1,199 @@ +# Bevy components + +This [Blender addon](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/tools/bevy_components) gives you an easy to use UI to add and configure your [Bevy](https://bevyengine.org/) components inside Blender ! + +- **automatically generates a simple UI** to add/configure components based on a **registry schema** file (an export of all your Bevy components's information, generated) +by the [bevy_registry_export](https://crates.io/crates/bevy_registry_export) crate/plugin +- no more need to specify components manually using custom_properties, with error prone naming etc +- adds **metadata** to objects containing information about what components it uses + some extra information +- uses Blender's **PropertyGroups** to generate custom UIs & connects those groups with the custom properties so that no matter the complexity +of your Bevy components you get a nicely packed custom_property to use with ... +- the ideal companion to the [gltf_auto_export](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/tools/gltf_auto_export) to embed your Bevy components inside your gltf files + + + +> Important: + the tooling is still in the early stages, even if it is feature complete : use with caution!. + +## Installation: + +* grab the latest release zip file from the releases tab (choose the bevy_components releases !) + + + +* in Blender go to edit => preferences => install + +![blender addon install](./docs/blender_addon_install.png) + +* choose the path where ```bevy_components.zip``` is stored + +![blender addon install](./docs/blender_addon_install2.png) + + +## Configuration & overview + +Before you can use the add-on you need to configure it + +### Bevy side + + - setup [bevy_registry_export](https://crates.io/crates/bevy_registry_export) for your project (see the crate's documentation for that), and compile/run it to get the ```registry.json``` file + +### Blender side + +- Go to the new Bevy Components tab in the 3D view + +![configuration](./docs/configuration.png) + +- click on the button to select your registry.json file (in the "configuration" panel) + +![configuration 2](./docs/configuration2.png) + +- the list of available components will appear + +![configuration 3](./docs/configuration3.png) + + + +## Use + + +### Existing components & custom properties + +* If you already have components defined manualy in Blender inside **custom properties** you will need to define them again using the UI! +* avoid mixing & matching: if you change the values of **custom properties** that also have a component, the custom property will be **overriden** every time +you change the component's value +* you can of course still use non component custom properties as always, this add-on will only impact those that have corresponding Bevy components + +### adding components + +- to add a component, select an object and then select the component from the components list: (the full type information will be displayed as tooltip) + +![components list](./docs/components_list.png) + +- click on the dropdown to get the full list of available components + +![components list](./docs/components_list2.png) + +- you can also filter components by name for convenience + +![filter components](./docs/filter_components.png) + + +- add a component by clicking on the "add component" button once you have selected your desired component + + it will appear in the component list for that object + +![add component](./docs/add_component.png) + +### edit components + +- to edit a component's value just use the UI: + +![edit component](./docs/edit_component.png) + +it will automatically update the value of the corresponding custom property + +![edit component](./docs/edit_component2.png) + +### copy & pasting + +- you can also copy & paste components between objects + +- click on the "copy component button" of the component you want to copy + +![copy component](./docs/copy_component.png) + +- then select the object you want to copy the component (& its value) to, and click on the paste button. + +It will add the component to the select object + +![paste component](./docs/paste_component.png) + +> if the target object already has the same component, its values will be overwritten + + +## Additional components UI features + +- for large/ complex components you can toggle the details of that component: + +![toggle details](./docs/toggle_details.png) + + +## Supported components + +- normally (minus any bugs, please report those!) all components using **registered** types should be useable and editable +- this includes (non exhaustive list): + * enums (even complex ones !) + + ![enums](./docs/enums.png) + + ![enums](./docs/enums2.png) + + + * complex structs, with various types of fields (including nested ones) + + ![complex](./docs/complex_components2.png) + + * lists/ vecs (here a vec of tuples) + + ![lists](./docs/vecs_lists.png) + + * etc ! + +## Unregistered types & error handling + +- non registered types can be viewed in this panel : (can be practical to see if you have any missing registrations too!) + + ![unregistered types](./docs/unregistered_types.png) + +- if you have a component made up of unregistered structs/enums etc, you will get visual feedback & the component will be deactivated + + ![invalid component](./docs/invalid_components.png) + + > important ! ```gltf_auto_export``` currently has no way of filtering out components, so you need to delete invalid components like these before exporting + this will be adress in the future + +- if you are encountering this type of view: don't panic your component data is not gone ! It just means you need to reload the registry data by clicking on the relevant button + + ![missing registry data](./docs/missing_registry_data.png) + + + +## advanced configuration + + - there are also additional QOL features, that you should not need most of the time + + - "update custom properties of current object" : will go over **all components** that you have defined for the **currently selected object**, and re-generate the + + corresponding custom property values + + ![update custom properties](./docs/other_options.png) + + + - "update custom properties of ALL objects" : same as above but it will do so for the **ALL objects in your blend file** (so can be slow!), and re-generate the + + corresponding custom property values + + ![update custom properties for all](./docs/other_options2.png) + + +## Additional important information + + +- for the components to work correctly with [```bevy_gltf_components```](https://crates.io/crates/bevy_gltf_components) or [```bevy_gltf_blueprints```](https://crates.io/crates/bevy_gltf_blueprints) you will need to set the ```legacy_mode``` for those plugins to **FALSE** +as the component data generated by this add on is a complete, clean **ron** data that is incompatible with the previous (legacy versions). +Please see the documentation of those crates for more information. + +> Note: the legacy mode support will be dropped in future versions, and the default behaviour will be NO legacy mode + + +## Examples + +you can find an example [here](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/bevy_registry_export/) + +## License + +This tool, all its code, contents & assets is Dual-licensed under either of + +- Apache License, Version 2.0, ([LICENSE-APACHE](../LICENSE_APACHE.md) or https://www.apache.org/licenses/LICENSE-2.0) +- MIT license ([LICENSE-MIT](../LICENSE_MIT.md) or https://opensource.org/licenses/MIT) \ No newline at end of file diff --git a/tools/bevy_components/TODO.md b/tools/bevy_components/TODO.md new file mode 100644 index 0000000..994e6f0 --- /dev/null +++ b/tools/bevy_components/TODO.md @@ -0,0 +1,139 @@ +Basics +- [x] add panel +- [x] add a "create blueprint" button + - [x] when clicked: + - [x] create collection + - [x] add an empty inside collection and name it _components + - [x] add a **AutoExport** Boolean property to collection + - [x] add name imput(popup for name input ?) + +- [x] add a list of existing components/custom properties +- [x] add an "edit blueprint" section + - [x] only filled when there is ONE selection, and that selection is a collection + - [x] add a dropdown of possible components + - [x] add a checkbox for enabling disabling a component (enabled by default) + - [x] add a button for copying a component + - [x] add a button for pasting a component + + +UI: + - [x] filterable list of components to DISPLAY for selection : ComponentDefinitionsList + +- Filter out invalid objects for components that have no _components suffix ? (that is too limiting I think) +- -[x] How to deal with pre-existing custom properties that have NO metadata + * if there is one without metadata: find if there is an available component with the same name & type ? + * if there is , insert metadata + * otherwise, mark it in some way visually ? + +- [x] for OBJECT enums: add two ui pieces + - [x] one for selecting the TYPE to choose (ie normal enum) + - [x] one for setting the VALUE inside that + + +- [x] vecs => (not vec2, vec3 etc) more complex UI to add items in a list + - [x] generate contained CollectionGroup + - [x] CollectionProperty => type = the above +- [x] find ways to "collapse" the different levels of nested data of structs/tupples into a single custom property (ideally on the fly, but we can do without) + +- [x] for single tupple components that represent a single unit type, re_use the base type's UIPropertyGroup instead of creating specific ones (ie TuppleTestF32_ui...) => will not work, would cause overriden "update callback" +- [x] pre_generate default values/values for each main type + +- [x] fix issues with vec2 etc not having the correct number of items +- [x] fix bad defaults in ui group +- [x] fix object enums handling on updates (??) +- [x] fix issues with lambads in loops + +- [x] object enum should be (params) + ie *Collider: + * Cuboid(Vec3) + * Sphere(radius) +- [x] deal with enums variants that do not have any data: ex { + "title": "Mesh" + } + +- [x] remove / change use of ComponentDefinitionsList + - when filling the list, use the long_name as index ie items.append((str(index), item.name, item.long_name)) => items.append((item.long_name, item.name, item.long_name)) +- [x] when removing a component, reset the value of the attribute in the property group (or not ? could be a feature) +- [x] deal correctly with fields of types that are NOT in the schema.json (for ex PlayingAnimation in AnimationPlayer) +- [ ] deal correctly with complex types + CascadeShadowConfig: has an array/list + ClusterConfig: one of the enum variants is an object +- [ ] possibly allow Color to be an enum as it should be ? +- [x] for sub items , the update functions "Name" should be the one of the root object +- [x] fix copy & pasting + - it actually works, but the value of the custom property are not copied back to the UI, need to implement property_group_value_from_custom_property_value +- [ ] we need a notion of "root propertyGroup" =? +- [x] notify user of missing entries in schema (ie , unregistered data types) +- [x] clarify propgroup_ui vs named nested fields +- [x] fix basic enums handling +- [x] add a list of not found components to the registry, add to them on the fly +- [x] add configuration panel (open the first time, closed on further user once configured) + +- [x] add limits to ixxx types vs utypes +- [x] only display the "generate components xx" when relevant ie: + - go through list of custom properties in current object + - if one does not have metadata and / or propgroup: + break + +- [x] remove custom property of disabled component ? => NOpe, as we need custom properties to iterate over +- [x] what to do with components with n/a fields ? perhaps disable the component ? add a "invalid" field to meta ? +- [x] format output as correct RON + - [x] fix issue with empty strings +- [x] change custom property => propGroup to convert RON => Json first => obsolete +- [x] cleanup process_lists + +- [x] fix issues with enum variants with only a title + +- [x] display single item enums inline, others in a seperate row + +- [x] add button to "apply all" (in configuration), to apply/update all custom properties to ALL objects where relevant +- [x] add button to "apply to current" to do the same with current +- [x] add warning sign to the above + +- [x] what about metadata ? +- [x] only upgrade custom properties to metadata when asked/relevant +- [x] implement move list up/down +- [ ] change property_group_value_from_custom_property_value => just disregard it for now, its point is very limited (helping people with old custom properties by attempting to generate real values) + and give the change to a real ron format, it is too limiting +- [x] fix reload registry clearing list of missing types +- [x] clean up metadata module, a lot of repeated code +- [x] some fields when original is 0 or 0.0 are not copyable ? (seems like a bad boolean check ) +- [x] fix issues with object variants in enums (see clusterconfig) + + +- perhaps directly export default values within the schema.json ? + - for most types , it is straighforward, but others, not so much: like the default color in Bevy , etc + +- [x] change default schema.json to registry.json +- [x] pasted components do not get updated value in custom_property +- [x] finish documentation +- [x] add storage of registry path + - [x] save after setting the data (browse for) + - [x] load after each reload ? + +# Additional + - [x] check if output "string" in custom properties are correct + + - gltf_auto_export + - [ ] add support for "enabled" flag + - [ ] add special components + - "AutoExport" => Needed + - "Dynamic" ? naah wait that should be exported by the Bevy side + - [ ] filter out Components_meta ?? + - [x] add legacy mode to the persisted parameters + + - bevy_gltf_components: + - [x] first release patch for current issues + - [x] make configurable + - [x] add "compatibility mode" and deprecation warnings for the current hack-ish conversion of fake ron + - [x] update docs to show we need to use ComponentsFromGltfPlugin::default + + - bevy_gltf_blueprints + - [x] update dependency + - [x] update version + - [x] add ability to set legacy mode for bevy_gltf_components ? + + - [ ] release all versions + - [ ] update main documentation, add compatibility version grid + + \ No newline at end of file diff --git a/tools/bevy_components/__init__.py b/tools/bevy_components/__init__.py new file mode 100644 index 0000000..b63f3eb --- /dev/null +++ b/tools/bevy_components/__init__.py @@ -0,0 +1,143 @@ +bl_info = { + "name": "bevy_components", + "author": "kaosigh", + "version": (0, 1, 0), + "blender": (3, 4, 0), + "location": "VIEW_3D", + "description": "UI to help create Bevy blueprints and components", + "warning": "", + "wiki_url": "https://github.com/kaosat-dev/Blender_bevy_components_workflow", + "tracker_url": "https://github.com/kaosat-dev/Blender_bevy_components_workflow/issues/new", + "category": "User Interface" +} + +import bpy +from bpy.props import (StringProperty) + +from .helpers import load_settings +from .blueprints import CreateBlueprintOperator +from .components.operators import CopyComponentOperator, DeleteComponentOperator, GenerateComponent_From_custom_property_Operator, PasteComponentOperator, AddComponentOperator, Toggle_ComponentVisibility + +from .registry.registry import ComponentsRegistry,MissingBevyType +from .registry.operators import (COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT, ReloadRegistryOperator, OT_OpenFilebrowser) +from .registry.ui import (BEVY_COMPONENTS_PT_Configuration, BEVY_COMPONENTS_PT_MissingTypesPanel, MISSING_TYPES_UL_List) + +from .components.metadata import (ComponentInfos, ComponentsMeta, ensure_metadata_for_all_objects) +from .propGroups.prop_groups import (generate_propertyGroups_for_components) +from .components.lists import GENERIC_LIST_OT_actions, Generic_LIST_OT_AddItem, Generic_LIST_OT_RemoveItem, Generic_LIST_OT_SelectItem +from .components.definitions_list import (ComponentDefinitionsList, ClearComponentDefinitionsList) +from .components.ui import (BEVY_COMPONENTS_PT_ComponentsPanel) + + +# just a test, remove +def scan_item(item, nesting=0): + try: + for sub in dict(item).keys(): + print("--", sub, getattr(item[sub], "type_name", None), item[sub], nesting) + try: + scan_item(item[sub], nesting+1) + except: + pass + except: + pass + +class BEVY_COMPONENTS_PT_MainPanel(bpy.types.Panel): + bl_idname = "BEVY_COMPONENTS_PT_MainPanel" + bl_label = "" + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = "Bevy Components" + bl_context = "objectmode" + + + def draw_header(self, context): + layout = self.layout + name = context.object.name if context.object != None else '' + layout.label(text="Components For "+ name) + + def draw(self, context): + layout = self.layout + object = context.object + collection = context.collection + + + """row.prop(bpy.context.window_manager, "blueprint_name") + op = row.operator(CreateBlueprintOperator.bl_idname, text="Create blueprint", icon="CONSOLE") + op.blueprint_name = bpy.context.window_manager.blueprint_name + layout.separator() + + current_components_container = None + has_components = False + for child in collection.objects: + if child.name.endswith("_components"): + has_components = True + current_components_container= child + + if collection is not None and has_components: + layout.label(text="Edit blueprint: "+ collection.name) + + """ + + + +#_register, _unregister = bpy.utils.register_classes_factory(classes) +classes = [ + CreateBlueprintOperator, + AddComponentOperator, + CopyComponentOperator, + PasteComponentOperator, + DeleteComponentOperator, + GenerateComponent_From_custom_property_Operator, + Toggle_ComponentVisibility, + + ComponentDefinitionsList, + ClearComponentDefinitionsList, + + ComponentInfos, + ComponentsMeta, + MissingBevyType, + ComponentsRegistry, + + OT_OpenFilebrowser, + ReloadRegistryOperator, + COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, + COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT, + + BEVY_COMPONENTS_PT_MainPanel, + BEVY_COMPONENTS_PT_ComponentsPanel, + BEVY_COMPONENTS_PT_Configuration, + MISSING_TYPES_UL_List, + BEVY_COMPONENTS_PT_MissingTypesPanel, + + Generic_LIST_OT_SelectItem, + Generic_LIST_OT_AddItem, + Generic_LIST_OT_RemoveItem, + GENERIC_LIST_OT_actions +] + +from bpy.app.handlers import persistent + +@persistent +def post_load(file_name): + print("post load", file_name) + registry = bpy.context.window_manager.components_registry + registry.schemaPath = load_settings(registry.settings_save_path)["schemaPath"] + registry.load_schema() + generate_propertyGroups_for_components() + ensure_metadata_for_all_objects() + + +def register(): + for cls in classes: + bpy.utils.register_class(cls) + bpy.types.WindowManager.blueprint_name = StringProperty() + + bpy.app.handlers.load_post.append(post_load) + +def unregister(): + for cls in classes: + bpy.utils.unregister_class(cls) + del bpy.types.WindowManager.blueprint_name + + bpy.app.handlers.load_post.remove(post_load) + diff --git a/tools/bevy_components/blueprints.py b/tools/bevy_components/blueprints.py new file mode 100644 index 0000000..c4deec4 --- /dev/null +++ b/tools/bevy_components/blueprints.py @@ -0,0 +1,41 @@ + +import json +import bpy +from bpy_types import Operator +from bpy.props import (StringProperty) + +from .helpers import make_empty + +class CreateBlueprintOperator(Operator): + """Creates blueprint""" + bl_idname = "object.simple_operator" + bl_label = "Simple Object Operator" + + blueprint_name: StringProperty( + name="blueprint name", + description="blueprint name to add", + default="NewBlueprint" + ) + + + def execute(self, context): + blueprint_name = self.blueprint_name + if blueprint_name == '': + blueprint_name = "NewBlueprint" + collection = bpy.data.collections.new(blueprint_name) + bpy.context.scene.collection.children.link(collection) + collection['AutoExport'] = True + + # this is in order to deal with automatic naming + blueprint_name = collection.name + + components_empty = make_empty(blueprint_name + "_components", [0,0,0], [0,0,0], [0,0,0], bpy.context.scene.collection) + bpy.ops.collection.objects_remove_all() + + collection.objects.link(components_empty) + + components_empty.select_set(True) + bpy.context.view_layer.objects.active = components_empty + + return {'FINISHED'} + diff --git a/tools/gltf_auto_export/ui/__init__.py b/tools/bevy_components/components/__init__.py similarity index 100% rename from tools/gltf_auto_export/ui/__init__.py rename to tools/bevy_components/components/__init__.py diff --git a/tools/bevy_components/components/definitions_list.py b/tools/bevy_components/components/definitions_list.py new file mode 100644 index 0000000..4ad8137 --- /dev/null +++ b/tools/bevy_components/components/definitions_list.py @@ -0,0 +1,56 @@ +import bpy +from bpy.props import (StringProperty) + +# this one is for UI only, and its inner list contains a useable list of shortnames of components +class ComponentDefinitionsList(bpy.types.PropertyGroup): + + # FIXME: not sure, hard coded exclude list, feels wrong + exclude = ['Parent', 'Children'] + + def add_component_to_ui_list(self, context): + #print("add components to ui_list") + items = [] + type_infos = context.window_manager.components_registry.type_infos + short_names = context.window_manager.components_registry.short_names_to_long_names + for short_name in sorted(short_names.keys()): + long_name = short_names[short_name] + definition = type_infos[long_name] + is_component = definition['isComponent'] if "isComponent" in definition else False + + if self.filter in short_name and is_component: + if not 'Handle' in short_name and not "Cow" in short_name and not "AssetId" in short_name and short_name not in self.exclude: # FIXME: hard coded, seems wrong + items.append((long_name, short_name, long_name)) + return items + + @classmethod + def register(cls): + bpy.types.WindowManager.components_list = bpy.props.PointerProperty(type=ComponentDefinitionsList) + + @classmethod + def unregister(cls): + del bpy.types.WindowManager.components_list + + list : bpy.props.EnumProperty( + name="list", + description="list", + # items argument required to initialize, just filled with empty values + items = add_component_to_ui_list, + ) + filter: StringProperty( + name="component filter", + description="filter for the components list", + options={'TEXTEDIT_UPDATE'} + ) + + +class ClearComponentDefinitionsList(bpy.types.Operator): + ''' clear list of bpy.context.collection.component_definitions ''' + bl_label = "clear component definitions" + bl_idname = "components.clear_component_definitions" + + def execute(self, context): + # create a new item, assign its properties + bpy.context.collection.component_definitions.clear() + + return {'FINISHED'} + diff --git a/tools/bevy_components/components/lists.py b/tools/bevy_components/components/lists.py new file mode 100644 index 0000000..f16421d --- /dev/null +++ b/tools/bevy_components/components/lists.py @@ -0,0 +1,170 @@ +import json +from bpy_types import Operator, UIList +from bpy.props import (StringProperty, EnumProperty, PointerProperty, FloatVectorProperty, IntProperty) + +class Generic_LIST_OT_AddItem(Operator): + """Add a new item to the list.""" + bl_idname = "generic_list.add_item" + bl_label = "Add a new item" + + property_group_path: StringProperty( + name="property group path", + description="", + ) + + component_name: StringProperty( + name="component name", + description="", + ) + + def execute(self, context): + print("") + object = context.object + # information is stored in component meta + components_in_object = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == self.component_name, components_in_object), None) + + propertyGroup = component_meta + for path_item in json.loads(self.property_group_path): + propertyGroup = getattr(propertyGroup, path_item) + + print("list container", propertyGroup, dict(propertyGroup)) + target_list = getattr(propertyGroup, "list") + index = getattr(propertyGroup, "list_index") + item = target_list.add() + propertyGroup.list_index = index + 1 # we use this to force the change detection + + print("added item", item, item.field_names, getattr(item, "field_names")) + print("") + return{'FINISHED'} + + +class Generic_LIST_OT_RemoveItem(Operator): + """Remove an item to the list.""" + bl_idname = "generic_list.remove_item" + bl_label = "Remove selected item" + + property_group_path: StringProperty( + name="property group path", + description="", + ) + + component_name: StringProperty( + name="component name", + description="", + ) + def execute(self, context): + print("remove from list", context.object) + + object = context.object + # information is stored in component meta + components_in_object = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == self.component_name, components_in_object), None) + + propertyGroup = component_meta + for path_item in json.loads(self.property_group_path): + propertyGroup = getattr(propertyGroup, path_item) + + target_list = getattr(propertyGroup, "list") + index = getattr(propertyGroup, "list_index") + target_list.remove(index) + propertyGroup.list_index = min(max(0, index - 1), len(target_list) - 1) + return{'FINISHED'} + + +class Generic_LIST_OT_SelectItem(Operator): + """Remove an item to the list.""" + bl_idname = "generic_list.select_item" + bl_label = "select an item" + + + property_group_path: StringProperty( + name="property group path", + description="", + ) + + component_name: StringProperty( + name="component name", + description="", + ) + + selection_index: IntProperty() + + def execute(self, context): + print("select in list", context.object) + + object = context.object + # information is stored in component meta + components_in_object = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == self.component_name, components_in_object), None) + + propertyGroup = component_meta + for path_item in json.loads(self.property_group_path): + propertyGroup = getattr(propertyGroup, path_item) + + target_list = getattr(propertyGroup, "list") + index = getattr(propertyGroup, "list_index") + + propertyGroup.list_index = self.selection_index + return{'FINISHED'} + + +class GENERIC_LIST_OT_actions(Operator): + """Move items up and down, add and remove""" + bl_idname = "generic_list.list_action" + bl_label = "List Actions" + bl_description = "Move items up and down, add and remove" + bl_options = {'REGISTER', 'UNDO'} + + action: EnumProperty( + items=( + ('UP', "Up", ""), + ('DOWN', "Down", ""), + ('REMOVE', "Remove", ""), + ('ADD', "Add", ""))) + + property_group_path: StringProperty( + name="property group path", + description="", + ) + + component_name: StringProperty( + name="component name", + description="", + ) + + def invoke(self, context, event): + object = context.object + # information is stored in component meta + components_in_object = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == self.component_name, components_in_object), None) + + propertyGroup = component_meta + for path_item in json.loads(self.property_group_path): + propertyGroup = getattr(propertyGroup, path_item) + + target_list = getattr(propertyGroup, "list") + index = getattr(propertyGroup, "list_index") + + + if self.action == 'DOWN' and index < len(target_list) - 1: + #item_next = scn.rule_list[index + 1].name + target_list.move(index, index + 1) + propertyGroup.list_index += 1 + + elif self.action == 'UP' and index >= 1: + #item_prev = scn.rule_list[index - 1].name + target_list.move(index, index - 1) + propertyGroup.list_index -= 1 + + elif self.action == 'REMOVE': + target_list.remove(index) + propertyGroup.list_index = min(max(0, index - 1), len(target_list) - 1) + + if self.action == 'ADD': + item = target_list.add() + propertyGroup.list_index = index + 1 # we use this to force the change detection + #info = '"%s" added to list' % (item.name) + #self.report({'INFO'}, info) + + return {"FINISHED"} \ No newline at end of file diff --git a/tools/bevy_components/components/metadata.py b/tools/bevy_components/components/metadata.py new file mode 100644 index 0000000..666a343 --- /dev/null +++ b/tools/bevy_components/components/metadata.py @@ -0,0 +1,236 @@ +import bpy +from bpy.props import (StringProperty, BoolProperty, PointerProperty) +from bpy_types import (PropertyGroup) +from ..propGroups.conversions import property_group_value_from_custom_property_value, property_group_value_to_custom_property_value + +class ComponentInfos(bpy.types.PropertyGroup): + name : bpy.props.StringProperty( + name = "name", + default = "" + ) + + long_name : bpy.props.StringProperty( + name = "long name", + default = "" + ) + + type_name : bpy.props.StringProperty( + name = "Type", + default = "" + ) + + values: bpy.props.StringProperty( + name = "Value", + default = "" + ) + + enabled: BoolProperty( + name="enabled", + description="component enabled", + default=True + ) + + invalid: BoolProperty( + name="invalid", + description="component is invalid, because of missing registration/ other issues", + default=False + ) + + invalid_details: StringProperty( + name="invalid details", + description="detailed information about why the component is invalid", + default="" + ) + + visible: BoolProperty( # REALLY dislike doing this for UI control, but ok hack for now + default=True + ) + +class ComponentsMeta(PropertyGroup): + infos_per_component: StringProperty( + name="infos per component", + description="component" + ) + components: bpy.props.CollectionProperty(type = ComponentInfos) + + @classmethod + def register(cls): + bpy.types.Object.components_meta = PointerProperty(type=ComponentsMeta) + + @classmethod + def unregister(cls): + del bpy.types.Object.components_meta + +# We need a collection property of components PER object +def get_component_metadata_by_short_name(object, short_name): + if not "components_meta" in object: + return None + return next(filter(lambda component: component["name"] == short_name, object.components_meta.components), None) + +# remove no longer valid metadata from object +def cleanup_invalid_metadata(object): + components_metadata = object.components_meta.components + to_remove = [] + for index, component_meta in enumerate(components_metadata): + short_name = component_meta.name + if short_name not in object.keys(): + print("component:", short_name, "present in metadata, but not in object") + to_remove.append(index) + for index in to_remove: + components_metadata.remove(index) + + +# returns a component definition ( an entry in registry's type_infos) with matching short name or None if nothing has been found +def find_component_definition_from_short_name(short_name): + registry = bpy.context.window_manager.components_registry + long_name = registry.short_names_to_long_names.get(short_name, None) + if long_name != None: + return registry.type_infos.get(long_name, None) + return None + +# FIXME: feels a bit heavy duty, should only be done +# if the components panel is active ? +def ensure_metadata_for_all_objects(): + for object in bpy.data.objects: + add_metadata_to_components_without_metadata(object) + +# returns whether an object has custom properties without matching metadata +def do_object_custom_properties_have_missing_metadata(object): + components_metadata = getattr(object, "components_meta", None) + if components_metadata == None: + return True + + components_metadata = components_metadata.components + + missing_metadata = False + for component_name in dict(object) : + if component_name == "components_meta": + continue + component_meta = next(filter(lambda component: component["name"] == component_name, components_metadata), None) + if component_meta == None: + # current component has no metadata but is there even a compatible type in the registry ? + # if not ignore it + component_definition = find_component_definition_from_short_name(component_name) + if component_definition != None: + missing_metadata = True + break + + return missing_metadata + + +# adds metadata to object only if it is missing +def add_metadata_to_components_without_metadata(object): + registry = bpy.context.window_manager.components_registry + + for component_name in dict(object) : + if component_name == "components_meta": + continue + upsert_component_in_object(object, component_name, registry) + +# adds a component to an object (including metadata) using the provided component definition & optional value +def add_component_to_object(object, component_definition, value=None): + cleanup_invalid_metadata(object) + if object is not None: + print("add_component_to_object", component_definition) + long_name = component_definition["title"] + short_name = component_definition["short_name"] + registry = bpy.context.window_manager.components_registry + if registry.type_infos == None: + raise Exception('registry type infos have not been loaded yet or ar missing !') + definition = registry.type_infos[long_name] + # now we use our pre_generated property groups to set the initial value of our custom property + (_, propertyGroup) = upsert_component_in_object(object, component_name=short_name, registry=registry) + if value == None: + value = property_group_value_to_custom_property_value(propertyGroup, definition, registry, None) + else: # we have provided a value, that is a raw , custom property value, to set the value of the propertyGroup + object["__disable__update"] = True # disable update callback while we set the values of the propertyGroup "tree" (as a propertyGroup can contain other propertyGroups) + property_group_value_from_custom_property_value(propertyGroup, definition, registry, value) + del object["__disable__update"] + + object[short_name] = value + +def upsert_component_in_object(object, component_name, registry): + # print("upsert_component_in_object", object, "component name", component_name) + # TODO: upsert this part too ? + target_components_metadata = object.components_meta.components + component_definition = find_component_definition_from_short_name(component_name) + if component_definition != None: + short_name = component_definition["short_name"] + long_name = component_definition["title"] + property_group_name = short_name+"_ui" + propertyGroup = None + + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + if not component_meta: + component_meta = target_components_metadata.add() + component_meta.name = short_name + component_meta.long_name = long_name + propertyGroup = getattr(component_meta, property_group_name, None) + else: # this one has metadata but we check that the relevant property group is present + propertyGroup = getattr(component_meta, property_group_name, None) + + # try to inject propertyGroup if not present + if propertyGroup == None: + #print("propertygroup not found in metadata attempting to inject") + if property_group_name in registry.component_propertyGroups: + # we have found a matching property_group, so try to inject it + # now inject property group + setattr(ComponentInfos, property_group_name, registry.component_propertyGroups[property_group_name]) # FIXME: not ideal as all ComponentInfos get the propGroup, but have not found a way to assign it per instance + propertyGroup = getattr(component_meta, property_group_name, None) + + # now deal with property groups details + if propertyGroup != None: + if short_name in registry.invalid_components: + component_meta.enabled = False + component_meta.invalid = True + component_meta.invalid_details = "component contains fields that are not in the schema, disabling" + else: + # if we still have not found the property group, mark it as invalid + component_meta.enabled = False + component_meta.invalid = True + component_meta.invalid_details = "component not present in the schema, possibly renamed? Disabling for now" + # property_group_value_from_custom_property_value(propertyGroup, component_definition, registry, object[component_name]) + + return (component_meta, propertyGroup) + else: + return(None, None) + + +def copy_propertyGroup_values_to_another_object(source_object, target_object, component_name): + if source_object == None or target_object == None or component_name == None: + raise Exception('missing input data, cannot copy component propertryGroup') + + component_definition = find_component_definition_from_short_name(component_name) + short_name = component_definition["short_name"] + property_group_name = short_name+"_ui" + registry = bpy.context.window_manager.components_registry + + source_components_metadata = source_object.components_meta.components + source_componentMeta = next(filter(lambda component: component["name"] == short_name, source_components_metadata), None) + # matching component means we already have this type of component + source_propertyGroup = getattr(source_componentMeta, property_group_name) + + # now deal with the target object + (_, target_propertyGroup) = upsert_component_in_object(target_object, component_name, registry) + # add to object + value = property_group_value_to_custom_property_value(target_propertyGroup, component_definition, registry, None) + target_object[short_name] = value + + # copy the values over + for field_name in source_propertyGroup.field_names: + if field_name in source_propertyGroup: + target_propertyGroup[field_name] = source_propertyGroup[field_name] + apply_propertyGroup_values_to_object_customProperties(target_object) + +# TODO: move to propgroups ? +def apply_propertyGroup_values_to_object_customProperties(object): + cleanup_invalid_metadata(object) + registry = bpy.context.window_manager.components_registry + for component_name in dict(object) : + if component_name == "components_meta": + continue + (_, propertyGroup) = upsert_component_in_object(object, component_name, registry) + component_definition = find_component_definition_from_short_name(component_name) + if component_definition != None: + value = property_group_value_to_custom_property_value(propertyGroup, component_definition, registry, None) + object[component_name] = value diff --git a/tools/bevy_components/components/operators.py b/tools/bevy_components/components/operators.py new file mode 100644 index 0000000..8c2c3df --- /dev/null +++ b/tools/bevy_components/components/operators.py @@ -0,0 +1,153 @@ +import ast +import json +import bpy +from bpy_types import Operator +from bpy.props import (StringProperty) +from .metadata import add_component_to_object, add_metadata_to_components_without_metadata, copy_propertyGroup_values_to_another_object, find_component_definition_from_short_name + +class AddComponentOperator(Operator): + """Add component to blueprint""" + bl_idname = "object.addblueprint_to_component" + bl_label = "Add component to blueprint Operator" + bl_options = {"UNDO"} + + component_type: StringProperty( + name="component_type", + description="component type to add", + ) + + def execute(self, context): + print("adding component to blueprint", self.component_type) + object = context.object + + has_component_type = self.component_type != "" + if has_component_type and object != None: + type_infos = context.window_manager.components_registry.type_infos + component_definition = type_infos[self.component_type] + add_component_to_object(object, component_definition) + + return {'FINISHED'} + +class CopyComponentOperator(Operator): + """Copy component from blueprint""" + bl_idname = "object.copy_component" + bl_label = "Copy component Operator" + bl_options = {"UNDO"} + + source_component_name: StringProperty( + name="source component_name", + description="name of the component to copy", + ) + + source_object_name: StringProperty( + name="source object name", + description="name of the object to copy the component from", + ) + + @classmethod + def register(cls): + bpy.types.WindowManager.copied_source_component_name = StringProperty() + bpy.types.WindowManager.copied_source_object = StringProperty() + + @classmethod + def unregister(cls): + del bpy.types.WindowManager.copied_source_component_name + del bpy.types.WindowManager.copied_source_object + + + def execute(self, context): + if self.source_component_name != '' and self.source_object_name != "": + context.window_manager.copied_source_component_name = self.source_component_name + context.window_manager.copied_source_object = self.source_object_name + else: + self.report({"ERROR"}, "The source object name / component name to copy a component from have not been specified") + + return {'FINISHED'} + + +class PasteComponentOperator(Operator): + """Paste component to blueprint""" + bl_idname = "object.paste_component" + bl_label = "Paste component to blueprint Operator" + bl_options = {"UNDO"} + + def execute(self, context): + source_object_name = context.window_manager.copied_source_object + source_object = bpy.data.objects.get(source_object_name, None) + print("source object", source_object) + if source_object == None: + self.report({"ERROR"}, "The source object to copy a component from does not exist") + else: + component_name = context.window_manager.copied_source_component_name + if not component_name in source_object: + self.report({"ERROR"}, "The source component to copy a component from does not exist") + else: + component_value = source_object[component_name] + print("pasting component to object: component name:", str(component_name), "component value:" + str(component_value)) + print (context.object) + copy_propertyGroup_values_to_another_object(source_object, context.object, component_name) + + return {'FINISHED'} + + + +class DeleteComponentOperator(Operator): + """Delete component from blueprint""" + bl_idname = "object.delete_component" + bl_label = "Delete component from blueprint Operator" + bl_options = {"UNDO"} + + component_name: StringProperty( + name="component name", + description="component to delete", + ) + + def execute(self, context): + object = context.object + if object is not None and self.component_name in object: + del object[self.component_name] + else: + self.report({"ERROR"}, "The object/ component to remove does not exist") + + return {'FINISHED'} + + +class GenerateComponent_From_custom_property_Operator(Operator): + """generate components from custom property""" + bl_idname = "object.generate_component" + bl_label = "Generate component from custom_property Operator" + bl_options = {"UNDO"} + + component_name: StringProperty( + name="component name", + description="component to generate custom properties for", + ) + + def execute(self, context): + object = context.object + add_metadata_to_components_without_metadata(object) + + return {'FINISHED'} + + + +class Toggle_ComponentVisibility(Operator): + """toggles components visibility""" + bl_idname = "object.toggle_component_visibility" + bl_label = "Toggle component visibility" + bl_options = {"UNDO"} + + component_name: StringProperty( + name="component name", + description="component to toggle", + ) + + def execute(self, context): + object = context.object + components_in_object = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == self.component_name, components_in_object), None) + if component_meta != None: + component_meta.visible = not component_meta.visible + + return {'FINISHED'} + diff --git a/tools/bevy_components/components/ui.py b/tools/bevy_components/components/ui.py new file mode 100644 index 0000000..a169210 --- /dev/null +++ b/tools/bevy_components/components/ui.py @@ -0,0 +1,212 @@ +import json +import bpy +from .metadata import do_object_custom_properties_have_missing_metadata +from .operators import AddComponentOperator, CopyComponentOperator, DeleteComponentOperator, GenerateComponent_From_custom_property_Operator, PasteComponentOperator, Toggle_ComponentVisibility + +def draw_propertyGroup( propertyGroup, layout, nesting =[], rootName=None): + is_enum = getattr(propertyGroup, "with_enum") + is_list = getattr(propertyGroup, "with_list") + #current_short_name = getattr(propertyGroup, "short_name", "") + "_ui" + #nesting = nesting + [current_short_name] # we need this convoluted "nested path strings " workaround so that operators working on a given + # item in our components hierarchy can get the correct propertyGroup by STRINGS because of course, we cannot pass objects to operators...sigh + + # if it is an enum, the first field name is always the list of enum variants, the others are the variants + field_names = propertyGroup.field_names + #print("") + #print("drawing", propertyGroup, nesting, "component_name", rootName) + #type_name = getattr(propertyGroup, "type_name", None)#propertyGroup.type_name if "type_name" in propertyGroup else "" + #print("type name", type_name) + #print("name", propertyGroup.name, "name2", getattr(propertyGroup, "name"), "short_name", getattr(propertyGroup, "short_name", None), "nesting", nesting) + if is_enum: + subrow = layout.row() + display_name = field_names[0] if propertyGroup.tupple_or_struct == "struct" else "" + subrow.prop(propertyGroup, field_names[0], text=display_name) + subrow.separator() + selection = getattr(propertyGroup, field_names[0]) + + for fname in field_names[1:]: + if fname == "variant_" + selection: + subrow = layout.row() + display_name = fname if propertyGroup.tupple_or_struct == "struct" else "" + + nestedPropertyGroup = getattr(propertyGroup, fname) + nested = getattr(nestedPropertyGroup, "nested", False) + #print("nestedPropertyGroup", nestedPropertyGroup, fname, nested) + if nested: + draw_propertyGroup(nestedPropertyGroup, subrow.column(), nesting + [fname], rootName ) + # if an enum variant is not a propertyGroup + break + elif is_list: + #print("show list", propertyGroup, dict(propertyGroup), propertyGroup.type_name) + item_list = getattr(propertyGroup, "list") + item_type = getattr(propertyGroup, "type_name_short") + list_index = getattr(propertyGroup, "list_index") + box = layout.box() + split = box.split(factor=0.9) + list_column, buttons_column = (split.column(),split.column()) + + list_column = list_column.box() + for index, item in enumerate(item_list): + row = list_column.row() + draw_propertyGroup(item, row, nesting, rootName) + icon = 'CHECKBOX_HLT' if list_index == index else 'CHECKBOX_DEHLT' + op = row.operator('generic_list.select_item', icon=icon, text="") + op.component_name = rootName + op.property_group_path = json.dumps(nesting) + op.selection_index = index + + #various control buttons + buttons_column.separator() + row = buttons_column.row() + op = row.operator('generic_list.list_action', icon='ADD', text="") + op.action = 'ADD' + op.component_name = rootName + op.property_group_path = json.dumps(nesting) + + row = buttons_column.row() + op = row.operator('generic_list.list_action', icon='REMOVE', text="") + op.action = 'REMOVE' + op.component_name = rootName + op.property_group_path = json.dumps(nesting) + + buttons_column.separator() + row = buttons_column.row() + op = row.operator('generic_list.list_action', icon='TRIA_UP', text="") + op.action = 'UP' + op.component_name = rootName + op.property_group_path = json.dumps(nesting) + + row = buttons_column.row() + op = row.operator('generic_list.list_action', icon='TRIA_DOWN', text="") + op.action = 'DOWN' + op.component_name = rootName + op.property_group_path = json.dumps(nesting) + + else: + for fname in field_names: + subrow = layout.row() + nestedPropertyGroup = getattr(propertyGroup, fname) + nested = getattr(nestedPropertyGroup, "nested", False) + display_name = fname if propertyGroup.tupple_or_struct == "struct" else "" + + if nested: + layout.separator() + layout.label(text=display_name) # this is the name of the field/sub field + layout.separator() + draw_propertyGroup(nestedPropertyGroup, subrow.column(), nesting + [fname], rootName ) + else: + subrow.prop(propertyGroup, fname, text=display_name) + subrow.separator() + + +class BEVY_COMPONENTS_PT_ComponentsPanel(bpy.types.Panel): + bl_idname = "BEVY_COMPONENTS_PT_ComponentsPanel" + bl_label = "Components" + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = "Bevy Components" + bl_context = "objectmode" + bl_parent_id = "BEVY_COMPONENTS_PT_MainPanel" + + @classmethod + def poll(cls, context): + return (context.object is not None) + + def draw(self, context): + object = context.object + layout = self.layout + + # we get & load our component registry + registry = bpy.context.window_manager.components_registry + available_components = bpy.context.window_manager.components_list + + + if object is not None: + row = layout.row(align=True) + row.prop(available_components, "list", text="Component") + row.prop(available_components, "filter",text="Filter") + + # add components + row = layout.row(align=True) + op = row.operator(AddComponentOperator.bl_idname, text="Add", icon="ADD") + op.component_type = available_components.list + row.enabled = available_components.list != '' + + layout.separator() + + # paste components + row = layout.row(align=True) + row.operator(PasteComponentOperator.bl_idname, text="Paste component ("+bpy.context.window_manager.copied_source_component_name+")", icon="PASTEDOWN") + row.enabled = registry.type_infos != None and context.window_manager.copied_source_object != '' + + layout.separator() + + # upgrate custom props to components + upgradeable_customProperties = registry.type_infos != None and do_object_custom_properties_have_missing_metadata(context.object) + if upgradeable_customProperties: + row = layout.row(align=True) + op = row.operator(GenerateComponent_From_custom_property_Operator.bl_idname, text="generate components from custom properties" , icon="LOOP_FORWARDS") + layout.separator() + + + components_in_object = object.components_meta.components + for component_name in sorted(dict(object)) : # sorted by component name, practical + if component_name == "components_meta": + continue + # anything withouth metadata gets skipped, we only want to see real components, not all custom props + component_meta = next(filter(lambda component: component["name"] == component_name, components_in_object), None) + if component_meta == None: + continue + + component_invalid = getattr(component_meta, "invalid") + invalid_details = getattr(component_meta, "invalid_details") + component_visible = getattr(component_meta, "visible") + single_field = False + + # our whole row + box = layout.box() + row = box.row(align=True) + # "header" + row.alert = component_invalid + row.prop(component_meta, "enabled", text="") + row.label(text=component_name) + + # we fetch the matching ui property group + root_propertyGroup_name = component_name+"_ui" + propertyGroup = getattr(component_meta, root_propertyGroup_name, None) + if propertyGroup: + # if the component has only 0 or 1 field names, display inline, otherwise change layout + single_field = len(propertyGroup.field_names) < 2 + prop_group_location = box.row(align=True).column() + if single_field: + prop_group_location = row.column(align=True)#.split(factor=0.9)#layout.row(align=False) + + if component_visible: + if component_invalid: + error_message = invalid_details if component_invalid else "Missing component UI data, please reload registry !" + prop_group_location.label(text=error_message) + draw_propertyGroup(propertyGroup, prop_group_location, [root_propertyGroup_name], component_name) + else : + row.label(text="details hidden, click on toggle to display") + else: + error_message = invalid_details if component_invalid else "Missing component UI data, please reload registry !" + row.label(text=error_message) + + # "footer" with additional controls + op = row.operator(DeleteComponentOperator.bl_idname, text="", icon="X") + op.component_name = component_name + row.separator() + + op = row.operator(CopyComponentOperator.bl_idname, text="", icon="COPYDOWN") + op.source_component_name = component_name + op.source_object_name = object.name + row.separator() + + #if not single_field: + toggle_icon = "TRIA_DOWN" if component_visible else "TRIA_RIGHT" + op = row.operator(Toggle_ComponentVisibility.bl_idname, text="", icon=toggle_icon) + op.component_name = component_name + #row.separator() + + else: + layout.label(text ="Select an object to edit its components") diff --git a/tools/bevy_components/docs/add_component.png b/tools/bevy_components/docs/add_component.png new file mode 100644 index 0000000000000000000000000000000000000000..3e0e3af3bd54152bd4cebc7cfdc6623056fc094d GIT binary patch literal 19691 zcmV)TK(W7xP)93v-rkOmj%H?Np(;Dd%F2Ht zBL4pV>FMeD0Rivw_LGy7NOQF031`RflIiK{r+aEJgr|rOrQOo?QMNXJ&kQVNX9O_jrDwv#ge5=;_AlA%vkDa0*ueU&*|5%qk>{!DLT_+ zvAC{Dj8s+4ujEy%sdv`m3rod*wx(-v^f{7wE6CnLP79->x6s*|QdK2FmA`|JLwWbI z=duwAhfyJJ5QR+i=a)f+&hfYsN0x$SSTn;FwDKLBZ7(nu$q3Z!HDV*t=_+ix{5-&o z>ry^681bzTFz^2G_Y*0TM*`!+V_DXNSqsat327spq>T{L zj%$afzmNA1s|QE5W}T2`J1Uixv7aDE;qY{QM5N&;oyleucjaL@4G<$Om0h3jBc&V5 znoC;ZmOY@q+8VfaJ9hceC2jk9vS;_BmYL~avSY?%;o9wlXQk0Pd-t>tnhx5~m=WBK z4$$(dvoh|hwwMn)d9=Ib7duFs9=6*Wo+hMimjJZVHX*I`gKTH}KaZL} zfBzt)ts!HgdtY+T%9bh}9!W?Vz3iSGQ0x1tYwP_Q)|*dl)S@dhTTe5|$o=_P`uW`G zK&)r|=KV=0X^c#khQ}`4U(k6eWB|pT0O(%(0ye%5(9r*)srLu`YGtVNVlEJe<6ABUw zu!1)C-sZB!tnEZ~ffQn;AZ+Rt0vZc#MPwYui|=NSSmX%Ce9x3LDptZ@n?%LCR}1b3s$OGcqSpwg=@-VnnoY9_T_u zxr8-HW<5!eHdlmO!`&hZPrX*FQ*dg(q@goT37Ae38%DU(yq4^{+`odz8M#p3`8Ze0c@6 z9^acAr*75^-qTnDiRi+o1p22XIH9AEG!sZe!UcS0q`{#zQ%*x%iCWTX*q4{42xj5J6!TlLdMK#ufHxj)58Uo zkVa4|k<@WwOeLgY)G9w}js4b1^9Wxt$AUdJ_UsvPln*Z=ZJWIj5ikaFNduJtw7}xm zj!l3(t8JjdG)J1rNP{KN%R!v~rCu}sJhANFz<`Q z?pOkeQ&1?vca){FhM#)z0N@6DA-lIdb5YqX!qzlf%LMxW6tl@pq6b~DDL zy-G8^a`!Zdit#mjV!~bk$$hKQW*>4^1H!Cf=fr8_zU8YvD;kkE@ApAyz z|A{nN2|Gvhf2fH2Fcax+M6 z!S=@21%y$W91FXLs1VKFEp$#h666+rAM{K4H^!mfuur}6s8IQ;K~5qoNznSqP@G<#ugZ`F)|5^8z8FBO|l0XP%3_TmYe$d#E7yk!oFg(AfX@6KX zgWbkq7>LF|v4~E4%6azS{r_LA-Bx*J$3qA~Ss+fWAw`iKNwz{LSfOJ|#x`!hCPQCc zY@-E@4wMzQd$hi@AvD>C!t@@?E6+vDSba|dERj_)EJVLg zkqnfi#)wV#ug8RC<>}bVpUirV~Va` z-3mHE-88rrHtsy7GCFaD(4JJ#Zs88?^n3Ig-An3{41gqkio#%?8DN%P#=ubbQ`kLT z$nC;aFZC->W`nynq1~5!+Sw|UD`9sNt!p|bn| ztNMxOdmq2fIT;&Ub zxQVqTGD5a#*tmFzPfn`oxW|N42OY*8&tYg+HI4lWa*Wqgwcoj7E;omXz>qjw#K;j} z64la?d2E@D=m+<*{~^Bp>S(ZrX>JrYdw3Xp8ARryy1~?K7@sL>68a-27qVTSNCQV? zqd?!jSjnNTw2u|l$Je1!BYz5kIaV4NpHMykqUk}(*=hmS`dRi-~= z=&}+2WY|(2A{d0;*Uo#am@c&;xin1G&X%@QhwD{*WuisgEbSiHAOsM0R)>cKJqz^i7Nm~eR1A}~q)xFYTF zNhD`^0PtaWN?d~L2=3=zCUF#4)nHhrCP#19-Om}d*jv4^PBvZUg|XRPe6Rg(XCj{v zz97cm>m_Ubkt?j#iFW^~|0kw>f8F#_wA#fA`DpUOHB*L+6FsenUF?C)rvS*fAf!-L zD5aMI3pf)`@mBF>T-#ZuGSVcI|j+d4IY{Z|) ztTkHiYmhcG2nS`LVP~RYP~qc8GzSzNI*V!0-Lde=RB1;BWnF9s&0vedlipot|0vK> zMkXzR_iCvo9s5**Fa9C)Z{aiemTCJ3rp*%u0n&No_(nzriMxxZ-gwoZwsNh^%uYey z?ao;3!c~@onb6^O`0=o4$#%CIGi3HOCMg#D&WM7(O`yeUtp?r^;nHkqw8aGu0v7H$ z*hU1IwlM`;PL0W6*ka^-byZ*KOtM2r{b?<$rKhZ5mJb_y< z+n44ocoi`sqTpx-*~;IwXlzz}k9KUhv}=XYOeNYP+kNr?iJ-K$M2 zs;oU85}=h&b_;l7Wz*$)MscAalZH&+7giYo(LZ5U`K72Uz$(V`W&-USG2{9+ct?#4 zp@17=^VEpzHsLDEM^+plbC|XGx!N#evZOfFa)$+NQk|fr*af&s3y$#|T>mQByJgtS z?YmTpq~NHWWgxJUxj{|yVVtWCD)HcMfc9rl+nwBF18FA@>{=0Ha9r&cc6?^nbX1T* zk>#?U39gY;ppWzAD3Oh|8ADX!F3(`F5TSs^uo{;*&l*ES*(^vYNt@neP?21k(PZlv z+5*X%_z|xZxRzfaCrnUZ0zNbpyN)WO=~zeY91&D2)W!^<;(D-uS%$=o$WOcc1PGJ3 zu}U&`z0!4XWI{cD>xVLtJYXgCiqtH=QIu2a3BWt8^nW>4{4{!euxrGV1x(P%*?Wp3ktAT2Wsib}L#OGH-!qi@s+ zHInBcoo^A3eW`l8Pm&V|=L8nc-S z$UCDftn+&hueb*<4BIjpM7D5Q+eL@~<{t$W3&EKtOCz>WdCL zlawU@86H4TG4JU?#r#B3Vmb z3gQwnsNU?z3}rx<4@jDYFVhT}$N*_8?_B%vVn0u~**IRhJpP_f+xc^(ah;PvhLgtm zXAhMG^y!#_T3gY{ClYGA>hq!q63P2-9U+A}QlLWPbAWET(nVETNay&+`fdW`I)E|c zdY=d*lwAw(wm=XX0i(q^fMf{|Z{+`7<1lpL(#vQlVpuo|YZy2}=SOBYqRp-8WhRQC z#e}pOvng2B*Jp}$MR^)kJr#}47;9N3?keLirKXyz<3x`~U$0#E^4iAo^3cg~^VZ)& zS}L^v1Zn1=I~_ccKT_r}!~(&00Bk1EOA&IdA>2Los850cWjA_U$}_3p!$ylPl&#&Y z-!Tw)zFqM46f#Jq5x* zhDIX>1Ue9bz^rIqo)I;!aE4%t3efLbhoVdj7}K?gp|O%rSh-_Ox|d`in6V>)fcZhU z382~~XB?F?AXQ;*TM1}@WVGdPPQku`4p}8Gg2C2?ty6HT7kbT}dW$$QIiX~7b$*$& zo;W5D;>6rozfzvWHSt@!mwiR8qS%l%s%v8TIh8yxcw9SPJ%0GY{-sN|#^J@`rNg&} zUDvvGZ%>SmK5kq(@@fCwar4DZ8A8u5ExsJQn4ggH3!f$qwXAeZj3u0sa$EDnsTee3 zTM>W*Q%-S-V6nXx6(GExPl52k#8O#pz+HY(e|p(#yq;pjGM zSl{MDTWr9ruF7Re5R60#ckdMdL?UjBqRU)HFt0I`ECm(6!EOSqvIM_mF;tX9&CF}1 z=qM_B_JB38r!LYK-_Bn-aBFE;dLG6XkA}swgY#3mUmaT--aOuU?#k(vqkZ!Bukth# z@+9gDe#;Co*zxtOG+z*^>plvl#b_`(ZOY~X_Ypyc_rzN%!g>4_wq-#3y53KdZQ*A0 z5#mJB2VKUiRKhBg!HiHKEoPsDwC((&qwlN;0)&)Wka(B(4g64aW89Lz2}MgAdXb67 zQl7ShQ|?F#P3ES|MnX8#)zPTv+It@;FcDSZ9(9*tqHIgw`U)P+z4&(I*{bKm+VR=~ zX=le*x7X#TbicYijBmaUo3DO-zT1B~^RJOc&n&v)?HC}#Z@GgR4TEL!so)gMX_Zaf z70p$OG}d6NV%mQF_f7IW)5lzduFg!c&OYV@W|fO5B?*ra3XNt%hIVaY>u03?O*r;d zz0SXBTTjCf!KbPUrzvlT+?Na<1%eE-p9%)O7|guK{g%(`N5 z0h4X#N&B68z&2DqZ9M*Z@0y3#_8z!!b!!kwH7$P*pRcAuPKxV4(1dIxUy|_J02^tG^3O zpWCC<44UCo&l3EhoRk~2mq?fkI(n~z+3|Mb<; z;bX_|UcNc3eR=)e;X_MfdP?`vcebDSa`)n3S$>e_cVp4Y!BAE=Kz&yZN(v6@ zy#zbpwcQh87!(Gs%sV*UjZ`v6j%OS;?OnZX?9kAC z?3^dOCAQDpc<1f5uDaDV0=lta`Dc&jesz2LHm)7kE%LQt`nEI-@rbOvDriIEQ zy^vir9pZrJ4%&VBnM0aj#NAy3wl!IYw6Ikdb{wC($1L_w$=Bp6yjQw710 z4^UYtfKy(=kSMq|pC@q}X@Nu+jrq?hkht&I7H>~Wqc?b|2LTIKqE2QgN1D_uc>SRa zil3aPGbFpNpXymhmKsrGTWCDi3ieWxgo0b-9^Hp^gZey?M`ahxNagC72nJ!igzRiEe&(<3aTA&FH}N00#(gxF{ZJ{0oJos zl{Q{a3>`g-e-NE#?52@ue&;GFv+7S#Q!n1gG+QZVCURhoa7w4 zanh&M|Nmh|I+9N$a4eisw_TDOhqew}EEc=|mE+bSGgoTxaT#afiwv-7txm@A;E}OQZT%;6* z1|8ab+F@|KQ|(jbUo1fE`B9tpK9y#g)tad>xReB9$j$5`J(XhRh();$Kr%BP{9Edu zq~|?ntVb&P?`7RTzS_E<4boOJ;>K5NUd6tE;P@rrTrf6#V zZz|YvDF@VpGOI(lx{buBt1Bg+qrCXA*JL^A+)tD~aZfMDR#4uZIl7$V(V7!n_Ia@g z{SY(A`5*xm*XjhCMhKOfdp4w|H++cITGgf?^g)~aG3Ei;#!{Lkji(OwpFgROa2&)?Ky!il5C(%T?Mg@<-S_omqAsGU_5(UI^ zTv(=nDwsK~=8QD#BxJQb-H}MG^}v~$aX_Mvb^y}MSR7o=h^O)3ine8k*&r<$Ur{!K z6W=n9~1%x`Fm zUP#xJyfiS`&znt%vy495?JHn#wLU?Qi z072>s_p?BPD8DF8giceDnMKz%QC`VcK>$JO3fF=naSF;|rDeUzvukssV!3 z6`?dqYUHre@=}h{LNhrT$a7W6Qha+vY7Ea5D0{$Rr6nROhCa%h`gn6b`e{hL;n~n5 zl~(+tOlgHeUKQEEhzL@5vRGjSr5RG_qu60=HutI`jpP81E7`ODV$ov`9E!c1df zFEwD$jXw(&?*bJMnvlf5dzJOHgwt zC}=}vvMFsoXyuFEiWJ5=_<^+45}^T9?GpqLA;%-ndC;Sci$xMVz|}r&+-=|&F$$Ic z$`0-J(KiVop|_J;Sk(^hNOv zC#>K^Y3NC-Ga85TqJ6ne0O}t!q#09&+D2)HHI5$DhDRtkx+6K#N?Vz+N1;C3&&}oV_Hm<0m_5pAKWaa^-YGav;ihQUNZqG4 zI_N}s8Pf_5c648+d=4i5RB6|m*AJhLLwV6Ijx2zJC)?8a6d0u$);fAr%NJ14gv$I; zX+J+nVWsP2&aaMW^qxqs2$q0ot>%GYv~@1p1*d&SD5`fLl;*#>3Wj?H?dM9{ZSK%k zD@>F&;oZ8#jzXs9X+-x0v$-4PG7AIoYt`^}JmxY5_VgK7q)aegf9)pt`VlZ834pX4Tg2$rea#u;NrNr1F|XY z=jz&X#Z)MB|8{>Gq9(`~{vXuf4+@@%!=+54N5O}Mv`~8OV>_omK>kamF=m2{;s0T7 zo>poPb1<{gzUI!9oSo0wy^sddd|_JQccW$pu!%-Yhtg(i;Fm6%y46h|R21*Ks5mE#VW$C$q817=u$JOOUB~vc?P-IF`Xc(E;N_q4 z_xqi8NlnzGuu;tU;P6Mbr^1JmoSuA7wPO*jAz$)ink^d0R`bJQ|m$>M7;32wkZ z5C_$Th0$f62dZiOP_BSvw5VmqHdzJMiL5VZXc`iBoZqMIq@?%wN}(gp2@q?EN=7Y% zf7Tn`^;aCG)pQd)*;4<1>-mX^Q(X-Nt?u5I5D=tEAr8~-Qg*Kik`@k8BGxDRltw!u z^d~cxvzF+uV)|B?KL&{BRwsAPDn;%dP+P8K*9bw8?+pnE(yT;)fXS+gDmhZIDoeQx zlPr^=KRN47gt$gWU>AnqiJh}bNgU0}hNwMB%O_H)-cGrzZO8CH&$Fky)_1j?J2gC% zNGxB!-@lFj(X})?U)%fW#o@%BRH_HxYD1b3C^>;m)4?(*R^>`&jJw84+oDx)j*ci& z#7^lK+&FVq8S-E^1g)N&xYlyvY&`v9jWK>*8|{v#Uv+7RQu4#v^-it5=VbPdcKBeD zokxuR%f?Vj+|q;Fw2>yHv6`l`s1WK7P_Py=>=7-;s#@7{tiM+1O(d5RtQ1^0b5=R= z!EOjz-F-|m$YUdUL^F<`HimkQWU58fvO8c0U|BCMML! zT6)-6|Lk=9>M1RKg9fcm==OE_#QwwQSRdr z$gnDl8D7yoS!Kd|CH9~Q%pd#h^2_lZx3+E>&BhL7JB6N$E$LxV2Gf#{I)u^G2KzcS z?ZA!B_@$9PdZwn`>{!2x20do`umy=UAJi7sx@f>OZWMKm+f=d2Zxxd{?iQJhEeaJng*xpj{h$n(DpN$Ib)B z?d*th@y2+Mfh`fF`G9V{9&pd~Z>!PRoJhr@lncD??_N2hvaY`>xCjumnjZEWw2Czi zX+AtVB5Q@{KTIQJx$i;i8V}=Fzkb!3WnPJ(g*=tV1^MfQF$S$7;UNM9 zG>sQRnEarYsS-V_P}Dpj_|7#Fb{ef|u%wV$=Da(k)`3}`!H<|Df`pjHYFeyScct#T zHWj+=Ffkho2`><-6SN~Tr%D7wA}-gQIjdlq&TlL+EgT6mQjAXv2ki2frWPXJR3F%2 z9*fm7XYCUaB&<{iJpz7nJyj}AM?4|5DJ`ZjJjcOBf~Fy122%5b&OJ(VrP7@1mFi`f zWjePEz?z1H9vBi1K4Cmv^0W}wJLcHDOVBhV>?mME)W%O@50!IazBDuK?mg(O@D%>A)%(~K|s?YG3L-* zu{b{&nKCK)ylKuXcr_w*MaAbd1gTb=sDnd3Oaq6eXNog3CIwV87wpzZ{p1L{O3*YU z#7Ll8)WJbNrh#h<^Lf)je$s2W7?xeLE8;4EZ_Rj;h>LaL$G)<-KX!OMIgxL9X@?9i20_~mZk z?7vN0P6?SeDW#u3@}EC^X2(feH2XxLE7`g#rpYLpw`vJ-C6Q4yZ`BfY9T7=|tALN1 z#w_E&&ExkE-+s`NMw#|_Jxv8KRYez90bw2Di6E{dLKN{t5CJf)f#)>1F`P6_C~EI{ zNz0p4wqYDK2GtJ=oA?LNG&gA4|H0o(>+oY5_%vzOiW-zObKX(R;7LxE{ymL_rny1W z{tte!cYZ%E1aScGw7Ye+v)$>fc@o)`v)a=(%H65+yEx9(Nu$C!6uF|DUm?gzL=eP_ zh=>;=#QF6H@PY>~{x0)l*OXms(IdV2L}zBF?qx2Y`_6oKc2=0yoaI;d?^na!PjgY1 zaMd1s`pA`gf<(SCB`ouqhSrr1ujmD>v&sx-nsfB}^@H{6Lr&aJWq{XCZ5=6Nhpc!L zeIp}_Pdf3=BLZSmgM)*U8;VA69`k_=k2LL%O+zB4ttnl-dU#Ds?@yzVjGM+APm#AS z(}ZOKrq%W?Qr48ZLCf^73~8E^opV9S+5yfu2da+S*htD#E6A0=&UQ^5>rB&7RUv?k zUdbD5Aj2a~`>Qdnj|^A3FN|q#AM*YC=n0Ey+%(!u@xzP7cE{#iq%bX0GN2AuSMajF zz7r^q^YrR~(kodc^=M>1h%kB)r-+V%kw zzm6_%42&JF_Qor$avH?69eZ{T#_T=4igRS#rWf7Lj;TGxblicZi*q{FG-wz^Gg#?| zWFU8V1AAk)b|fQB^U=O_8j~!PY17Z&$0%M(Zja0>;-G<>WEF~B;E9@dmQ zH;l?a5*E+GV>P3)XD!^&hjU(kN*UT09n|3Ibq8pB6pj@j-V|<~=3Ib0e(jqqZ0^l& z+36hMRikS6)RXqv70#Jj+^pLsyD-bzoS}X3_~?aNGTu4Vw~!(~#7)yJ3v<(SGLYWD zYGg=dOcS)nG_}dJ;ZX&y8V+OH-M7yl#u%@cG;u#EHac?9HzjZ}j@5Klui6WBYbmVc z6*zoJUwHyn`V<`wCPlwKF*Ld}pD)%5w0#whHFT^S;Z18$)7Is7X66t z&=%9&-S(_AQL9#KiBP89ot}=ls)>kp|FOGCDnKKJcKXc56>*Rzzg@5p#{`D?nZiT(GfxGHFeeB4)|7j_#(vd14x-rcG_PCi>!{ zpO|J2ri{_i0&P#i6XV#LNQ5^HpHJh`y4>b%%KoWrfmhK1GJEWH_FZ(G(?_Z{zgU$j zlj-Tv$jM$Mb6)MFg_=f16YDf$S|hLH6XSZu8(2VwRGKDe+d7TdCbIk?O}qR2#n)Fi zJ$>`+*|XPlBbL|}5*XKj2eyU|A6`*V^i9RSVHJ9&k=bK@vRFKz7@~jKkaCQqN3;fQ z?}gh+t5Qdz;Y?c$NpYrL-Mub1uwu{FirwH99@uT~-?+1sa^l9xeYWG!i=@4JYO1)% z8L!qiPS~Af8ikv-R0jZ)i9#a39B(V_FuZ{UWJslHP5eJueq!46TWXmXw0x+{HQ^q6 zw;>R!!MLJ81Lz8^Fw}t#u>px&&UgKWqO%K~wjpUlQii*8ZQHb_;lt^-s(&T+ooi;d zcfsQy5MaYFFt0HN>>s_T^uzD^$%kKfZQ2ZHn&a@&u?tIWhrlb=ML&-CKZK^T6GbDY zvEg(Fk$=R%%5|EcoiXhm>-1;&VK995h`v(`Azxf$FX&a>Eyf{sW8uH>$2IPUL^0c| zW-W3z)=cA%Y4;wzWS#yjKMaP%v=7fe#DWk<8zc7!pQg=^;FtXQAJ^cgX528*ZPgP%-V{^mNka7%P28Wi{Q*1~Y+t5;O=S0@{mw5;O=! z4ErnU*}YcJd%U~w`Fl6Jh+;vgs+QtMWqGI3p_wubcSR&Vx-j?#IqdDlKkU>qFC(I8 zCgazpy(PP`)WAE`-b*i<&Q%pR*uac{b%_t3XmZ%wihtOtXP#-rd_UvYrcIMY8v1@W z2>Lo>G`o|5r_lk*e2HXs0VwaN0xCCcGW6`xOM0-oW}ajs$>?9W@tfIza%HYWGOPGZ zU32wl`CNVu61zdf6V^VwclBznX$vHhS;UpOmw`C3=XXpKyFoP5J1qpoeu8V-Eg+H1 z9&QTLQ0(_i6ALqcZUp(SkY}1ahEp;-SY!#)IIWu|-jk-O0Z+>K#Y4h0E0T&zB%Mzx zV*ROUNTff+?)@OW#D$nWCZuSR*+FWNXBy)9iWc9#D=g!n0N2DfUuE=6i$o=o*+IlJ z&2^#0H_8Vj8AZ8+Ml}I`lVHzj$4SZ!tUW94x+1|fv8e-c* z(gtRd@d{wvmDYr1KQ^ttdGqFj|2<%1J@^WB+EBN0|f)7ptXOC@1m_|J#w0MTG zio`jNX=<5eCA!l6i#h#i1C!3QZ{J9eX=S-an-R>h-7!sT>@go!{t2LEMRpdEDHc88dnV%ET|#GU84<(+>Q0`NNKSY@eL)D=~yhC%&@9EDrqw! zru~*_-Sp5@#GkV6>atiiWdC|9*-BQfCOv=zHStCaY1%)gr^oCeb4b(dG3jGYQC7)2 z*I(E>yQbEOFaT$}EMyI)o5swjqpo91QpT#S#|o#VltV{Qgn9!A1z9u@59sH0vu zbG+go=nwG5D|Ni~Qg8fG?nl#2Pb;Lwk4oPMo2HwllM$ZtZnnGc`ww&Bn1+dPO|7!_ zNRZX+g@UH7Oxsh#BQ!bBA4~(Lk&Bz=`8tuK9BNduJu5|P@|#k%XQgP;G>y)q1*>L& zsl%gxZJPht`KC$BT&)kvYJv~LaLwjIu*GKhp)!qQ4U2Oi#HJxw2?|UFo`qu5^xR+4 zi)FQ?EBoi0rq0s(*jb5=X(F6)@sKf1sdjq~gsy21eEH=A05A=FDfnHPrdD+3Jf+!u z>*;GB0bNj6FnsWhN6EC}cpRl9P=NNSZn%)Gq>kyoT zfoZ^$<2j^PKkezt+*0M~bf#ffTILXKly)uX+J*|cgnXvI$GGmVP#jJ=@#8E&gmgKZ+#xn+{0n?1S)$;tgnEZYk)ASUsevcUL$MKV{F;&$G z0HzhJ&@pXx?WwCz9Huetj3T?HjVRa5zV9Ibm{yV_BGqeeqm(s4wM;{5&2SW9f$=Ms zSUH1w*Z?pMpdKt?+VW?QJYDls#x#b_MncVq2#=CU4Fq0}s098-G)4g6^26-Gn5Nm- zTTf$}dq%ApxuIA>R4_A1=op9wOc~4`7SmQ%mkuf{jcLB)CMJN~UTa1?qX_5p*8mus z1pPhJNS8*#B>-@Vu@fz)>(;KA02;= zH#(iR3QHTOwYq~hPQ^=HuDxA*d;8?H%*wS&yH>`e+uo_{?D*;&N9}v^GsMZPb;D*W zB4h&NVN7#eA|x2YG>z-!WnO-6QyXoDbzvIngpbK4HU8MgP}B0R52lTcGL4eVzL#r7 zsJ{5xDKBhCg}TG@hb~%vRTxq{bkL2B;-MRCoJ6H#!goIBjaQ@6TX~c@WpVpkIkd7} zl;<23<^CG2JGMBRw#yb4ZzsT*7}GpC6hFFY2AfjKWx~fR;nzVkx!4vC?MxfdS2K38 zZWn7ofp^>+y1gjc7q>U$IY++Sf5vY61z{Sm`4KMdPy&pHF-=b}_Qy2Mb$ndl1u8|$ zz8F4@njzW?pITiHBni`)+6;?n`6IXsxB%Ea%p!znV}GsKYS2QdweR2^pMJg~|FN@3 z^m&UCY;TAyIYgNq%Ic-4e8Mv|o3Q;TZg1Ood1G0gllA5Pk-g(HqD*51OuGQaGzoDB z>Rg{^TD%U_;VOxUEyQ}Od5sIx*28CBs*0B=;IU(DXiU@iO0{R;TeY#!_i0fS-8e$H z)+n_&?c~`>nfkSywXw}eH`VU&NNLYHBg|eNp$OR?Tj+lcW3rkq7wxRphSN4VEc zB1Gj2RFM0;PzdDN)Ne<)=2!$64`Z4(f!sAfiu!2+)-|mfh95_vK*@Fu1!ypdG07Rz z`f&3{VA|L)rk|oHVpwi5!D55uYa&oPdW+?ov3!a$Z7!Sp+x3gyJ|=`&N5#h59KO2# z8%&er{1HtvgB;!JyT$b|q&LGZZ^?+391&rti=9BXt;or#r9>z#2WWOK2xE>qEQ5Ru>bYNuD z3|YVEEqB(lEyUFw+Iv+ZH0P7O18Nnie79nyPP&bYUkf$qCnPH|^0o0AMP4!OZ0!-!$yH5w&SI2OXj& zhp`^pOqzE8y#O$E{4Pz?_h}E$&Uy6;8QnDEs4{AdQjR#Hv?rFyHIg*#IRpSx$D_uy zk3O$ld+O^qTO*jpOwRpbm|Txw8ZhM~OuO>no;^1g?WHx1DU0;52gCia=Uht1Fkmkt!*ps$Fb$YiOiUBZIKCo{X?hOGV67Rgnjm8R<08b%XTUUITIrg`lxa(k zJfTQceb;<1jd@?K8TpVuIDsoP%M^Vu4VYH?V%i5IW>(dC`ITszfE?_8cx(i8!RszI%fFBDbRaf1sMOcs%nica77OsB?=hB* z2Lk?a(|gmA343024#MUw%;dUjiu+*yd(-A^3%GpP^XL7d?fJ2fBuyLtKFw6Qu7=DnTf^9OfnOFb)GeU)-PJWW4t40n^sF_8cU|@>Bx8{AD@02 zhE);>5DH=+FNtYF`zvT(PI?q1u7wy>tM@l7gP_a3>`gU|dQnCL&3iN3fAzq*Wd?l0QvJ0d+>UDd8xXPz_Mv}(1wD<3IM zW2V+jU>6u85o4^tvl123xRGo~Oyl1_)Z_dAg=!Q1=Q7b3H{n+|qG`&r4<3K~@zru^ zMAOU+f_~-f8wt%&kiA8lq5KIMw+`OXwPsS9_QQ9vX$!}< zZoU4_t*2&Z2AFMBb?d^5t6~Sg!IKBCY;A=fism!_%0Hy)HP za7B^g&Q7;az?$7ql_NQ$l4B$RO9N%c{ zbF9;}FS~3`NDv@c8HBec5TLxYdr^yklD0s3DXgqaAgC&$p=z46Ro#bapZ2MLK|gHY z_TTN!7jsGDEH?e(;rms|**>Bgg`b}D`SCsNOk=7&q@o2e?d;VC?N~zuA-`6ojy)^>JcW>?5|hjwl(y`cDE`M?tu>`=*h{m zYd<6MaC38_c}9c}5x1L7V=Ob(ru$lt9s`=z!Ez6MMuPYTDkb;odRYBr5CKKrWD*UGebmz5A$XMyfqd#`SQjhwU6NSo`lcfX(iLz|}2BRD~Ly4W|n z*!l2fdY?Ca!)be`D_fbPmutKC(|l*#ykmA=?BxzeJM$-c*iEyofnvv#JGy;QBhiP0i=UPqtL|xCUhiROJg+A|D{=ZU8iOX0vUKpzQHBG?dnGg+t+R}4f zv=L?Hn`cD+{QL9wP3yivrxK5L?ynRFheuZDZ>1mc2G6f#AC~V;n^_ef?4`5LPAWa| z@?}BEuHWA&e~}KmX?c5U_@q1&e{r~2+p?TS567HCWY4bEEWcw_^DIA8(91M|w`msj zLFd_6GYiv4w%;|38!GS;gW(PzF}$pRVd~CC%Cu}V<>$_|nohGfHZmN%Pv6t&M^2Mf z)AVwU4j!pb+1^A}rTgr#cn|;FBb`J-ITSZ-J!LyvR-QKOWV$-Uvoo?QUbctjHfF)e;MBQo)2 zVH^cCO^|~S0Dz&;tQOX4n!RtD3Y1HLmn3R7opqZ~5bBhoP@i1L&n}Q@^AqCeRWgh@ zUEhzbO@M%=2~hnu*UYv|QAACc#!%Cjct#_Y1~In@1@ftxYkGDjY4=5&2igB*l-HWnrt)HLkYnh~B|m$k7ZlAw5Br)_U;?6=JR$l%`1}o~C_C8SeLGny9E7k83ak z33ZE5AS8q;SF1I1-PSOcNIuv!m)uH_3}fB0EyUHryQNaM!!8ePET|zF(V-=s`Cm9WtXYl$x4VTyPWSQXqt~CQ>^<7CM zFcct6a|*+Y4C8>$r@8C$Pc0E+d>0tItxtW}4ZSnTp4dG))p&8lD8T90FXYiJ-RoDWugH$nla5B zh%`+SQFu%fcdq;A`~91SVs5P&yi+P29PkN|Zpsce43J}**=F4`2N`LaB%-{1Kf@S3 z2pZE6F%DCd+Gy#ui zwbeuvs1ed-Te{?G|$lDyKc}5`25R4&;HI+|8HPb%+L?VeCKi8YK zzOc5oR$lwUmuZbK*D$jTh*~o#w|p9Eh-nf@B&joPdepYW_EOEQoTkvaI z>p>$Dt(X~U9n*4+t-1W>&C*OpsV8$(Elive#hc8{9_{(5thgizGc_9$jDk8h+3D~3 zG!f0(fNGTr_131XjXI8vjyMgR-_nznYDc3>OXD~<)ygG!xDC;iG))p_xC^c8DQlOVe%*O;N{shDIHyrm7GF<6;rc&CcGr1!uYkPBtGcpT90nmPn?! zak@|iGu<$AvoLvDE|ay{*#Xpl{(5ea_SSu(C!_U!DnCIeZ7zE zLd@9tiuM{#ulU3QR3wrxQHwbNSE1A6-i8VFnmp7^yGv<7&(PP)qkNM*nFlPik(<*7 zMnB@oZUdhU;mt`rd0;%F$EK>u#RC8zjI5UoKyKe0dUICmt^dT997{^VMQvsyplPmX zB2C{1U6#^PwL*`=Aw5+@o0~75O@oa7qp^5^;oL6XTqKJJH*Ssrc)OasTLSR$$U5zr z*eE{Tx&XYl;S)fSNWuhvEIRPYs;O9eP*a3c+5^eJZa#NZO^sG>DGRGCehJg=R`-?u zYEpk=>r2!$pgr5g*2V?i8E3uX6VfzE=wPA7)MEinGi~$zXU|Y8-2_N!PX?j_o#nr4 zfG4N3J9%UB5Wur7e7r~|4-HV@auUe$Nr2Z4qG)cJN zvw}fQWB15Xt*_6-K59tWQv9G9HPYWj4Ye^1vrzv`Ku2sITs94s;{BqSsp1$k)=BqU@A64EOI43rm3=G2R%byE_O3vbMIKpP!$Z znJIk#-qqFh_SLKC4b+JU>5wa&l4voGYXoA>&vn zWm_U*nAp?P^U*Bx@8$LA=xAqWr;<&Im`RGXec96H(bm?Mkbcbm{{GqDi>9U~O`rP5 z$EWr6^}4#c?Cfkltxzi~t5bAz5)u*!1j5D0bbNfWfjGI^nKBFgeRz858B@_ev92V} zKeN0SmD36igi4u2o0%FR4$ksw$L*rq!AeRMZPOVU86MKo*=61Qs@@Bjm=p6`2}OMc zKQlet9L^!4Yq+>7u4P&-dF*mdGEB@;hTl8zcwMn+yF2OyIXF^bBgUTDd6t|V!z;Sp zW!|1H<0C!3DeY!J-X8|s>mh*S2-d;ARy`&rr^xD>3aGoKzPpW(9gk2x4VM`)_0`&7 zM^>m0h^40e7F$ufauq{5ek_h)ilkP!$Ag)o7fnnl z=kT-ittGqYoe*Fyq9p5TF=@QpHcq*^`qurzId1MLie_Qm$8;N4q?xWJj-Li@9b2-a zZ)L_WF3ypfJyejoLU#)t5c?QQD1D@<{u>N+Y;A=ZDQ$v(R-E7P`qUtW9T{b1%6}$hgW?0MD_}<}cafq>rHPl* zOJNSnx+v({3U^jAo_awXFShZF(`qz<(y4HoHC`f>Zj!N{@tyd8YeD_pgkI5Ks#Pe^ z&J9L!R?Q1ADYU?<=DT0;N2{r|GrosepCUJUe_`wU_HcW9KRi`a!O7|WS3KOdG3fUP zUTIBB3y8TkKoA|1jdRy^+RwYIbT2`8+m-=fzCPKhVY#|ki&wqbH0G(5Z#u&Y;|(?7 zKYF4e5kC@X3{@N+eh3*Wmr6}R-74oXPeYf6uvw1G{xv~%ZjaXfrUy&LPv;d6sO&#x zRlL!v(9CXo$DcLyyHfEswmAf0Hrs9@vBoy@hRZFZnL3gX43~LFUs_WP9LqpcN05FA zB^hI?>YoyNGjN09GML4EdgLMIPdYwW--e#bjaqT^Ag3Hr(A-0i5`J!PQ0613h!3s9 zBG6vcgw~&#j*79AMi;~@Zm@`pW64#~mbvxIP92a8Q_o-Jz^2@@pG%O>@SA(^-;|pn zhrQJ%J${Cu{|zfS7a`(JAE|Hv@_Iljsyip5$1RX{me$^BH#=Ta@iUdWaZr}+{6)s5 z@Ik}X2ODY$e}99NG@*Pz4|;V)yG$wSiQ!^@7QwpOcpulyo-)>_AfKKVnkTh>^4c3* zk~l#6Ri9~tgNW+1ZALkQ^g72##$tJUjrHWC9&}ISOr0w#<~;ag^msq4YVIfUka zvLSt>^@=*DQtB=&p@Vy?(CxTJy*1L#cf|nO##H8JyeGj561*bPvlKGqhn3NB`32mv zifAhYV?8s)YB69M{PDC@gV5V`tq;j+Csv^b&U0!jbQ3)Y(w6}9X-gAJ!b|B7^H?K% zUZ#})Yg%WQjMrzih(QyX$BI7OG@a)|y7)>9@zYxXzjWG>ZnJj`p)%IuHZQBO9p7QTyZG>0080?8X z`fI)2jGc@ZhS2S~CXWcdQNJZ^R2^6C=(V3#GiG%raE?yUyOx+>zs zh`=jICD(HAwtoq^3tlqU)`X|Z0X1{B48tVJl5f)56D4bp>G6Ej9&>azu117;?3Cx% z17Q2S|97m(erh?EDtu%!l$^rfzdI@Z1Z&*J{&Ev2<`)+A#KG4;g6VHR4s7?h8mI92=2SzKB zC=Kml0BTeiD1_wFN%<$E28U^Wmzb9*DPK)>Es!#I#O zCxf2!K}KEp4Js-Gc`);T>(lVizJ_QAGh<|jLWAdiX`R>G{hC?(-XH%yVip*z%T5`+ z@hY%6#Gb>BC~B2Kvm+TO;Pm~i>AV=;+qfI5#sMt;FAI!?u8btqq)|R#@tU^vR7pl9rY< z9h0S9;j+Bd5A|BjD0K7}^khojr!q{Zsz&5-J_7>C56>&)Rc_#?!?wQHORccRsK>1BYtN0UAKm*UWjT0 z#~?Jep{&k>-jy#(OBNl66}=!_{ow0XmZd;I$hK~*sovChQ|{OXQHhwO+H=Fvkl~YF z@33LUM$$YQ3GtrHP#cSt{9EpMVb%BsS?Iyp;1bR@l$r{aX;-dmZ<4@{>;pPNjJ3~0 zQyDL!lrc5+%^!*1@%HnGXnN#mczBFUZM%aggn;Z-7iNt1=A)z(`qiaPKpU~W8{hkq z6@9Bt@ew*q9K*_T1W_4jZKMoqB?&sdmv}TVi$=l0gYSI*`#L(!M|TMkQNc?ot+0gH zyz_pyiM}So|W`RNDulfy%#J$t{1 zt0NX!;0p`JBMDjo1R}5VV0;J{ZB`vc$pXXqApEMrxTxWC4gcW)));&Ye14S>IwBW{ zH~)2Y>ul7a-cJ{uZ(s27A+&yGF0+0uY*Am|M`_WrrGNf*?!+n_NxA*&Xc}KaO4HJ; zV5K}Fh$^4QE5S5vvEWy0h{PK&!^tk!J+xmt+E%h;Ll`k+i6z(Oku{%Q5~-eIDvZms z_9M=D)9aipoF6u1 z%a@2UUC0^xMd(`)>U| zJoTiQASS-t8f?$hf>xY;n1aN{fgI({%L*ImvBq|xEq?_$0M+U#Ra)x}v6;odi_ua% zalCS_3K$olE_SQ}&S#jZWSK35F^t7~Xq1|#1BAjyheqLQP3s{{n!3+-d?!suZQ=qs zN{K&!RHFqJV^&_s|K2`eLk7*Q!x&pQj%9D#5&(mHmKCZu%+Y5KCU1)qsilQmR^oZB z4d1(KgJ!chI4yZm>#2zvKDhiUEEUkOj*W-#+L*VfG5->wA>zTTu4*Sf@M)k+RjVjD zDlOfI2B+E9V+nUBGq5_E6^$$q4!e*a^)NSPUfryUQ=MKp8?D7`vk@qCqZqmcvQEyI zHFnEBiI8>Q%@?z*jY`hq$=&H%$*MCu*Anvesyphw!17#IWCPK{A=X*-36XvD60Kwq zKK2_=LHPmAba~6m=wvzjbr4B{Wn_FNicIC_pwPOhM5qG|Pfd4+nh(2;Hdj~^d|Px*q6Yv6(&1Bup}uuDhf&0l|kD6{CN? zoGZC4p{9>Vnk1;IB{r3Mf;0(gKm(DG%qPm9n&#U9J>O%*gd=Hk19xHv`YpE$t3Qk8 z05>$$+YN8-GN=ReiNe*B={_(fhlm2J+YII3p<4vOXOuNrj^)(}XWs-|?rkVwJZQRh zEyNt*J?eV%a_hjToVqQ%4qs1*UK2WtMDXY^P*8NHM z?l@Cvkhp$=)0OZ&t~!}qBKeP6V|bfK6gS64zj)@hAL$I~1)ZP$K1w}SMEvEzu5Owc zh(3XyA0s^(Kk_+URo>u41WEio#qK;WG?o_sh?7N+8?E!SY{iAS2}2J?rUs z-T6TkLF_TMFKA62yWL?lv|6v=NrBO2gu*LQVgNS0G_4L%GeOhn6=x43rb@9g%a3cn z-w51z-t5>n6y4X#ntT0mP@HD|{&A`0WHZU3aMV+$srH=F6I9xj4H0ar)xZ&7_igxm z>i-lh(C-6yk7CaNnR*8ICl`2tx=cYF~tVXU7~_%bJegCy!oaM;aX5p&%U|ZJ_}F)IzG0D6&b) zx>R&A*YJ_52zYSR^@{cvl*(x0ISwei6&9rhsJpC=5$+;i4Gzr)=Q1e_8~VBPK{cr! z2$kkzP^1A%z|Xe}^VQ8DpLhzIP8+98h#bq(%na6F378v+WiO=>8eN_4m$45svBaA{ z?%oFoMJ1x}i5T{#2PWO?*t;24Hv1Mw?J%g$x3mqHaO&f9pkZ_DvYluc=f3^^$Edst z^3KxlXEVgY7bb?)I%huqVIc+dgd@IiCJs^!PoSy@8F=3zEd@I>NJ)1!w^a~J-?VPi)3 z{`3|X314#ep@)C!!gTkP^#Y`F%@^%40k`i>iD!-hW;x73n-mkp1@~64<}4EBa@aW*w3w_ z(VtTCt611>9I%}eMc{$61>DDBkh|~`&bZ_WX3EjWcla2hKWZDDQQZ?AmfnLvLc*DD zn51N8AAV}0Y!veei4=Ev!~*h|{PiV|aKDTH zlyZJ84Rx>Wb`^1Jc-^vDIo8&mSxYczs*IzEaD0TQn_Y%d^2rL!%Ux~u5CP$z7BTov zsLS+uQG~?vqK-rk(D@bi8u+SLPNnOUR&t$D0)@&?Jv1~(MhPBWXQ&gBUUrNN$_)LY z5752#t@I_yjPmQ(7J{OJ{-~`b5JFAoPTcA=HMQU~n3e`yqGoCqRtuI7vdwv2;VmQ% zpEk?MTp|;&f}ZX&85;5lSt57;&T?UFqLc~8@2+7?C3f-l_YgVyic`~?0iCB?RI&_q zdnJgLC-Za_Q9vvCWC6|4c=`p2sK#cIFBki9=&i4GYitm4IfX^>2sl*5*=V^Y7ptlA zS#bc@?%E*ON=!&KO!WDsu3lEQoof&=h;=!>fxQshHq>90zhVQ8{xJ#DRtxH^vEYo0 zRq$Q%@i=`1wre{+J|SyK0)UY=3Um72w(?zP(`FvCaO9HA!k-uHHx!M3Pof=^0}@=aoZiMo!D?azFa+@z3cGk!-URP|C{|sFiMal8WOjr^{el zZaFc8Qt70IO3m%rd4JL$LMOU7WK-6ZJKCc*Yebt?=EQM?nXe?{H0LWTtgLEuj#bv*g0sJ4yswH`7HLy@uY2X<2v=Q%Q)a59w zthuJifuvwu95vN4(G*R~{u17?gXpB{=O)Eyd@v{qZYJLnJ@jsj+1xON8))!)5nF<{ zcIynzRq5!|F?DlZkxFj@PS3(O&V4w3_A@*0Y$qxxQ{g0>uhd?CFUzSxO&^ zbY%EFr>!{D{R1u;?kR+t;6-*5@X3YS!BhGzum%w{1 z(#$qym5L{1$`jmUz*i8O2Qe^Z(HMS014ZuNd|DwCnaU}c1pXFjnyVZi zS3%E+p7V0Oy9#VxN`N(L%wlX(+WLxEV;fBIbxRMJW7BJNF_%tR;7txHkZg8^pqMaB zldEpCfH$M{RTc{Eg$Sj%U`Vo0{ftq?@N(}6Q=j8eZ4XdqUFpRRrGhU)Z| zoi(IR75B0x^O>|84&+S%)CK%ztHxhWv_{~~f+Rv5_P(+6WCzLbi+ucnR#8=6@g5>d z_ReqvR`XgK14`y{3w6aZ=z$Qq`hs?P)^5n>S}C}h>joDysmkGgZi^M7znA#yXBfhp z(%uZp8qzHo4F0;Rv@!He3`aH3JW{g2g&s>u3W>p(g_02Wn)OqbKr9 z1(=gm^)h)DOmT5Kd+aMR^i{em?7I4?Ci5}mdWe(LfebD`s6WJ~Gc2ObZ`daBK4kv( z!^+gw+M|$Te58R{7y$sG$udoXm29{paar?E>0wk31JEd1J7RNfOf;CtE_uzTWH`HC z6VcdhhQlmug#xr;K#1@q*Q~Vw5?Mt`uaCk1ZAz}kL83L1U6_7L;x|V=4>hpNDl2}Z zcYFT=J>dU`UTJs*@QPIwMHB07whU0<*420psN^Q>bXsVU)N$1hFJ)w+Qw^D0kOP!u zWJQbN;J9;^OScnW4FN|g#jFl}tr?6?$OU5jTbH^-rNULroh|pn836Y#=7amuE^^G7 z!Jd-|13xPpruOSQrNraLHX5q+RM7Mzj>mwFg7F}-FU+^nm;RZ>xrETcA$d_{@OvwU z8Yw`C(Et*FMr8YT2%%`u7$`1!cfPfV0NKRdO`Zv;}Qe?p;6n<93#;O3v9C&3j7Mm@jPWh>0_Q8ygDP7pHiFhg zrY(SBNBzyGWTw0ukSZ7STgZ%}uxWN|_me_VA?dW1i=$TAJjPGyXefX5B$+ zQhaToY1M{X=^M&D9Sv0qK3Wu5YmySF=4gv3FcBZB1kz{a?I*k%%>Dy^m3mTxgic(! zJ);}h(M?5-%%Y%NmXMzAXvbjkM`%r8&BpNp&;@UIVykjVP!h&1{1R=W!c68=hss_> zpg*D;suK%d2Ew~fjyeUowr^gY-_OVvSs(I`yV*3S+nYo2`WvFQpLSouKq<4ZkCJg+1WMqG7(`)L^$C!g?-8W{Y_yn-JR4X{U0Uu-3MJ}@QxdJI<^@;SoaR){Y zNnsF`CQtw;$RXQU;SE$bZAGCd3tfXl7RQn&oqA1iVRB7Zvt=!KofMEtf=yt}a3BT)*jR5Ud>zTialn&Wi{R3R&coQ{$ zyOR&W%~KiGYP_7uDh;Ml?%7dh7IPI7Gd#ojRXZV&}TW4N( z@fZb*+UT!Nk9U0kSCasS^Li^BcS8@^v;BQ5YLjsf)y%C@?5PFpkxFUG1mh+SQ92yt z+$b@AyVVUIeknBTONau-svoj%S=R$_2OoAHZ4MV!T_fxw9gvbA71E5&jCkBU-d83q zrb&kU_xhQ618)y+Z+_uJ^!Wx4HnU~-f7?Zl#y6V^`n}dpU{tUA5HZFMmvYGTn3oxR z1G{Q!LtyW&8e^kNqK%`pq6WE@H}sgfgJ*x#Pw@8*H&MbD0M0UAP~8-9zaD;Z^%Af( zD)yMmQvT1RI=#_*&=oDTiU$;3ORMry{&{qwEs|Dd>+Gd+22QWNkstLMUQY$JBQ!~i zUsx$>5^@~9Aehl^Fi)I@c*u61MxB)+Q~LKeyL3ZJ)2%eX zwfVPw@a$b3c!heQ?p%}@u>Ot4SDv3Px^+uN2@VmC-^AZ))?DYt-+*o*rN<)DMY>l} zVsP0vORF9!pY$3mR6tRt)cx;Zkn{(NnMx{okN&q8034$t6~=h8bYk!1Qn@bpIB6bu z7#Yxl{f?V5A~#*{uO~Qd9@o5l#Wa9{v!z|>Wp}Z8`w0c`!GxiWB6;taV27oO@E7=* z3-+H!Ge|6tjhr6?ilU9CMFdI-$?XE-K9~B@I}{P{M-8dj+_vf7&fY@MAgk)iMY>@M z_&UFYvP)23L15%|A&_{72qW>Zn{Kur^2NS@wYG*ljyZnss!BEj=G1U$5r~4lI#R(d3;=o`iQS ziiV{02XTEsB4CZ^=mOvp*50T#^)7CW^e&qEqc@65D6rRub%|e?0*r^uNxk{aul3Zg>;o=c zQ#oanq=c6wSc>RP7}N?Nd>5HaPgq3$G2EOgjw zo4Q2u*Py!mq90&vHucf88YOuwq-yem<2kzvYatN-F9M=&Y!plplfTUiJim z^yZ`kDX_1<+g`bPN{V&h)b=KG@_OL1jnM56sY{%k zTqs=MejNJ2KBi1M-Dv-91k zDcqf|;F$moez# zys!Cis|c(pO&BJ`fUuQ*U`Xe(2_m(i7g#?_&F-v-3g|#`NS6KG4gcCU4ih#(=uiWv z`ATbQ)X#WD4<+<(t;l!T)Pv--+DmQF5hX6}c$LNw+9#6tC9Er)k6uJ9#WQeKN%xML z_$jWp>SGA77$vPgS5EX|FdHevTEPF2~TTPAi5-~a) zYIk-0$p^Pp8=F*}RmHWss>Hf!?G_!S)$MsYV~dZ+{OKWg>Aru#d)e|k8tAyxgvG}I zNoMWBVON49FKkg|iG5vh&&l@EnElhkSXr4?AuUkAO3M#hdqJW0H3R7iI~Nn2tl{5= z?{ykr*zxsMVn7G{F6_yLn+_K&B3;X?chxT50StiPvO?_7nw1vT4h&h@1-iDYhl~7J z019!+xZ6$q>fIH&OqxOIA;dzv*sK%bx)mVHBDU2(; zhA{mIN+L+k_%1`Afovkr+W+axFJN)6SpMdR;R9D(>`aZ-RDH%_kORV?eyv$GOqYZ> z>LH+Pivo$ffd&sml=wBK5TY)<&c01PZos*pq?I)0-@|ri zgUvvMZG$9)k@J6Jg#G)4Eyk<_fQHSu%r1^yua<8fHCu|-s`Y$Qk1qI;Yc_Gxzq(9E z|F57U8o$bVa#?-pC_%z?!jxn3Ub=VTy#qo0O|d$vd#E>WnmQ%Qn7qy|EcaZ|GFg^1 z*wmgiTW!kQpE?JpP1pHtyNm`Fd)q%4`Izn)J2S>H%H6*QU`MN1hekb~Uvu0iepC^n zvWnMie_kr=W=k|Z2T8(RrNHa4iBr(u++CeuAW?#YICDaKs^SE8%?bvQO-?H0nZyt5 zuo8%3DO_EBKFL)ZK!sxtHErPrku}84g4R}ca?jfR=ZT-c@a6AZK)%;Ak6=&!|oOGh?Zsl+onn7^Z7qXrc09Uyqdi z+(X&4e2X^WerJ_Gr!W1p0{;EKOYT^6tgt@z=IEH7NBD9sNHWQqR|@hB`%rm2rH=^+ zEE^4`mraRsSKJ{FGIhR(m~TJq{(xMT?*8znVuctTkPMA5?f zPIO{pGHdBTDt^%9dDt@EDTi{Zbvs`@`-lNUV!j(?nxt}P)$d0*{&X$RQZJzV;$Guq z|J-F6T-vmD$FRa?MDR9^6`$#lBKY%viibZSUUTx%2&pv-=Y&I!N`{{96t=*>Fo<>1 zDCIgm>c^G!*lqfIh(7?e3rSi7PE8FMvp>Z9L^jr_VMB=wbW=l<{xs3khApg8W4zeW zMJIjIh1Y{@PINLI@KYBfG_4$CF_P}jhtv0~e*-xJYR{SQ0`@*vt6_DiXF+n0vqxi> zxCp;<3N(NGj65tYORq(*P9TGfN_1T6F_cLB>yFERXDPyPrU+VoCpS$VGZF27?#-Rs z9sN3$rK1ymFiWcWM5%xYRsgPM3^N{dWHYf5C{af6`(-WP*@&Iw}#NFlOZnj|ZjZy9UO_xz@eb$M2RQUk5_SqaXnR2s*$kY1D;YY?XI- z@&?_@nv2Z(hdLq|40Y`lEW(?3L4yMJz5&XmNy|oN)<*TDWDFdAWms3GNi3IS4JKD9 zRD%wtAj0n{#YlBv+(y6UO%Nd^%relY?y$ue9GgW9E}_^rxz&4ke=W&sgXoF`8(os)q9xcM z1vXpOG@cX1coB9N>G7|wLx#91!~Z9_Qh=@!nKPBd8iSI2R+3Q3(*U34x8ONvFILP>Hr8!fsi!$t4fO|WshD{33excXv#=%tpGyH z@~71iI|@wsv4KE@amiUZIIX^vCZ-U9SY3tZJXBnyC9HTI1Ra;d$jt*AYv@|vH*b4Y z9q+t|F!}&kbhhhVRxt=h6-9*E!$IN*+qUi8dL9A$viUD$_U9K_lj$~Zm9pL$HOOdx z-ock^LULdV^`)ARcDN6dC$zoG~FnD_vU*ZM_Gj}S-Nsj25)VnxRF=S||=oSDx*A+zv3Nkb%> zo1+UrpMy}xlmtQ3Nk!pAIk1liIgH^BS)IBCwaTdqX-CaDy=N!~BPX zoP#6B`R)1|y?@q}PqvZ0{Qpycp zJ(Rt3ybHZE>qRlpp}{TB5|6m`l(rW<6rJf#1(;LH-t;Tpeyur=Lm#1QUw=$g0zKU- zQQ`CJ2_x3WED*_i!*l@LTFXHT#7mdQ`jj@z z#gm!|LadL4juTPeIWF1nc4ygY(B~4!$%!5%)ViXc56w+vZ}~uxUfr7v4@B4@kl-;> z+|qKl?IwBCkH|UQ>A3Nd&O^+o1tybF+l5#|dnj=(uXjg={rA?Ep@xDqsbv2rr`q!_ z`i074vbIl-P^QXRtKFd(VC7mLHj%`~gJ$!$Xk7u|c?`QYNUVjDp;uz~>HLvUs0^qT zU$(qA0380SO2hf@K++qUQ*i|7t|>1#M7_#*ksqxd6sD%zv^iYHY}CEmNPMq`d+HJ2 zgIU*-y%++iW;%1MJzMLr`*$K~FY#1*O`sYUPlw^gBvql|fU$Bi^tt!_n=Ty{5|Pq? z#*pHDdClT|$>{Hcxv^T&F~XL@!Ex!I0Qfjx+e6AYY4*r}{+B97Siq%qfkayKu5 zj=H(IvWZaf%x}8IM>-AQa=V|#2TI72KA@?y)I9h=B6PI?b5eyFm^>Kt2yf8!z6)T` z?h%L5E6?qHCM{)COp*D{Lo@qsBTqWwc%8*+mh$295oi+=CPAC2#LOZE0S`@)qMh|6 zTQOEK(AcYB?F+XXFA@Mg?Cb0bME(;?)6fWG9Zm!{m#G~x9s`qKdXtZE4_)uW0Pted zZ|q_aX{jHZ-V-}(@)D*@M9t{SQAx}t;2FitXhm}0kw)?57CVxHjEZ!Hq)G7q1INi` AoB#j- literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/blender_addon_install2.png b/tools/bevy_components/docs/blender_addon_install2.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c2a42a34e7c7e3fb37cf7a26c5d2f56ef67a3a GIT binary patch literal 5135 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 JYE|pV{{b^q|vK|w)DNl8dZ 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 literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/components_list2.png b/tools/bevy_components/docs/components_list2.png new file mode 100644 index 0000000000000000000000000000000000000000..3d0a1dda0e11d994721ae2a199beb4b8ca45a8d0 GIT binary patch literal 35796 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%0DK<(up1&V?!?QcHL?Rh)_f_VpZ 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 literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/configuration.png b/tools/bevy_components/docs/configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..0e2ec8aaa0b59c316ef7943e244297e8058d5821 GIT binary patch literal 25577 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 FV1kzEe(nGO literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/configuration3.png b/tools/bevy_components/docs/configuration3.png new file mode 100644 index 0000000000000000000000000000000000000000..5fae812af073c33b9263c6c681379c3f47d9476a GIT binary patch literal 16328 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 KMNUMnLSTYXT?!=t literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/copy_component.png b/tools/bevy_components/docs/copy_component.png new file mode 100644 index 0000000000000000000000000000000000000000..9e7efed861fdc6f8be0fbcc4290426fa3faf68e0 GIT binary patch literal 34640 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 M07*qoM6N<$f^Z|o&Hw-a literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/edit_component2.png b/tools/bevy_components/docs/edit_component2.png new file mode 100644 index 0000000000000000000000000000000000000000..76f5697596fc408105e95161cf1ded571d2a99a5 GIT binary patch literal 14206 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 literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/filter_components.png b/tools/bevy_components/docs/filter_components.png new file mode 100644 index 0000000000000000000000000000000000000000..adb2c324bb05d382827244fbad6981e6aaefa1ca GIT binary patch literal 14115 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 h&Ckz2+oT~@N79jut002ovPDHLkV1hXari1_h literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/invalid_components.png b/tools/bevy_components/docs/invalid_components.png new file mode 100644 index 0000000000000000000000000000000000000000..e6bdae6cfcb7b3db292508158c2023dce8fa7373 GIT binary patch literal 14119 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

    Xy@NHtW4JDT4d0vG>03zjXUv z=exG9uK?!V-=2_O9L~=I^HC6llG_721}d$bhy^W9q@_r>6)5Cr#gMpp6QzK&AA@ju zUqerC{+t>(VVC8s2lUmWBP%?{jB>4KJmsQ6yvc^s9f2y2P&HP=49U4k`0#tSG<*77!vOt<#>2Rl2+&DYC`Tq^6D-kK-4rCE{GS4c1E;aS>8{!S_4M0$hOu4nU_MeX z-8atdn8UbdDg-beos=tIIBWr*GzA`#2cT(Rm2$NNBIX2Rp&Z6-y(W}E6p8nUB-AVJ zT2&PvPS&k~dPIy72aH&$#=#a~!b^=uLBSWR__z{(HN?H8SV=l&`tBdK$dMm`XrpdY z4heVm96jc2>EGhE-bl?xDb@H{Vg%d5)LUbzi`WpqA2l1;r7Z3GE|On}J|}AOTijc5 z_hFEA6&r|O@=!uCeDgp0gw>so3EU|!Q6D^3h$hp#bwo#CY!<{(zw+L%SB|x{b_tEdXjN``G{6OvA$95EQW+m=JTUYkd=T}Ui;!x(3irh*tgA*usKFJ{b$sfUZ_MS{`(WLdngRuoZ0$PZf9_wZyzY-YAfRk=-jyNPPPP!&JGMTyj1clp1<&69pDE1ORBvHcFgI4*9(2X&c(9KP_Y<+| zq$xo+wI3gt;c)oJc_)>}cf{>I(odZPW?`TYratQG>U`07hvltmb!u?NjQMvSsn}aS zIOBjo~ z)tXjwobr`Y*uFuewNpXm>!tK99|DU{>}$FzzDH6{KB8-lw#JTC$3bcFtZn0+Luag` zK+L5I+rPLx09Fz)u1-EIimgGSNx&TQuushCzXh=7KJn@b$flfiF#&cjft~)y*vOx3 kA`duEyyMc}(e;Nh`HX6HoHa`(@azHxPgg&ebxsLQ0J2PANB{r; literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/other_options.png b/tools/bevy_components/docs/other_options.png new file mode 100644 index 0000000000000000000000000000000000000000..9eba317df454a9339022a09b6e210fc3a9851eb8 GIT binary patch literal 8575 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 D0-nYd literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/other_options2.png b/tools/bevy_components/docs/other_options2.png new file mode 100644 index 0000000000000000000000000000000000000000..d08a5ce9c1b5fe7650595389ff9e79884f25908e GIT binary patch literal 4638 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%0A=6LlS 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 FV1mwz7k&T$ literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/toggle_details.png b/tools/bevy_components/docs/toggle_details.png new file mode 100644 index 0000000000000000000000000000000000000000..4fe3116a2b54396f484a6fedc17d6eabce1facc3 GIT binary patch literal 22122 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 literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/unregistered_types.png b/tools/bevy_components/docs/unregistered_types.png new file mode 100644 index 0000000000000000000000000000000000000000..ad8e69b7884178858e6bd213b10c28e458570744 GIT binary patch literal 18251 zcmYJabzB?W^EQkGcPJ3tp*SfNr?|Vj28w&J;!-qtaVbvGBE{W;TPf~dpt$>+-rvvj z{{GvXGiUso+3f5_sj0|fp_8J+!NFn4%Sma#!65?R;NWLb5n(Id3uErEA5v;cTGA90 z6e1!byu7^3%*-StBy@CiL_|cInwn~AYBDl15)u;Z?Cib0y^@lWl$4Z{lanJOBmMpT zV`F1MK|!x@Z~_7Xa&mGdB_(rnb7Ep*LqkIh3=Fxsx!l~`TWi0%y1Hs=YHV$7KYjWH zg+e_&J^lUtxwyEJlasf%x2>$K3=9lhU0p*%LmL_zoSd9GIyzcfTFT4ImzI{IqoZ|o zb(NKsXJ%&B*Vi*LGJgH~r63?sU0pprJq>|C^78VUo0~;NMGFfHv$C=-000FAh4}b* zBO{}Qg@u%ql)AdQ$jC?^AD_0iHd9m6{QUf;rl$1t^xfUvm6a8HdwU%noiAU$92^{2 zSXf+NUmqPEJwHDmAtPTRBL3;~eJ&K2>m@{o+l(>%{?UP2<#ScJGgOR)W&gfbEX|nvP^{lFI3nYV!`SXJ^zi3N zAmzcQvG>7V0u5$w-T`tsYgIbVk_Q#$D-4;|CcU<2%n5(ah>MU(9Aw(E2kHf0qqBVJ zEl+ME^HQJ{;@i@rizNQS?E1mq+;2^r?B<32T`Ua|Q?5ttgaSC;i>!IqjYiy6V>=+S zm<1eLB2;bOYJb_Vs?STASnLt(t)Cv9a>Jw$_uRSE``DD%SVbvo4e7Iwqo8UE=dX0T zUwFGy%u*v$thd`8%^vtG!)hDv5vFq;7n0{khGzj3z!VNett}y$$P}d3yO-{$y(by} zYq?GZW+l)~SFXm`ReI0QrM2l>gso=)zy@%hgo_RoudxW6fQJvAF6;_7;M1Gh?PwM^vCr5Tt4XbUfBnX9YijT9N0xZad%hO$B z+_5nSkb_;Pf)GbUc$|Vyo$?tqiK0o>Szq8IP2(`=C}8zAFg{)wH0<2e(F&7^`f?NF`5t^2OeO2!sOqVn{>8715wQUJmyTIHlZJaw;%z1 zK`fD6r)9v0xCEUrQ76UPCIh5;K}c8oxQRBHtsO~nf(O*#m37rKFzpno1s)wiQRq!H z9mRqYAQ0xH+bp{<6xNUQJ)EYZS%JR{#Mms*9o$)ZoR{V&e`LYjp9qMP$H$e2;t?eP zqzdpb;N`{W$u!M`UMm0t*uDw^@?uYe>8f|`Z=1<5dl`MH)6$~c;E8-4{Z~H6ST%8j z85^&2TE;|i7EfNm1Ilj)opF%2!s;OO)SZ}vpC~_jz3ptOGgZ&JNq6_<`u!4hvr0t3 z0>Nlrus_ui( z>$ED%A;WfY4+U=^cS!lLHx62Xkk--o^qFR~;4OAxuAx%HzJ)Hrx zPGH|oE991&Yr(DXwTgVcc@t|A4UOJ`Ex>t)x%p(3Qk0WR`&lN|6P6OS_zU0K8UH-) zr;Wfj;QtZUUbkH}Hl1I;Xo$7w>AgOU@TjJD>Ah(?jQtu^it!jhqJ}q+f7mkX`2EIc z=;?N{ZM__A)H5uS()2)TpK4{h$*;4B^U?gd#yZ|2;X~{7bzo{ zYpJeJ5)$CzAPvhe-Jvq6i=iPXnY=(i9=%u-mq58ZnoDVvfu5Et&sY4Qggjuw{)I|H zt?uq8Mnf@O##UMh^@)slg^%3L4vusqJX@LS-j(;4_}?|VH&??w^=f45_AFFm8POsK z6*lD1vSsC|*J+R8J2~G3{NbK6lq>xAS;`3g*yuSe1SxhwB%Si|I@<=wCuK3={N=FY$|6zD;Gkf$C3!{i zC@#|WO}3G!L2ZtuQ2yv|%_3}}0qEgthn}ASd8r{%V)(c*s3^2(uzvTwQ4$+g zL4Ymz3qSvr6<(N}&2&a%0$j8~Sn!I#=;Z%8Uy0;AtcvB^Bha3I=Zp9&fHrpRMa_Th zQyYUDdTu@@0|%)6n~qQ@!W3M;CWWW#A5+ZVZ{`P_`HLvdCe$0Olwjg&f%dr*rRK3` zKHi=DqBAgDU3fx&aP?S$yZdtVL_Z$U%=$U2W0^IqJ}zy!dglT4)K8Smj3=5p6>(;w z2oW5>@F(XR?Vge8t((sJz6-MYn}{{O;I$Uz~JQs<HIIdS)GuBGQjDC zMhEXFTC_S2gr}!^Tc0D2zjx~;BaWSq9pyjZ#o16iuTIniQ}e9P6$a6ND{L5jZEJc+ zjBYqkn3|sC zI4bh|!L7E?eM6AdwL`B~jGC&?A+d1&Yaq(GZSlX{X2YNgw1A)vsXG*iOjxTw!$}NI zYHR3djm_+ab1>9cqQR}r&q%rpqMmFbp1jtt9IWJ-AK>UFy#p*+1 z&{=r!;mA}*UJ@%%%dhBM><1|_Mq|3*A+gn zl@_2P!g(lb9Cs$bis~B+WsTmD(+hC!Ax;DiNN&C#er2K4byNAXLt}9uF_9$N@$u2c zI?U3X4Xx(0l?M;n$42A5RwoC1BVu<+dFt$%yQv;LmAGd?Bdgu8zJ@h{_ALSacS(S5 zpbdWdL?l4IPY?fYX3O*q+QiZqy5_r^)AxpKgn|*m*Bk`GmX~uNu%WMt>-HsNlIZYw zk$HAhMF-vgBQYl@eAd7N>F;-oUgH+#6IK|ewGo%SgrTW&G-44ZXf%&A;RnFz+qJ&s7}E)iB1ZS&R9U+lYq zS{|cBa}cXhlZ{bwxQn*kL<_ad2)$pxdkmIovr=X`>IoJ{->`Ztz5Di;WW5Bq{uc6R zM)3-@tjR6A!&Nv-VKeHyOwRpmTCZrhOY2?DDSkV2O(vAQ%&cQ1C`}ti_k8Q_u0<{X zXje7n;V&dOX!%X15QgF({fASuK1Dnu3B8GN1k#C$n)DRCCL2El^r|nTEBHxb4AXZ2 z!Rg?^`ca0-OHap0&qnO-Hq&`l$XOHkX*WSM1W*a``rEJoVb{Sws_;cn8$ac93LL74 zi2Ktyc;QxdbsS?5*xR{sqNOJm!h>Oyk|hi`HZLd(*ZYP1zV_!rm2v1ENDl7PBb|&%!&YrnU;s$d1^#R8;*enE))!XjqB`avpMwF#5bGMAQ zol8xn9O8sRYC@%=L){E^Eo+CLPdAfEw{9L{3aX@;YE2CZ}d&9uG zy)zz>;s86&PSp>Gk5j^ME+2!&zn$NI_HX>sabNF_J!R)*4JXE=%_Velkz^w=du? zlw-O##Q*sXobQxO<8bhw0(JBR&5nh#r}Zx6Fp{W<-gi!ndG5P19CqH@9T=?k-CV32 z(-Tv~uGDyuk_hYZFa3Jeh_&$W;W&%gw|3-ORA8CY=kj?~RMaMTO%BL)1)`ngv92s> zBY}!)F~v<^cSjYm=&iO;=v(WbFUetg^xhj@5gX^kV}G{vU-uC9KP6s5&uU(2bL#Xk zmCV>h9^HyWFPw37te!HcRSQTZLh#u3M7uyTO2w#QQf4F3(g@#ppke(5?{Wb?zkmez zvHWS0A8a9LQ8L+NVAw)ZEdMuH*GG+#VZ+~n6-)r#S_U z+Y-$54@b1ZgS%5wmOba}YN_PrL)4FGVxvK@Gu8|}bXGkiK=a^7vyr6L{BR5hX6j(@ zP>}eIe_3fgLlz!tJcIbhuk9DLbsOqLZld&xlukniS=~w`TxRRcD@Gn1e=5bih0*#| zou$_Zgms97dnJy!B~!-?`Y;m#xJmHfbyeqQ;~-JDVS}-PGny1Z`oe)Y7h-`Qg~uos@-)Rc)xo0A z6@0d1jquvU-ShRj+_DGII}?y1C|2?>TpD<);B422A`l}zVJ#07vGf~FEQqEovJgbc zA1eGWPSTLk{7%jBWN3PV8KetzVl8JPFUJcF432}vH7qpjCX6qhpMEGFZ)sWJJQByo zGsJP%IMr4-rSFdA52rM+#0{1-M$WX=bC-B6GSm6b7Oj&jzQ&f$)s~@RO^>cCFyv zZ^dB_ohUL{W6!`nE#XzZJrx)j%@jnfCwiA66+qL^B>uBqBjtYJz2Sgc_tK^~#MK`8}!_cXQgfjYzQR){MbgG!dVrz`*jZzS?wb_Wu!DV+?O(;isB2yHt|EIlm zCV*<*iZX@^Ocs@=j|B-5G&W~Mnju17>HOjO*B1-AQb#9q3qboV9%fIYDZi5@=7)cG zKa^=jJ^FMLgDb2humP#oTQQUHU?c2`$@k>#N<~bd_{hHfcZVFx8AnbFFNyE+SMO^| zT#J%aVh{=Zwf8^%|0&*#Le{|SHEXYbT2kpjA1oZH#%{?H^&}B#TF*u$kD$-ptS;Ob zt*nm?6w_s^ey2rIxHXT{zh;F}S~e^IF(vmg(cwCobU8=hjNtb)8dVrvVf*A~ z075uC$4wsw5g`MNkDF_WpNPv4U3Pafa{@LbDW$&u7iCnF;lMquv+T+u!qQsW9{Fh(t$K{-w+m`44v-U7KW-%AC9-&BhF<_8HkJV~wONdV9HBpAH3`YXWMB>ewjF$GAEJ2bP43xncq zGV8yBi59Ny6Z$HxK&^(Ri?CT0s3$`$90YigJObM1pKunKH;_3+9}$f64m3Xdr$_7} zoqsZdgXYS5K*SY`e=&rOg)kM)3%$!;Xwefl4alVQd5B(p0#x^g%1bL+n>0qX=lXzK!cVm?E$&p@Jf{U z*ppo0Yq%!68dDaB^KfxVeqbhi_C1Z)&a3gr9gc=C-TjIzYMXtshtb1K%gviIB6G(_WiDE3y+2;3%)?{!+uQ&c$9vOB>q4_ME*yj#)r#%LD0UZB z*?){Z;#7el!(Pq5-wL*z+lQ?4&B9E19Ed8-TvIjkd?TvRc^UolW5h%UL3JDz4b!0#B_cYP z&nbQp>ixjJz%O{oKWOOV4dkrzxBJy&hDy=zdc#7Mq-VbKxwV)qbRh6_B@BMlDeuH< zQS`Y{%te!7_D-q1(diQSXk}r}%}2&!S(*7&6(nuNeDdYj?}rtKh9TvYAI)o5?Z#x` z-V2kI93Ivh*Fsn>@Ik&Gd^Ki4d+r=rnVEo*Cc-NsBKV&K9#2ZDZzvHv!=3U6Qc&-U z_XU=M6^vCAa*uG{HPiQG8h2I*R7o#p0t(lLlqXoPtKSWRk4RF=al%j-CIiBI{bz8> zz?g3<9D5<3-9K4b%<}zDsX8xOV>sp$BpZ%B@5gd*x!(W)$!2+#hVtfKxy3W5+`Sn7 zCWJ<)j7gK?$PZ47AX6MS9CXEAk0k(4L@VyBN+ntR8%YhV^GaA&sM|?IJii6HkpxgY zWi!q;AiY+1UL8auy_VV9{XI>Xsfd3Di=cVQ&c6u0Ve?j_0Dqn3O;Kwy1=PQ*6;^V3 z^RBv_F73mYU=0#PLjmE?r3qdj%Q}w=?$5_Q;lH7p>&|}PVG5b#y6YaD6_ta14y{?F zZIS<4evw~)XE>!ILEjxE_!!`Yd63L*mWS_m;1lN=RC^8hvPT-a&0t~GSa$V01n^7l zunI*wI}ZjX;H#+b{L*hJd}%T_>x-ZRxwiD6AI*!L_ z&#zr(ZKsYi+zGDGNceDH$gtAw@iNXMKgrPWu&}?UAme2u^r~yUKxGA#i^t|~R^td$eyp18j*`!zfpV)ayJWUIi=UmeQTeq` z54n=8Up-}gW6k{_r|^I;tu)pas7G$0I{oR%6AmW+PGmF?11~k?yfvlI{)ErZ{ z>1XnEL)60;3;gfI$}P-|#_BT4e~wJ|gVD&1IE5)|<~)@h0t`bqe=p;_(ipeldpem9 zG~%JYyfjG$nDbL@$5an&^)ja{M60R4OdF7IUg|uMc+0t&#FHA5D!HElI<57l<#AGBr;c6pG-CzAAzA5!`g#| z$08+?n9cb|Y$!KaP3OzW_yG=Eo{vC8dK{qZKJM}pQPm|Dr`#SnBu}O-`3+_xKOvsPA3~TiENYXgm>vuZR@ht`p{=67 zQT|+DhbEHlWB?#-aeDaPNZ;hU<=$`o0KDMHalH)4N1_~EXe^4~yMcBE($o7rI^?j02mWIeA5sgU(0k z7ls-y19;F*et1y|sa$H7?i_cxXLl?TAL>)keDD;s&p3H_Ov}1=QY{Z{nV-F%NGeNz z{=B9&pi)1>oI-)gy5IG4Rx(j+h%0+8V(#3e#h5yOtYP%o?^nE+uJ$53qD#tR<^7V)GZq1 zhB~Q6-V?THebqbHcM3=-zuPEFAlNUc=*v}LreL-=C1c9j&-3Ie?#|A$0NEHe@r&Rc zhS0e))jbm2n_gzoK@&u2ua~yIq2gBWEbOvaqT>Q~Lsw&Ewg--lh`nfhT z?${we3-6>6OgMSXczmeLlJg)i$2(snkAW`H&_5(OR;I#ibF-1Nv=w9m|+#*5~jmB5tWj z@7ySrQqV5Baq=dIIQe6;U`)oCh0Hp^TZc+Tf-?8$YMP#`ndEkEU&aqSa2sZAS#SR( zLQEIiWr5t3O_i5UShmh>uA}S+cKN}?<>a5UJ7Zd4_uOg#dxQLS&r@{07D6TeS6L>Z zQFrQ6QI8WsK)A?t*Up8hTZ8+UnyGV!T#jbB-UyOV?8IL*hc0}LIDZ3$+;8jHpl~Mf z-znYVyUCx50;a7$C#UFGmgI9WA-$EWB$n6+cDcgPmdkrLX5RNFy)NqwOR1B6FSjgV zZQYlsTKS8o5czK4As;l?^sG>BLk{V45BH$$x5{fi%2|!{>iWFs0INI|;s}*DZ%eCe zJU$O-ikE6I4o&)gJCD&taPCf_CdDse7}O4O3s)6C3p|7*c2cx{VgObMP2W+p&Ft;G zE|cg&9-Q#imG2btdJ0Ho4AdsA!<#|S2jS2}bO^%~@R2ep$R9#-Aca5$R)$|Ecs<@`(K%Y=qD(LraYG_!CacQQgyO;8?cR#*jS`K&g<;)8$iUsP+bn{=nz-wSQN=##&;G!i@ba%K`C20aeD z!uK{@yh96;$Bn>C7F&NKWsGJa985JS+A6A&+qIKsU*$7=s?!l9P(Uu=kG+GVWYS>y zM354_Q7PgT+gC*v%`|Uh-(bJ$T+3MJ^HPksL1{(9DBkS2&^SNFYGZ(TCcj&Jh;un1 z#T*enXgO1nY!OS-gZw~>Ax=TDnkDFs7V>c%2tpHCmPmuFz8YOYl=b z@YSRM!IhAjbLjgf=LRyDE(XcXp*@pY+OX^iD1%Fg<7$oL57#TKOd5cfkE7VV|?9|0i3!%s#HB zdNH?-ehADXuq9KX0X%gax>?~DSP21d$5%3gPRx%2>@mO4Wl7q58dbkJ0-?p({bzQQ z{3XIqV(i3j%;)im^V&D%a|>5X@*R(QlYdtTEDvHRsv2X!8XcPjaEv|QN}E;XDqK~?$6eN41WzEdUctuzDj8><_R2i|Vyl5?>W)tsPmfARolw|JG?WkE~k zRqWc|&-)sC4*yCE-#9cpEzr05r-j;ChiA2ee8S40H)TzFZk1{EZ;wgHIy)fS`CM95 zVyz`8Qbl@o0niI=qtUeRtKAoM;7}S(2b_Fq6kj$G`VoKtwzn>*l6Da-tEunT6$%?E z4=c9*J8^>y$Iitt>1AKEpZjIt2fB_N(uDnW?l0=QKKMjmE@_n%F^^$bU0rx#DbPXuV&r`c9z01DMo zY0yr-LVf^E*ToeKhQ&^_weI z&ZH0TnzgWIrW|W*!1jsXn_+^ldLLNr^hT6cI`+I5W@pSfLi5QDzE$n&;!V7@J@BG5 z1BE%5Ik$if4SB^Z?~)(#?l(wn zk1wn{=Ej2Y61tfJL%s+VgP?V&*FVNf&G++hNg2xQ-tw=Eso+xO>oAf_*q<%pjF)~> z{P8|{gGF9#0{;f(1?s&SXA9wk4BwDbQY`o^d|qA>VibORib)d#G*&eP^)X9&8*Eg4Ry-b=E!|fc}sh^d4%y5;?toQryOj z>i5;a(eYO%){Dr0PzfWP4U6wxSBRxIiv`i;04MvC#6WO?s@H zp`stK`N+qjHyIh;_#3y_>@{_eL>?l z7#KMGREI{4pi{aCs^V-$^-%9)`0mMafB7i;M>8u9upa(Y?0JJ7q~mb7RQl7)`?+3( zZ;~Nq=s3(iOu>F3@F>@`gRtW@&Jn-2Gv7lsSnY=I(|)&KkrM&P;A^xmNbw3j=jYeH zO9Snsz&WE=8-gqOxCLL6%x+Qt2)sot0f;mFV1WOV-%>edg{g>u^a^8wK-jQ!pZ2Lw zcC-i&8$E>iDJ1E(O|^zHa}*}&^>2=C@-H#ma9P{>?o4X6yh?A@quRB))?LS{TVuQX z*}ALH*H@hMjHYqRMtsjmS+l>oMhqDTS7SvfVw7u#r`Q9o8?v6+f~T9nz0GZ_LI>2?vpQ3=3ywmUTDwNUck>=m>Y;>MgxtTZ#7C7S0J>?+WI;E>F`=%y2^ItT19dFH!&mTro65j;BHS*a^DZKLn zg3UUaMY4%SJ@|Z}QuX!^`(^P$ba2WBsUweEW>hfv+o7E_S4f7J2Q(eDULpj4 zpn3Ag=^{Fcmbw^Kvxd8OakRB(Mqk?OPfmtB6NDj6b9^_p{Bk~0zrAo__fB$O4nD*9 z6(I#hjWUKzI=KRcfS9Yv{L{p)HQWOqP-wsQAe)s~TsV5$lK~1O^tGo*cTUFgHIL*` zaL)Ts6FBtJwGgaKPM}oRlWgm6T$Sxu=GtWoXOS=3=h{#jsozuJU-cRBj%b?{`t@;=~FJiY`+8IyANi40?_3^{f47zn#(@u z)sCKzG7mXWG8#W;)0f{MW#V-YwJHk5d}ZfQ-^MkRC=I$tPF$f^FQT3H*)r8&kzLTPk#I+_7rZ_U*=6=_dvTcWQy zt&S{wl)5dnqc(08E4&9K;SWHln*+JxUMtG!oxc4fpi@LpQ^T9%>#^&u0dq34n#|nD zqCWlA!2R=~@Wq^@EFFFJ$8x@LLBxq_ist(erAuodnP0iP&RjavB<++0-q*1)Y z-W{{TMB1QrJZhUdTon;*PnldZ{_DBr;ctmz~aKeicx+Ds$qo}<9__H zJ{ZMZZH(^y2M+`3cC39Y;m~m^HkBk*0Sw_Itwyf}^0fCC>0~Kn{Mcy8yZeHSMS3e* zr*GW^_M#@t937oKUyf76k1@0;#fs~6CMIY_x_i_CX}S-K*_IU_W6b7AT-c+L?f0k2 z!J(=imQ|HLxlhq>-w6CNvOrLBXUG9?5=2t5M#r+8_7TGZD97b2F-CU44NZ=MTHnZ) znpD<@a)p#`D|y)M`iX~C{ZW417!|R{BM%b?o#wxkU5ihwEPO^L1CnmhXDCm=Pu|Ko zw($-!l@%opu6%#$9;eZ5$={PR?s3JG24X>yx;x-NysDs`Ok}#*X9d^HgZEVr@lZZo#~X;CjNICI;0k~PLbT> zS7@7Nwt&F}TF2&hqGXE zNB{OCt>9A`pUFTYPtH}(Q+;qgpP4y?KJnAZQ?BO?{i#vbHj`DX-(L7kBN3FHM+sbh zMa{2bLAg%0 z+?o^$L19RRUjON*k1C1^fS+ul^*7#KB2VMh$SO3xKYHpuC%~FXCp*9s)5(%0%N>0% zlja!A(#`x0ml13JYg>fWLmK~@UCjsXO>l#oClMOhv}5t;ijpb2Dd0F%o(oM>Xr-gP z)D}vT_qgtpp1yaaDbfgnWk0>(-teV+NaFoP73U>46eaz^YK%A#y!Wdo(%9XUfMC+W z=vnyaE7BBJG%YUG_%-Rr@>rn_bDRx9M%JaxK)*W;iG2>)kw#`msbuV9UcSeipUm@W zgP*Ljh}y`(PW9%b%qfiOuLy+53xfn=(db0O*o)BlI&<&MkGb#*{o}_Ayv0p zt(al@^2?6d37x&cmfKj{ig}4VTQ>qBQujgRzI6DM=MeciRw!~?4m{G)p-lSi8jTTf zavaEsIdCVNZt*0!JtJ2U*Wwx>FNM)6hDO4Udw2XubdW{?IoH5z52R;M*jTu&C&sH+|T}92bAM|VWxrtKS0;NfQY^@<3JZyz0KWbildJJJ-W7u zX^RC1BoGzMhOR|P49%>518Z+JekT<8?HX@>`h8#m4!;5l5*qCB(hVb6xS+*<9kp4_ zN1^X29i7%pGYZ$Cdyf+gqZJ%`5z+;uJ6KEc<#)ie`X=qlFk`W+!@k)+S99H6R8=1s zM!aW{p8K`5Lfe0!m2*SK);`#TP+1ktYWx&)>q$4*`wCLK>QR9!z-t|#P@W5D6<>S) zy~CWiY1&f}GD8@(XAWV#2U^GVf9sAnC`w^Apl*T08|=LSzJ1^-Ko{eYXd-BeN(y^= zOcZpB{VH!2`m2yzpAG+>SlnoQkRR;qT&rCxZ9wz?pW-fEKok4=#@4p(#`Sc{_%xsd zHE5SKfx@z~{Vl$DC&ZPIY8z9?ufJqq##D|~a3);bjRY`}t_c-uiC^?V3woPx$jV?J zb#guVcq54i_pBI?{Z1!ZjOW`I`?l!#T6To9LLysjF`F#pVJqnGcctB8(fK_Am+e*NH(v1?haEJm_!!8!fun9cw4yb_Ml z9}s;wUoFiA37i=OW<9kSFUu-LOH)1&e}Il3>#V#eQ-KTaTZ{{=z}nKIWvkA`aZOp{ z`FFsWkQ8F@io&RvA4EETBpDRfG%yIeSwaqwo+6?GtJhq33-I8>E*35>Kym-J>Td4R zed3EyrQq%7X}KcLwW7t|RJVJF*m6@-Z8K~ZV7v?QbxTbIJF+oCO&FoG&Usn95%Bjw zPBh|U%bjMXWr*7x)WYJgxrI>&>L;xJ%{yRIYG@2J#8n1Jv66gi6);$8?)caHZK3UP zMZFRu^n-Msy;z_ME+qcE&SjcygfVV4nY(Kn74{WK#JkM7PC-RWi@%zHR^(53fNgL) zo6%3acUw`RzIE3^GI;!yBP%~|X7yv1eTIyL@kH=UPNCD>7*~V!{n*ho8~aQ1Kqqxtm#o;4Gen! zBsb#efi8?`@qh~d6Z#UC;UWBW`m3B0#9s-r|8h|^7=T zFmXxa{)~6UHR378C)n=l0}k4fplZ>f>wJLJw!9wWI^%yNP-WuI^NV7;&qw7)Tb?`66^rjBJ0uFvOazT56uamGQ%1!{) z18%=&f>dCaLz$Vm+P`>z8B4HSmGc9J*Cn};b}P%fyV1Ei|q zzY8abF$)k3+-Bf~KIOtefl%+L*jkEaFdP^Y+};mOUnl4W_5nF-L5&{&(V5mML7VHi zpmNY@Aea~f4A~+50{U>GJ*NX(t5yeY*9o8G$AOZZ->hR_$Bnwp^aAM?Wx$YCP!OBs zMeLr=VR;08wH#F4PepChmOyS!-QNNeEG!GgG+W`|nj3uw+-@NO!)@OL)pn+PY4-pp zr-7GlaFAtq=)*p?J_cBr6YTKhwuS&~LWEp9L(C!jHV~^BI4CfcxQMicm9o&8g1$H+#7?$l$|9!g>u|rk`qU;9JwaA!5 za=5C^Ac+p{`W~oigTP^aR_jj@FmDd?v8HL`>_}fL&~JZt%0v7i69*X*qLnlS~M|adr<-col zEn7X}DW4pIQMmcE$B4Dc&Gu5x$qHszUs_#x591`KHs50R6wy-fH8~pz*|+mqeLkdN zS|?;3myjFiSD>5GJDK-Ac{M7UkvYSY@iFYw;&M%o}pU7R^_M?P?g+(!lvFyDF zy=0s3I7R%&-q6wOLnz8tPr$+w`s5&|6|lb5m>dJfS z8(2ca@z^=`{>oEg(1J*~x&85=S3sWzC;5J-ID{-N!+G^!WeG}6se4Cw%Xxg+{iZev zPNzr+mePATqu;&E9+~DBvmPY7dA_!M=fR*MoMedw$rpE2)jvO~a;W~%8w*4ELHy$u zf_c+t`QgZvrP*A;yGC<0jj|fL?L9!&WEC5tR~&&@>E0ztnNiDBqrI(*(AwGI?-q(w4ZrAN2Nm)t3?hU45hxQOw^Q)5v7%xp{a(u|MI zqxqfhg0zIwjB6<|{!61;5w^PJQmHZkjisxkk(;5&6|A5^NKv}q!|cCnZr=I(=B3w9 zHD0mbS&#VT*^4`x52_p?hGSED$j^>r!h;QAGtz2O{vKPKn{X(kG8js%ibxkjq)Y(@ zg6a3)s$q$Gp~4{W9v$p(1cS*vtO~HkI7cKv3g1Dsk-!j3@-HCIV35o^Y;T6TEA>@{ z*dGA73H3GJ#86PG==-#Vly}X34wCGJEO*ztRlhU?AI~Xmunh;H;1uckd?l z;tmuBJc`)Yb3y(2YR3*av3#Ab`HJD3v?yAr9KY{-4f!pkKi~pq_#=WjPd>i*p^iM8 zydUZTwnbSfzx>Kl47e6m_#1vWG%q_H?j11}@l2DazD<5MusTMCBko+!7Vn4*U5G8R znVZJ@@nY>UtwtemwM8+~c!#T$iP+hkJS`k^)y&4t1=Up+`6oX|uj#?-0>}G(c^tWk zq36(#w-I?h*odYp!*5?=e%5t7V?xeLveK=06}`}#9+oxW_<}4XHyf;ABi3-rDpI># z7}Kn2KZft+EGXc=rd;Yh`E`zf=xs;!R!Pu%tbZoIABk|bGKbt-f0nPNUo9B5Rduq> zM0|Z}%j6bRO~?Vs;6BrwwbqSH0O^L-Q|w9MW~u*`?GC0Okc?aGFQ6eTrprci625*y zVLPP1Ve|uiO_kCVVEQAQTm>vxG%3gtEDtW@BgDQ0kO{4>-^t1R0{G4FCbnP4TP8g) zeIS{Juq!VEPB%5o?ZJtzo+6 z!hG|3_$0wbmdPeBGpL>NthO&n`kBBQ?tX2p!G;M7FpX3~BaFBU7alRIAMT?s=_9$HX= z?!urOx@hXmD@7wyhoZYKsT&F_EVPZ0Zf>;B#zAp11YK>{gE+2wP!+8 z(uo1G{ny1ZBWM6|<9CKu&3tZ{AwQ1c^Bsa{&Oj8H=^}mU>sUULlV}C7LBr8p=-xODxVX;u5} zfhW&*K6f&azlM&^k=!7-W4C-zEH84OMSyGIHey}MhR*`Pu`a!Ds<~Vv} z>3HGyWxB1~MmBgxJ11pLn=pV0Wq&eh|VP@AW6L#6c3IMt=*#GUr>Z|yYbXo8{259L|BM(UKS-frg3_#*T4~_+ zenn_JZj^L?JFMjSPvz~;E8(t;xAQz`lDG4X-@KIa>CX1Q!4l$?erW$5K~N^?{E;@H zxf`^nSVj^hUP2k6)h7sr1(vZa92W5%TB5<`H~(T^B;gLBJC)Ad{vioVlae^sTn`Az z@W81mWOvuS(qvffT|glGs(KWI5lNH`M6qlYnHZjK`0g3$Q;Vx-_9Gd^b|wy0xl7y^ zC1*#?vGk&2mT$hMAEleyXmBQ3s2%!asY+^}h$@+pP=fDdA@-!L+>6UEw6NDGE6X?n zyd)6%jqRMTD;=Xumd)(~{@l#y_zYV1wM>&fk2^!$!MDzzAoHFB3fsaM0^W)gj+)u& zS^#RmA8jtW6^dbGXNhQPl_#56t4s}-ZvNLuSLFp;qU=c%!7+Agcc)O|E+KRHEe?;s zQhi>%eH~zi``r!r6|!G|wJ&3TrJJVwl{9S%R8rtCe0OI{7sIxb)-j?fmRW1KQuc;S zPQ$4%RLS7xjy;;9&y2dx%e_F;y+Y`8-tUb_iS|%01T{I;kf@=Fz5A@FREcNrPxhB# z-x5Dt{;0|^Y7dAeI`(bZQ3`i8nt04g4|2^^x<2i;|E$=HXfv-?SJ>bdxcfKc~|(9n>{(@7XIF8WEI;MH2s1A%Wu4QD{-y0gWaTU9L{Be^Auvifph zllEdDO8Gr#V%(@uGef9K(@*373%&(G`b|E-<#ddTAZllNnY)$ddI1DT$Tqicfg&ky z^p%55hU_tk9m8sR`}VCy)sZdMUw{@p_V%+dBf_L`(BE83wJ`iT>M8pIY0S|%4>j-E z!JtA9_X<=79bE*v>s2zYEuE7s(m^zrio&Y#hNl2I&rykQ6C-=!yAvKj(AdGJ8aB7B z9XiCpu?R+4mG@h@$iEg=7eV;;D<$B1YZIH}+{`t4A|uc`#V-O`2A9$?mT3$-ur^(0 z(Z2o6>xy5#AYnyPJ^|_IlS#`S14$M`=T6b-y&I?)8%;1ok9*n884)JVX{~vZYB|V( zCOu`OF++6D2Jacb$d}FuFaw+ts>ov3D`i|;fRfi1qFl=wOI5)9lx0i49(&XskdeLc z-3bd|7s2aouy#mDU=j3hWGL^oEHxU-ga>1_?vdO75CERO!{%ykjtMjLdIT?Er}bE?&evTQXbe);8rL-RpK_QH23G=Q!VRRs19O_y4f>$f^IBUuF4NF_Wts;YI5 z*nZhR^I!v;vxxgPtR;Bq>~0^WJWP6xKUJMNm3sh$>Yt@frTn(kVV@DoRo zlsA;aL6aeS3{%PCl{fd`{scg_SbtGBM31ZE{;UW9qsQR)F#I~{DGNno_9Jt)2+@=; z4!6JRdG9fUCQb>&miLvq?)g{6xF$yGbb zpGECXWB?poHC11S>>biez51#=&3lx^g*{OTAGfPJLC(X7?U(%zUX)ey!C20%1I8L1 z%4WDumu8m5*D#w1deA#02+7z#qZ9{04s9rBDt*{vX@%Nm(XEo zZ6miIP0FU{W-c2I^hfkcn`j?j#~8?Lu#oMyXweSKWW@#j*A_j7nGxtfPSR8U!<;YV zYmY$r0Jx^RQwD_@SuGB_2-018(M^XGK}?SEHTyioN(ta^ zVqZgLefW=dXW?mOG_598P=^ARg;4}ds$nD<^d*Qs{ayKUfNH_M108dW8Hq(YW1!s) zEZsJ~u@&tv>KM0I7>q=qov{#D)X^>i39|?^4l@i!auIz)Uc%eX>q3UXNGL3#eOM7Z zc<`WkyPsjq2mAWLm-<^=va zG-ufVJLKEHCtxs^1NIGhxd<3b2-D=%H*25 q->VFQ2~4v^c~*(@+lITOQ~U`VH(~aPpry6|0000k?m7~HkEGlRRk)8fV5i_M^e7i)2MhvF_pi@Q6;ixjxLzwf*E zkMo?9tI81ptkOmwaA`lJ^z5*5TEr+ma=L`-G!A(s` z3oI%s%EZLP$H%9orA0$SBPAt8PEJlmMI|F60|J5A+1a<&rUe89w%2EbgoHRbIf;ph zx7KF}2?^!ou`6j zudk1ej&5gXCo45uTwJ`Vsi~%>#@5z$YHF&brNz*Kb z%S%T`XK!yWFE7v3)Kp(zzooFi-QC^Q)z#3@Fe4*letzEA*tosD-NM3RZEdZtu5NsM zd~k5EyQ3v7Ev>h=x2UKnHa6DE%F5o}esy)Vqod>K=%}l!tD>T!tgNh{pupGHH#IdC z27?6$2Uk^9O-@dZjEp?&wU(5W`1$#L`SRuY<)ym1`qQURhr9FP;bDh;{->v>2L}hy z(a}*+QFC*1$w|qrMTHR&5i>J0fq?-V8ymyJ!xIw|2?+_ex3|5WE%EX38%w|1+S(c# z8gg@UzkmO}y}iA)wY9c578)Ab*x2~(+qa;gpp})Ct^}jS#l?Yv0cc45=IZ3a%wT3p zR!&aN*l_34+-ULF=>6^A2`M>$@9#$j+NK9u2YXw(t4n{R=UiP~&5n1arRK~|_7&#* zm>lb=N-jJ5mH5`sce{PLL^pezai58XrA^|oDX4{``Xep@aZmB#NFUa_oU-%~!s>e@)RJln&f*HY zZe!GWNpu9mjmcXq_coIqBf-3lGR_^rJ@MU9ONt?vpDMOR&YhO!1-UV53O9dE#L{qD z(&9+Zlkv+fn`O>W)^I+a>Cd^BdxkVv>eR$m7*(jW}8q<^&(${-(OLPDi8dSAd>@Wt&KB1k||of z@<~a8?EhW|5Sc8V-R&mOMjP50w6O-~gFk&G9~aPO!bqlk@4HOg)ly+*CJME%*$(`Arip-5J~hmaZ^k!NS=^J{FR8)Zq8Js z5sS)gf|fap5aE5a<T+?xYD0CU zH@N+~|F}4C+EHIt%V(Lt`*=2E$Ye@NMR)#`o$>os`Hhm$Dg)%6D|Z4{&t9Me*MnMd zK&}+?!wNftI`8`xV-*QeSbj9RoA#$Pa_8RzD5F-5aQIY@yrg~edLjaaxI70eZfmTf z5Hi+p+^6e&)IyD9(KPj7CM?pi+nIG4V1*`S+W7H=v9&$}R){m0i@eo7TMv+L+|#LL zWP&PW?~rX6A5XYfuYlCNBWVws*R@wP2aUh@_oAQ}fBZy?)7a&r=GIr%oG|q$A{aJu zrS|W{mAhB()DKSZT&rGVa=R9PV;pNJIdZv?$s8?*=ahJTQl`6{ePiAG4%;qPv;4zj zfmm|0mN^2$n0yH-J$YO%tk;;7X+^|9XFm;rBa5>-z#C8sBthX?vQT zJ9P8Eoa~s2AJY5HeM85UvYWk7YomM>0r^EH$%6e(5#588$UYt1mS6b)SVE$6S_Z^o zbSa%tjs`_yIGBYVIo&T z;Bfyu*mrGUP=$fAJ-#H)t)*EJ(dA478NSSt5#h&ZcyU4kguEZf)^j*&T1eQy!?pNm zqSxm3>?)tNKesiZ6Ou_eM^%-jzPBcG5lL`F8#Q$#|AH~KTJw6_xVERRG&sEFX=+R+ z46sUT!hII0uTRad5M>&UBs>|u%1EuHR!NW7$1j1g@C}D4YVx5ea6-jHBR?syy3A@T zo`C(TGYc%vvWI|6syJ?{rPsW_9n<*p@)^qpNJa9Mny+x!F*S9$)k_D1q>n&ZukpBa zs$@jVM@cHP>i5*Olqmut^44q)Wmo`n$Fi27V=65XP1$V0yr&Rzc#f_7WY5 zjsXM{HIx$Z_c3v$j_qkQtvNFM<^rvnf)NW%b$qDE@(pzrw-AHAZ~ z+D&-LE!~*=1|vpLxZ%I3^}z@68AR7O7|k($zJY`Ibgz+^8)6< zQ`)ss3vJ%wiS{P?JSY)-KR#`U41L;@T~%NBMQxFsn7&z9#-$#h{zU8lTjo=CRiU&^ z99%v!KD=m=K&$j6a~7ps%~*uND+(}tN-9ABDOLC~F))9{S$=bI6Nmh3Afne``-;j1 z=%E4$Tn-oM!PiTE3GcfUh>2jkon5~jOxDe^pboUq(q1;Wb<>I{TcdB@ zg4d3PQQNzh?Eg4V@D-r46#z zQM=Bop=lSUHW@Yy|&$+uDQL{+p(^*CL=e{Ifata46OPAhb9)>rv=8V{%xB#`kcTR}5G-v@eRWcLS~DUv#1d6D608iY@uVLUb=m z1E-JB%JR`FX?9?Ph1Sk3sgcl3zGkWbwhZqzya}K!&^P=(=G^;=z!!JC;icmvSD3 z)BAT+06%p~m&fxb5mX90cIQ&x4a&So#bsUrK260ICcef+Na_iFitZv9bARtrPLFTJ z(CCthsRa+ZOXC_dl{GH7PY9#csqZYreK#6^rDe}al`S)bc^q6-rqtL;`5hi*Gxz$4 zJIbh~Z7Y)H`$VVHW8maj)p<2F_w#+(5yx73)kA@J+nQ3v8$UM~D=W;r_ZkVN#a^&%#2f9Bn*%ra@>rAG(h=sb;5l@-y1pvIQf@!X#5+%T z9bL6k8^Y9%o=s+}-iw5-6BGwDn7ugPIn#`%B%fGq3p&2++u9w6_g5s%UDIl?9pQMpb@n;IT@o@@s^LD37<%m2^DV^A7 zlMt}N>TO#^ASCod_0c~NYbqsqk#)_<2WX#|@*4I{;02yFguX`*5)SZ4UWoA@4a$JvYA(o^^%vVVkmsEG$lI1DDnzJ zlmv(QRPX$ltT$FlHmWUuxfu^HwPT5-!h2IobMADt@M1~m_~-LbBTMu!Yq23EYhf;^ zmm7chB=`eagF0$o3<@4cVIYz=5kWv9Xg7~=e9)Ibi!43wYUb`=G?hVNc2<|?+42KT zd&Xw)|W@AzkoS?h zBP%NP&)DZ7rdDVe6{rglL%ZT)W5#$9cEHyvj*XB$uQwX`I~VftY|jpi>U7tx_!C`X zhwjAYT~yvm9SP}BsCw#^N*UE+me;!*Th{n{I&D3C9VcHw&7F&TC^A#LUMY9fX+wDs z+-Pa4TZB)I$%ij%f2Q8`X^co?V*oaHZ8$F++igMb6KRiu8aalzYXYgSsIGN-zD&bh z-N-oa4S4gcsA-UN1mrsH8r)j%FMP4=ifb$i``vPB`%iy+g{oWjW1S%QX(-y-@4HD7 z8!N%)b=0r828t~)%C(SV8sKIXW*YQVzi`1mM_|9hZkB8`*^zHb_DzfY{$z3Q!1+>S zyng^5UkOKFi*Qrg)k)yxPk_?Z%F*cti0KG4Fj*b{Iu6K(eGpB}f-w zQS%Tvq*NWIgSM?w5yuaH(jVL4(nKamq_Zg1P#seKgt22KbdSbQ5l1cnpCSjm-zbds zKG+fOjN_7a3_*3Hk&g*BB={KreCHZF?3z0OUJ*)g9S)2EJ97dsa0K;6v&v(_myJ@c z=6=xBMgf0-=%OCU+IUX3-z}eAohD1FpW(~oyHkA%-Q#huL1K^ntbuykdk*EX6sDBn zVLZk4)li8#Fwj_Lr(K~IVktowxguWc@r&IVRFur-57PzGgkYM#6*$Eq9~>)A@^M7r}A!K(#gzam5enb2)n zt0fQ#!i`0 zoe*i|A^PjlK3JuNUbZ$_<(F{8fP9otqNv|Og6w|Qh)Oa8)@KHTiFO5b?Z8%j@s(s_M2*99lCz$U6XM5`~a_QHmi4nbjZsKTJTyN#yAtd(FnkyFRF zf^v5G4WCDHKxNHAQIAP(fIh_~F-j>oX%J$o!ubY9nvb zHYHe-2+P`U|qq<7m+rI=c!U6{{ zQ{V+^W@Ag5)|7gG*8DTr#2&UGCHnpAYvW?UJ35V#XoVaJ96n;Zcb25V7bTssxRNgf zne}~r+0auOSUS2`5jzT|qF0KB9j@ekBYJzqiJ`3i*h})4Ra-KCo3X&9$!e~}^1oid z(<{RO7Hyc%@eyQP+H{AuF0Cm`7fY*xS@f@h_^!TfAwX^!dtY8<{5>4oVq3lmM z3}pU~2&h+I?uCR!{v8P7%j;iC*|b$jsnK*w>79j}b%&LBYA*l6G#DWV+$oy~D>Lh| z{EL`S>IxJa;Qyn=Apdd^N_U-msOzIhA%_5izB`oN*5O{=^w*F@ym>T#?6E$J^{q`XLpO#>4^SxFZB9J{5 zt1-<_A1j0AkLv5>IW>+?*4q2J{loY!9qMtoOfbAbD~j)g%2LzWago2Yy$XFS zYZ*s;GmS8~yF5)7>1-*Lj!&C({JY&M4O$+2(5$hRtZO>l8n0lIRL79_5MFC&t@IyyHOc-bpT zLFj{hI{8j*u{UyQaP^91WUK=ukB_maRaJs~UFY!#_il33pO z-t5_oWT|!n@N`hY5uUg}_^@AWJ|RX{0>%JHG8tq^;~rFiF(>sn`!>FhAew zX1q4A(!FQjqzWY`eo5+w7U;_tYJ9_g>l@Ez_~LW0*T_wy-8%mz&)EdfKEi()C>xzp zE|9b_E|R`k4VV{8ow7fm9;8XWtJ7B`^Up~KP~0-B~p)i?1M)&(cJ z_oyRDN-0LVfVoLyJ-L0ds%VD4oKh?bC!>b`lL1D`FanU!ew6W`Bx9mHeNaG>M7a0+ z$(#u7Yc$sbLTG}i#-Lq1U3Ei8HK0Uq@OyoeJT5PO1F(iG<8jd0pm%?Z$H_h4xau+j zlD-yhSsOpmlB=Ao6(KhoI)FO|(X+GMj(>rMlf$793$?CfSd@A$07G$3APkjcQqn#f zt@jVX(*DUQSCZp*W8i+OCiCzDbOqOxnJ63=|x5y1$*IZ|0wOO1lr2m)*y7 zDWW>AmamFk8K8b2)y4IYmB|nmdk`#O;cVG90zQvE^xxcGl~xa;64H;oSYar>tv51i zAY0%t7RqEAHX`~g1pIbp60@`Oa~R=@;jJ!(TJNBnM8$0u-V8sfGQu&Di4ovtMA|@X zBD(qAl;MbewkUKfK^U;Kr6Fz#9k*JF-ibvOb@~ zYuw^MahDU3bF%T!o=3OL`1&Q3!qD;d?H6Afm)qa@n7lF4gg9OvqJZ@iXG+NUj)<<& z1J8kA1ECZlU~*O$^DMnR9<=Y0b5ijSa!pP;NF6=Ge|OHcF(zfqdUqK1F zEtzLdZ{14AqU?htu$%9}JcyS2djcwV5)=f73;)tnAz#p{Wsnc24-Pwi_;hcX6qQ1~ zc-B&AWVRH^$WlsE=>*KR4mOU-rk5;xpRxhhHDEOw$w{Au9V-626Zk8ZhS8a z;f(uJg|fyT*16e+%PuHquV-GR&lAKuZarWw0Sm`;84nIQ4VQD~#?2o``aMkcYFDlM zV|GID>wES)vX+C^&r6vc4;5b6%}>Sn)UGt>ga+GW+C)*buB}MexgAlY0z&Oaspa7N zgEHm2$S9XZyS2*Z93C88H}@{PhBP1UD}qpo3!U;gZgu7){W0!TqwnIbZSxVTTmlw_ zvq!xa@=O`O`RjtfQAR|tiMV;qznee)B{PU-be^elUHr}t4ysst3IK*$ol#Gzaexx) z`{7oq^WqjZGm31vrIyoE_+zf(n%aI>BL4?j?gvm<8)L@LvMR7ZD$y;xi`X)nxj~y`uYJd zi19!z8MV`m_1U3AV?KHu&{N~l?`fiU1aQ|vatOfoNkVI~q)4%Fj;#+Sra8yM%oTwh z+5ay56r7tBiK>o2f#T_j#_xJCvlxr#5g;T*JGBY8jL_l$*>oy177#016J)Jxl8eSE z7SnF%WD#KxTR=_bCzCc?s5^8=>Xl*qE_+zH98W9JHIaHETzdItL9CC661uq|+qRiF5s52B3;h!FXFT-Gnk8=%cG-Szp+%);9Qm4bj5@X0t z(K4nsLj{1b5P<^t*p9A*hYI@HA-BHtjvP>Ek<_i{WE&_(DC~xVH6BFdLJKn-4AN0wy#lgSS^2KOkn(Bv z?h0W&C*Shn@`cFY=9bkXt@$iMnS|1djpyoP;gZ`^JBO$oFo2kgij zi!UYL98c58Ha$yB{>fcU+@mMati!a5k|*C|EyvH-M}o8Td;B*O8pFM$M4#X5%!U@B zLJlLSC0YXR>|=DCoiqMlhrpkMk%%Q{n}@h$6uiS3ajt_26gd0CnAe$upS5)1?&y*H z1h)j$InS{H`um78_rT*g_T{D~%Jd5AU26>Dj0j>pJn0xYnRUZw@{#;}5#p_7XHi*p zoZNotu=v%0a5DMom_lONC?ryH;5MiK)XiBqY5_D)OzAu+a-Ub-RhG|6BLM6}HBkoyrr zofs7zu2XVEwwhnqy8+Q~J&WhTA>^^zjodl{JzIlO)STqtf!p&ZYO{Y;zeu#+4e9^w zyNDqf$L?zudo@ z4cu7?nF_ejgVd~^%m|u{Pr=(|s&PV0?$S{bP?~UjAZ=a15A>CFAGks*C$#67DAKiH z+@n`*24J`;Yr{4gG1JT|GrXMpnMZ*f0JyQ#zOhjBCiU-d4GjnrOAGu#1^nb1<7@Ze zoM&=qp>$F!_tPM0>}5<9t+jafZpj_nUG=%#QDx=5@r(@h*oXW<**wBO7r`$W-p9fpe;X>_Hv{m%RdjH^tCGdL*2eGe(Tr_cW(Wv+K&P|7AXcRbC95QvQ8oCf37A}0pD&#fM}*-2 zqVFAiIr3wO0DWR%PVw!i%wC30ok2e%<1(4V6-sBKewMR}P#Ja0S@`$j-7HON{Dtj9 z%QSO_GVMa^i9!*b20bUH`3_l%tEK3phL}N#8UeNu82vMzdW@<963376D(AL z^*Hy!qsb!(%y?@Qx0#*~;N#^S$pM zr{#LoJ{`AB_HTMbg0>W$xl9n7GsG6CeCcV^!qu~nZd(R@ssu0UgGbjdE}Y@vyXW?Piy0)>WFj}f zC;}GBQ4fmonJ{R+q9nrUrcF6kU%LK~lM|fUVn-E-l<(S?{3nr@h5odO}cb+N6^-n z36gb=*UI4*YOpj1s$bu5o=$(+bVQC^T9lTii*7=ZaeE=;wh!8Hgqdl@j75;F5j-Y3N^2P0&hNaD-tjM zvxO3UOP>;Y$~kxwv&AMvuhP`ps#%+WMcVAjRB)v|W~EI}msod*>C$=wqNa-J((PAn z`+(5P3Dp}8z#}u&@(!$Tlj#pJ8=ACX%jt>b3Qx$)sn6Uq5VG{6+fq`U$&x+sTP1OE z`N+I>cdvq6&96MJsQY)Uzbg_n%UA8=yI9w|bvIv$PTMZKM-Z>@QxwEMmhb}u zE(9n$;}^^ZegC2^QmpbWX@*appcJo>Bre|X>=LQzn8%vJO>g!YoLJ3e%9&9PNd@+P z=hA8=u^$jTE0Pk=0I}i`sixM92pP;XHJXk5HB4eo3FfBDMS`la4X1rc)9rVe(MAe0 z{{#~zwmh*ZhmFp&)jk5n*ss}{SnvDzq*tpAqVSoz8q}`vJeffgl$XZ=r~MGzBiZot z7T*nr!}Q$r^Uw0@bJ5sYv$5*^m7IGYE$PooSDctVg#q8imt)P`T-$RsN3B3y|2z$g zaFO7tk)RjVom8fsk-vpRzOZc<&5Wr{u;JGeZW&$liUp8X7SA)qFMwQ9`nTPFuHr|@ zu7jpDM6dPFSZ5! zgr{Mw_)Y`f$kI-8ONz%`ipr67jxOxU$H*aB0;Yxlj-fKGT!*%9LA@ztZ$!8ezAQze zg>F5M-jJ2i+GOIdmOvG$G^_^TECSQk0N(pw>5!AK{C*1tz~gVK&`e>RY}Zgn-EG56 zE%uLFUv(HmfSpw0jOJ;j?Iupb+XMcxZ^UTn9vN$59W&L*EQ`{W-(C8F9dA_uAruLeUi?t@O`x2Dz4q4%1nI+erB(Lo z_#GKL3qY?b5|{Dn8D)O;M7pK}5ffigIY9j z>0!?I*&9p6I_ zASqN6frpbiiB=nY$A|#;+=HABhND7S-8KRXIQU^=uoJ0=K~CT}OOT+eZJtSgId%ts zbfR*$AVGhd78dD{78+23EB?Q7@^#|&fa@Yr^f3>(!+g2s2tz`Ac)0KD%_q^{eqr{m zSB3)NobS$rrlB?A9ZZ;SU;8{7@|fCPE)92x&4;ry@R1(l2P&L9S7^g$*y&dyS_S1b+e-grS3Mv5s>11 zsRVW{3TLhtnRCJo)z;H$4iv_cStou?gi6Y`E1wMZ9|Y@sjiVORk%2XZ_?k&03eh5= z_NQ(3Lh!mm-b-yy3{eE)S7~NcaTzRE*e&nFNEz;c9id{r&-AwB3#9T$AP@%1>Hr=( z){+j`Sww@@V$p^%kB>=;TmY{UUYi!sF=-tfMfdYHzaf75C8`{CFk@Mx3Og2vW{wZW zz(C98+p!Ix&{+$+lU-%avq`s`sTe-4VZ@EbAYsI*I2#5&=BBM(Ne?aQCA!TCol@U0&81opbt81M60FBz9C-Xn~EDHo9V~9g*3dITC zD42TFFVv$^O&N?IeUA4Sr9jj`k$yRT0w#*_+PmKtUIe!Hm(SPY;Nks=2?w78WOx%5 z0~N&_wwcNsc4Q-q(yNIHb3c(J{T!e~S7OzK+fy5YW*91(AW#G@1WCJJKRvK$R6VRH zL8y{OFcOOZ@+u3XBoilvF1lVBNy(6dhkx$fEMNPy)%*NHX5Z$1)|KQ-#I{n!arIF) z8T}s`CB1P(4@v@2$}5y9_h=_Hx~m>Zmx5+0TgZo53QFSwt3e1ZfIfqY;aB3 z6Nb7RhC|)*^J-umz4nvHgp{DTO6*F9ZuU)53{?CR%oZ{*e=#PYjQ($7p4S3fvj6LsJbC*{Y z=Fj}GT_gZnK3rS5v{YIz0@k90+W1BTdA~aNuio<H+@nau3 zj)u@QD;<~>xK0-xM146DBh`jaxoLafJ@>F1fZPj1sVjyHtL|Ej5b5SPOU6pKr`C^q2BN3S&=&JiWt88=me_@XtCJ!87I0f@+InL z>{M+F2ed}0-=zSIBy^QkjJmT8F21z_DCeg##-3j8A9)WMxXqCtdxVjUm{dQW9$qMkCH#mg%pe=$}^Ld(y%wRy+GmqazeVo;$8ZpVX5jM&XXA z3xJRKpz`ZC1FRX)w#nSvZcRY*!u~iRF*;tU15Ov_FarPEAW|p5V zpq#!G1Rl>1S9)oY{~MQGG|oQVp&=O=a@YxUT1{5?6oUNIWZ3Gn5;0s*?qrXUn+e$4 zbR7JIzj=tMvbBEVDb_@xmky4$#{5nJ5OT0J@owmMH<=9IV-fS!(Aq zik&dvnPt^l*V|H*c}8JHsi5dw8Wd7rjjcUOk0JBd9=6{?soEc#5{eKD`33h-EepkI zc#lAOPr1dIXXpFOwXwqjxqPF+i3v{R#UmVJ(C(85Hq&CvHMcPc+~GKJ+@$*QRaMmo!W7A-;{OML8H z4EopUXV&e(U-(?N@9DhxE5pq5Qd9~x>Ti;cQh*A|INGlC26)kF)oDPm5XyIxq6Odh z^=}6J&E>ceYJ!%IXXM&uRBhE!Wc=C%0v{sx_3c@@R4A~6#lfzf3>Q_Oj# zq>Ug;lS7PZVB3ecihWbOF&>%=xus+(M1xyhhb#E}Rxp(4_WUX7@~G=XDp^2V!?5E? zjV^$06xi`uf>PqLSdR1#1bC_Jlb(#IB}99r+3UOK{5h2C%*f513=MmUl$U-;D#KyU z<2gOr(gdYSzg+96?@tlIp0Ki?trrPeN7N><^MNBUwWMUh{{^}n2lX(1y!U;e@!<3dWr~qZ?@QCrSsBV8iOszFFKb;0G zP@u>3PP8=!$Y0bv-PXrpC+d zjA7X=;wY@fYJ9eg`RtSpq0ifUITL!YBo_$YmU~_Ch`bU^jDma9ktmV-xn#& zpoZ11snKqjYc6(QlKgH(Wj%1)4~FqiRvL(pYumhntwTpErJ;fcae9;?QWK%Yb#Vm3 z(nHNx75+TlhF3?l$7gP?RYIx&e@y#IWQ-+R^>4@3jl1Av*WH!n za1WyNavx#9HKw_%mi#b%0kPT+*Rh}H{iRtH2C_iIe#~gDmT&8d7jE0ddxP^^2nHd4 z$Wf~k9e7`v-utz)+H*dYc|y!d2NzNScv_$uN|^)=vJ@tz;Nn8)hzC8ggPKJTSjlEo zcd_mJpB8Xrt8ljr5{4ryrOsqfApQ6lJ0>|*&U?R36!>rjonr-BBJ{43qnt>M*1Als zj(QgTXmM3JV^}6P0)VCueDbTswj4*6Ns{onnA8B7S3nay1Q+;@M291{;+W!MA&+vEEP;SqQG>ff1A0@#Yg>MGbHVxnr!PnAAs5C+n04O{!?y(_qf@QReu<(&r|u2@(6^qDO)r$x27_)==ub{vcUhe*8xfT=Vdd8aL_0+c^0eSK5(9=&&#+?0O76C|EyxRTly`VyP$w2c@I4rOO6zOlZ* z`xamukMyfJJxbBCD?7H6s3(rFKq^txv}}$D4j9QHMg3?Ft{ZU3^muE51Vf2$P0KNjmA149-;(`-F{&%s&gK&~ z1Vix>aWQG{U#EH?bT?g`Us2xbWSx9>L`8R?BQPf# z?og#c#UE(!U$GU?x;$-|o+(KVi3%2V;8$ebif`yAdE@@ppJ-JZw)x#ezgtKau2mr| zfs}|K66>_pV1>?;*`{s%JO|*AC@q4|tYW|GbDjC^_xx}?w&Cn`B>YL9S+@pG_;+uJ ze+=69ZQe-kDx1Y49@p{D^RB8K=VspqvC#c{R8- zbn?|h(&dm`W&QF#x&SkyLf)V$9D%%$Hwi%*cye;`Wj*jsQ_cW=N)cSWc{fET73)n# zg9|@J>nbeNxY)xd17{4(cCjPmPe2XcU%N$D$6FzW_v~mtPxZttUHj2Uwm68I;N#Wd zpy6ND!Q{dibO(VhTDaQi1{_tLG=7lq-hdR`db3y z-nEhsvnB95g@n()b20!38)g{ zflE?AIA80@zvIsgu75=k1*T%Wk)XOoyypc&!kpQVY2=ly9J^-w_pFYB8A7w}>4O&p z2Z4AT+`Uvh_~obS=$~ahActgth0jV)K3Y~xjgg5T-2qV-iJYWzNXXx6V+#e!aFl_M zGNiDCEFHv4vwChmYQhYDT`^OE#>MO}jxKzrU)G`by$xo4UkvRRsxI48VlxLv2F^1j zD(T}|df||vwP(&cLV%7ZO;-BUYQ>(gWUpnSQ?KIe%@ZW$faD}?L%O=(ADYEM+>5UL zd!OgdTSUaHr}A~}Qnu&%0nJE=#I!-#!zt6(tb=LQ*OcG;bmimxlPc*)R`Olz=nSci zbvEolo;a?Tmv0ArT@EHLZ2X=N?5?6nvOIgtmP~<5Qp8=ju_f_ag=4ycJYDKI3YVXB z0F!>-cFo2v#N+xlk+kjx;NqTh zS}5yJTVS>vDkX5O6{BH5Tt|mYF0gnB@BVy~F;!EgCOU?0N9@c0S@Uk7&&pB(h*<}* z=hYNKFzN6v{qKay>l}gX1&;}<)Dr?OBtdk)(y~k{<>(#3xJ1XF=fo!*Gn14kLO^CU z#I=dy$vT@OAfu#b!X81d-;w!ZNSd$VG@ySeeMNkkjS(?vzcXl>g7{3d8>4;$TJqn0 z9Z(zX6mEDwYZQH&w8;n9hwpnG=44&qFnnbPJaZ7^BfQe|-TX^5zfnXI4xpaYqAq${ z(&?;s3lvpGQpcx6Y2S8F$As|}q#=bWuY}uC)xB+n5hpFdkJgclH9*TH&da;YwIO2y znfe2{wiNH_vW5F*2Ii;uY?Oo;IM>$v_B~Akzs(p=e8)#K#mI_~8>X`O-HDEp%!)5O z^C#*iG76^N&b%qTd;DW&F2k5sDkf%GI}jAX_IxD_6c56o$@kQzi9&k%@3ql*xvXu} zk5M=8Apc7ZKYsqC@38q1xE=3x$Q?!8Slyeg4Vnlt3cPprIdR1V8ut&E7|)TZC+HbW zaiQP);=($eEUbQ4C6Y)!zpYakw|Qd5+j#=MMyWq3d`1GZYSp#4eiktPOmy@VsqSX~ zcYNnU<~0dHA)Ao-Lp`ol@dP`r1FaoBLORZ{*6^#mRfNj_W|_|qvGY~dbQRv&#s$&5-Et+}dQ{)5PSE#?!jSgf zHdiF=*?rybPq~~x0E3)f-~n0N@8;%8hvZ~sCJylRBp1zaxP+uZ8hG=ope90?8If%; zOb!0tyVI2Jmq!6K)atv{UOKa@{tBa_C;gvf2c^{Lw0x#q8Fp2V-Yhk9_pC6*DSbE) zZFYZeEG_bEDXWlUt_ey`0+%NOOQ7mNtl03Te@`wIV+q|UZ5nblmD=dn`d{Z3ztMpq zq9;D!-%H@oV%c9?D(Z0`{6h!+m56rnWKdg-94(?oEv2Eu9?X5r8)KrBl5JTDG->3| zzbd4Uv6pcQDa`+omZRAg(7VrJk6GqfbdxmfKA}2H&floiyA}Axm6{Os!&~wtZVQ*3 z;qOc!K7swAerM_WcVd!{v8d1rzH7-bN<4h#o0^xaehDXA+qgV(n7V{Ig9>kF>npJi{N{*Liy&_ zfJzKfBeg*%%*9j~9b0%L{hUeJR23M=QK+5)WwE^u6qAQ!7d-Slx+?>{AOND5z>_0A z*imS=^q53DqgMZ1?^tR187)qwj&kD&5%O>*zie||6Y2uz`iOd?cjYLIj!{6rpw;L( zE=S!{Tfo;r)>K6tdvL@VDD175z|$juMbAU2NwhO+4G~n`2T)p*02`VLqoabKX5lR? zL2$Ec82wE|TK|6$PQ}@U(P>L-OE9~J(ceU*J7{jS8MUn%K_vK#z4Lc%DvIK`7=(n& z9WEgujkgpBCnv$Bv*6;S4i37Qu>q&>a0zZEp|w(f(8d<5A_xlNrsyONPJ(}u=X<{Q z1^?$7s{^LgidUx&J@r%vp|{!^=#XiZPT$cg=@b|zWrKTn7;Os}3m za$^6ZoiQu@7d$Sy=$&&u1fj({AEWodIVpSZ0$Q94!Fi8<5e3=M6Yc0HJM{IeL0i=7 z$f|(Rm_R-u`hc+!%?=g82V2PF#|NC~RdC^8?cB@H*6D0G9bEYQNbII;pEolX~`Drzb~VL3<3w8JOUIH01HWxmI!B-0{mJXKYG+U6rG&#tMg2d** z=O11lygFD{K>Gc@Z12aTK-Ud!{7n#; zqr+pRgoxf%+K0eGARh#Wzy$sRa4Td)CmMd4bD4Ixb3{lu3NBPXE+jIzxeTQBHVB)$ zsA@AcJLQm&wZ*Fs{A|9{OOBtOUeio^!=d7pc00T5xz~B&_q{{=>%?SX<{JD&M-SoVXhxI6U~;3r!q(Ol*TK3^!{PoAE6|@fLU+8H(M~ateE8T0 zAbr`efBJZs0wjiJJC7#k1rRVI5yudDB~(f0_4k7-R|eo?u?-x^=xG=s9S9+eE8FDO z2<9$$h83-YF@B(#hTcR+Yk9&MrZ4B+?Z|$fyLFw<smK~{xmiX? zNnC4mY8Pv0u7n8O3qgSoYx8;av!DqA(9Z&8!RCDT;5pyf2!%&CIF}~0=y-{G~u#fP;9RPvp8ajG> zZIaXU8i;6KCY@oHT+ys(r5!;;Q!Awc#&g&~ zHc&=TBfx*-EcAFOn^-}2e%V2_jm$s{f=Upk6ind^HyxU2BBEA@6IzN`sqOAphC5|# zkXe3)eT+#U6@yAP*qb^2I+H9$5F?yuV^MaUNHAd_dHD9=@K8n=B6EDOJdo|lwo;J@ z>1oNtiN;=&T6BIt(;3($-ieUZv0Q+{2vO659NZZ?0UqyW5nr)jZ&NCi6Di(!X3}g?!OrBms8q-l zJF-E?69jZH(_ws~8XSQy47SdW2%4_Bl3^i}K%|8+gn>r0`Te~~jtC$zKwQ#Il*BlW zuNMQ!0dS%nex2!%q)6<96`R`5YF93@kG`CM0WZ2%2)8UR}9Yo~j|Dq}KW?BH+VC$YyflqxubwF2oR2Kr_uj zgSR-~6bB_Kr#e9vmxVT8hjB8Mw+-lkx?i40?kc}GFwJbxF|+o)3p8Q0`0 zYKoQRZXC6Be=i}T_H=h>fyUG2I2Ls&<|ru70SI-=r`_GT+$t|i7}?w|yr(p8NI1kK`qu;+X1KVaNuzmJMU|IpuzY zsoEk+I*oEf_|nPLwaIp>iKwW=ff`VN?b3x0$*vBwPyck2=6KE7TYWMqmfSA+m z<)LQzH)D)O#bA&tgJq&o$#qvz?&UJ1T$FUn5mA3440%e7Bl0bc7=h5l!V4%W5e*5< zsR>e~H=qgq@@J$HfLfjX#fw|FZoTo5eFLgBaut+HATs&iRFc@;`AP3dPOXSIGHEG3 z0|FzGwnZ;}SHL88M>$Gu*UbdV34zT?_< zz7P_yac3ILvpFPE$SZ7tQsI@lnNrCX>GpyUuii>)z}c!NNbUMR67GT*;BFpA_O}Y$ zRyV!`E=7cY+k>;m7^Tb&PS2b^>W6Nx$rl|om{PF>2TFw{`_@qx=@I0NJ>Gy1*ss>k zXIF+G3gfXOomo`G0+on`2e7xX@DvsnEIfeBZfrzGawj*rNCXiJD`8_J#LmB1@k;tT zU;R?mG0NzVNrRtDiX4Nrm+7<=;a(ra04+czNyQTu%a@nq;1$ z=_5i8LP{iu;K*h{eNvzF%7fmaNO1iuKxvQcwgtO-=m+GvnNxqyP1T=Sy22qmcA}IF;p*6#g>vvX?9YMv|n-5~HL*PqAS{P;SSeqI}IhW{R>fHbgF^{GRwjb=K+xrjL-D5Q@l0o~c z{*&a{f2|=$_VbFq6KO0uGx9^nj!2k$4%Ok+6T<&6a@LA$ zr3#GdGVahWe`QLEQjQ2syIEF>JtPD0`1|YYwAU|IF$K%I8jI^l+Y|Ly4$Q5Q&gp2A zhN@I*{S(h$-&MRkUqS$Ix;hn75*|LRjwEzYD(goeF=;UKXrU0xDG?k9%7mL!YZnqw zG*3mVr|%-T8^Qb{^30_VnA-)dOsA8MC6fpqB3!- zRK{rM@>Hn|M;q&uQZ0ri;ot<7GG%I4y!_3naHT^{^tFzUb}!4Z{sbWCns%f$UlfQM z!sKEgg2=E>^{k*xEdYNAcoKa^()&UlH6BOu*6c5jy2_jnySLLovbziE%b|XdwJ#); zEmHb*yn&XJaOek|ic1N@o-#!dImed4$vG7rN=Y5Tfmm^+us>_x5zdIny?ZYTAR{6+ zSY2-r<5HG=tU;Rct^DRIO2rmGA`;kANDCJFHWD<+X-uOU+!ExF$3e5(s{jjOzY$%d zMJ&)^g#JJtgR~(%Tmrz-8Ih-ZOeub>K$vKmHeC!GD4E$R4O;QBr5bVn37G44}yf8_0lNMM4~>0 z1uxXXBA?t7BQJj5iuRspyo40+s-av{oz<{Bv9e7ia%%?<7U@1S3? zAH9d-?(i_FshP5bUOx~D4HzNR=@0BNT*+wB4k?EeDBu#*QNIkL-icpos1EdfLAn+* zB1mvBF~`$STMe}%(`T4DbL|TWNz9HP>gb_fQ5MSm7gh(+X=1A=N9<=9c zNE4R3R+}t;0ZluO)nnV~=Kk5gYLTY}2rKp`eHe&PQNzjv!KghN7EW-5m+)uc{gK->!+US*k>HO)j$oAY{mv%IGUA}@$K;&SaUHVpsmjT<)%Y#e-kfz@BfLV<`J zLeN1iiO<>OymhV-GKft)gACCOflQ2rj+8i>G-z|JvN4hCn_AaPov$6qt5>g5nxxRH zE>VXXZ&;yv6UF3aNumnpcBhxL_=QRA#8H}38{tQUw$Y?QY4{0?%+bab9OaJ z777!+M?eleYprC51gbPE93V{HuWlWlj5Zf=ZJCvXPMLyKBH8q++h;U#6{i);pd9|M z8In1*xIh9+ou8iS61pcMLvGgCt*i-VQcjs5Do5@;J6oM6P9 0 + has_prefixItems = len(prefixItems) > 0 + is_enum = type_info == "Enum" + is_list = type_info == "List" + is_value_type = type_def in value_types_defaults + + print("parsing field", item, "type infos", type_info, "type_def", type_def) + if type_info == "Struct": + print("is object") + for field_name in property_group.field_names: + print("field name", field_name) + # sub field + if isinstance(getattr(property_group, field_name), PropertyGroup): + sub_prop_group = getattr(property_group, field_name) + ref_name = properties[field_name]["type"]["$ref"].replace("#/$defs/", "") + sub_definition = type_infos[ref_name] + parse_field(item[field_name], sub_prop_group, sub_definition, field_name) + else: + setattr(property_group, field_name, item[field_name]) + + if has_prefixItems: + if len(property_group.field_names) == 1: + setattr(property_group, "0", item) # FIXME: not ideal + else: + for field_name in property_group.field_names: + setattr(property_group, field_name, item) + if is_enum: + if type_def == "object": + regexp = re.search('(^[^\(]+)(\((.*)\))', item) + chosen_variant = regexp.group(1) + chosen_variant_value = regexp.group(3).replace("'", '"').replace("(", "[").replace(")","]") + chosen_variant_value = json.loads(chosen_variant_value) + + # first set chosen selection + field_name = property_group.field_names[0] + setattr(property_group, field_name, chosen_variant) + + # thenlook for the information about the matching variant + sub_definition= None + for variant in definition["oneOf"]: + if variant["title"] == chosen_variant: + ref_name = variant["prefixItems"][0]["type"]["$ref"].replace("#/$defs/", "") + sub_definition = type_infos[ref_name] + break + variant_name = "variant_"+chosen_variant + if isinstance(getattr(property_group, variant_name), PropertyGroup): + sub_prop_group = getattr(property_group, variant_name) + parse_field(chosen_variant_value, sub_prop_group, sub_definition, variant_name) + else: + setattr(property_group, variant_name, chosen_variant_value) + else: + field_name = property_group.field_names[0] + setattr(property_group, field_name, item) + + if is_list: + print("is list") + + if is_value_type: + print("is value type") + + try: + parse_field(custom_property_value, property_group, definition, None) + except Exception as error: + print("failed to parse raw custom property data", error) diff --git a/tools/bevy_components/propGroups/operators.py b/tools/bevy_components/propGroups/operators.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/bevy_components/propGroups/process_component.py b/tools/bevy_components/propGroups/process_component.py new file mode 100644 index 0000000..c10d8ef --- /dev/null +++ b/tools/bevy_components/propGroups/process_component.py @@ -0,0 +1,95 @@ +import bpy +from bpy_types import PropertyGroup +from bpy.props import (PointerProperty) +from . import process_structs +from . import process_tupples +from . import process_enum +from . import process_list + +def process_component(registry, definition, update, extras=None, nesting = []): + component_name = definition['title'] + short_name = definition["short_name"] + type_info = definition["typeInfo"] if "typeInfo" in definition else None + type_def = definition["type"] if "type" in definition else None + properties = definition["properties"] if "properties" in definition else {} + prefixItems = definition["prefixItems"] if "prefixItems" in definition else [] + + has_properties = len(properties.keys()) > 0 + has_prefixItems = len(prefixItems) > 0 + is_enum = type_info == "Enum" + is_list = type_info == "List" + + # print("processing", short_name, component_name, type_def, type_info) + + __annotations__ = {} + tupple_or_struct = None + + with_properties = False + with_items = False + with_enum = False + with_list = False + + + if has_properties: + __annotations__ = __annotations__ | process_structs.process_structs(registry, definition, properties, update, nesting) + with_properties = True + tupple_or_struct = "struct" + + if has_prefixItems: + __annotations__ = __annotations__ | process_tupples.process_tupples(registry, definition, prefixItems, update, nesting) + with_items = True + tupple_or_struct = "tupple" + + if is_enum: + __annotations__ = __annotations__ | process_enum.process_enum(registry, definition, update, nesting) + with_enum = True + + if is_list: + __annotations__ = __annotations__ | process_list.process_list(registry, definition, update, nesting) + with_list= True + + field_names = [] + for a in __annotations__: + field_names.append(a) + + + extras = extras if extras is not None else { + "type_name": component_name + } + root_component = nesting[0] if len(nesting) > 0 else component_name + # print("DONE:",short_name,"__annotations__", __annotations__) + # print("") + # property_group_name = short_name+"_ui" + property_group_params = { + **extras, + '__annotations__': __annotations__, + 'tupple_or_struct': tupple_or_struct, + 'field_names': field_names, + **dict(with_properties = with_properties, with_items= with_items, with_enum= with_enum, with_list= with_list, short_name= short_name), + 'root_component': root_component + } + #FIXME: YIKES, but have not found another way: + """ Withouth this ; the following does not work + -BasicTest + - NestingTestLevel2 + -BasicTest => the registration & update callback of this one overwrites the first "basicTest" + have not found a cleaner workaround so far + """ + property_group_name = str(hash(str(nesting))) + short_name+"_ui" if len(nesting) > 0 else short_name+"_ui" + + (property_group_pointer, property_group_class) = property_group_from_infos(property_group_name, property_group_params) + # add our component propertyGroup to the registry + registry.register_component_propertyGroup(property_group_name, property_group_pointer) + # for practicality, we add an entry for a reverse lookup (short => long name, since we already have long_name => short_name with the keys of the raw registry) + registry.add_shortName_to_longName(short_name, component_name) + + return (property_group_pointer, property_group_class) + +def property_group_from_infos(property_group_name, property_group_parameters): + # print("creating property group", property_group_name) + property_group_class = type(property_group_name, (PropertyGroup,), property_group_parameters) + + bpy.utils.register_class(property_group_class) + property_group_pointer = PointerProperty(type=property_group_class) + + return (property_group_pointer, property_group_class) \ No newline at end of file diff --git a/tools/bevy_components/propGroups/process_enum.py b/tools/bevy_components/propGroups/process_enum.py new file mode 100644 index 0000000..efd316a --- /dev/null +++ b/tools/bevy_components/propGroups/process_enum.py @@ -0,0 +1,69 @@ +from bpy.props import (StringProperty) +from . import process_component + +def process_enum(registry, definition, update, nesting): + blender_property_mapping = registry.blender_property_mapping + short_name = definition["short_name"] + type_def = definition["type"] if "type" in definition else None + values = definition["oneOf"] + + nesting = nesting+ [short_name] + __annotations__ = {} + original_type_name = "enum" + + #print("processing enum", short_name, definition) + + if type_def == "object": + labels = [] + additional_annotations = {} + for item in values: + item_name = item["title"] + item_short_name = item["short_name"] if "short_name" in item else item_name + variant_name = "variant_"+item_short_name + labels.append(item_name) + + if "prefixItems" in item: + #print("tupple variant in enum", short_name, item) + registry.add_custom_type(item_short_name, item) + (sub_component_group, _) = process_component.process_component(registry, item, update, {"nested": True}, nesting) + additional_annotations[variant_name] = sub_component_group + elif "properties" in item: + #print("struct variant in enum", short_name, item) + registry.add_custom_type(item_short_name, item) + (sub_component_group, _) = process_component.process_component(registry, item, update, {"nested": True}, nesting) + additional_annotations[variant_name] = sub_component_group + else: # for the cases where it's neither a tupple nor a structs: FIXME: not 100% sure of this + #print("other variant in enum", short_name) + annotations = {"variant_"+item_name: StringProperty(default="--------")} + additional_annotations = additional_annotations | annotations + + items = tuple((e, e, e) for e in labels) + property_name = short_name + + blender_property_def = blender_property_mapping[original_type_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + items=items, + update= update +) + __annotations__[property_name] = blender_property + + for a in additional_annotations: + __annotations__[a] = additional_annotations[a] + # enum_value => what field to display + # a second field + property for the "content" of the enum + else: + items = tuple((e, e, "") for e in values) + property_name = short_name + + blender_property_def = blender_property_mapping[original_type_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + items=items, + update= update + ) + __annotations__[property_name] = blender_property + + return __annotations__ diff --git a/tools/bevy_components/propGroups/process_list.py b/tools/bevy_components/propGroups/process_list.py new file mode 100644 index 0000000..ed332ff --- /dev/null +++ b/tools/bevy_components/propGroups/process_list.py @@ -0,0 +1,33 @@ +from bpy.props import (StringProperty, IntProperty, CollectionProperty) +from .utils import generate_wrapper_propertyGroup +from . import process_component + +def process_list(registry, definition, update, nesting=[]): + value_types_defaults = registry.value_types_defaults + type_infos = registry.type_infos + + short_name = definition["short_name"] + ref_name = definition["items"]["type"]["$ref"].replace("#/$defs/", "") + + item_definition = type_infos[ref_name] + item_long_name = item_definition["title"] + is_item_value_type = item_long_name in value_types_defaults + + property_group_class = None + #if the content of the list is a unit type, we need to generate a fake wrapper, otherwise we cannot use layout.prop(group, "propertyName") as there is no propertyName ! + if is_item_value_type: + property_group_class = generate_wrapper_propertyGroup(short_name, item_long_name, definition["items"]["type"]["$ref"],registry, update) + else: + (_, list_content_group_class) = process_component.process_component(registry, item_definition, update, {"nested": True, "type_name": item_long_name}, nesting) + property_group_class = list_content_group_class + + nesting = nesting+[short_name] + item_collection = CollectionProperty(type=property_group_class) + + __annotations__ = { + "list": item_collection, + "list_index": IntProperty(name = "Index for list", default = 0, update=update), + "type_name_short": StringProperty(default=short_name) + } + + return __annotations__ \ No newline at end of file diff --git a/tools/bevy_components/propGroups/process_structs.py b/tools/bevy_components/propGroups/process_structs.py new file mode 100644 index 0000000..89ac7e7 --- /dev/null +++ b/tools/bevy_components/propGroups/process_structs.py @@ -0,0 +1,46 @@ +from bpy.props import (StringProperty) +from . import process_component + +def process_structs(registry, definition, properties, update, nesting): + value_types_defaults = registry.value_types_defaults + blender_property_mapping = registry.blender_property_mapping + type_infos = registry.type_infos + short_name = definition["short_name"] + + __annotations__ = {} + default_values = {} + nesting = nesting + [short_name] + + for property_name in properties.keys(): + ref_name = properties[property_name]["type"]["$ref"].replace("#/$defs/", "") + + if ref_name in type_infos: + original = type_infos[ref_name] + original_type_name = original["title"] + is_value_type = original_type_name in value_types_defaults + value = value_types_defaults[original_type_name] if is_value_type else None + default_values[property_name] = value + + if is_value_type: + if original_type_name in blender_property_mapping: + blender_property_def = blender_property_mapping[original_type_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + default = value, + update = update + ) + __annotations__[property_name] = blender_property + else: + original_long_name = original["title"] + (sub_component_group, _) = process_component.process_component(registry, original, update, {"nested": True, "type_name": original_long_name}, nesting) + __annotations__[property_name] = sub_component_group + # if there are sub fields, add an attribute "sub_fields" possibly a pointer property ? or add a standard field to the type , that is stored under "attributes" and not __annotations (better) + else: + # component not found in type_infos, generating placeholder + __annotations__[property_name] = StringProperty(default="N/A") + registry.add_missing_typeInfo(ref_name) + # the root component also becomes invalid (in practice it is not always a component, but good enough) + registry.add_invalid_component(nesting[0]) + + return __annotations__ diff --git a/tools/bevy_components/propGroups/process_tupples.py b/tools/bevy_components/propGroups/process_tupples.py new file mode 100644 index 0000000..feafcc2 --- /dev/null +++ b/tools/bevy_components/propGroups/process_tupples.py @@ -0,0 +1,53 @@ +from bpy.props import (StringProperty) +from . import process_component + +def process_tupples(registry, definition, prefixItems, update, nesting=[]): + value_types_defaults = registry.value_types_defaults + blender_property_mapping = registry.blender_property_mapping + type_infos = registry.type_infos + short_name = definition["short_name"] + + nesting = nesting+[short_name] + __annotations__ = {} + + default_values = [] + prefix_infos = [] + for index, item in enumerate(prefixItems): + ref_name = item["type"]["$ref"].replace("#/$defs/", "") + + property_name = str(index)# we cheat a bit, property names are numbers here, as we do not have a real property name + + if ref_name in type_infos: + original = type_infos[ref_name] + original_type_name = original["title"] + is_value_type = original_type_name in value_types_defaults + + value = value_types_defaults[original_type_name] if is_value_type else None + default_values.append(value) + prefix_infos.append(original) + + if is_value_type: + if original_type_name in blender_property_mapping: + blender_property_def = blender_property_mapping[original_type_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + default=value, + update= update + ) + + __annotations__[property_name] = blender_property + else: + original_long_name = original["title"] + (sub_component_group, _) = process_component.process_component(registry, original, update, {"nested": True, "type_name": original_long_name}, nesting) + __annotations__[property_name] = sub_component_group + else: + # component not found in type_infos, generating placeholder + __annotations__[property_name] = StringProperty(default="N/A") + registry.add_missing_typeInfo(ref_name) + # the root component also becomes invalid (in practice it is not always a component, but good enough) + registry.add_invalid_component(nesting[0]) + + + return __annotations__ + diff --git a/tools/bevy_components/propGroups/prop_groups.py b/tools/bevy_components/propGroups/prop_groups.py new file mode 100644 index 0000000..35c0302 --- /dev/null +++ b/tools/bevy_components/propGroups/prop_groups.py @@ -0,0 +1,38 @@ +import bpy +from .conversions import property_group_value_to_custom_property_value +from .process_component import process_component +from .utils import update_calback_helper + +## main callback function, fired whenever any property changes, no matter the nesting level +def update_component(self, context, definition, component_name): + registry = bpy.context.window_manager.components_registry + current_object = bpy.context.object + update_disabled = current_object["__disable__update"] if "__disable__update" in current_object else False + if update_disabled: + return + print("") + print("update in component", component_name, self) + components_in_object = current_object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == component_name, components_in_object), None) + if component_meta != None: + self = getattr(component_meta, component_name+"_ui") + # we use our helper to set the values + context.object[component_name] = property_group_value_to_custom_property_value(self, definition, registry, None) + + +def generate_propertyGroups_for_components(): + registry = bpy.context.window_manager.components_registry + if registry.type_infos == None: + registry.load_type_infos() + + type_infos = registry.type_infos + + for component_name in type_infos: + definition = type_infos[component_name] + short_name = definition["short_name"] + is_component = definition['isComponent'] if "isComponent" in definition else False + root_property_name = short_name if is_component else None + process_component(registry, definition, update_calback_helper(definition, update_component, root_property_name), None, []) + + # if we had to add any wrapper types on the fly, process them now + registry.process_custom_types() \ No newline at end of file diff --git a/tools/bevy_components/propGroups/utils.py b/tools/bevy_components/propGroups/utils.py new file mode 100644 index 0000000..b784962 --- /dev/null +++ b/tools/bevy_components/propGroups/utils.py @@ -0,0 +1,60 @@ +# helper function that returns a lambda, used for the PropertyGroups update function +def update_calback_helper(definition, update, component_name_override): + return lambda self, context: update(self, context, definition, component_name_override) + +import bpy +from bpy.props import (StringProperty) +from bpy_types import PropertyGroup + +# this helper creates a "fake"/wrapper property group that is NOT a real type in the registry +# usefull for things like value types in list items etc +def generate_wrapper_propertyGroup(short_name, item_long_name, definition, registry, update): + value_types_defaults = registry.value_types_defaults + blender_property_mapping = registry.blender_property_mapping + is_item_value_type = item_long_name in value_types_defaults + + wrapper_name = "wrapper_" + short_name + + wrapper_definition = { + "isComponent": False, + "isResource": False, + "items": False, + "prefixItems": [ + { + "type": { + "$ref": definition + } + } + ], + "short_name": wrapper_name, + "title": wrapper_name, + "type": "array", + "typeInfo": "TupleStruct" + } + registry.add_custom_type(wrapper_name, wrapper_definition) + + blender_property = StringProperty(default="", update=update) + if item_long_name in blender_property_mapping: + value = value_types_defaults[item_long_name] if is_item_value_type else None + blender_property_def = blender_property_mapping[item_long_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = "property_name", + default = value, + update = update + ) + + wrapper_annotations = { + '0' : blender_property + } + property_group_params = { + '__annotations__': wrapper_annotations, + 'tupple_or_struct': "tupple", + 'field_names': ['0'], + **dict(with_properties = False, with_items= True, with_enum= False, with_list= False, short_name= wrapper_name, type_name=wrapper_name), + #'root_component': root_component + } + property_group_class = type(wrapper_name, (PropertyGroup,), property_group_params) + bpy.utils.register_class(property_group_class) + + return property_group_class \ No newline at end of file diff --git a/tools/bevy_components/registry/__init__.py b/tools/bevy_components/registry/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/bevy_components/registry/operators.py b/tools/bevy_components/registry/operators.py new file mode 100644 index 0000000..58d124d --- /dev/null +++ b/tools/bevy_components/registry/operators.py @@ -0,0 +1,84 @@ +import os +import bpy +from bpy_types import (Operator) +from bpy.props import (StringProperty) +from bpy_extras.io_utils import ImportHelper + +from ..helpers import upsert_settings +from ..components.metadata import apply_propertyGroup_values_to_object_customProperties, ensure_metadata_for_all_objects +from ..components.operators import GenerateComponent_From_custom_property_Operator +from ..propGroups.prop_groups import generate_propertyGroups_for_components + +class ReloadRegistryOperator(Operator): + """Reloads registry (schema file) from disk, generates propertyGroups for components & ensures all objects have metadata """ + bl_idname = "object.reload_registry" + bl_label = "Reload Registry" + bl_options = {"UNDO"} + + component_type: StringProperty( + name="component_type", + description="component type to add", + ) + + def execute(self, context): + print("reload registry") + context.window_manager.components_registry.load_schema() + generate_propertyGroups_for_components() + print("") + print("") + print("") + ensure_metadata_for_all_objects() + #add_metadata_to_components_without_metadata(context.object) + + return {'FINISHED'} + +class COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL(Operator): + """Apply registry to ALL objects: update the custom property values of all objects based on their definition, if any""" + bl_idname = "object.refresh_custom_properties_all" + bl_label = "Apply Registry to all objects" + bl_options = {"UNDO"} + + def execute(self, context): + print("apply registry to all") + #context.window_manager.components_registry.load_schema() + for object in bpy.data.objects: + apply_propertyGroup_values_to_object_customProperties(object) + + return {'FINISHED'} + +class COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT(Operator): + """Apply registry to CURRENT object: update the custom property values of all objects based on their definition, if any""" + bl_idname = "object.refresh_custom_properties_current" + bl_label = "Apply Registry to current object" + bl_options = {"UNDO"} + + def execute(self, context): + print("apply registry to current object") + object = context.object + apply_propertyGroup_values_to_object_customProperties(object) + return {'FINISHED'} + +class OT_OpenFilebrowser(Operator, ImportHelper): + """Browse for registry json file""" + bl_idname = "generic.open_filebrowser" + bl_label = "Open the file browser" + + filter_glob: StringProperty( + default='*.json', + options={'HIDDEN'} + ) + def execute(self, context): + """Do something with the selected file(s).""" + #filename, extension = os.path.splitext(self.filepath) + file_path = bpy.data.filepath + # Get the folder + folder_path = os.path.dirname(file_path) + relative_path = os.path.relpath(self.filepath, folder_path) + + registry = context.window_manager.components_registry + registry.schemaPath = relative_path + + upsert_settings(registry.settings_save_path, {"schemaPath": relative_path}) + + return {'FINISHED'} + diff --git a/tools/bevy_components/registry/registry.py b/tools/bevy_components/registry/registry.py new file mode 100644 index 0000000..063b65d --- /dev/null +++ b/tools/bevy_components/registry/registry.py @@ -0,0 +1,216 @@ +import bpy +import json +import os +from pathlib import Path +from bpy_types import (PropertyGroup) +from bpy.props import (StringProperty, BoolProperty, FloatProperty, FloatVectorProperty, IntProperty, IntVectorProperty, EnumProperty, PointerProperty, CollectionProperty) +from ..components.metadata import ComponentInfos + +# helper class to store missing bevy types information +class MissingBevyType(bpy.types.PropertyGroup): + type_name: bpy.props.StringProperty( + name="type", + ) + +# this is where we store the information for all available components +class ComponentsRegistry(PropertyGroup): + + settings_save_path = ".bevy_components_settings" # where to store data in bpy.texts + + schemaPath: bpy.props.StringProperty( + name="schema path", + description="path to the registry schema file", + default="registry.json" + ) + + registry: bpy.props. StringProperty( + name="registry", + description="component registry" + ) + + missing_type_infos: StringProperty( + name="missing type infos", + description="unregistered/missing type infos" + ) + + missing_types_list: CollectionProperty(name="missing types list", type=MissingBevyType) + missing_types_list_index: IntProperty(name = "Index for missing types list", default = 0) + + blender_property_mapping = { + "bool": dict(type=BoolProperty, presets=dict()), + + "u8": dict(type=IntProperty, presets=dict(min=0, max=255)), + "u16": dict(type=IntProperty, presets=dict(min=0, max=65535)), + "u32": dict(type=IntProperty, presets=dict(min=0)), + "u64": dict(type=IntProperty, presets=dict(min=0)), + "u128": dict(type=IntProperty, presets=dict(min=0)), + "u64": dict(type=IntProperty, presets=dict(min=0)), + "usize": dict(type=IntProperty, presets=dict(min=0)), + + "i8": dict(type=IntProperty, presets=dict()), + "i16":dict(type=IntProperty, presets=dict()), + "i32":dict(type=IntProperty, presets=dict()), + "i64":dict(type=IntProperty, presets=dict()), + "i128":dict(type=IntProperty, presets=dict()), + + "f32": dict(type=FloatProperty, presets=dict()), + "f64": dict(type=FloatProperty, presets=dict()), + + "glam::Vec2": {"type": FloatVectorProperty, "presets": dict(size = 2) }, + "glam::DVec2": {"type": FloatVectorProperty, "presets": dict(size = 2) }, + "glam::UVec2": {"type": FloatVectorProperty, "presets": dict(size = 2) }, + + "glam::Vec3": {"type": FloatVectorProperty, "presets": {"size":3} }, + "glam::Vec3A":{"type": FloatVectorProperty, "presets": {"size":3} }, + "glam::DVec3":{"type": FloatVectorProperty, "presets": {"size":3} }, + "glam::UVec3":{"type": FloatVectorProperty, "presets": {"size":3} }, + + "glam::Vec4": {"type": FloatVectorProperty, "presets": {"size":4} }, + "glam::Vec4A": {"type": FloatVectorProperty, "presets": {"size":4} }, + "glam::DVec4": {"type": FloatVectorProperty, "presets": {"size":4} }, + "glam::UVec4":{"type": FloatVectorProperty, "presets": {"size":4, "min":0.0} }, + + "glam::Quat": {"type": FloatVectorProperty, "presets": {"size":4} }, + + "bevy_render::color::Color": dict(type = FloatVectorProperty, presets=dict(subtype='COLOR', size=4)), + + "char": dict(type=StringProperty, presets=dict()), + "str": dict(type=StringProperty, presets=dict()), + "alloc::string::String": dict(type=StringProperty, presets=dict()), + "enum": dict(type=EnumProperty, presets=dict()), + + #"alloc::vec::Vec": dict(type=CollectionProperty, presets=dict(type=PointerProperty(StringProperty))), #FIXME: we need more generic stuff + } + + + value_types_defaults = { + "string":" ", + "boolean": True, + "float": 0.0, + "uint": 0, + "int":0, + + # todo : we are re-doing the work of the bevy /rust side here, but it seems more pratical to alway look for the same field name on the blender side for matches + "bool": True, + + "u8": 0, + "u16":0, + "u32":0, + "u64":0, + "u128":0, + + "i8": 0, + "i16":0, + "i32":0, + "i64":0, + "i128":0, + + "f32": 0.0, + "f64":0.0, + + "char": " ", + "str": " ", + "alloc::string::String": " ", + + "glam::Vec2": [0.0, 0.0], + "glam::DVec2": [0.0, 0.0], + "glam::UVec2": [0, 0], + + "glam::Vec3": [0.0, 0.0, 0.0], + "glam::Vec3A":[0.0, 0.0, 0.0], + "glam::UVec3": [0, 0, 0], + + "glam::Vec4": [0.0, 0.0, 0.0, 0.0], + "glam::DVec4": [0.0, 0.0, 0.0, 0.0], + "glam::UVec4": [0, 0, 0, 0], + + "glam::Quat": [0.0, 0.0, 0.0, 0.0], + + "bevy_render::color::Color": [1.0, 1.0, 0.0, 1.0], + } + + type_infos = None + type_infos_missing = [] + component_propertyGroups = {} + short_names_to_long_names = {} + + + @classmethod + def register(cls): + bpy.types.WindowManager.components_registry = PointerProperty(type=ComponentsRegistry) + + @classmethod + def unregister(cls): + for propgroup_name in cls.component_propertyGroups.keys(): + try: + delattr(ComponentInfos, propgroup_name) + print("unregistered propertyGroup", propgroup_name) + except Exception as error: + pass + #print("failed to remove", error, "ComponentInfos") + + del bpy.types.WindowManager.components_registry + + def load_schema(self): + # cleanup missing types list + self.missing_types_list.clear() + self.type_infos = None + self.type_infos_missing.clear() + file_path = bpy.data.filepath + + # Get the folder + folder_path = os.path.dirname(file_path) + path = os.path.join(folder_path, self.schemaPath) + + f = Path(bpy.path.abspath(path)) # make a path object of abs path + with open(path) as f: + data = json.load(f) + defs = data["$defs"] + self.registry = json.dumps(defs) # FIXME:meh ? + + # we load the json once, so we do not need to do it over & over again + def load_type_infos(self): + ComponentsRegistry.type_infos = json.loads(self.registry) + + # we keep a list of component propertyGroup around + def register_component_propertyGroup(self, name, propertyGroup): + self.component_propertyGroups[name] = propertyGroup + + #for practicality, we add an entry for a reverse lookup (short => long name, since we already have long_name => short_name with the keys of the raw registry) + def add_shortName_to_longName(self, short_name, long_name): + self.short_names_to_long_names[short_name] = long_name + + # to be able to give the user more feedback on any missin/unregistered types in their schema file + def add_missing_typeInfo(self, type_name): + if not type_name in self.type_infos_missing: + self.type_infos_missing.append(type_name) + setattr(self, "missing_type_infos", str(self.type_infos_missing)) + item = self.missing_types_list.add() + item.type_name = type_name + + custom_types_to_add = {} + def add_custom_type(self, type_name, type_definition): + self.custom_types_to_add[type_name] = type_definition + + def process_custom_types(self): + for type_name in self.custom_types_to_add: + self.type_infos[type_name] = self.custom_types_to_add[type_name] + self.custom_types_to_add.clear() + + invalid_components = [] + def add_invalid_component(self, component_name): + self.invalid_components.append(component_name) +""" + object[component_definition.name] = 0.5 + property_manager = object.id_properties_ui(component_definition.name) + property_manager.update(min=-10, max=10, soft_min=-5, soft_max=5) + + print("property_manager", property_manager) + + object[component_definition.name] = [0.8,0.2,1.0] + property_manager = object.id_properties_ui(component_definition.name) + property_manager.update(subtype='COLOR') + + #IDPropertyUIManager + #rna_ui = object[component_definition.name].get('_RNA_UI') +""" \ No newline at end of file diff --git a/tools/bevy_components/registry/ui.py b/tools/bevy_components/registry/ui.py new file mode 100644 index 0000000..5cced14 --- /dev/null +++ b/tools/bevy_components/registry/ui.py @@ -0,0 +1,116 @@ +import bpy +from bpy_types import (UIList) +from .operators import(OT_OpenFilebrowser, ReloadRegistryOperator, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT) + +class BEVY_COMPONENTS_PT_Configuration(bpy.types.Panel): + bl_idname = "BEVY_COMPONENTS_PT_Configuration" + bl_label = "Configuration" + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = "Bevy Components" + bl_context = "objectmode" + bl_parent_id = "BEVY_COMPONENTS_PT_MainPanel" + bl_options = {'DEFAULT_CLOSED'} + bl_description = "list of missing/unregistered type from the bevy side" + + def draw(self, context): + layout = self.layout + registry = context.window_manager.components_registry + selected_object = context.selected_objects[0] if len(context.selected_objects) > 0 else None + + row = layout.row() + col = row.column() + col.enabled = False + col.prop(registry, "schemaPath", text="Registry Schema path") + col = row.column() + col.operator(OT_OpenFilebrowser.bl_idname, text="Browse for registry schema file (json)") + + layout.separator() + layout.operator(ReloadRegistryOperator.bl_idname, text="reload registry" , icon="FILE_REFRESH") + + layout.separator() + layout.separator() + + row = layout.row() + row.label(text="WARNING ! The following operations will overwrite your existing custom properties if they have matching types on the bevy side !") + row.alert = True + + row = layout.row() + row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT.bl_idname, text="update custom properties of current object" , icon="FILE_REFRESH") + row.enabled = registry.type_infos != None and selected_object is not None + + layout.separator() + row = layout.row() + row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL.bl_idname, text="update custom properties of ALL objects" , icon="FILE_REFRESH") + row.enabled = registry.type_infos != None + + +class BEVY_COMPONENTS_PT_MissingTypesPanel(bpy.types.Panel): + """panel listing all the missing bevy types in the schema""" + bl_idname = "BEVY_COMPONENTS_PT_MissingTypesPanel" + bl_label = "Bevy Missing/Unregistered Types" + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_category = "Bevy Components" + bl_context = "objectmode" + bl_parent_id = "BEVY_COMPONENTS_PT_MainPanel" + bl_options = {'DEFAULT_CLOSED'} + bl_description = "list of missing/unregistered type from the bevy side" + + def draw(self, context): + layout = self.layout + registry = bpy.context.window_manager.components_registry + + layout.label(text="Missing types ") + layout.template_list("MISSING_TYPES_UL_List", "Missing types list", registry, "missing_types_list", registry, "missing_types_list_index") + + +class MISSING_TYPES_UL_List(UIList): + """Missing components UIList.""" + + use_filter_name_reverse: bpy.props.BoolProperty( + name="Reverse Name", + default=False, + options=set(), + description="Reverse name filtering", + ) + + use_order_name = bpy.props.BoolProperty(name="Name", default=False, options=set(), + description="Sort groups by their name (case-insensitive)") + + def filter_items__(self, context, data, propname): + """Filter and order items in the list.""" + # We initialize filtered and ordered as empty lists. Notice that # if all sorting and filtering is disabled, we will return # these empty. + filtered = [] + ordered = [] + items = getattr(data, propname) + + helper_funcs = bpy.types.UI_UL_list + + + print("filter, order", items, self, dict(self)) + if self.filter_name: + print("ssdfs", self.filter_name) + filtered= helper_funcs.filter_items_by_name(self.filter_name, self.bitflag_filter_item, items, "type_name", reverse=self.use_filter_name_reverse) + + if not filtered: + filtered = [self.bitflag_filter_item] * len(items) + + if self.use_order_name: + ordered = helper_funcs.sort_items_by_name(items, "name") + + + return filtered, ordered + + + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + if self.layout_type in {'DEFAULT', 'COMPACT'}: + row = layout.row() + #row.enabled = False + #row.alert = True + row.prop(item, "type_name", text="") + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + row = layout.row() + row.prop(item, "type_name", text="") diff --git a/tools/gltf_auto_export/README.md b/tools/gltf_auto_export/README.md index fb577bd..61076b5 100644 --- a/tools/gltf_auto_export/README.md +++ b/tools/gltf_auto_export/README.md @@ -120,6 +120,12 @@ This issue has been resolved in v0.9. - materials path: where to export materials to + - Legacy mode for bevy: the export of custom properties is slightly different + when using bevy_gltf_components or bevy_gltf_blueprints with ```legacy_mode``` turned on (the default currently), toggle this on to keep using the older variant + + > tldr: legacy mode in this add on should match your use of legacy mode on the Bevy side + > if you use the ```bevy_components``` add-on **legacy mode** should be turned **OFF** + * and your standard gltf export parameters in the **gltf** panel ![blender addon use2](./docs/blender_addon_use2.png) diff --git a/tools/gltf_auto_export/auto_export/export_blueprints.py b/tools/gltf_auto_export/auto_export/export_blueprints.py index 1ad7ba2..836a6f2 100644 --- a/tools/gltf_auto_export/auto_export/export_blueprints.py +++ b/tools/gltf_auto_export/auto_export/export_blueprints.py @@ -22,13 +22,12 @@ def export_collections(collections, folder_path, library_scene, addon_prefs, glt export_settings['export_materials'] = 'PLACEHOLDER' collection = bpy.data.collections[collection_name] - collection_instances_combine_mode = getattr(addon_prefs, "collection_instances_combine_mode") generate_and_export( addon_prefs, temp_scene_name="__temp_scene_"+collection.name, export_settings=export_settings, gltf_output_path=gltf_output_path, - tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(collection, temp_collection, library_collections=library_collections, collection_instances_combine_mode= collection_instances_combine_mode), + tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(collection, temp_collection, library_collections=library_collections, addon_prefs=addon_prefs), tempScene_cleaner= lambda temp_scene, params: clear_hollow_scene(original_root_collection=collection, temp_scene=temp_scene, **params) ) # reset active collection to the one we save before diff --git a/tools/gltf_auto_export/auto_export/export_main_scenes.py b/tools/gltf_auto_export/auto_export/export_main_scenes.py index 78a8271..8bdb018 100644 --- a/tools/gltf_auto_export/auto_export/export_main_scenes.py +++ b/tools/gltf_auto_export/auto_export/export_main_scenes.py @@ -17,7 +17,6 @@ def export_main_scene(scene, folder_path, addon_prefs, library_collections): export_output_folder = getattr(addon_prefs,"export_output_folder") export_blueprints = getattr(addon_prefs,"export_blueprints") export_separate_dynamic_and_static_objects = getattr(addon_prefs, "export_separate_dynamic_and_static_objects") - collection_instances_combine_mode = getattr(addon_prefs, "collection_instances_combine_mode") gltf_output_path = os.path.join(folder_path, export_output_folder, scene.name) export_settings = { **gltf_export_preferences, @@ -38,7 +37,7 @@ def export_main_scene(scene, folder_path, addon_prefs, library_collections): temp_scene_name="__temp_scene", export_settings=export_settings, gltf_output_path=gltf_output_path, - tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(scene.collection, temp_collection, library_collections=library_collections, collection_instances_combine_mode= collection_instances_combine_mode, filter=is_object_static), + tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(scene.collection, temp_collection, library_collections=library_collections, filter=is_object_static, addon_prefs=addon_prefs), tempScene_cleaner= lambda temp_scene, params: clear_hollow_scene(original_root_collection=scene.collection, temp_scene=temp_scene, **params) ) @@ -49,7 +48,7 @@ def export_main_scene(scene, folder_path, addon_prefs, library_collections): temp_scene_name="__temp_scene", export_settings=export_settings, gltf_output_path=gltf_output_path, - tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(scene.collection, temp_collection, library_collections=library_collections, collection_instances_combine_mode= collection_instances_combine_mode, filter=is_object_dynamic), + tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(scene.collection, temp_collection, library_collections=library_collections, filter=is_object_dynamic, addon_prefs=addon_prefs), tempScene_cleaner= lambda temp_scene, params: clear_hollow_scene(original_root_collection=scene.collection, temp_scene=temp_scene, **params) ) @@ -60,7 +59,7 @@ def export_main_scene(scene, folder_path, addon_prefs, library_collections): temp_scene_name="__temp_scene", export_settings=export_settings, gltf_output_path=gltf_output_path, - tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(scene.collection, temp_collection, library_collections=library_collections, collection_instances_combine_mode= collection_instances_combine_mode), + tempScene_filler= lambda temp_collection: copy_hollowed_collection_into(scene.collection, temp_collection, library_collections=library_collections, addon_prefs=addon_prefs), tempScene_cleaner= lambda temp_scene, params: clear_hollow_scene(original_root_collection=scene.collection, temp_scene=temp_scene, **params) ) diff --git a/tools/gltf_auto_export/auto_export/operators.py b/tools/gltf_auto_export/auto_export/operators.py index bed7d28..2c6048d 100644 --- a/tools/gltf_auto_export/auto_export/operators.py +++ b/tools/gltf_auto_export/auto_export/operators.py @@ -32,7 +32,9 @@ class AutoExportGLTF(Operator, AutoExportGltfAddonPreferences, ExportHelper): 'export_materials_library', 'export_materials_path', - 'export_scene_settings'] + 'export_scene_settings' + 'export_legacy_mode' + ] @classmethod def register(cls): diff --git a/tools/gltf_auto_export/auto_export/preferences.py b/tools/gltf_auto_export/auto_export/preferences.py index 1b566f2..2172cf0 100644 --- a/tools/gltf_auto_export/auto_export/preferences.py +++ b/tools/gltf_auto_export/auto_export/preferences.py @@ -22,6 +22,7 @@ AutoExportGltfPreferenceNames = [ 'export_marked_assets', 'collection_instances_combine_mode', 'export_separate_dynamic_and_static_objects', + 'export_legacy_mode', 'export_materials_library', 'export_materials_path', @@ -148,6 +149,11 @@ class AutoExportGltfAddonPreferences(AddonPreferences): default=False ) + export_legacy_mode: BoolProperty( + name='Legacy mode for Bevy', + description='Toggle this if you want to be compatible with bevy_gltf_blueprints/components < 0.8', + default=True + ) main_scenes: CollectionProperty(name="main scenes", type=CUSTOM_PG_sceneName) main_scenes_index: IntProperty(name = "Index for main scenes list", default = 0) diff --git a/tools/gltf_auto_export/helpers/helpers_scenes.py b/tools/gltf_auto_export/helpers/helpers_scenes.py index fb0ad70..81bde54 100644 --- a/tools/gltf_auto_export/helpers/helpers_scenes.py +++ b/tools/gltf_auto_export/helpers/helpers_scenes.py @@ -3,11 +3,17 @@ from .helpers_collections import (set_active_collection) from .object_makers import (make_empty) # copies the contents of a collection into another one while replacing library instances with empties -def copy_hollowed_collection_into(source_collection, destination_collection, parent_empty=None, filter=None, collection_instances_combine_mode=None, library_collections=[]): +def copy_hollowed_collection_into(source_collection, destination_collection, parent_empty=None, filter=None, library_collections=[], addon_prefs={}): + collection_instances_combine_mode = getattr(addon_prefs, "collection_instances_combine_mode") + legacy_mode = getattr(addon_prefs, "export_legacy_mode") + root_objects = [] special_properties= { # to be able to reset any special property afterwards "combine": [], } + + collection_instances_combine_mode= collection_instances_combine_mode + for object in source_collection.objects: if filter is not None and filter(object) is False: continue @@ -22,7 +28,7 @@ def copy_hollowed_collection_into(source_collection, destination_collection, par object.name = original_name + "____bak" empty_obj = make_empty(original_name, object.location, object.rotation_euler, object.scale, destination_collection) """we inject the collection/blueprint name, as a component called 'BlueprintName', but we only do this in the empty, not the original object""" - empty_obj['BlueprintName'] = '"'+collection_name+'"' + empty_obj['BlueprintName'] = '"'+collection_name+'"' if legacy_mode else '("'+collection_name+'")' empty_obj['SpawnHere'] = '' for k, v in object.items(): diff --git a/tools/gltf_auto_export/ui/main.py b/tools/gltf_auto_export/ui/main.py index 925d004..828cf57 100644 --- a/tools/gltf_auto_export/ui/main.py +++ b/tools/gltf_auto_export/ui/main.py @@ -68,6 +68,7 @@ class GLTF_PT_auto_export_root(bpy.types.Panel): layout.prop(operator, 'will_save_settings') layout.prop(operator, "export_output_folder") layout.prop(operator, "export_scene_settings") + layout.prop(operator, "export_legacy_mode") # scene selectors row = layout.row()