From 6b39b5f2b163069fa3fdce76a671bc2450ddd4be Mon Sep 17 00:00:00 2001 From: DasLixou Date: Mon, 12 Aug 2024 16:12:09 +0200 Subject: [PATCH 01/19] Replace number with selector field --- .../propGroups/conversions_to_prop_group.py | 2 +- .../propGroups/process_tupples.py | 17 ++++++++++++++--- .../bevy_components/registry/registry.py | 15 ++++++++------- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py index 862f633..c70d7d7 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py @@ -171,7 +171,7 @@ type_mappings = { "bevy_color::linear_rgba::LinearRgba": lambda value: parse_color_rgba(value, float, "LinearRgba"), "bevy_color::hsva::Hsva": lambda value: parse_color_hsva(value, float, "Hsva"), - 'bevy_ecs::entity::Entity': lambda value: int(value), + 'bevy_ecs::entity::Entity': lambda value: int(value), # TODO: whatdafuq do we do here? } def is_def_value_type(definition, registry): diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_tupples.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_tupples.py index acd6a00..d8d269c 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_tupples.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_tupples.py @@ -20,14 +20,16 @@ def process_tupples(registry, definition, prefixItems, update, nesting_long_name if ref_name in type_infos: original = type_infos[ref_name] original_long_name = original["long_name"] - is_value_type = original_long_name in value_types_defaults - value = value_types_defaults[original_long_name] if is_value_type else None + is_value_type = original_long_name in blender_property_mapping + has_default_value = original_long_name in value_types_defaults + + value = value_types_defaults[original_long_name] if has_default_value else None default_values.append(value) prefix_infos.append(original) if is_value_type: - if original_long_name in blender_property_mapping: + if has_default_value: blender_property_def = blender_property_mapping[original_long_name] blender_property = blender_property_def["type"]( **blender_property_def["presets"],# we inject presets first @@ -36,6 +38,15 @@ def process_tupples(registry, definition, prefixItems, update, nesting_long_name update= update ) + __annotations__[property_name] = blender_property + else: + blender_property_def = blender_property_mapping[original_long_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + update= update + ) + __annotations__[property_name] = blender_property else: original_long_name = original["long_name"] diff --git a/tools/blenvy/add_ons/bevy_components/registry/registry.py b/tools/blenvy/add_ons/bevy_components/registry/registry.py index ed236ec..0780e0d 100644 --- a/tools/blenvy/add_ons/bevy_components/registry/registry.py +++ b/tools/blenvy/add_ons/bevy_components/registry/registry.py @@ -25,6 +25,9 @@ def property_group_from_infos(property_group_name, property_group_parameters): return (property_group_pointer, property_group_class) +def is_entity_poll(self, object): + return True # TODO: only select `object.type`s that get converted to entities + # this is where we store the information for all available components class ComponentsRegistry(PropertyGroup): registry: bpy.props. StringProperty( @@ -50,7 +53,6 @@ class ComponentsRegistry(PropertyGroup): "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()), @@ -90,19 +92,19 @@ class ComponentsRegistry(PropertyGroup): "enum": dict(type=EnumProperty, presets=dict()), - 'bevy_ecs::entity::Entity': {"type": IntProperty, "presets": {"min":0} }, - 'bevy_utils::Uuid': dict(type=StringProperty, presets=dict()), + "bevy_ecs::entity::Entity": dict(type = PointerProperty, presets=dict(type = bpy.types.Object, poll = is_entity_poll)), + "bevy_utils::Uuid": dict(type = StringProperty, presets=dict()), } value_types_defaults = { "string":" ", - "boolean": True, + "boolean": False, "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, + "bool": False, "u8": 0, "u16":0, @@ -144,8 +146,7 @@ class ComponentsRegistry(PropertyGroup): "bevy_color::linear_rgba::LinearRgba": [1.0, 1.0, 0.0, 1.0], "bevy_color::hsva::Hsva": [1.0, 1.0, 0.0, 1.0], - 'bevy_ecs::entity::Entity': 0,#4294967295, # this is the same as Bevy's Entity::Placeholder, too big for Blender..sigh - 'bevy_utils::Uuid': '"'+str(uuid.uuid4())+'"' + "bevy_utils::Uuid": '"'+str(uuid.uuid4())+'"' } From 2ffadc19eb64f6840afc0aebf2a7aa390cb37226 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Mon, 12 Aug 2024 17:11:11 +0200 Subject: [PATCH 02/19] only pick objects in same scene --- tools/blenvy/add_ons/bevy_components/registry/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/blenvy/add_ons/bevy_components/registry/registry.py b/tools/blenvy/add_ons/bevy_components/registry/registry.py index 0780e0d..0d3b210 100644 --- a/tools/blenvy/add_ons/bevy_components/registry/registry.py +++ b/tools/blenvy/add_ons/bevy_components/registry/registry.py @@ -26,7 +26,7 @@ def property_group_from_infos(property_group_name, property_group_parameters): return (property_group_pointer, property_group_class) def is_entity_poll(self, object): - return True # TODO: only select `object.type`s that get converted to entities + return bpy.context.scene in object.users_scene # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? # this is where we store the information for all available components class ComponentsRegistry(PropertyGroup): From ec42c6d2bd0b99b57be3dd1e0076d2c82152b0c8 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Mon, 12 Aug 2024 17:22:30 +0200 Subject: [PATCH 03/19] save and load? --- .../propGroups/conversions_from_prop_group.py | 2 ++ .../propGroups/conversions_to_prop_group.py | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py index 75366b3..f109e78 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py @@ -25,6 +25,8 @@ conversion_tables = { "bevy_color::srgba::Srgba": lambda value: "Srgba(red:"+str(value[0])+ ", green:"+str(value[1])+ ", blue:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", "bevy_color::linear_rgba::LinearRgba": lambda value: "LinearRgba(red:"+str(value[0])+ ", green:"+str(value[1])+ ", blue:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", "bevy_color::hsva::Hsva": lambda value: "Hsva(hue:"+str(value[0])+ ", saturation:"+str(value[1])+ ", value:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", + + "bevy_ecs::entity::Entity": lambda value: "Entity(name:" + str(value) + ")" } #converts the value of a property group(no matter its complexity) into a single custom property value diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py index c70d7d7..36ff172 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py @@ -1,3 +1,4 @@ +import bpy from bpy_types import PropertyGroup import re @@ -126,6 +127,10 @@ def parse_color_hsva(value, caster, typeName): parsed = parse_struct_string(value.replace(typeName,"").replace("(", "").replace(")","") ) return [caster(parsed['hue']), caster(parsed['saturation']), caster(parsed['value']), caster(parsed['alpha'])] +def parse_entity(value): + parsed = parse_struct_string(value.replace("Entity","").replace("(", "").replace(")","") ) + bpy.context.scene.objects[parsed["name"]] + def to_int(input): return int(float(input)) @@ -171,7 +176,7 @@ type_mappings = { "bevy_color::linear_rgba::LinearRgba": lambda value: parse_color_rgba(value, float, "LinearRgba"), "bevy_color::hsva::Hsva": lambda value: parse_color_hsva(value, float, "Hsva"), - 'bevy_ecs::entity::Entity': lambda value: int(value), # TODO: whatdafuq do we do here? + "bevy_ecs::entity::Entity": parse_entity, } def is_def_value_type(definition, registry): From bf075b41ef196baf8d1ab86022e23a140c65c80e Mon Sep 17 00:00:00 2001 From: DasLixou Date: Mon, 19 Aug 2024 15:31:56 +0200 Subject: [PATCH 04/19] serialize with double quotes --- .../bevy_components/propGroups/conversions_from_prop_group.py | 2 +- .../bevy_components/propGroups/conversions_to_prop_group.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py index f109e78..48b0d8b 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py @@ -26,7 +26,7 @@ conversion_tables = { "bevy_color::linear_rgba::LinearRgba": lambda value: "LinearRgba(red:"+str(value[0])+ ", green:"+str(value[1])+ ", blue:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", "bevy_color::hsva::Hsva": lambda value: "Hsva(hue:"+str(value[0])+ ", saturation:"+str(value[1])+ ", value:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", - "bevy_ecs::entity::Entity": lambda value: "Entity(name:" + str(value) + ")" + "bevy_ecs::entity::Entity": lambda value: 'Entity(name: "' + str(value.name) + '")' } #converts the value of a property group(no matter its complexity) into a single custom property value diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py index 36ff172..6bf77a8 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py @@ -128,7 +128,7 @@ def parse_color_hsva(value, caster, typeName): return [caster(parsed['hue']), caster(parsed['saturation']), caster(parsed['value']), caster(parsed['alpha'])] def parse_entity(value): - parsed = parse_struct_string(value.replace("Entity","").replace("(", "").replace(")","") ) + parsed = parse_struct_string(value.replace("Entity","").replace("(", "").replace(")","").replace('"', "")) bpy.context.scene.objects[parsed["name"]] def to_int(input): From 0e62da4d196026cb2b672e99d8b40130d1bb59ad Mon Sep 17 00:00:00 2001 From: DasLixou Date: Tue, 20 Aug 2024 18:08:20 +0200 Subject: [PATCH 05/19] better serialization --- .../propGroups/conversions_from_prop_group.py | 2 +- .../propGroups/conversions_to_prop_group.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py index 48b0d8b..2541cc4 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py @@ -26,7 +26,7 @@ conversion_tables = { "bevy_color::linear_rgba::LinearRgba": lambda value: "LinearRgba(red:"+str(value[0])+ ", green:"+str(value[1])+ ", blue:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", "bevy_color::hsva::Hsva": lambda value: "Hsva(hue:"+str(value[0])+ ", saturation:"+str(value[1])+ ", value:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", - "bevy_ecs::entity::Entity": lambda value: 'Entity(name: "' + str(value.name) + '")' + "bevy_ecs::entity::Entity": lambda value: 'Entity(name: ' + ('Some("' + str(value.name) + '")') if value is not None else "None" + ')' } #converts the value of a property group(no matter its complexity) into a single custom property value diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py index 6bf77a8..3cac940 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_to_prop_group.py @@ -128,8 +128,14 @@ def parse_color_hsva(value, caster, typeName): return [caster(parsed['hue']), caster(parsed['saturation']), caster(parsed['value']), caster(parsed['alpha'])] def parse_entity(value): - parsed = parse_struct_string(value.replace("Entity","").replace("(", "").replace(")","").replace('"', "")) - bpy.context.scene.objects[parsed["name"]] + # strip 'Entity(name: )' to just '' + value = value[13:-1] + if value.startswith("Some"): + # strip 'Some("")' to just '' + value = value[6:-2] + return bpy.context.scene.objects[value] + else: + return None def to_int(input): return int(float(input)) From 7f4c8d34f3525912d649a25a21b67da460ac21b6 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Tue, 20 Aug 2024 18:08:53 +0200 Subject: [PATCH 06/19] fix for all propgroups other than tuple, that already worked --- .../propGroups/process_list.py | 3 +- .../bevy_components/propGroups/process_map.py | 5 ++-- .../propGroups/process_structs.py | 17 +++++++++-- .../bevy_components/propGroups/utils.py | 30 ++++++++++++------- 4 files changed, 39 insertions(+), 16 deletions(-) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py index 8c884e4..48952ae 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_list.py @@ -3,6 +3,7 @@ from .utils import generate_wrapper_propertyGroup from . import process_component def process_list(registry, definition, update, nesting_long_names=[]): + blender_property_mapping = registry.blender_property_mapping value_types_defaults = registry.value_types_defaults type_infos = registry.type_infos @@ -13,7 +14,7 @@ def process_list(registry, definition, update, nesting_long_names=[]): item_definition = type_infos[ref_name] item_long_name = item_definition["long_name"] - is_item_value_type = item_long_name in value_types_defaults + is_item_value_type = item_long_name in blender_property_mapping 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 ! diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py index 2b9d261..8dd9c40 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_map.py @@ -3,6 +3,7 @@ from .utils import generate_wrapper_propertyGroup from . import process_component def process_map(registry, definition, update, nesting_long_names=[]): + blender_property_mapping = registry.blender_property_mapping value_types_defaults = registry.value_types_defaults type_infos = registry.type_infos @@ -19,7 +20,7 @@ def process_map(registry, definition, update, nesting_long_names=[]): if key_ref_name in type_infos: key_definition = type_infos[key_ref_name] original_long_name = key_definition["long_name"] - is_key_value_type = original_long_name in value_types_defaults + is_key_value_type = original_long_name in blender_property_mapping definition_link = definition["keyType"]["type"]["$ref"] #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 ! @@ -38,7 +39,7 @@ def process_map(registry, definition, update, nesting_long_names=[]): if value_ref_name in type_infos: value_definition = type_infos[value_ref_name] original_long_name = value_definition["long_name"] - is_value_value_type = original_long_name in value_types_defaults + is_value_value_type = original_long_name in blender_property_mapping definition_link = definition["valueType"]["type"]["$ref"] #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 ! diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py b/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py index 255111e..05aba7d 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/process_structs.py @@ -17,12 +17,15 @@ def process_structs(registry, definition, properties, update, nesting_long_names if ref_name in type_infos: original = type_infos[ref_name] original_long_name = original["long_name"] - is_value_type = original_long_name in value_types_defaults - value = value_types_defaults[original_long_name] if is_value_type else None + + is_value_type = original_long_name in blender_property_mapping + has_default_value = original_long_name in value_types_defaults + + value = value_types_defaults[original_long_name] if has_default_value else None default_values[property_name] = value if is_value_type: - if original_long_name in blender_property_mapping: + if has_default_value: blender_property_def = blender_property_mapping[original_long_name] blender_property = blender_property_def["type"]( **blender_property_def["presets"],# we inject presets first @@ -31,6 +34,14 @@ def process_structs(registry, definition, properties, update, nesting_long_names update = update ) __annotations__[property_name] = blender_property + else: + blender_property_def = blender_property_mapping[original_long_name] + blender_property = blender_property_def["type"]( + **blender_property_def["presets"],# we inject presets first + name = property_name, + update = update + ) + __annotations__[property_name] = blender_property else: original_long_name = original["long_name"] (sub_component_group, _) = process_component.process_component(registry, original, update, {"nested": True, "long_name": original_long_name}, nesting_long_names+[property_name]) diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/utils.py b/tools/blenvy/add_ons/bevy_components/propGroups/utils.py index 9c0b928..bbf3d58 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/utils.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/utils.py @@ -11,7 +11,9 @@ from bpy_types import PropertyGroup def generate_wrapper_propertyGroup(wrapped_type_long_name, item_long_name, definition_link, registry, update, nesting_long_names=[]): 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 + + is_item_value_type = item_long_name in blender_property_mapping + has_item_default_value = item_long_name in value_types_defaults wrapper_name = "wrapper_" + wrapped_type_long_name @@ -42,15 +44,23 @@ def generate_wrapper_propertyGroup(wrapped_type_long_name, item_long_name, defin 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 - ) + if is_item_value_type: + value = value_types_defaults[item_long_name] if has_item_default_value else None + if has_item_default_value: + 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 + ) + else: + 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", + update = update + ) wrapper_annotations = { '0' : blender_property From 2bc47ad624becccc7811c4abee10e9d9da246f87 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Tue, 20 Aug 2024 18:14:35 +0200 Subject: [PATCH 07/19] Add relations example --- examples/relations/Cargo.toml | 9 + examples/relations/README.md | 41 + examples/relations/art/untitled.blend | Bin 0 -> 895456 bytes examples/relations/assets/levels/World.glb | Bin 0 -> 3408 bytes .../relations/assets/levels/World.meta.ron | 5 + .../assets/materials/Dots Stroke.glb | Bin 0 -> 1764 bytes .../relations/assets/materials/Material.glb | Bin 0 -> 1756 bytes examples/relations/assets/registry.json | 14057 ++++++++++++++++ examples/relations/src/main.rs | 35 + 9 files changed, 14147 insertions(+) create mode 100644 examples/relations/Cargo.toml create mode 100644 examples/relations/README.md create mode 100644 examples/relations/art/untitled.blend create mode 100644 examples/relations/assets/levels/World.glb create mode 100644 examples/relations/assets/levels/World.meta.ron create mode 100644 examples/relations/assets/materials/Dots Stroke.glb create mode 100644 examples/relations/assets/materials/Material.glb create mode 100644 examples/relations/assets/registry.json create mode 100644 examples/relations/src/main.rs diff --git a/examples/relations/Cargo.toml b/examples/relations/Cargo.toml new file mode 100644 index 0000000..03981ed --- /dev/null +++ b/examples/relations/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "blenvy_relations_example" +version = "0.0.1" +edition = "2021" +license = "MIT OR Apache-2.0" + +[dependencies] +bevy = { version = "0.14", features = ["dynamic_linking"] } +blenvy = { path = "../../crates/blenvy" } diff --git a/examples/relations/README.md b/examples/relations/README.md new file mode 100644 index 0000000..fcb68cb --- /dev/null +++ b/examples/relations/README.md @@ -0,0 +1,41 @@ +# Basic relations example/demo + +This example showcases how to refer to another `Entity` inside Bevy components added to objects/ blueprints/ meshes and materials extracted from the gltf files + +## Running this example + +``` +cargo run --features bevy/dynamic_linking + +``` + +## Wasm instructions + +### Setup + +as per the bevy documentation: + +```shell +rustup target add wasm32-unknown-unknown +cargo install wasm-bindgen-cli +``` + +### Building this example + +navigate to the current folder , and then + +```shell +cargo build --release --target wasm32-unknown-unknown --target-dir ./target +wasm-bindgen --out-name wasm_example \ + --out-dir ./target/wasm \ + --target web target/wasm32-unknown-unknown/release/bevy_gltf_blueprints_basic_wasm_example.wasm + +``` + +### Running this example + +run a web server in the current folder, and navigate to the page, you should see the example in your browser + +## Additional notes + +- You usually define either the Components directly or use `Proxy components` that get replaced in Bevy systems with the actual Components that you want (usually when for some reason, ie external crates with unregistered components etc) you cannot use the components directly. diff --git a/examples/relations/art/untitled.blend b/examples/relations/art/untitled.blend new file mode 100644 index 0000000000000000000000000000000000000000..c585df9a41b2f5d5fd7db8d66d6168e9c2f7cfd5 GIT binary patch literal 895456 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≪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�T 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 literal 0 HcmV?d00001 diff --git a/examples/relations/assets/levels/World.glb b/examples/relations/assets/levels/World.glb new file mode 100644 index 0000000000000000000000000000000000000000..9cf25cbe1dd0691ee3fa673c7a2cd4892895c6b5 GIT binary patch literal 3408 zcmeHIUvJw+48Nvb*Zs-1cI);k+*1Omu1>NfOAl+4EW@&8c99sxfY@+k=i&&kBtw$Z z1V#XVGxr1SLySD@97$2_6nUKziAVCsA9>_S9*)|-ZxBM>Z4&bDQ$qecZZ)UWOA?+^ zcS?sm0M=_7y-{g0 z00Qc2*(#y#$&~V|H1=RQrMsgEAIE-}?qEVN(JhfWag~$qHWGwh0P(cfOL;KvE$F}+ zopI#SRMx%e-s*YoKEJ%~4WeKig*+78(+=%J*ATkPLHnT96fJAEj{e>`q%M@(-v4K>)jImEr%_jjw))|jKfn;%4y(0c>_qAL@^$+DeX_r&w2db=O0A5%R|+^9>d`@nQp0c5KTgOWpv0B zcvld{RQLm`z=!wY~qkrp4@FXGzUg?JDU7K5Qm_Do$^B-4pVsR z^+p4*U}&A6iw`G!?@})w;y2W&I~E*dd5G4>3bOk~GY3YV&urQ_q4jk9 za|&s59hE#1Q^E7`*NhG13~tnsL&>nGAkmIG+R^_OeIQ9r zM?cz6(FeEG1s`C`68$sDo0Evc__9Pi+KY07d_le;8*o1(Psvy0B|Kk}7vv}M3waLD z=j1!`E%}~2hUa4-_>%lcHsQHR9+98P*W?L2pO7EG^Z$F4^#JFB_dJu?8d@YS^x?HU zZ-6UbOH2uy$CcxyUWr-7Q}W5&1s;hh$pU7+&}1EzJQ7pEBhD*Q!1LWiD z^#|ZD_z-3{-rSm|vE<#^xty6fJ9gJUKHLI;e>(u5VgO$o_1cg)VMqlj3`v&;lskfP zQXt=YoCPe5cQGV>;M1T@dA$6-9=}K@tc0B<2DzX-^jLt-R>CABgM=;ukb)UWAt{^= zN#OKRN1DyPBPjPAKWt9?3=*(5l}_f_=xlZxl0FT43MPuJMv=|WOoZ`<;Oqw_GGq#= zGPT*D<|mG)Y-mlt4ovCtT;6>Js)yb%E_F9;RfiYPeaItYG!r>wChxh$0*z zxYrs8c^s1O^+x%)T(2qiYW1UPu|f(-yc#cPd#?1cW~`ypNHOoYXbKsZcY!nvIvvVS zJo;0ixU7H90vd?p%X7R)J85MM;<7=2BV(l{+An#93DcfXWoFa1Y3Ixga)JZsl?Yk&1e!qrOBO7UA%&{3uiDe8!sfa(Ao(+cY|hZOtdPv$Bu5)G0Zi zlQyCj=IYL*b2vZ0@rQCyuEF0wm2vcbxI>n9?Q@$vp2N6J))>;hO4d5LuamWX-9C=$ z(KzzFEbFt}Z^-!Djh?HI6XEK5ao2XaPkokr7krlDHQq{}bvR2loqGXC`z-AXKG&0z zu45&R_PK$x1^3|zY~lM5cHj~0Db2xCd|G LF~o3x{ZcW4Jda6 zd@4+bjoLnK zcpcgyMZrfD38#@`CxZ;zyh4TJ`<`28qh3FtA;uq*wiD75<}-fkxT^efGnqHllS&mV zvtSjBO?FZ;ttfz|LN&OK74IeOi7EjLRSLv1>15+lTNNn=rp~>AC%nrD?g+uX_DIO( znEa?UO3hNOszj^S>XoB1DW>p7yrAQ`5@XHuLeNAB?zngqGA^$GH5hffl%IL@r($v0 zV8{X*i00K0@6S$IS%bK26kw-V8Oiob-dxhOr#hLrjBVO^GmAoPv?rzVuzAiuu5#FT z6KRCXkeq!zNn;l-R+5rQudigCJIZ#~Jsk^?Mol93#>r9nsID4wrsTY`O4at2pk*5L z1opR;&l^N;)Vf{u0b-{Jhxg>Sn9dZk)~uF?eHGcJ-Z?C5KCqpWbui0#ZoY}~(L8d! zZ0oh0@7Vaejh^c-Q{(z}an|Q@jxkHv1%V=wS%%+kDoxt*?b9xHh? z<_^ymJcbvrh3`|?g=cVx;~~6(cklrYa6Eul@Dlc68^>)7^aS3*9*%qP2;ReU*uilJ GUc-O+q7-KU literal 0 HcmV?d00001 diff --git a/examples/relations/assets/registry.json b/examples/relations/assets/registry.json new file mode 100644 index 0000000..3f40219 --- /dev/null +++ b/examples/relations/assets/registry.json @@ -0,0 +1,14057 @@ +{ + "$defs": { + "()": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "()", + "prefixItems": [], + "short_name": "()", + "type": "array", + "typeInfo": "Tuple" + }, + "(u8, u8)": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "(u8, u8)", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + }, + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "(u8, u8)", + "type": "array", + "typeInfo": "Tuple" + }, + "alloc::borrow::Cow": { + "isComponent": false, + "isResource": false, + "long_name": "alloc::borrow::Cow", + "short_name": "Cow", + "type": "object", + "typeInfo": "Value" + }, + "alloc::string::String": { + "isComponent": false, + "isResource": false, + "long_name": "alloc::string::String", + "short_name": "String", + "type": "string", + "typeInfo": "Value" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_animation::VariableCurve" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_animation::transition::AnimationTransition" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_math::rects::urect::URect" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_pbr::light::Cascade" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_text::glyph_brush::PositionedGlyph" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextSection" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridTrack" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::RepeatedGridTrack" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/blenvy::blueprints::animation::AnimationInfo" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/blenvy::blueprints::assets::BlueprintAsset" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/blenvy::blueprints::materials::MaterialInfo" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/glam::Quat" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/u16" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "long_name": "alloc::vec::Vec", + "short_name": "Vec", + "type": "array", + "typeInfo": "List" + }, + "bevy_animation::AnimationClip": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_animation::AnimationClip", + "properties": { + "curves": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::NoOpHash>" + } + }, + "duration": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "curves", + "duration" + ], + "short_name": "AnimationClip", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::AnimationPlayer": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_animation::AnimationPlayer", + "properties": { + "active_animations": { + "type": { + "$ref": "#/$defs/std::collections::BTreeMap" + } + }, + "blend_weights": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + } + }, + "required": [ + "active_animations", + "blend_weights" + ], + "short_name": "AnimationPlayer", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::AnimationTarget": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_animation::AnimationTarget", + "properties": { + "id": { + "type": { + "$ref": "#/$defs/bevy_animation::AnimationTargetId" + } + }, + "player": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "id", + "player" + ], + "short_name": "AnimationTarget", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::AnimationTargetId": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_animation::AnimationTargetId", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + ], + "short_name": "AnimationTargetId", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_animation::Interpolation": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_animation::Interpolation", + "oneOf": [ + "Linear", + "Step", + "CubicSpline" + ], + "short_name": "Interpolation", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_animation::Keyframes": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_animation::Keyframes", + "oneOf": [ + { + "items": false, + "long_name": "Rotation", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Rotation", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Translation", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Translation", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Scale", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Scale", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weights", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Weights", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Keyframes", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_animation::VariableCurve": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_animation::VariableCurve", + "properties": { + "interpolation": { + "type": { + "$ref": "#/$defs/bevy_animation::Interpolation" + } + }, + "keyframe_timestamps": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "keyframes": { + "type": { + "$ref": "#/$defs/bevy_animation::Keyframes" + } + } + }, + "required": [ + "keyframe_timestamps", + "keyframes", + "interpolation" + ], + "short_name": "VariableCurve", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::graph::AnimationGraph": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_animation::graph::AnimationGraph", + "properties": { + "graph": { + "type": { + "$ref": "#/$defs/petgraph::graph::DiGraph" + } + }, + "root": { + "type": { + "$ref": "#/$defs/petgraph::graph::NodeIndex" + } + } + }, + "required": [ + "graph", + "root" + ], + "short_name": "AnimationGraph", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::transition::AnimationTransition": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_animation::transition::AnimationTransition", + "properties": { + "animation": { + "type": { + "$ref": "#/$defs/petgraph::graph::NodeIndex" + } + }, + "current_weight": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "weight_decline_per_sec": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "current_weight", + "weight_decline_per_sec", + "animation" + ], + "short_name": "AnimationTransition", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::transition::AnimationTransitions": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_animation::transition::AnimationTransitions", + "properties": { + "main_animation": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "transitions": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "transitions" + ], + "short_name": "AnimationTransitions", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_asset::assets::AssetIndex": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::assets::AssetIndex", + "properties": { + "generation": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "index": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "generation", + "index" + ], + "short_name": "AssetIndex", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_asset::handle::Handle<()>": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle<()>", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId<()>" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle<()>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_asset::handle::Handle", + "oneOf": [ + { + "items": false, + "long_name": "Strong", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Weak", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId<()>": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId<()>", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId<()>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::id::AssetId", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Index", + "properties": { + "index": { + "long_name": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Uuid", + "properties": { + "uuid": { + "long_name": "uuid", + "type": { + "$ref": "#/$defs/uuid::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::path::AssetPath": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_asset::path::AssetPath", + "short_name": "AssetPath", + "type": "object", + "typeInfo": "Value" + }, + "bevy_audio::audio::DefaultSpatialScale": { + "isComponent": false, + "isResource": true, + "items": false, + "long_name": "bevy_audio::audio::DefaultSpatialScale", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_audio::audio::SpatialScale" + } + } + ], + "short_name": "DefaultSpatialScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_audio::audio::GlobalVolume": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_audio::audio::GlobalVolume", + "properties": { + "volume": { + "type": { + "$ref": "#/$defs/bevy_audio::audio::Volume" + } + } + }, + "required": [ + "volume" + ], + "short_name": "GlobalVolume", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_audio::audio::PlaybackMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_audio::audio::PlaybackMode", + "oneOf": [ + "Once", + "Loop", + "Despawn", + "Remove" + ], + "short_name": "PlaybackMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_audio::audio::PlaybackSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_audio::audio::PlaybackSettings", + "properties": { + "mode": { + "type": { + "$ref": "#/$defs/bevy_audio::audio::PlaybackMode" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "spatial": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "spatial_scale": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "speed": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "volume": { + "type": { + "$ref": "#/$defs/bevy_audio::audio::Volume" + } + } + }, + "required": [ + "mode", + "volume", + "speed", + "paused", + "spatial" + ], + "short_name": "PlaybackSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_audio::audio::SpatialListener": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_audio::audio::SpatialListener", + "properties": { + "left_ear_offset": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "right_ear_offset": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "left_ear_offset", + "right_ear_offset" + ], + "short_name": "SpatialListener", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_audio::audio::SpatialScale": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_audio::audio::SpatialScale", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "SpatialScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_audio::audio::Volume": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_audio::audio::Volume", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Volume", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_color::color::Color": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::color::Color", + "oneOf": [ + { + "items": false, + "long_name": "Srgba", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::srgba::Srgba" + } + } + ], + "short_name": "Srgba", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "LinearRgba", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::linear_rgba::LinearRgba" + } + } + ], + "short_name": "LinearRgba", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Hsla", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::hsla::Hsla" + } + } + ], + "short_name": "Hsla", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Hsva", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::hsva::Hsva" + } + } + ], + "short_name": "Hsva", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Hwba", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::hwba::Hwba" + } + } + ], + "short_name": "Hwba", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Laba", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::laba::Laba" + } + } + ], + "short_name": "Laba", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Lcha", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::lcha::Lcha" + } + } + ], + "short_name": "Lcha", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Oklaba", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::oklaba::Oklaba" + } + } + ], + "short_name": "Oklaba", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Oklcha", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::oklcha::Oklcha" + } + } + ], + "short_name": "Oklcha", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Xyza", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::xyza::Xyza" + } + } + ], + "short_name": "Xyza", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Color", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_color::hsla::Hsla": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::hsla::Hsla", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "saturation": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "hue", + "saturation", + "lightness", + "alpha" + ], + "short_name": "Hsla", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::hsva::Hsva": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::hsva::Hsva", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "saturation": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "value": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "hue", + "saturation", + "value", + "alpha" + ], + "short_name": "Hsva", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::hwba::Hwba": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::hwba::Hwba", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "blackness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "whiteness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "hue", + "whiteness", + "blackness", + "alpha" + ], + "short_name": "Hwba", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::laba::Laba": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::laba::Laba", + "properties": { + "a": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "b": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "lightness", + "a", + "b", + "alpha" + ], + "short_name": "Laba", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::lcha::Lcha": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::lcha::Lcha", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "chroma": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "lightness", + "chroma", + "hue", + "alpha" + ], + "short_name": "Lcha", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::linear_rgba::LinearRgba": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::linear_rgba::LinearRgba", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "blue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "green": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "red": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "red", + "green", + "blue", + "alpha" + ], + "short_name": "LinearRgba", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::oklaba::Oklaba": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::oklaba::Oklaba", + "properties": { + "a": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "b": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "lightness", + "a", + "b", + "alpha" + ], + "short_name": "Oklaba", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::oklcha::Oklcha": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::oklcha::Oklcha", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "chroma": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "lightness", + "chroma", + "hue", + "alpha" + ], + "short_name": "Oklcha", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::srgba::Srgba": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::srgba::Srgba", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "blue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "green": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "red": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "red", + "green", + "blue", + "alpha" + ], + "short_name": "Srgba", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_color::xyza::Xyza": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_color::xyza::Xyza", + "properties": { + "alpha": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z", + "alpha" + ], + "short_name": "Xyza", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core::name::Name": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core::name::Name", + "properties": { + "hash": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "name": { + "type": { + "$ref": "#/$defs/alloc::borrow::Cow" + } + } + }, + "required": [ + "hash", + "name" + ], + "short_name": "Name", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::bloom::settings::BloomCompositeMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::bloom::settings::BloomCompositeMode", + "oneOf": [ + "EnergyConserving", + "Additive" + ], + "short_name": "BloomCompositeMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings", + "properties": { + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold_softness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "threshold", + "threshold_softness" + ], + "short_name": "BloomPrefilterSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::bloom::settings::BloomSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::bloom::settings::BloomSettings", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_2d::camera_2d::Camera2d": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::core_2d::camera_2d::Camera2d", + "properties": {}, + "required": [], + "short_name": "Camera2d", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3d": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::core_3d::camera_3d::Camera3d", + "properties": { + "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": [ + "depth_load_op", + "depth_texture_usages", + "screen_space_specular_transmission_steps", + "screen_space_specular_transmission_quality" + ], + "short_name": "Camera3d", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp", + "oneOf": [ + { + "items": false, + "long_name": "Clear", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Clear", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Load" + } + ], + "short_name": "Camera3dDepthLoadOp", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Camera3dDepthTextureUsage", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality": { + "isComponent": false, + "isResource": true, + "long_name": "bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality", + "oneOf": [ + "Low", + "Medium", + "High", + "Ultra" + ], + "short_name": "ScreenSpaceTransmissionQuality", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::fxaa::Fxaa": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::fxaa::Fxaa", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::fxaa::Sensitivity": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::fxaa::Sensitivity", + "oneOf": [ + "Low", + "Medium", + "High", + "Ultra", + "Extreme" + ], + "short_name": "Sensitivity", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::prepass::DeferredPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::prepass::DeferredPrepass", + "properties": {}, + "required": [], + "short_name": "DeferredPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::DepthPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::prepass::DepthPrepass", + "properties": {}, + "required": [], + "short_name": "DepthPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::MotionVectorPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::prepass::MotionVectorPrepass", + "properties": {}, + "required": [], + "short_name": "MotionVectorPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::NormalPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::prepass::NormalPrepass", + "properties": {}, + "required": [], + "short_name": "NormalPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::smaa::SmaaPreset": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_core_pipeline::smaa::SmaaPreset", + "oneOf": [ + "Low", + "Medium", + "High", + "Ultra" + ], + "short_name": "SmaaPreset", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::smaa::SmaaSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::smaa::SmaaSettings", + "properties": { + "preset": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::smaa::SmaaPreset" + } + } + }, + "required": [ + "preset" + ], + "short_name": "SmaaSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::tonemapping::DebandDither": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::tonemapping::DebandDither", + "oneOf": [ + "Disabled", + "Enabled" + ], + "short_name": "DebandDither", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::tonemapping::Tonemapping": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_core_pipeline::tonemapping::Tonemapping", + "oneOf": [ + "None", + "Reinhard", + "ReinhardLuminance", + "AcesFitted", + "AgX", + "SomewhatBoringDisplayTransform", + "TonyMcMapface", + "BlenderFilmic" + ], + "short_name": "Tonemapping", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ecs::entity::Entity": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ecs::entity::Entity", + "short_name": "Entity", + "type": "object", + "typeInfo": "Value" + }, + "bevy_gizmos::aabb::AabbGizmoConfigGroup": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_gizmos::aabb::AabbGizmoConfigGroup", + "properties": { + "default_color": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "draw_all": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "draw_all" + ], + "short_name": "AabbGizmoConfigGroup", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gizmos::config::GizmoConfig": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_gizmos::config::GizmoConfig", + "properties": { + "depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "line_joints": { + "type": { + "$ref": "#/$defs/bevy_gizmos::config::GizmoLineJoint" + } + }, + "line_perspective": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "line_style": { + "type": { + "$ref": "#/$defs/bevy_gizmos::config::GizmoLineStyle" + } + }, + "line_width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "render_layers": { + "type": { + "$ref": "#/$defs/bevy_render::view::visibility::render_layers::RenderLayers" + } + } + }, + "required": [ + "enabled", + "line_width", + "line_perspective", + "line_style", + "depth_bias", + "render_layers", + "line_joints" + ], + "short_name": "GizmoConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gizmos::config::GizmoConfigStore": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_gizmos::config::GizmoConfigStore", + "properties": {}, + "required": [], + "short_name": "GizmoConfigStore", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gizmos::config::GizmoLineJoint": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_gizmos::config::GizmoLineJoint", + "oneOf": [ + { + "long_name": "None" + }, + { + "long_name": "Miter" + }, + { + "items": false, + "long_name": "Round", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Round", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Bevel" + } + ], + "short_name": "GizmoLineJoint", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_gizmos::config::GizmoLineStyle": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_gizmos::config::GizmoLineStyle", + "oneOf": [ + "Solid", + "Dotted" + ], + "short_name": "GizmoLineStyle", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_gizmos::light::LightGizmoColor": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_gizmos::light::LightGizmoColor", + "oneOf": [ + { + "items": false, + "long_name": "Manual", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + ], + "short_name": "Manual", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Varied" + }, + { + "long_name": "MatchLightColor" + }, + { + "long_name": "ByLightType" + } + ], + "short_name": "LightGizmoColor", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_gizmos::light::LightGizmoConfigGroup": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_gizmos::light::LightGizmoConfigGroup", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_gizmos::light::LightGizmoColor" + } + }, + "directional_light_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "draw_all": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "point_light_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "spot_light_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + }, + "required": [ + "draw_all", + "color", + "point_light_color", + "spot_light_color", + "directional_light_color" + ], + "short_name": "LightGizmoConfigGroup", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf::GltfExtras": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_gltf::GltfExtras", + "properties": { + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value" + ], + "short_name": "GltfExtras", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf::GltfMaterialExtras": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_gltf::GltfMaterialExtras", + "properties": { + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value" + ], + "short_name": "GltfMaterialExtras", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf::GltfMeshExtras": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_gltf::GltfMeshExtras", + "properties": { + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value" + ], + "short_name": "GltfMeshExtras", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf::GltfSceneExtras": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_gltf::GltfSceneExtras", + "properties": { + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value" + ], + "short_name": "GltfSceneExtras", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_hierarchy::components::children::Children": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_hierarchy::components::children::Children", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/smallvec::SmallVec<[bevy_ecs::entity::Entity; 8]>" + } + } + ], + "short_name": "Children", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_hierarchy::components::parent::Parent": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_hierarchy::components::parent::Parent", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + ], + "short_name": "Parent", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::ButtonState": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::ButtonState", + "oneOf": [ + "Pressed", + "Released" + ], + "short_name": "ButtonState", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::AxisSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::AxisSettings", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::ButtonAxisSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::ButtonAxisSettings", + "properties": { + "high": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "high", + "low", + "threshold" + ], + "short_name": "ButtonAxisSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::ButtonSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::ButtonSettings", + "properties": { + "press_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "release_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "press_threshold", + "release_threshold" + ], + "short_name": "ButtonSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::Gamepad": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::Gamepad", + "properties": { + "id": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "id" + ], + "short_name": "Gamepad", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxis": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadAxis", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxisChangedEvent": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadAxisChangedEvent", + "properties": { + "axis_type": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadAxisType" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + }, + "value": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "gamepad", + "axis_type", + "value" + ], + "short_name": "GamepadAxisChangedEvent", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxisType": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadAxisType", + "oneOf": [ + { + "long_name": "LeftStickX" + }, + { + "long_name": "LeftStickY" + }, + { + "long_name": "LeftZ" + }, + { + "long_name": "RightStickX" + }, + { + "long_name": "RightStickY" + }, + { + "long_name": "RightZ" + }, + { + "items": false, + "long_name": "Other", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadAxisType", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadButton": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadButton", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonChangedEvent": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadButtonChangedEvent", + "properties": { + "button_type": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButtonType" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + }, + "value": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "gamepad", + "button_type", + "value" + ], + "short_name": "GamepadButtonChangedEvent", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadButtonInput", + "properties": { + "button": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButton" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + } + }, + "required": [ + "button", + "state" + ], + "short_name": "GamepadButtonInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonType": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadButtonType", + "oneOf": [ + { + "long_name": "South" + }, + { + "long_name": "East" + }, + { + "long_name": "North" + }, + { + "long_name": "West" + }, + { + "long_name": "C" + }, + { + "long_name": "Z" + }, + { + "long_name": "LeftTrigger" + }, + { + "long_name": "LeftTrigger2" + }, + { + "long_name": "RightTrigger" + }, + { + "long_name": "RightTrigger2" + }, + { + "long_name": "Select" + }, + { + "long_name": "Start" + }, + { + "long_name": "Mode" + }, + { + "long_name": "LeftThumb" + }, + { + "long_name": "RightThumb" + }, + { + "long_name": "DPadUp" + }, + { + "long_name": "DPadDown" + }, + { + "long_name": "DPadLeft" + }, + { + "long_name": "DPadRight" + }, + { + "items": false, + "long_name": "Other", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadButtonType", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadConnection": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadConnection", + "oneOf": [ + { + "items": false, + "long_name": "Connected", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadInfo" + } + } + ], + "short_name": "Connected", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Disconnected" + } + ], + "short_name": "GamepadConnection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadConnectionEvent": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadConnectionEvent", + "properties": { + "connection": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadConnection" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + } + }, + "required": [ + "gamepad", + "connection" + ], + "short_name": "GamepadConnectionEvent", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadEvent": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadEvent", + "oneOf": [ + { + "items": false, + "long_name": "Connection", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadConnectionEvent" + } + } + ], + "short_name": "Connection", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Button", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButtonChangedEvent" + } + } + ], + "short_name": "Button", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Axis", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadAxisChangedEvent" + } + } + ], + "short_name": "Axis", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadEvent", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadInfo": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadInfo", + "properties": { + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name" + ], + "short_name": "GamepadInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gamepad::GamepadSettings", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gestures::DoubleTapGesture": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::gestures::DoubleTapGesture", + "properties": {}, + "required": [], + "short_name": "DoubleTapGesture", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gestures::PanGesture": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_input::gestures::PanGesture", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "PanGesture", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::gestures::PinchGesture": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_input::gestures::PinchGesture", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "PinchGesture", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::gestures::RotationGesture": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_input::gestures::RotationGesture", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "RotationGesture", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::keyboard::Key": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::keyboard::Key", + "oneOf": [ + { + "items": false, + "long_name": "Character", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/smol_str::SmolStr" + } + } + ], + "short_name": "Character", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Unidentified", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::keyboard::NativeKey" + } + } + ], + "short_name": "Unidentified", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Dead", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + ], + "short_name": "Dead", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Alt" + }, + { + "long_name": "AltGraph" + }, + { + "long_name": "CapsLock" + }, + { + "long_name": "Control" + }, + { + "long_name": "Fn" + }, + { + "long_name": "FnLock" + }, + { + "long_name": "NumLock" + }, + { + "long_name": "ScrollLock" + }, + { + "long_name": "Shift" + }, + { + "long_name": "Symbol" + }, + { + "long_name": "SymbolLock" + }, + { + "long_name": "Meta" + }, + { + "long_name": "Hyper" + }, + { + "long_name": "Super" + }, + { + "long_name": "Enter" + }, + { + "long_name": "Tab" + }, + { + "long_name": "Space" + }, + { + "long_name": "ArrowDown" + }, + { + "long_name": "ArrowLeft" + }, + { + "long_name": "ArrowRight" + }, + { + "long_name": "ArrowUp" + }, + { + "long_name": "End" + }, + { + "long_name": "Home" + }, + { + "long_name": "PageDown" + }, + { + "long_name": "PageUp" + }, + { + "long_name": "Backspace" + }, + { + "long_name": "Clear" + }, + { + "long_name": "Copy" + }, + { + "long_name": "CrSel" + }, + { + "long_name": "Cut" + }, + { + "long_name": "Delete" + }, + { + "long_name": "EraseEof" + }, + { + "long_name": "ExSel" + }, + { + "long_name": "Insert" + }, + { + "long_name": "Paste" + }, + { + "long_name": "Redo" + }, + { + "long_name": "Undo" + }, + { + "long_name": "Accept" + }, + { + "long_name": "Again" + }, + { + "long_name": "Attn" + }, + { + "long_name": "Cancel" + }, + { + "long_name": "ContextMenu" + }, + { + "long_name": "Escape" + }, + { + "long_name": "Execute" + }, + { + "long_name": "Find" + }, + { + "long_name": "Help" + }, + { + "long_name": "Pause" + }, + { + "long_name": "Play" + }, + { + "long_name": "Props" + }, + { + "long_name": "Select" + }, + { + "long_name": "ZoomIn" + }, + { + "long_name": "ZoomOut" + }, + { + "long_name": "BrightnessDown" + }, + { + "long_name": "BrightnessUp" + }, + { + "long_name": "Eject" + }, + { + "long_name": "LogOff" + }, + { + "long_name": "Power" + }, + { + "long_name": "PowerOff" + }, + { + "long_name": "PrintScreen" + }, + { + "long_name": "Hibernate" + }, + { + "long_name": "Standby" + }, + { + "long_name": "WakeUp" + }, + { + "long_name": "AllCandidates" + }, + { + "long_name": "Alphanumeric" + }, + { + "long_name": "CodeInput" + }, + { + "long_name": "Compose" + }, + { + "long_name": "Convert" + }, + { + "long_name": "FinalMode" + }, + { + "long_name": "GroupFirst" + }, + { + "long_name": "GroupLast" + }, + { + "long_name": "GroupNext" + }, + { + "long_name": "GroupPrevious" + }, + { + "long_name": "ModeChange" + }, + { + "long_name": "NextCandidate" + }, + { + "long_name": "NonConvert" + }, + { + "long_name": "PreviousCandidate" + }, + { + "long_name": "Process" + }, + { + "long_name": "SingleCandidate" + }, + { + "long_name": "HangulMode" + }, + { + "long_name": "HanjaMode" + }, + { + "long_name": "JunjaMode" + }, + { + "long_name": "Eisu" + }, + { + "long_name": "Hankaku" + }, + { + "long_name": "Hiragana" + }, + { + "long_name": "HiraganaKatakana" + }, + { + "long_name": "KanaMode" + }, + { + "long_name": "KanjiMode" + }, + { + "long_name": "Katakana" + }, + { + "long_name": "Romaji" + }, + { + "long_name": "Zenkaku" + }, + { + "long_name": "ZenkakuHankaku" + }, + { + "long_name": "Soft1" + }, + { + "long_name": "Soft2" + }, + { + "long_name": "Soft3" + }, + { + "long_name": "Soft4" + }, + { + "long_name": "ChannelDown" + }, + { + "long_name": "ChannelUp" + }, + { + "long_name": "Close" + }, + { + "long_name": "MailForward" + }, + { + "long_name": "MailReply" + }, + { + "long_name": "MailSend" + }, + { + "long_name": "MediaClose" + }, + { + "long_name": "MediaFastForward" + }, + { + "long_name": "MediaPause" + }, + { + "long_name": "MediaPlay" + }, + { + "long_name": "MediaPlayPause" + }, + { + "long_name": "MediaRecord" + }, + { + "long_name": "MediaRewind" + }, + { + "long_name": "MediaStop" + }, + { + "long_name": "MediaTrackNext" + }, + { + "long_name": "MediaTrackPrevious" + }, + { + "long_name": "New" + }, + { + "long_name": "Open" + }, + { + "long_name": "Print" + }, + { + "long_name": "Save" + }, + { + "long_name": "SpellCheck" + }, + { + "long_name": "Key11" + }, + { + "long_name": "Key12" + }, + { + "long_name": "AudioBalanceLeft" + }, + { + "long_name": "AudioBalanceRight" + }, + { + "long_name": "AudioBassBoostDown" + }, + { + "long_name": "AudioBassBoostToggle" + }, + { + "long_name": "AudioBassBoostUp" + }, + { + "long_name": "AudioFaderFront" + }, + { + "long_name": "AudioFaderRear" + }, + { + "long_name": "AudioSurroundModeNext" + }, + { + "long_name": "AudioTrebleDown" + }, + { + "long_name": "AudioTrebleUp" + }, + { + "long_name": "AudioVolumeDown" + }, + { + "long_name": "AudioVolumeUp" + }, + { + "long_name": "AudioVolumeMute" + }, + { + "long_name": "MicrophoneToggle" + }, + { + "long_name": "MicrophoneVolumeDown" + }, + { + "long_name": "MicrophoneVolumeUp" + }, + { + "long_name": "MicrophoneVolumeMute" + }, + { + "long_name": "SpeechCorrectionList" + }, + { + "long_name": "SpeechInputToggle" + }, + { + "long_name": "LaunchApplication1" + }, + { + "long_name": "LaunchApplication2" + }, + { + "long_name": "LaunchCalendar" + }, + { + "long_name": "LaunchContacts" + }, + { + "long_name": "LaunchMail" + }, + { + "long_name": "LaunchMediaPlayer" + }, + { + "long_name": "LaunchMusicPlayer" + }, + { + "long_name": "LaunchPhone" + }, + { + "long_name": "LaunchScreenSaver" + }, + { + "long_name": "LaunchSpreadsheet" + }, + { + "long_name": "LaunchWebBrowser" + }, + { + "long_name": "LaunchWebCam" + }, + { + "long_name": "LaunchWordProcessor" + }, + { + "long_name": "BrowserBack" + }, + { + "long_name": "BrowserFavorites" + }, + { + "long_name": "BrowserForward" + }, + { + "long_name": "BrowserHome" + }, + { + "long_name": "BrowserRefresh" + }, + { + "long_name": "BrowserSearch" + }, + { + "long_name": "BrowserStop" + }, + { + "long_name": "AppSwitch" + }, + { + "long_name": "Call" + }, + { + "long_name": "Camera" + }, + { + "long_name": "CameraFocus" + }, + { + "long_name": "EndCall" + }, + { + "long_name": "GoBack" + }, + { + "long_name": "GoHome" + }, + { + "long_name": "HeadsetHook" + }, + { + "long_name": "LastNumberRedial" + }, + { + "long_name": "Notification" + }, + { + "long_name": "MannerMode" + }, + { + "long_name": "VoiceDial" + }, + { + "long_name": "TV" + }, + { + "long_name": "TV3DMode" + }, + { + "long_name": "TVAntennaCable" + }, + { + "long_name": "TVAudioDescription" + }, + { + "long_name": "TVAudioDescriptionMixDown" + }, + { + "long_name": "TVAudioDescriptionMixUp" + }, + { + "long_name": "TVContentsMenu" + }, + { + "long_name": "TVDataService" + }, + { + "long_name": "TVInput" + }, + { + "long_name": "TVInputComponent1" + }, + { + "long_name": "TVInputComponent2" + }, + { + "long_name": "TVInputComposite1" + }, + { + "long_name": "TVInputComposite2" + }, + { + "long_name": "TVInputHDMI1" + }, + { + "long_name": "TVInputHDMI2" + }, + { + "long_name": "TVInputHDMI3" + }, + { + "long_name": "TVInputHDMI4" + }, + { + "long_name": "TVInputVGA1" + }, + { + "long_name": "TVMediaContext" + }, + { + "long_name": "TVNetwork" + }, + { + "long_name": "TVNumberEntry" + }, + { + "long_name": "TVPower" + }, + { + "long_name": "TVRadioService" + }, + { + "long_name": "TVSatellite" + }, + { + "long_name": "TVSatelliteBS" + }, + { + "long_name": "TVSatelliteCS" + }, + { + "long_name": "TVSatelliteToggle" + }, + { + "long_name": "TVTerrestrialAnalog" + }, + { + "long_name": "TVTerrestrialDigital" + }, + { + "long_name": "TVTimer" + }, + { + "long_name": "AVRInput" + }, + { + "long_name": "AVRPower" + }, + { + "long_name": "ColorF0Red" + }, + { + "long_name": "ColorF1Green" + }, + { + "long_name": "ColorF2Yellow" + }, + { + "long_name": "ColorF3Blue" + }, + { + "long_name": "ColorF4Grey" + }, + { + "long_name": "ColorF5Brown" + }, + { + "long_name": "ClosedCaptionToggle" + }, + { + "long_name": "Dimmer" + }, + { + "long_name": "DisplaySwap" + }, + { + "long_name": "DVR" + }, + { + "long_name": "Exit" + }, + { + "long_name": "FavoriteClear0" + }, + { + "long_name": "FavoriteClear1" + }, + { + "long_name": "FavoriteClear2" + }, + { + "long_name": "FavoriteClear3" + }, + { + "long_name": "FavoriteRecall0" + }, + { + "long_name": "FavoriteRecall1" + }, + { + "long_name": "FavoriteRecall2" + }, + { + "long_name": "FavoriteRecall3" + }, + { + "long_name": "FavoriteStore0" + }, + { + "long_name": "FavoriteStore1" + }, + { + "long_name": "FavoriteStore2" + }, + { + "long_name": "FavoriteStore3" + }, + { + "long_name": "Guide" + }, + { + "long_name": "GuideNextDay" + }, + { + "long_name": "GuidePreviousDay" + }, + { + "long_name": "Info" + }, + { + "long_name": "InstantReplay" + }, + { + "long_name": "Link" + }, + { + "long_name": "ListProgram" + }, + { + "long_name": "LiveContent" + }, + { + "long_name": "Lock" + }, + { + "long_name": "MediaApps" + }, + { + "long_name": "MediaAudioTrack" + }, + { + "long_name": "MediaLast" + }, + { + "long_name": "MediaSkipBackward" + }, + { + "long_name": "MediaSkipForward" + }, + { + "long_name": "MediaStepBackward" + }, + { + "long_name": "MediaStepForward" + }, + { + "long_name": "MediaTopMenu" + }, + { + "long_name": "NavigateIn" + }, + { + "long_name": "NavigateNext" + }, + { + "long_name": "NavigateOut" + }, + { + "long_name": "NavigatePrevious" + }, + { + "long_name": "NextFavoriteChannel" + }, + { + "long_name": "NextUserProfile" + }, + { + "long_name": "OnDemand" + }, + { + "long_name": "Pairing" + }, + { + "long_name": "PinPDown" + }, + { + "long_name": "PinPMove" + }, + { + "long_name": "PinPToggle" + }, + { + "long_name": "PinPUp" + }, + { + "long_name": "PlaySpeedDown" + }, + { + "long_name": "PlaySpeedReset" + }, + { + "long_name": "PlaySpeedUp" + }, + { + "long_name": "RandomToggle" + }, + { + "long_name": "RcLowBattery" + }, + { + "long_name": "RecordSpeedNext" + }, + { + "long_name": "RfBypass" + }, + { + "long_name": "ScanChannelsToggle" + }, + { + "long_name": "ScreenModeNext" + }, + { + "long_name": "Settings" + }, + { + "long_name": "SplitScreenToggle" + }, + { + "long_name": "STBInput" + }, + { + "long_name": "STBPower" + }, + { + "long_name": "Subtitle" + }, + { + "long_name": "Teletext" + }, + { + "long_name": "VideoModeNext" + }, + { + "long_name": "Wink" + }, + { + "long_name": "ZoomToggle" + }, + { + "long_name": "F1" + }, + { + "long_name": "F2" + }, + { + "long_name": "F3" + }, + { + "long_name": "F4" + }, + { + "long_name": "F5" + }, + { + "long_name": "F6" + }, + { + "long_name": "F7" + }, + { + "long_name": "F8" + }, + { + "long_name": "F9" + }, + { + "long_name": "F10" + }, + { + "long_name": "F11" + }, + { + "long_name": "F12" + }, + { + "long_name": "F13" + }, + { + "long_name": "F14" + }, + { + "long_name": "F15" + }, + { + "long_name": "F16" + }, + { + "long_name": "F17" + }, + { + "long_name": "F18" + }, + { + "long_name": "F19" + }, + { + "long_name": "F20" + }, + { + "long_name": "F21" + }, + { + "long_name": "F22" + }, + { + "long_name": "F23" + }, + { + "long_name": "F24" + }, + { + "long_name": "F25" + }, + { + "long_name": "F26" + }, + { + "long_name": "F27" + }, + { + "long_name": "F28" + }, + { + "long_name": "F29" + }, + { + "long_name": "F30" + }, + { + "long_name": "F31" + }, + { + "long_name": "F32" + }, + { + "long_name": "F33" + }, + { + "long_name": "F34" + }, + { + "long_name": "F35" + } + ], + "short_name": "Key", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::keyboard::KeyCode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::keyboard::KeyCode", + "oneOf": [ + { + "items": false, + "long_name": "Unidentified", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::keyboard::NativeKeyCode" + } + } + ], + "short_name": "Unidentified", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Backquote" + }, + { + "long_name": "Backslash" + }, + { + "long_name": "BracketLeft" + }, + { + "long_name": "BracketRight" + }, + { + "long_name": "Comma" + }, + { + "long_name": "Digit0" + }, + { + "long_name": "Digit1" + }, + { + "long_name": "Digit2" + }, + { + "long_name": "Digit3" + }, + { + "long_name": "Digit4" + }, + { + "long_name": "Digit5" + }, + { + "long_name": "Digit6" + }, + { + "long_name": "Digit7" + }, + { + "long_name": "Digit8" + }, + { + "long_name": "Digit9" + }, + { + "long_name": "Equal" + }, + { + "long_name": "IntlBackslash" + }, + { + "long_name": "IntlRo" + }, + { + "long_name": "IntlYen" + }, + { + "long_name": "KeyA" + }, + { + "long_name": "KeyB" + }, + { + "long_name": "KeyC" + }, + { + "long_name": "KeyD" + }, + { + "long_name": "KeyE" + }, + { + "long_name": "KeyF" + }, + { + "long_name": "KeyG" + }, + { + "long_name": "KeyH" + }, + { + "long_name": "KeyI" + }, + { + "long_name": "KeyJ" + }, + { + "long_name": "KeyK" + }, + { + "long_name": "KeyL" + }, + { + "long_name": "KeyM" + }, + { + "long_name": "KeyN" + }, + { + "long_name": "KeyO" + }, + { + "long_name": "KeyP" + }, + { + "long_name": "KeyQ" + }, + { + "long_name": "KeyR" + }, + { + "long_name": "KeyS" + }, + { + "long_name": "KeyT" + }, + { + "long_name": "KeyU" + }, + { + "long_name": "KeyV" + }, + { + "long_name": "KeyW" + }, + { + "long_name": "KeyX" + }, + { + "long_name": "KeyY" + }, + { + "long_name": "KeyZ" + }, + { + "long_name": "Minus" + }, + { + "long_name": "Period" + }, + { + "long_name": "Quote" + }, + { + "long_name": "Semicolon" + }, + { + "long_name": "Slash" + }, + { + "long_name": "AltLeft" + }, + { + "long_name": "AltRight" + }, + { + "long_name": "Backspace" + }, + { + "long_name": "CapsLock" + }, + { + "long_name": "ContextMenu" + }, + { + "long_name": "ControlLeft" + }, + { + "long_name": "ControlRight" + }, + { + "long_name": "Enter" + }, + { + "long_name": "SuperLeft" + }, + { + "long_name": "SuperRight" + }, + { + "long_name": "ShiftLeft" + }, + { + "long_name": "ShiftRight" + }, + { + "long_name": "Space" + }, + { + "long_name": "Tab" + }, + { + "long_name": "Convert" + }, + { + "long_name": "KanaMode" + }, + { + "long_name": "Lang1" + }, + { + "long_name": "Lang2" + }, + { + "long_name": "Lang3" + }, + { + "long_name": "Lang4" + }, + { + "long_name": "Lang5" + }, + { + "long_name": "NonConvert" + }, + { + "long_name": "Delete" + }, + { + "long_name": "End" + }, + { + "long_name": "Help" + }, + { + "long_name": "Home" + }, + { + "long_name": "Insert" + }, + { + "long_name": "PageDown" + }, + { + "long_name": "PageUp" + }, + { + "long_name": "ArrowDown" + }, + { + "long_name": "ArrowLeft" + }, + { + "long_name": "ArrowRight" + }, + { + "long_name": "ArrowUp" + }, + { + "long_name": "NumLock" + }, + { + "long_name": "Numpad0" + }, + { + "long_name": "Numpad1" + }, + { + "long_name": "Numpad2" + }, + { + "long_name": "Numpad3" + }, + { + "long_name": "Numpad4" + }, + { + "long_name": "Numpad5" + }, + { + "long_name": "Numpad6" + }, + { + "long_name": "Numpad7" + }, + { + "long_name": "Numpad8" + }, + { + "long_name": "Numpad9" + }, + { + "long_name": "NumpadAdd" + }, + { + "long_name": "NumpadBackspace" + }, + { + "long_name": "NumpadClear" + }, + { + "long_name": "NumpadClearEntry" + }, + { + "long_name": "NumpadComma" + }, + { + "long_name": "NumpadDecimal" + }, + { + "long_name": "NumpadDivide" + }, + { + "long_name": "NumpadEnter" + }, + { + "long_name": "NumpadEqual" + }, + { + "long_name": "NumpadHash" + }, + { + "long_name": "NumpadMemoryAdd" + }, + { + "long_name": "NumpadMemoryClear" + }, + { + "long_name": "NumpadMemoryRecall" + }, + { + "long_name": "NumpadMemoryStore" + }, + { + "long_name": "NumpadMemorySubtract" + }, + { + "long_name": "NumpadMultiply" + }, + { + "long_name": "NumpadParenLeft" + }, + { + "long_name": "NumpadParenRight" + }, + { + "long_name": "NumpadStar" + }, + { + "long_name": "NumpadSubtract" + }, + { + "long_name": "Escape" + }, + { + "long_name": "Fn" + }, + { + "long_name": "FnLock" + }, + { + "long_name": "PrintScreen" + }, + { + "long_name": "ScrollLock" + }, + { + "long_name": "Pause" + }, + { + "long_name": "BrowserBack" + }, + { + "long_name": "BrowserFavorites" + }, + { + "long_name": "BrowserForward" + }, + { + "long_name": "BrowserHome" + }, + { + "long_name": "BrowserRefresh" + }, + { + "long_name": "BrowserSearch" + }, + { + "long_name": "BrowserStop" + }, + { + "long_name": "Eject" + }, + { + "long_name": "LaunchApp1" + }, + { + "long_name": "LaunchApp2" + }, + { + "long_name": "LaunchMail" + }, + { + "long_name": "MediaPlayPause" + }, + { + "long_name": "MediaSelect" + }, + { + "long_name": "MediaStop" + }, + { + "long_name": "MediaTrackNext" + }, + { + "long_name": "MediaTrackPrevious" + }, + { + "long_name": "Power" + }, + { + "long_name": "Sleep" + }, + { + "long_name": "AudioVolumeDown" + }, + { + "long_name": "AudioVolumeMute" + }, + { + "long_name": "AudioVolumeUp" + }, + { + "long_name": "WakeUp" + }, + { + "long_name": "Meta" + }, + { + "long_name": "Hyper" + }, + { + "long_name": "Turbo" + }, + { + "long_name": "Abort" + }, + { + "long_name": "Resume" + }, + { + "long_name": "Suspend" + }, + { + "long_name": "Again" + }, + { + "long_name": "Copy" + }, + { + "long_name": "Cut" + }, + { + "long_name": "Find" + }, + { + "long_name": "Open" + }, + { + "long_name": "Paste" + }, + { + "long_name": "Props" + }, + { + "long_name": "Select" + }, + { + "long_name": "Undo" + }, + { + "long_name": "Hiragana" + }, + { + "long_name": "Katakana" + }, + { + "long_name": "F1" + }, + { + "long_name": "F2" + }, + { + "long_name": "F3" + }, + { + "long_name": "F4" + }, + { + "long_name": "F5" + }, + { + "long_name": "F6" + }, + { + "long_name": "F7" + }, + { + "long_name": "F8" + }, + { + "long_name": "F9" + }, + { + "long_name": "F10" + }, + { + "long_name": "F11" + }, + { + "long_name": "F12" + }, + { + "long_name": "F13" + }, + { + "long_name": "F14" + }, + { + "long_name": "F15" + }, + { + "long_name": "F16" + }, + { + "long_name": "F17" + }, + { + "long_name": "F18" + }, + { + "long_name": "F19" + }, + { + "long_name": "F20" + }, + { + "long_name": "F21" + }, + { + "long_name": "F22" + }, + { + "long_name": "F23" + }, + { + "long_name": "F24" + }, + { + "long_name": "F25" + }, + { + "long_name": "F26" + }, + { + "long_name": "F27" + }, + { + "long_name": "F28" + }, + { + "long_name": "F29" + }, + { + "long_name": "F30" + }, + { + "long_name": "F31" + }, + { + "long_name": "F32" + }, + { + "long_name": "F33" + }, + { + "long_name": "F34" + }, + { + "long_name": "F35" + } + ], + "short_name": "KeyCode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::keyboard::KeyboardInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::keyboard::KeyboardInput", + "properties": { + "key_code": { + "type": { + "$ref": "#/$defs/bevy_input::keyboard::KeyCode" + } + }, + "logical_key": { + "type": { + "$ref": "#/$defs/bevy_input::keyboard::Key" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "key_code", + "logical_key", + "state", + "window" + ], + "short_name": "KeyboardInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::keyboard::NativeKey": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::keyboard::NativeKey", + "oneOf": [ + { + "long_name": "Unidentified" + }, + { + "items": false, + "long_name": "Android", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Android", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "MacOS", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "MacOS", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Windows", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "Windows", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Xkb", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Xkb", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Web", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/smol_str::SmolStr" + } + } + ], + "short_name": "Web", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "NativeKey", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::keyboard::NativeKeyCode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::keyboard::NativeKeyCode", + "oneOf": [ + { + "long_name": "Unidentified" + }, + { + "items": false, + "long_name": "Android", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Android", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "MacOS", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "MacOS", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Windows", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "Windows", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Xkb", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Xkb", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "NativeKeyCode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::mouse::MouseButton": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::mouse::MouseButton", + "oneOf": [ + { + "long_name": "Left" + }, + { + "long_name": "Right" + }, + { + "long_name": "Middle" + }, + { + "long_name": "Back" + }, + { + "long_name": "Forward" + }, + { + "items": false, + "long_name": "Other", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "MouseButton", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::mouse::MouseButtonInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::mouse::MouseButtonInput", + "properties": { + "button": { + "type": { + "$ref": "#/$defs/bevy_input::mouse::MouseButton" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "button", + "state", + "window" + ], + "short_name": "MouseButtonInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::touch::ForceTouch": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::touch::ForceTouch", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Calibrated", + "properties": { + "altitude_angle": { + "long_name": "altitude_angle", + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "force": { + "long_name": "force", + "type": { + "$ref": "#/$defs/f64" + } + }, + "max_possible_force": { + "long_name": "max_possible_force", + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "force", + "max_possible_force" + ], + "short_name": "Calibrated", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "long_name": "Normalized", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "Normalized", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ForceTouch", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::touch::TouchInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::touch::TouchInput", + "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" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "phase", + "position", + "window", + "id" + ], + "short_name": "TouchInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::touch::TouchPhase": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_input::touch::TouchPhase", + "oneOf": [ + "Started", + "Moved", + "Ended", + "Canceled" + ], + "short_name": "TouchPhase", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_math::rects::rect::Rect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_math::rects::rect::Rect", + "properties": { + "max": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "min": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "min", + "max" + ], + "short_name": "Rect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_math::rects::urect::URect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_math::rects::urect::URect", + "properties": { + "max": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + }, + "min": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + } + }, + "required": [ + "min", + "max" + ], + "short_name": "URect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::bundle::CascadesVisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::bundle::CascadesVisibleEntities", + "properties": {}, + "required": [], + "short_name": "CascadesVisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::bundle::CubemapVisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::bundle::CubemapVisibleEntities", + "properties": {}, + "required": [], + "short_name": "CubemapVisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::cluster::ClusterConfig": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::cluster::ClusterConfig", + "oneOf": [ + { + "long_name": "None" + }, + { + "long_name": "Single" + }, + { + "additionalProperties": false, + "long_name": "XYZ", + "properties": { + "dimensions": { + "long_name": "dimensions", + "type": { + "$ref": "#/$defs/glam::UVec3" + } + }, + "dynamic_resizing": { + "long_name": "dynamic_resizing", + "type": { + "$ref": "#/$defs/bool" + } + }, + "z_config": { + "long_name": "z_config", + "type": { + "$ref": "#/$defs/bevy_pbr::cluster::ClusterZConfig" + } + } + }, + "required": [ + "dimensions", + "z_config", + "dynamic_resizing" + ], + "short_name": "XYZ", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "FixedZ", + "properties": { + "dynamic_resizing": { + "long_name": "dynamic_resizing", + "type": { + "$ref": "#/$defs/bool" + } + }, + "total": { + "long_name": "total", + "type": { + "$ref": "#/$defs/u32" + } + }, + "z_config": { + "long_name": "z_config", + "type": { + "$ref": "#/$defs/bevy_pbr::cluster::ClusterZConfig" + } + }, + "z_slices": { + "long_name": "z_slices", + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "total", + "z_slices", + "z_config", + "dynamic_resizing" + ], + "short_name": "FixedZ", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "ClusterConfig", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::cluster::ClusterFarZMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::cluster::ClusterFarZMode", + "oneOf": [ + { + "long_name": "MaxClusterableObjectRange" + }, + { + "items": false, + "long_name": "Constant", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Constant", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ClusterFarZMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::cluster::ClusterZConfig": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::cluster::ClusterZConfig", + "properties": { + "far_z_mode": { + "type": { + "$ref": "#/$defs/bevy_pbr::cluster::ClusterFarZMode" + } + }, + "first_slice_depth": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "first_slice_depth", + "far_z_mode" + ], + "short_name": "ClusterZConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::fog::FogFalloff": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::fog::FogFalloff", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Linear", + "properties": { + "end": { + "long_name": "end", + "type": { + "$ref": "#/$defs/f32" + } + }, + "start": { + "long_name": "start", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "start", + "end" + ], + "short_name": "Linear", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Exponential", + "properties": { + "density": { + "long_name": "density", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "density" + ], + "short_name": "Exponential", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "ExponentialSquared", + "properties": { + "density": { + "long_name": "density", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "density" + ], + "short_name": "ExponentialSquared", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "Atmospheric", + "properties": { + "extinction": { + "long_name": "extinction", + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "inscattering": { + "long_name": "inscattering", + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "extinction", + "inscattering" + ], + "short_name": "Atmospheric", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "FogFalloff", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::fog::FogSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::fog::FogSettings", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "directional_light_color": { + "type": { + "$ref": "#/$defs/bevy_color::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::Cascade": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::light::Cascade", + "properties": { + "clip_from_cascade": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + }, + "clip_from_world": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + }, + "texel_size": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "world_from_cascade": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + } + }, + "required": [ + "world_from_cascade", + "clip_from_cascade", + "clip_from_world", + "texel_size" + ], + "short_name": "Cascade", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::CascadeShadowConfig": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::CascadeShadowConfig", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::Cascades": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::Cascades", + "properties": { + "cascades": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_ecs::entity::hash::EntityHash>" + } + } + }, + "required": [ + "cascades" + ], + "short_name": "Cascades", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::DirectionalLightShadowMap": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_pbr::light::DirectionalLightShadowMap", + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "DirectionalLightShadowMap", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::NotShadowCaster": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::NotShadowCaster", + "properties": {}, + "required": [], + "short_name": "NotShadowCaster", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::NotShadowReceiver": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::NotShadowReceiver", + "properties": {}, + "required": [], + "short_name": "NotShadowReceiver", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::PointLightShadowMap": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_pbr::light::PointLightShadowMap", + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "PointLightShadowMap", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::ShadowFilteringMethod": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::ShadowFilteringMethod", + "oneOf": [ + "Hardware2x2", + "Gaussian", + "Temporal" + ], + "short_name": "ShadowFilteringMethod", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_pbr::light::ambient_light::AmbientLight": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_pbr::light::ambient_light::AmbientLight", + "properties": { + "brightness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + }, + "required": [ + "color", + "brightness" + ], + "short_name": "AmbientLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::directional_light::DirectionalLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::directional_light::DirectionalLight", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::point_light::PointLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::point_light::PointLight", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::spot_light::SpotLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light::spot_light::SpotLight", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light_probe::LightProbe": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::light_probe::LightProbe", + "properties": {}, + "required": [], + "short_name": "LightProbe", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light_probe::environment_map::EnvironmentMapLight": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::light_probe::environment_map::EnvironmentMapLight", + "properties": { + "diffuse_map": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "specular_map": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "diffuse_map", + "specular_map", + "intensity" + ], + "short_name": "EnvironmentMapLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light_probe::irradiance_volume::IrradianceVolume": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::light_probe::irradiance_volume::IrradianceVolume", + "properties": { + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "voxels": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "voxels", + "intensity" + ], + "short_name": "IrradianceVolume", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::material::DefaultOpaqueRendererMethod": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_pbr::material::DefaultOpaqueRendererMethod", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_pbr::material::OpaqueRendererMethod" + } + } + ], + "short_name": "DefaultOpaqueRendererMethod", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_pbr::material::OpaqueRendererMethod": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::material::OpaqueRendererMethod", + "oneOf": [ + "Forward", + "Deferred", + "Auto" + ], + "short_name": "OpaqueRendererMethod", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_pbr::parallax::ParallaxMappingMethod": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::parallax::ParallaxMappingMethod", + "oneOf": [ + { + "long_name": "Occlusion" + }, + { + "additionalProperties": false, + "long_name": "Relief", + "properties": { + "max_steps": { + "long_name": "max_steps", + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "max_steps" + ], + "short_name": "Relief", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "ParallaxMappingMethod", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::pbr_material::StandardMaterial": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::pbr_material::StandardMaterial", + "properties": { + "alpha_mode": { + "type": { + "$ref": "#/$defs/bevy_render::alpha::AlphaMode" + } + }, + "anisotropy_rotation": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "anisotropy_strength": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "attenuation_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "attenuation_distance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "base_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "base_color_channel": { + "type": { + "$ref": "#/$defs/bevy_pbr::pbr_material::UvChannel" + } + }, + "base_color_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "clearcoat": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "clearcoat_perceptual_roughness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "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_color::linear_rgba::LinearRgba" + } + }, + "emissive_channel": { + "type": { + "$ref": "#/$defs/bevy_pbr::pbr_material::UvChannel" + } + }, + "emissive_exposure_weight": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "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" + } + }, + "lightmap_exposure": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_parallax_layer_count": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "metallic": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "metallic_roughness_channel": { + "type": { + "$ref": "#/$defs/bevy_pbr::pbr_material::UvChannel" + } + }, + "metallic_roughness_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "normal_map_channel": { + "type": { + "$ref": "#/$defs/bevy_pbr::pbr_material::UvChannel" + } + }, + "normal_map_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "occlusion_channel": { + "type": { + "$ref": "#/$defs/bevy_pbr::pbr_material::UvChannel" + } + }, + "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" + } + }, + "uv_transform": { + "type": { + "$ref": "#/$defs/glam::Affine2" + } + } + }, + "required": [ + "base_color", + "base_color_channel", + "emissive", + "emissive_exposure_weight", + "emissive_channel", + "perceptual_roughness", + "metallic", + "metallic_roughness_channel", + "reflectance", + "diffuse_transmission", + "specular_transmission", + "thickness", + "ior", + "attenuation_distance", + "attenuation_color", + "normal_map_channel", + "flip_normal_map_y", + "occlusion_channel", + "clearcoat", + "clearcoat_perceptual_roughness", + "anisotropy_strength", + "anisotropy_rotation", + "double_sided", + "unlit", + "fog_enabled", + "alpha_mode", + "depth_bias", + "parallax_depth_scale", + "parallax_mapping_method", + "max_parallax_layer_count", + "lightmap_exposure", + "opaque_render_method", + "deferred_lighting_pass_id", + "uv_transform" + ], + "short_name": "StandardMaterial", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::pbr_material::UvChannel": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::pbr_material::UvChannel", + "oneOf": [ + "Uv0", + "Uv1" + ], + "short_name": "UvChannel", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionQualityLevel": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionQualityLevel", + "oneOf": [ + { + "long_name": "Low" + }, + { + "long_name": "Medium" + }, + { + "long_name": "High" + }, + { + "long_name": "Ultra" + }, + { + "additionalProperties": false, + "long_name": "Custom", + "properties": { + "samples_per_slice_side": { + "long_name": "samples_per_slice_side", + "type": { + "$ref": "#/$defs/u32" + } + }, + "slice_count": { + "long_name": "slice_count", + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "slice_count", + "samples_per_slice_side" + ], + "short_name": "Custom", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "ScreenSpaceAmbientOcclusionQualityLevel", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings", + "properties": { + "quality_level": { + "type": { + "$ref": "#/$defs/bevy_pbr::ssao::ScreenSpaceAmbientOcclusionQualityLevel" + } + } + }, + "required": [ + "quality_level" + ], + "short_name": "ScreenSpaceAmbientOcclusionSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::ssr::ScreenSpaceReflectionsSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::ssr::ScreenSpaceReflectionsSettings", + "properties": { + "bisection_steps": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "linear_march_exponent": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "linear_steps": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "perceptual_roughness_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "thickness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "use_secant": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "perceptual_roughness_threshold", + "thickness", + "linear_steps", + "linear_march_exponent", + "bisection_steps", + "use_secant" + ], + "short_name": "ScreenSpaceReflectionsSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::volumetric_fog::VolumetricFogSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::volumetric_fog::VolumetricFogSettings", + "properties": { + "absorption": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "ambient_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "ambient_intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "density": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "fog_color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "light_intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "light_tint": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "max_depth": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scattering": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scattering_asymmetry": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "step_count": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "fog_color", + "ambient_color", + "ambient_intensity", + "step_count", + "max_depth", + "absorption", + "scattering", + "density", + "scattering_asymmetry", + "light_tint", + "light_intensity" + ], + "short_name": "VolumetricFogSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::volumetric_fog::VolumetricLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_pbr::volumetric_fog::VolumetricLight", + "properties": {}, + "required": [], + "short_name": "VolumetricLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::alpha::AlphaMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::alpha::AlphaMode", + "oneOf": [ + { + "long_name": "Opaque" + }, + { + "items": false, + "long_name": "Mask", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Mask", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "Blend" + }, + { + "long_name": "Premultiplied" + }, + { + "long_name": "AlphaToCoverage" + }, + { + "long_name": "Add" + }, + { + "long_name": "Multiply" + } + ], + "short_name": "AlphaMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::camera::Camera": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::camera::Camera", + "properties": { + "clear_color": { + "type": { + "$ref": "#/$defs/bevy_render::camera::clear_color::ClearColorConfig" + } + }, + "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", + "clear_color" + ], + "short_name": "Camera", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::camera::CameraMainTextureUsages": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::camera::CameraMainTextureUsages", + "short_name": "CameraMainTextureUsages", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::camera::camera::CameraRenderGraph": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::camera::CameraRenderGraph", + "short_name": "CameraRenderGraph", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::camera::camera::Exposure": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::camera::Exposure", + "short_name": "Exposure", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::camera::camera::MipBias": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_render::camera::camera::MipBias", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "MipBias", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::camera::camera::TemporalJitter": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::camera::TemporalJitter", + "properties": { + "offset": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "offset" + ], + "short_name": "TemporalJitter", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::camera::Viewport": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::camera::camera::Viewport", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::clear_color::ClearColor": { + "isComponent": false, + "isResource": true, + "items": false, + "long_name": "bevy_render::camera::clear_color::ClearColor", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + ], + "short_name": "ClearColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::camera::clear_color::ClearColorConfig": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::camera::clear_color::ClearColorConfig", + "oneOf": [ + { + "long_name": "Default" + }, + { + "items": false, + "long_name": "Custom", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + ], + "short_name": "Custom", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "None" + } + ], + "short_name": "ClearColorConfig", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::projection::OrthographicProjection": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::projection::OrthographicProjection", + "properties": { + "area": { + "type": { + "$ref": "#/$defs/bevy_math::rects::rect::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::PerspectiveProjection": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::projection::PerspectiveProjection", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::Projection": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::camera::projection::Projection", + "oneOf": [ + { + "items": false, + "long_name": "Perspective", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::PerspectiveProjection" + } + } + ], + "short_name": "Perspective", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Orthographic", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::OrthographicProjection" + } + } + ], + "short_name": "Orthographic", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Projection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::projection::ScalingMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::camera::projection::ScalingMode", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "Fixed", + "properties": { + "height": { + "long_name": "height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "width": { + "long_name": "width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "width", + "height" + ], + "short_name": "Fixed", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "long_name": "WindowSize", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "WindowSize", + "type": "array", + "typeInfo": "Tuple" + }, + { + "additionalProperties": false, + "long_name": "AutoMin", + "properties": { + "min_height": { + "long_name": "min_height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_width": { + "long_name": "min_width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "min_width", + "min_height" + ], + "short_name": "AutoMin", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "AutoMax", + "properties": { + "max_height": { + "long_name": "max_height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_width": { + "long_name": "max_width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "max_width", + "max_height" + ], + "short_name": "AutoMax", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "long_name": "FixedVertical", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "FixedVertical", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "FixedHorizontal", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "FixedHorizontal", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ScalingMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::globals::GlobalsUniform": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_render::globals::GlobalsUniform", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::mesh::Indices": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::mesh::mesh::Indices", + "oneOf": [ + { + "items": false, + "long_name": "U16", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "U16", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "U32", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "U32", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Indices", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::mesh::mesh::Mesh": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::mesh::mesh::Mesh", + "properties": { + "asset_usage": { + "type": { + "$ref": "#/$defs/bevy_render::render_asset::RenderAssetUsages" + } + }, + "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": [ + "asset_usage" + ], + "short_name": "Mesh", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::mesh::skinning::SkinnedMesh": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::mesh::mesh::skinning::SkinnedMesh", + "properties": { + "inverse_bindposes": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "joints": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "inverse_bindposes", + "joints" + ], + "short_name": "SkinnedMesh", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::morph::MeshMorphWeights": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::mesh::morph::MeshMorphWeights", + "properties": { + "weights": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "weights" + ], + "short_name": "MeshMorphWeights", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::morph::MorphWeights": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::mesh::morph::MorphWeights", + "properties": { + "first_mesh": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "weights": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "weights" + ], + "short_name": "MorphWeights", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::Aabb": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::primitives::Aabb", + "properties": { + "center": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "half_extents": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "center", + "half_extents" + ], + "short_name": "Aabb", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::CascadesFrusta": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::primitives::CascadesFrusta", + "properties": {}, + "required": [], + "short_name": "CascadesFrusta", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::CubemapFrusta": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::primitives::CubemapFrusta", + "properties": {}, + "required": [], + "short_name": "CubemapFrusta", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::Frustum": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::primitives::Frustum", + "properties": {}, + "required": [], + "short_name": "Frustum", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::render_asset::RenderAssetUsages": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::render_asset::RenderAssetUsages", + "short_name": "RenderAssetUsages", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::texture::image::Image": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::texture::image::Image", + "short_name": "Image", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::view::ColorGrading": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::view::ColorGrading", + "properties": { + "global": { + "type": { + "$ref": "#/$defs/bevy_render::view::ColorGradingGlobal" + } + }, + "highlights": { + "type": { + "$ref": "#/$defs/bevy_render::view::ColorGradingSection" + } + }, + "midtones": { + "type": { + "$ref": "#/$defs/bevy_render::view::ColorGradingSection" + } + }, + "shadows": { + "type": { + "$ref": "#/$defs/bevy_render::view::ColorGradingSection" + } + } + }, + "required": [ + "global", + "shadows", + "midtones", + "highlights" + ], + "short_name": "ColorGrading", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::ColorGradingGlobal": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::view::ColorGradingGlobal", + "properties": { + "exposure": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "midtones_range": { + "type": { + "$ref": "#/$defs/core::ops::Range" + } + }, + "post_saturation": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "temperature": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "tint": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "exposure", + "temperature", + "tint", + "hue", + "post_saturation", + "midtones_range" + ], + "short_name": "ColorGradingGlobal", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::ColorGradingSection": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::view::ColorGradingSection", + "properties": { + "contrast": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "gain": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "gamma": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "lift": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "saturation": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "saturation", + "contrast", + "gamma", + "gain", + "lift" + ], + "short_name": "ColorGradingSection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::Msaa": { + "isComponent": false, + "isResource": true, + "long_name": "bevy_render::view::Msaa", + "oneOf": [ + "Off", + "Sample2", + "Sample4", + "Sample8" + ], + "short_name": "Msaa", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_render::view::visibility::InheritedVisibility": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_render::view::visibility::InheritedVisibility", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "InheritedVisibility", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::view::visibility::NoFrustumCulling": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::view::visibility::NoFrustumCulling", + "properties": {}, + "required": [], + "short_name": "NoFrustumCulling", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::ViewVisibility": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_render::view::visibility::ViewVisibility", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "ViewVisibility", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::view::visibility::Visibility": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::view::visibility::Visibility", + "oneOf": [ + "Inherited", + "Hidden", + "Visible" + ], + "short_name": "Visibility", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_render::view::visibility::VisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_render::view::visibility::VisibleEntities", + "properties": {}, + "required": [], + "short_name": "VisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::range::VisibilityRange": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_render::view::visibility::range::VisibilityRange", + "properties": { + "end_margin": { + "type": { + "$ref": "#/$defs/core::ops::Range" + } + }, + "start_margin": { + "type": { + "$ref": "#/$defs/core::ops::Range" + } + } + }, + "required": [ + "start_margin", + "end_margin" + ], + "short_name": "VisibilityRange", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::render_layers::RenderLayers": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_render::view::visibility::render_layers::RenderLayers", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/smallvec::SmallVec<[u64; 1]>" + } + } + ], + "short_name": "RenderLayers", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_sprite::SpriteSource": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_sprite::SpriteSource", + "properties": {}, + "required": [], + "short_name": "SpriteSource", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::mesh2d::color_material::ColorMaterial": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::mesh2d::color_material::ColorMaterial", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + } + }, + "required": [ + "color" + ], + "short_name": "ColorMaterial", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::mesh2d::mesh::Mesh2dHandle": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_sprite::mesh2d::mesh::Mesh2dHandle", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Mesh2dHandle", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_sprite::sprite::Anchor": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::sprite::Anchor", + "oneOf": [ + { + "long_name": "Center" + }, + { + "long_name": "BottomLeft" + }, + { + "long_name": "BottomCenter" + }, + { + "long_name": "BottomRight" + }, + { + "long_name": "CenterLeft" + }, + { + "long_name": "CenterRight" + }, + { + "long_name": "TopLeft" + }, + { + "long_name": "TopCenter" + }, + { + "long_name": "TopRight" + }, + { + "items": false, + "long_name": "Custom", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "Custom", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Anchor", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_sprite::sprite::ImageScaleMode": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_sprite::sprite::ImageScaleMode", + "oneOf": [ + { + "items": false, + "long_name": "Sliced", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_sprite::texture_slice::slicer::TextureSlicer" + } + } + ], + "short_name": "Sliced", + "type": "array", + "typeInfo": "Tuple" + }, + { + "additionalProperties": false, + "long_name": "Tiled", + "properties": { + "stretch_value": { + "long_name": "stretch_value", + "type": { + "$ref": "#/$defs/f32" + } + }, + "tile_x": { + "long_name": "tile_x", + "type": { + "$ref": "#/$defs/bool" + } + }, + "tile_y": { + "long_name": "tile_y", + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "tile_x", + "tile_y", + "stretch_value" + ], + "short_name": "Tiled", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "ImageScaleMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_sprite::sprite::Sprite": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_sprite::sprite::Sprite", + "properties": { + "anchor": { + "type": { + "$ref": "#/$defs/bevy_sprite::sprite::Anchor" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_color::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_atlas::TextureAtlas": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::texture_atlas::TextureAtlas", + "properties": { + "index": { + "type": { + "$ref": "#/$defs/usize" + } + }, + "layout": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "layout", + "index" + ], + "short_name": "TextureAtlas", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_atlas::TextureAtlasLayout": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::texture_atlas::TextureAtlasLayout", + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + }, + "texture_handles": { + "type": { + "$ref": "#/$defs/core::option::Option, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>>" + } + }, + "textures": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "size", + "textures" + ], + "short_name": "TextureAtlasLayout", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_slice::border_rect::BorderRect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::texture_slice::border_rect::BorderRect", + "properties": { + "bottom": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "left": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "right": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "top": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "left", + "right", + "top", + "bottom" + ], + "short_name": "BorderRect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_slice::slicer::SliceScaleMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::texture_slice::slicer::SliceScaleMode", + "oneOf": [ + { + "long_name": "Stretch" + }, + { + "additionalProperties": false, + "long_name": "Tile", + "properties": { + "stretch_value": { + "long_name": "stretch_value", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "stretch_value" + ], + "short_name": "Tile", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "SliceScaleMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_sprite::texture_slice::slicer::TextureSlicer": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_sprite::texture_slice::slicer::TextureSlicer", + "properties": { + "border": { + "type": { + "$ref": "#/$defs/bevy_sprite::texture_slice::border_rect::BorderRect" + } + }, + "center_scale_mode": { + "type": { + "$ref": "#/$defs/bevy_sprite::texture_slice::slicer::SliceScaleMode" + } + }, + "max_corner_scale": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "sides_scale_mode": { + "type": { + "$ref": "#/$defs/bevy_sprite::texture_slice::slicer::SliceScaleMode" + } + } + }, + "required": [ + "border", + "center_scale_mode", + "sides_scale_mode", + "max_corner_scale" + ], + "short_name": "TextureSlicer", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::font_atlas_set::GlyphAtlasInfo": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_text::font_atlas_set::GlyphAtlasInfo", + "properties": { + "glyph_index": { + "type": { + "$ref": "#/$defs/usize" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "texture_atlas": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "texture_atlas", + "texture", + "glyph_index" + ], + "short_name": "GlyphAtlasInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::glyph_brush::PositionedGlyph": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_text::glyph_brush::PositionedGlyph", + "properties": { + "atlas_info": { + "type": { + "$ref": "#/$defs/bevy_text::font_atlas_set::GlyphAtlasInfo" + } + }, + "byte_index": { + "type": { + "$ref": "#/$defs/usize" + } + }, + "position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "section_index": { + "type": { + "$ref": "#/$defs/usize" + } + }, + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "position", + "size", + "atlas_info", + "section_index", + "byte_index" + ], + "short_name": "PositionedGlyph", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::pipeline::TextLayoutInfo": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_text::pipeline::TextLayoutInfo", + "properties": { + "glyphs": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "logical_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "glyphs", + "logical_size" + ], + "short_name": "TextLayoutInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text2d::Text2dBounds": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_text::text2d::Text2dBounds", + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "size" + ], + "short_name": "Text2dBounds", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::BreakLineOn": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_text::text::BreakLineOn", + "oneOf": [ + "WordBoundary", + "AnyCharacter", + "NoWrap" + ], + "short_name": "BreakLineOn", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_text::text::JustifyText": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_text::text::JustifyText", + "oneOf": [ + "Left", + "Center", + "Right" + ], + "short_name": "JustifyText", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_text::text::Text": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_text::text::Text", + "properties": { + "justify": { + "type": { + "$ref": "#/$defs/bevy_text::text::JustifyText" + } + }, + "linebreak_behavior": { + "type": { + "$ref": "#/$defs/bevy_text::text::BreakLineOn" + } + }, + "sections": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "sections", + "justify", + "linebreak_behavior" + ], + "short_name": "Text", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::TextSection": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_text::text::TextSection", + "properties": { + "style": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextStyle" + } + }, + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value", + "style" + ], + "short_name": "TextSection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::TextStyle": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_text::text::TextStyle", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "font": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "font_size": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "font", + "font_size", + "color" + ], + "short_name": "TextStyle", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::fixed::Fixed": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_time::fixed::Fixed", + "properties": { + "overstep": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "timestep": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "timestep", + "overstep" + ], + "short_name": "Fixed", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::real::Real": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_time::real::Real", + "properties": { + "first_update": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "last_update": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "startup": { + "type": { + "$ref": "#/$defs/bevy_utils::Instant" + } + } + }, + "required": [ + "startup" + ], + "short_name": "Real", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::stopwatch::Stopwatch": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_time::stopwatch::Stopwatch", + "properties": { + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "elapsed", + "paused" + ], + "short_name": "Stopwatch", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time<()>": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_time::time::Time<()>", + "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<()>", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_time::time::Time", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_time::time::Time", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "long_name": "bevy_time::time::Time", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::timer::Timer": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_time::timer::Timer", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::timer::TimerMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_time::timer::TimerMode", + "oneOf": [ + "Once", + "Repeating" + ], + "short_name": "TimerMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_time::virt::Virtual": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_time::virt::Virtual", + "properties": { + "effective_speed": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "max_delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "relative_speed": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "max_delta", + "paused", + "relative_speed", + "effective_speed" + ], + "short_name": "Virtual", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_transform::components::global_transform::GlobalTransform": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_transform::components::global_transform::GlobalTransform", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Affine3A" + } + } + ], + "short_name": "GlobalTransform", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_transform::components::transform::Transform": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_transform::components::transform::Transform", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::UiScale": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_ui::UiScale", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "UiScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::focus::FocusPolicy": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::focus::FocusPolicy", + "oneOf": [ + "Block", + "Pass" + ], + "short_name": "FocusPolicy", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::focus::Interaction": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::focus::Interaction", + "oneOf": [ + "Pressed", + "Hovered", + "None" + ], + "short_name": "Interaction", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::focus::RelativeCursorPosition": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::focus::RelativeCursorPosition", + "properties": { + "normalized": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "normalized_visible_node_rect": { + "type": { + "$ref": "#/$defs/bevy_math::rects::rect::Rect" + } + } + }, + "required": [ + "normalized_visible_node_rect" + ], + "short_name": "RelativeCursorPosition", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::geometry::UiRect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::geometry::UiRect", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::geometry::Val": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::geometry::Val", + "oneOf": [ + { + "long_name": "Auto" + }, + { + "items": false, + "long_name": "Px", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Px", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Percent", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Percent", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Vw", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Vw", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Vh", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Vh", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "VMin", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "VMin", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "VMax", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "VMax", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Val", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::measurement::ContentSize": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::measurement::ContentSize", + "properties": {}, + "required": [], + "short_name": "ContentSize", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::AlignContent": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::AlignContent", + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "short_name": "AlignContent", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::AlignItems": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::AlignItems", + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "AlignItems", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::AlignSelf": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::AlignSelf", + "oneOf": [ + "Auto", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "AlignSelf", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::BackgroundColor": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_ui::ui_node::BackgroundColor", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + ], + "short_name": "BackgroundColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::BorderColor": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "bevy_ui::ui_node::BorderColor", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + ], + "short_name": "BorderColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::BorderRadius": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::BorderRadius", + "properties": { + "bottom_left": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "bottom_right": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "top_left": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "top_right": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "top_left", + "top_right", + "bottom_left", + "bottom_right" + ], + "short_name": "BorderRadius", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::CalculatedClip": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::CalculatedClip", + "properties": { + "clip": { + "type": { + "$ref": "#/$defs/bevy_math::rects::rect::Rect" + } + } + }, + "required": [ + "clip" + ], + "short_name": "CalculatedClip", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Direction": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::Direction", + "oneOf": [ + "Inherit", + "LeftToRight", + "RightToLeft" + ], + "short_name": "Direction", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::Display": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::Display", + "oneOf": [ + "Flex", + "Grid", + "Block", + "None" + ], + "short_name": "Display", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::FlexDirection": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::FlexDirection", + "oneOf": [ + "Row", + "Column", + "RowReverse", + "ColumnReverse" + ], + "short_name": "FlexDirection", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::FlexWrap": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::FlexWrap", + "oneOf": [ + "NoWrap", + "Wrap", + "WrapReverse" + ], + "short_name": "FlexWrap", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::GridAutoFlow": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::GridAutoFlow", + "oneOf": [ + "Row", + "Column", + "RowDense", + "ColumnDense" + ], + "short_name": "GridAutoFlow", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::GridPlacement": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::GridPlacement", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::GridTrack": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::GridTrack", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::GridTrackRepetition": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::GridTrackRepetition", + "oneOf": [ + { + "items": false, + "long_name": "Count", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "Count", + "type": "array", + "typeInfo": "Tuple" + }, + { + "long_name": "AutoFill" + }, + { + "long_name": "AutoFit" + } + ], + "short_name": "GridTrackRepetition", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifyContent": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::JustifyContent", + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "short_name": "JustifyContent", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifyItems": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::JustifyItems", + "oneOf": [ + "Default", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "JustifyItems", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifySelf": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::JustifySelf", + "oneOf": [ + "Auto", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "JustifySelf", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::MaxTrackSizingFunction": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::MaxTrackSizingFunction", + "short_name": "MaxTrackSizingFunction", + "type": "object", + "typeInfo": "Value" + }, + "bevy_ui::ui_node::MinTrackSizingFunction": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::MinTrackSizingFunction", + "short_name": "MinTrackSizingFunction", + "type": "object", + "typeInfo": "Value" + }, + "bevy_ui::ui_node::Node": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::Node", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Outline": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::Outline", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Overflow": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::Overflow", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::OverflowAxis": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::OverflowAxis", + "oneOf": [ + "Visible", + "Clip", + "Hidden" + ], + "short_name": "OverflowAxis", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::PositionType": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::PositionType", + "oneOf": [ + "Relative", + "Absolute" + ], + "short_name": "PositionType", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::RepeatedGridTrack": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_ui::ui_node::RepeatedGridTrack", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Style": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::Style", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::TargetCamera": { + "isComponent": false, + "isResource": false, + "items": false, + "long_name": "bevy_ui::ui_node::TargetCamera", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + ], + "short_name": "TargetCamera", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::UiImage": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::UiImage", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "color", + "texture", + "flip_x", + "flip_y" + ], + "short_name": "UiImage", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::ZIndex": { + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::ui_node::ZIndex", + "oneOf": [ + { + "items": false, + "long_name": "Local", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/i32" + } + } + ], + "short_name": "Local", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "Global", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/i32" + } + } + ], + "short_name": "Global", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ZIndex", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::widget::button::Button": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::widget::button::Button", + "properties": {}, + "required": [], + "short_name": "Button", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::image::UiImageSize": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::widget::image::UiImageSize", + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + } + }, + "required": [ + "size" + ], + "short_name": "UiImageSize", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::label::Label": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::widget::label::Label", + "properties": {}, + "required": [], + "short_name": "Label", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::text::TextFlags": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_ui::widget::text::TextFlags", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_utils::Duration": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_utils::Duration", + "short_name": "Duration", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::Instant": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_utils::Instant", + "short_name": "Instant", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>", + "short_name": "HashMap, DefaultHashBuilder>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>", + "short_name": "HashMap, DefaultHashBuilder>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>", + "short_name": "HashMap, DefaultHashBuilder>, DefaultHashBuilder>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + }, + "bevy_utils::hashbrown::HashMap": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap", + "short_name": "HashMap", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/petgraph::graph::NodeIndex" + } + } + }, + "bevy_utils::hashbrown::HashMap, bevy_utils::NoOpHash>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/bevy_animation::AnimationTargetId" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, bevy_utils::NoOpHash>", + "short_name": "HashMap, NoOpHash>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "bevy_utils::hashbrown::HashMap, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>", + "short_name": "HashMap, usize, DefaultHashBuilder>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "bevy_utils::hashbrown::HashMap, bevy_ecs::entity::hash::EntityHash>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, bevy_ecs::entity::hash::EntityHash>", + "short_name": "HashMap, EntityHash>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "bevy_utils::hashbrown::HashMap": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadAxis" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap", + "short_name": "HashMap", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::AxisSettings" + } + } + }, + "bevy_utils::hashbrown::HashMap": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButton" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap", + "short_name": "HashMap", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::ButtonAxisSettings" + } + } + }, + "bevy_utils::hashbrown::HashMap": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButton" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap", + "short_name": "HashMap", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::ButtonSettings" + } + } + }, + "bevy_utils::hashbrown::HashMap": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/petgraph::graph::NodeIndex" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap", + "short_name": "HashMap", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "long_name": "bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>", + "short_name": "HashMap, DefaultHashBuilder>", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "bevy_window::cursor::CursorIcon": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::cursor::CursorIcon", + "oneOf": [ + "Default", + "ContextMenu", + "Help", + "Pointer", + "Progress", + "Wait", + "Cell", + "Crosshair", + "Text", + "VerticalText", + "Alias", + "Copy", + "Move", + "NoDrop", + "NotAllowed", + "Grab", + "Grabbing", + "EResize", + "NResize", + "NeResize", + "NwResize", + "SResize", + "SeResize", + "SwResize", + "WResize", + "EwResize", + "NsResize", + "NeswResize", + "NwseResize", + "ColResize", + "RowResize", + "AllScroll", + "ZoomIn", + "ZoomOut" + ], + "short_name": "CursorIcon", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::event::AppLifecycle": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::AppLifecycle", + "oneOf": [ + "Idle", + "Running", + "WillSuspend", + "Suspended", + "WillResume" + ], + "short_name": "AppLifecycle", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::event::CursorEntered": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::CursorEntered", + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "CursorEntered", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::CursorLeft": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::CursorLeft", + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "CursorLeft", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::CursorMoved": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::CursorMoved", + "properties": { + "delta": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "position" + ], + "short_name": "CursorMoved", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::FileDragAndDrop": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::FileDragAndDrop", + "oneOf": [ + { + "additionalProperties": false, + "long_name": "DroppedFile", + "properties": { + "path_buf": { + "long_name": "path_buf", + "type": { + "$ref": "#/$defs/std::path::PathBuf" + } + }, + "window": { + "long_name": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "path_buf" + ], + "short_name": "DroppedFile", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "HoveredFile", + "properties": { + "path_buf": { + "long_name": "path_buf", + "type": { + "$ref": "#/$defs/std::path::PathBuf" + } + }, + "window": { + "long_name": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "path_buf" + ], + "short_name": "HoveredFile", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "long_name": "HoveredFileCanceled", + "properties": { + "window": { + "long_name": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "HoveredFileCanceled", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "FileDragAndDrop", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::event::ReceivedCharacter": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::ReceivedCharacter", + "properties": { + "char": { + "type": { + "$ref": "#/$defs/smol_str::SmolStr" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "char" + ], + "short_name": "ReceivedCharacter", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::RequestRedraw": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::RequestRedraw", + "properties": {}, + "required": [], + "short_name": "RequestRedraw", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowBackendScaleFactorChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowBackendScaleFactorChanged", + "properties": { + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "scale_factor" + ], + "short_name": "WindowBackendScaleFactorChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowCloseRequested": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowCloseRequested", + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowCloseRequested", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowClosed": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowClosed", + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowClosed", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowClosing": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowClosing", + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowClosing", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowCreated": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowCreated", + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowCreated", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowFocused": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowFocused", + "properties": { + "focused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "focused" + ], + "short_name": "WindowFocused", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowMoved": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowMoved", + "properties": { + "position": { + "type": { + "$ref": "#/$defs/glam::IVec2" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "position" + ], + "short_name": "WindowMoved", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowOccluded": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowOccluded", + "properties": { + "occluded": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "occluded" + ], + "short_name": "WindowOccluded", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowResized": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowResized", + "properties": { + "height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "width", + "height" + ], + "short_name": "WindowResized", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowScaleFactorChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowScaleFactorChanged", + "properties": { + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "scale_factor" + ], + "short_name": "WindowScaleFactorChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowThemeChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::event::WindowThemeChanged", + "properties": { + "theme": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowTheme" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + }, + "required": [ + "window", + "theme" + ], + "short_name": "WindowThemeChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::CompositeAlphaMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::CompositeAlphaMode", + "oneOf": [ + "Auto", + "Opaque", + "PreMultiplied", + "PostMultiplied", + "Inherit" + ], + "short_name": "CompositeAlphaMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::Cursor": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::Cursor", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::CursorGrabMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::CursorGrabMode", + "oneOf": [ + "None", + "Confined", + "Locked" + ], + "short_name": "CursorGrabMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::EnabledButtons": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::EnabledButtons", + "properties": { + "close": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "maximize": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "minimize": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "minimize", + "maximize", + "close" + ], + "short_name": "EnabledButtons", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::InternalWindowState": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::InternalWindowState", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::MonitorSelection": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::MonitorSelection", + "oneOf": [ + { + "long_name": "Current" + }, + { + "long_name": "Primary" + }, + { + "items": false, + "long_name": "Index", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/usize" + } + } + ], + "short_name": "Index", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "MonitorSelection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::window::PresentMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::PresentMode", + "oneOf": [ + "AutoVsync", + "AutoNoVsync", + "Fifo", + "FifoRelaxed", + "Immediate", + "Mailbox" + ], + "short_name": "PresentMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::PrimaryWindow": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_window::window::PrimaryWindow", + "properties": {}, + "required": [], + "short_name": "PrimaryWindow", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::Window": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "bevy_window::window::Window", + "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" + } + }, + "desired_maximum_frame_latency": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "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" + } + }, + "name": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "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" + } + }, + "recognize_doubletap_gesture": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "recognize_pan_gesture": { + "type": { + "$ref": "#/$defs/core::option::Option<(u8, u8)>" + } + }, + "recognize_pinch_gesture": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "recognize_rotation_gesture": { + "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" + } + }, + "skip_taskbar": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "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", + "skip_taskbar", + "recognize_pinch_gesture", + "recognize_rotation_gesture", + "recognize_doubletap_gesture" + ], + "short_name": "Window", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowLevel": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::WindowLevel", + "oneOf": [ + "AlwaysOnBottom", + "Normal", + "AlwaysOnTop" + ], + "short_name": "WindowLevel", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowMode": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::WindowMode", + "oneOf": [ + "Windowed", + "BorderlessFullscreen", + "SizedFullscreen", + "Fullscreen" + ], + "short_name": "WindowMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowPosition": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::WindowPosition", + "oneOf": [ + { + "long_name": "Automatic" + }, + { + "items": false, + "long_name": "Centered", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_window::window::MonitorSelection" + } + } + ], + "short_name": "Centered", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "long_name": "At", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::IVec2" + } + } + ], + "short_name": "At", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "WindowPosition", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowResizeConstraints": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::WindowResizeConstraints", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowResolution": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::WindowResolution", + "properties": { + "physical_height": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "physical_width": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scale_factor_override": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "physical_width", + "physical_height", + "scale_factor" + ], + "short_name": "WindowResolution", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowTheme": { + "isComponent": false, + "isResource": false, + "long_name": "bevy_window::window::WindowTheme", + "oneOf": [ + "Light", + "Dark" + ], + "short_name": "WindowTheme", + "type": "string", + "typeInfo": "Enum" + }, + "blenvy::blueprints::animation::AnimationInfo": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "blenvy::blueprints::animation::AnimationInfo", + "properties": { + "frame_end": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "frame_end_override": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "frame_start": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "frame_start_override": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "frames_length": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name", + "frame_start", + "frame_end", + "frames_length", + "frame_start_override", + "frame_end_override" + ], + "short_name": "AnimationInfo", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::animation::AnimationInfos": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::animation::AnimationInfos", + "properties": { + "animations": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "animations" + ], + "short_name": "AnimationInfos", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::animation::AnimationMarkers": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "blenvy::blueprints::animation::AnimationMarkers", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + ], + "short_name": "AnimationMarkers", + "type": "array", + "typeInfo": "TupleStruct" + }, + "blenvy::blueprints::animation::BlueprintAnimations": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::animation::BlueprintAnimations", + "properties": { + "graph": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "named_animations": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + }, + "named_indices": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + } + }, + "required": [ + "named_animations", + "named_indices", + "graph" + ], + "short_name": "BlueprintAnimations", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::animation::InstanceAnimations": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::animation::InstanceAnimations", + "properties": { + "graph": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "named_animations": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + }, + "named_indices": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + } + }, + "required": [ + "named_animations", + "named_indices", + "graph" + ], + "short_name": "InstanceAnimations", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::assets::BlueprintAsset": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::assets::BlueprintAsset", + "properties": { + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "path": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name", + "path" + ], + "short_name": "BlueprintAsset", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::assets::BlueprintAssets": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::assets::BlueprintAssets", + "properties": { + "assets": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "loaded": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "progress": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "assets", + "loaded", + "progress" + ], + "short_name": "BlueprintAssets", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::materials::MaterialInfo": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "blenvy::blueprints::materials::MaterialInfo", + "properties": { + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "path": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name", + "path" + ], + "short_name": "MaterialInfo", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::materials::MaterialInfos": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "blenvy::blueprints::materials::MaterialInfos", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "MaterialInfos", + "type": "array", + "typeInfo": "TupleStruct" + }, + "blenvy::blueprints::spawn_from_blueprints::BlueprintInfo": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::spawn_from_blueprints::BlueprintInfo", + "properties": { + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "path": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name", + "path" + ], + "short_name": "BlueprintInfo", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::spawn_from_blueprints::BlueprintInstanceDisabled": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::spawn_from_blueprints::BlueprintInstanceDisabled", + "properties": {}, + "required": [], + "short_name": "BlueprintInstanceDisabled", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::spawn_from_blueprints::HideUntilReady": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::spawn_from_blueprints::HideUntilReady", + "properties": {}, + "required": [], + "short_name": "HideUntilReady", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::blueprints::spawn_from_blueprints::SpawnBlueprint": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::blueprints::spawn_from_blueprints::SpawnBlueprint", + "properties": {}, + "required": [], + "short_name": "SpawnBlueprint", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::components::GltfProcessed": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::components::GltfProcessed", + "properties": {}, + "required": [], + "short_name": "GltfProcessed", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::components::blender_settings::lighting::BlenderBackgroundShader": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::components::blender_settings::lighting::BlenderBackgroundShader", + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + }, + "strength": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "color", + "strength" + ], + "short_name": "BlenderBackgroundShader", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::components::blender_settings::lighting::BlenderColorGrading": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::components::blender_settings::lighting::BlenderColorGrading", + "properties": { + "exposure": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "gamma": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "exposure", + "gamma" + ], + "short_name": "BlenderColorGrading", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::components::blender_settings::lighting::BlenderLightShadows": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::components::blender_settings::lighting::BlenderLightShadows", + "properties": { + "buffer_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled", + "buffer_bias" + ], + "short_name": "BlenderLightShadows", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::components::blender_settings::lighting::BlenderShadowSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::components::blender_settings::lighting::BlenderShadowSettings", + "properties": { + "cascade_size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "cascade_size" + ], + "short_name": "BlenderShadowSettings", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::components::blender_settings::lighting::BlenderToneMapping": { + "isComponent": true, + "isResource": false, + "long_name": "blenvy::components::blender_settings::lighting::BlenderToneMapping", + "oneOf": [ + "None", + "AgX", + "Filmic" + ], + "short_name": "BlenderToneMapping", + "type": "string", + "typeInfo": "Enum" + }, + "blenvy::save_load::Dynamic": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::save_load::Dynamic", + "properties": {}, + "required": [], + "short_name": "Dynamic", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy::save_load::StaticEntitiesRoot": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy::save_load::StaticEntitiesRoot", + "properties": {}, + "required": [], + "short_name": "StaticEntitiesRoot", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy_relations_example::BigRelations": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "long_name": "blenvy_relations_example::BigRelations", + "properties": { + "main": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + }, + "other": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "main", + "other" + ], + "short_name": "BigRelations", + "type": "object", + "typeInfo": "Struct" + }, + "blenvy_relations_example::TupleRelations": { + "isComponent": true, + "isResource": false, + "items": false, + "long_name": "blenvy_relations_example::TupleRelations", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + } + ], + "short_name": "TupleRelations", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bool": { + "isComponent": false, + "isResource": false, + "long_name": "bool", + "short_name": "bool", + "type": "boolean", + "typeInfo": "Value" + }, + "char": { + "isComponent": false, + "isResource": false, + "long_name": "char", + "short_name": "char", + "type": "string", + "typeInfo": "Value" + }, + "core::num::NonZeroI16": { + "isComponent": false, + "isResource": false, + "long_name": "core::num::NonZeroI16", + "short_name": "NonZeroI16", + "type": "object", + "typeInfo": "Value" + }, + "core::num::NonZeroU16": { + "isComponent": false, + "isResource": false, + "long_name": "core::num::NonZeroU16", + "short_name": "NonZeroU16", + "type": "object", + "typeInfo": "Value" + }, + "core::num::NonZeroU32": { + "isComponent": false, + "isResource": false, + "long_name": "core::num::NonZeroU32", + "short_name": "NonZeroU32", + "type": "object", + "typeInfo": "Value" + }, + "core::ops::Range": { + "isComponent": false, + "isResource": false, + "long_name": "core::ops::Range", + "short_name": "Range", + "type": "object", + "typeInfo": "Value" + }, + "core::option::Option<(u8, u8)>": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option<(u8, u8)>", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/(u8, u8)" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option<(u8, u8)>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option>", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option>", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option>", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_audio::audio::SpatialScale" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_color::color::Color" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::touch::ForceTouch" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_math::rects::rect::Rect" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::camera::Viewport" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::mesh::mesh::Indices" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_utils::Instant" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>>": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>>", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option, usize, DefaultHashBuilder>>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowTheme" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/char" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/core::num::NonZeroI16" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/core::num::NonZeroU16" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/core::num::NonZeroU32" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "long_name": "core::option::Option", + "oneOf": [ + { + "long_name": "None" + }, + { + "items": false, + "long_name": "Some", + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/petgraph::graph::NodeIndex" + } + } + ], + "short_name": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "type": "object", + "typeInfo": "Enum" + }, + "f32": { + "isComponent": false, + "isResource": false, + "long_name": "f32", + "short_name": "f32", + "type": "float", + "typeInfo": "Value" + }, + "f64": { + "isComponent": false, + "isResource": false, + "long_name": "f64", + "short_name": "f64", + "type": "float", + "typeInfo": "Value" + }, + "glam::Affine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Affine2", + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::Mat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "Affine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Affine3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Affine3A", + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::Mat3A" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "Affine3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "DVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "IVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Mat2", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "Mat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Mat3A", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Mat4", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Quat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Quat", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::UVec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "UVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::UVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "UVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Vec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "Vec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Vec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "Vec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Vec3A", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "Vec3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Vec4", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "i128": { + "isComponent": false, + "isResource": false, + "long_name": "i128", + "short_name": "i128", + "type": "int", + "typeInfo": "Value" + }, + "i16": { + "isComponent": false, + "isResource": false, + "long_name": "i16", + "short_name": "i16", + "type": "int", + "typeInfo": "Value" + }, + "i32": { + "isComponent": false, + "isResource": false, + "long_name": "i32", + "short_name": "i32", + "type": "int", + "typeInfo": "Value" + }, + "i64": { + "isComponent": false, + "isResource": false, + "long_name": "i64", + "short_name": "i64", + "type": "int", + "typeInfo": "Value" + }, + "i8": { + "isComponent": false, + "isResource": false, + "long_name": "i8", + "short_name": "i8", + "type": "int", + "typeInfo": "Value" + }, + "isize": { + "isComponent": false, + "isResource": false, + "long_name": "isize", + "short_name": "isize", + "type": "int", + "typeInfo": "Value" + }, + "petgraph::graph::DiGraph": { + "isComponent": false, + "isResource": false, + "long_name": "petgraph::graph::DiGraph", + "short_name": "DiGraph", + "type": "object", + "typeInfo": "Value" + }, + "petgraph::graph::NodeIndex": { + "isComponent": false, + "isResource": false, + "long_name": "petgraph::graph::NodeIndex", + "short_name": "NodeIndex", + "type": "object", + "typeInfo": "Value" + }, + "smallvec::SmallVec<[bevy_ecs::entity::Entity; 8]>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ecs::entity::Entity" + } + }, + "long_name": "smallvec::SmallVec<[bevy_ecs::entity::Entity; 8]>", + "short_name": "SmallVec<[Entity; 8]>", + "type": "array", + "typeInfo": "List" + }, + "smallvec::SmallVec<[bevy_ui::ui_node::GridTrack; 1]>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridTrack" + } + }, + "long_name": "smallvec::SmallVec<[bevy_ui::ui_node::GridTrack; 1]>", + "short_name": "SmallVec<[GridTrack; 1]>", + "type": "array", + "typeInfo": "List" + }, + "smallvec::SmallVec<[u64; 1]>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "long_name": "smallvec::SmallVec<[u64; 1]>", + "short_name": "SmallVec<[u64; 1]>", + "type": "array", + "typeInfo": "List" + }, + "smol_str::SmolStr": { + "isComponent": false, + "isResource": false, + "long_name": "smol_str::SmolStr", + "short_name": "SmolStr", + "type": "object", + "typeInfo": "Value" + }, + "std::collections::BTreeMap": { + "isComponent": false, + "isResource": false, + "keyType": { + "type": { + "$ref": "#/$defs/petgraph::graph::NodeIndex" + } + }, + "long_name": "std::collections::BTreeMap", + "short_name": "BTreeMap", + "type": "object", + "typeInfo": "Map", + "valueType": { + "type": { + "$ref": "#/$defs/bevy_animation::ActiveAnimation" + } + } + }, + "std::path::PathBuf": { + "isComponent": false, + "isResource": false, + "long_name": "std::path::PathBuf", + "short_name": "PathBuf", + "type": "object", + "typeInfo": "Value" + }, + "std::sync::Arc": { + "isComponent": false, + "isResource": false, + "long_name": "std::sync::Arc", + "short_name": "Arc", + "type": "object", + "typeInfo": "Value" + }, + "u128": { + "isComponent": false, + "isResource": false, + "long_name": "u128", + "short_name": "u128", + "type": "uint", + "typeInfo": "Value" + }, + "u16": { + "isComponent": false, + "isResource": false, + "long_name": "u16", + "short_name": "u16", + "type": "uint", + "typeInfo": "Value" + }, + "u32": { + "isComponent": false, + "isResource": false, + "long_name": "u32", + "short_name": "u32", + "type": "uint", + "typeInfo": "Value" + }, + "u64": { + "isComponent": false, + "isResource": false, + "long_name": "u64", + "short_name": "u64", + "type": "uint", + "typeInfo": "Value" + }, + "u8": { + "isComponent": false, + "isResource": false, + "long_name": "u8", + "short_name": "u8", + "type": "uint", + "typeInfo": "Value" + }, + "usize": { + "isComponent": false, + "isResource": false, + "long_name": "usize", + "short_name": "usize", + "type": "uint", + "typeInfo": "Value" + }, + "uuid::Uuid": { + "isComponent": false, + "isResource": false, + "long_name": "uuid::Uuid", + "short_name": "Uuid", + "type": "object", + "typeInfo": "Value" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "long_name": "bevy component registry schema" +} \ No newline at end of file diff --git a/examples/relations/src/main.rs b/examples/relations/src/main.rs new file mode 100644 index 0000000..ee083ce --- /dev/null +++ b/examples/relations/src/main.rs @@ -0,0 +1,35 @@ +use bevy::prelude::*; +use blenvy::{BlenvyPlugin, BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlueprint}; + +#[derive(Component, Reflect)] +#[reflect(Component)] +pub struct TupleRelations(Entity); + +#[derive(Component, Reflect)] +#[reflect(Component)] +pub struct BigRelations { + main: Entity, + other: Vec, +} + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins.set(AssetPlugin::default()), + BlenvyPlugin::default(), + )) + .register_type::() + .register_type::() + .add_systems(Startup, setup_game) + .run(); +} + +fn setup_game(mut commands: Commands) { + // here we actually spawn our game world/level + commands.spawn(( + BlueprintInfo::from_path("levels/World.glb"), // all we need is a Blueprint info... + SpawnBlueprint, // and spawnblueprint to tell blenvy to spawn the blueprint now + HideUntilReady, // only reveal the level once it is ready + GameWorldTag, + )); +} From 4e50af2453cc7c4652ef7725228ad93b3d6a3c61 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Tue, 20 Aug 2024 20:38:56 +0200 Subject: [PATCH 08/19] faking named entity in type registry --- crates/blenvy/src/components/fake_entity.rs | 257 ++++++++++++++++++ crates/blenvy/src/components/mod.rs | 2 + crates/blenvy/src/components/process_gltfs.rs | 16 +- .../ronstring_to_reflect_component.rs | 28 +- examples/relations/art/untitled.blend | Bin 895456 -> 893800 bytes examples/relations/assets/levels/World.glb | Bin 3408 -> 3336 bytes examples/relations/src/main.rs | 2 +- .../propGroups/conversions_from_prop_group.py | 2 +- 8 files changed, 290 insertions(+), 17 deletions(-) create mode 100644 crates/blenvy/src/components/fake_entity.rs diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs new file mode 100644 index 0000000..fa80971 --- /dev/null +++ b/crates/blenvy/src/components/fake_entity.rs @@ -0,0 +1,257 @@ +pub(crate) struct Entity { + name: Option, +} + +const _: () = { + use bevy::reflect as bevy_reflect; + + #[allow(unused_mut)] + impl bevy_reflect::GetTypeRegistration for Entity + where + Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, + Option: bevy_reflect::FromReflect + + bevy_reflect::TypePath + + bevy_reflect::__macro_exports::RegisterForReflection, + { + fn get_type_registration() -> bevy_reflect::TypeRegistration { + let mut registration = bevy_reflect::TypeRegistration::of::(); + registration + .insert::< + bevy_reflect::ReflectFromPtr, + >(bevy_reflect::FromType::::from_type()); + registration.insert::( + bevy_reflect::FromType::::from_type(), + ); + registration + } + #[inline(never)] + fn register_type_dependencies(registry: &mut bevy_reflect::TypeRegistry) { + as bevy_reflect::__macro_exports::RegisterForReflection>::__register( + registry, + ); + } + } + impl bevy_reflect::Typed for Entity + where + Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, + Option: bevy_reflect::FromReflect + + bevy_reflect::TypePath + + bevy_reflect::__macro_exports::RegisterForReflection, + { + fn type_info() -> &'static bevy_reflect::TypeInfo { + static CELL: bevy_reflect::utility::NonGenericTypeInfoCell = + bevy_reflect::utility::NonGenericTypeInfoCell::new(); + CELL.get_or_set(|| { + bevy_reflect::TypeInfo::Struct( + bevy_reflect::StructInfo::new::(&[ + // TODO: changed here + bevy_reflect::NamedField::new::>("name") + .with_custom_attributes( + bevy_reflect::attributes::CustomAttributes::default(), + ), + ]) + .with_custom_attributes(bevy_reflect::attributes::CustomAttributes::default()), + ) + }) + } + } + impl bevy_reflect::TypePath for Entity + where + Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, + { + fn type_path() -> &'static str { + "bevy_ecs::entity::Entity" + } + fn short_type_path() -> &'static str { + "Entity" + } + fn type_ident() -> Option<&'static str> { + ::core::option::Option::Some("Entity") + } + fn crate_name() -> Option<&'static str> { + ::core::option::Option::Some("bevy_ecs::entity".split(':').next().unwrap()) + } + fn module_path() -> Option<&'static str> { + ::core::option::Option::Some("bevy_ecs::entity") + } + } + impl bevy_reflect::Struct for Entity + where + Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, + Option: bevy_reflect::FromReflect + + bevy_reflect::TypePath + + bevy_reflect::__macro_exports::RegisterForReflection, + { + fn field(&self, name: &str) -> ::core::option::Option<&dyn bevy_reflect::Reflect> { + match name { + "name" => ::core::option::Option::Some(&self.name), + _ => ::core::option::Option::None, + } + } + fn field_mut( + &mut self, + name: &str, + ) -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> { + match name { + "name" => ::core::option::Option::Some(&mut self.name), + _ => ::core::option::Option::None, + } + } + fn field_at(&self, index: usize) -> ::core::option::Option<&dyn bevy_reflect::Reflect> { + match index { + 0usize => ::core::option::Option::Some(&self.name), + _ => ::core::option::Option::None, + } + } + fn field_at_mut( + &mut self, + index: usize, + ) -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> { + match index { + 0usize => ::core::option::Option::Some(&mut self.name), + _ => ::core::option::Option::None, + } + } + fn name_at(&self, index: usize) -> ::core::option::Option<&str> { + match index { + 0usize => ::core::option::Option::Some("name"), + _ => ::core::option::Option::None, + } + } + fn field_len(&self) -> usize { + 1usize + } + fn iter_fields(&self) -> bevy_reflect::FieldIter { + bevy_reflect::FieldIter::new(self) + } + fn clone_dynamic(&self) -> bevy_reflect::DynamicStruct { + let mut dynamic: bevy_reflect::DynamicStruct = ::core::default::Default::default(); + dynamic.set_represented_type(bevy_reflect::Reflect::get_represented_type_info(self)); + dynamic.insert_boxed("name", bevy_reflect::Reflect::clone_value(&self.name)); + dynamic + } + } + impl bevy_reflect::Reflect for Entity + where + Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, + Option: bevy_reflect::FromReflect + + bevy_reflect::TypePath + + bevy_reflect::__macro_exports::RegisterForReflection, + { + #[inline] + fn get_represented_type_info( + &self, + ) -> ::core::option::Option<&'static bevy_reflect::TypeInfo> { + ::core::option::Option::Some(::type_info()) + } + #[inline] + fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + self + } + #[inline] + fn as_any(&self) -> &dyn ::core::any::Any { + self + } + #[inline] + fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { + self + } + #[inline] + fn into_reflect( + self: ::std::boxed::Box, + ) -> ::std::boxed::Box { + self + } + #[inline] + fn as_reflect(&self) -> &dyn bevy_reflect::Reflect { + self + } + #[inline] + fn as_reflect_mut(&mut self) -> &mut dyn bevy_reflect::Reflect { + self + } + #[inline] + fn clone_value(&self) -> ::std::boxed::Box { + ::std::boxed::Box::new(bevy_reflect::Struct::clone_dynamic(self)) + } + #[inline] + fn set( + &mut self, + value: ::std::boxed::Box, + ) -> ::core::result::Result<(), ::std::boxed::Box> { + *self = ::take(value)?; + ::core::result::Result::Ok(()) + } + #[inline] + fn try_apply( + &mut self, + value: &dyn bevy_reflect::Reflect, + ) -> ::core::result::Result<(), bevy_reflect::ApplyError> { + if let bevy_reflect::ReflectRef::Struct(struct_value) = + bevy_reflect::Reflect::reflect_ref(value) + { + for (i, value) in ::core::iter::Iterator::enumerate( + bevy_reflect::Struct::iter_fields(struct_value), + ) { + let name = bevy_reflect::Struct::name_at(struct_value, i).unwrap(); + if let ::core::option::Option::Some(v) = + bevy_reflect::Struct::field_mut(self, name) + { + bevy_reflect::Reflect::try_apply(v, value)?; + } + } + } else { + return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds { + from_kind: bevy_reflect::Reflect::reflect_kind(value), + to_kind: bevy_reflect::ReflectKind::Struct, + }); + } + ::core::result::Result::Ok(()) + } + #[inline] + fn reflect_kind(&self) -> bevy_reflect::ReflectKind { + bevy_reflect::ReflectKind::Struct + } + #[inline] + fn reflect_ref(&self) -> bevy_reflect::ReflectRef { + bevy_reflect::ReflectRef::Struct(self) + } + #[inline] + fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut { + bevy_reflect::ReflectMut::Struct(self) + } + #[inline] + fn reflect_owned(self: ::std::boxed::Box) -> bevy_reflect::ReflectOwned { + bevy_reflect::ReflectOwned::Struct(self) + } + fn reflect_partial_eq( + &self, + value: &dyn bevy_reflect::Reflect, + ) -> ::core::option::Option { + bevy_reflect::struct_partial_eq(self, value) + } + } + impl bevy_reflect::FromReflect for Entity + where + Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, + Option: bevy_reflect::FromReflect + + bevy_reflect::TypePath + + bevy_reflect::__macro_exports::RegisterForReflection, + { + fn from_reflect(reflect: &dyn bevy_reflect::Reflect) -> ::core::option::Option { + if let bevy_reflect::ReflectRef::Struct(__ref_struct) = + bevy_reflect::Reflect::reflect_ref(reflect) + { + ::core::option::Option::Some(Self { + name: (|| { + as bevy_reflect::FromReflect>::from_reflect( + bevy_reflect::Struct::field(__ref_struct, "name")?, + ) + })()?, + }) + } else { + ::core::option::Option::None + } + } + } +}; diff --git a/crates/blenvy/src/components/mod.rs b/crates/blenvy/src/components/mod.rs index 6b42c00..9c499f2 100644 --- a/crates/blenvy/src/components/mod.rs +++ b/crates/blenvy/src/components/mod.rs @@ -7,6 +7,8 @@ pub use ronstring_to_reflect_component::*; pub mod process_gltfs; pub use process_gltfs::*; +mod fake_entity; + pub mod blender_settings; use bevy::{ diff --git a/crates/blenvy/src/components/process_gltfs.rs b/crates/blenvy/src/components/process_gltfs.rs index c7b9edb..d861662 100644 --- a/crates/blenvy/src/components/process_gltfs.rs +++ b/crates/blenvy/src/components/process_gltfs.rs @@ -74,8 +74,8 @@ pub fn add_components_from_gltf_extras(world: &mut World) { ); let type_registry: &AppTypeRegistry = world.resource(); - let type_registry = type_registry.read(); - let reflect_components = ronstring_to_reflect_component(&extra.value, &type_registry); + let mut type_registry = type_registry.write(); + let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); // let name = name.unwrap_or(&Name::new("")); let (target_entity, updated_components) = @@ -90,8 +90,8 @@ pub fn add_components_from_gltf_extras(world: &mut World) { ); let type_registry: &AppTypeRegistry = world.resource(); - let type_registry = type_registry.read(); - let reflect_components = ronstring_to_reflect_component(&extra.value, &type_registry); + let mut type_registry = type_registry.write(); + let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); let (target_entity, updated_components) = find_entity_components(entity, name, parent, reflect_components, &entity_components); @@ -105,8 +105,8 @@ pub fn add_components_from_gltf_extras(world: &mut World) { ); let type_registry: &AppTypeRegistry = world.resource(); - let type_registry = type_registry.read(); - let reflect_components = ronstring_to_reflect_component(&extra.value, &type_registry); + let mut type_registry = type_registry.write(); + let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); let (target_entity, updated_components) = find_entity_components(entity, name, parent, reflect_components, &entity_components); @@ -120,8 +120,8 @@ pub fn add_components_from_gltf_extras(world: &mut World) { ); let type_registry: &AppTypeRegistry = world.resource(); - let type_registry = type_registry.read(); - let reflect_components = ronstring_to_reflect_component(&extra.value, &type_registry); + let mut type_registry = type_registry.write(); + let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); let (target_entity, updated_components) = find_entity_components(entity, name, parent, reflect_components, &entity_components); diff --git a/crates/blenvy/src/components/ronstring_to_reflect_component.rs b/crates/blenvy/src/components/ronstring_to_reflect_component.rs index e772d89..ba1a473 100644 --- a/crates/blenvy/src/components/ronstring_to_reflect_component.rs +++ b/crates/blenvy/src/components/ronstring_to_reflect_component.rs @@ -1,15 +1,17 @@ +use std::any::TypeId; + use bevy::log::{debug, warn}; use bevy::reflect::serde::ReflectDeserializer; -use bevy::reflect::{Reflect, TypeRegistration, TypeRegistry}; +use bevy::reflect::{GetTypeRegistration, Reflect, TypeRegistration, TypeRegistry}; use bevy::utils::HashMap; use ron::Value; use serde::de::DeserializeSeed; -use super::capitalize_first_letter; +use super::{capitalize_first_letter, fake_entity}; pub fn ronstring_to_reflect_component( ron_string: &str, - type_registry: &TypeRegistry, + type_registry: &mut TypeRegistry, ) -> Vec<(Box, TypeRegistration)> { let lookup: HashMap = ron::from_str(ron_string).unwrap(); let mut components: Vec<(Box, TypeRegistration)> = Vec::new(); @@ -96,10 +98,16 @@ fn components_string_to_components( fn bevy_components_string_to_components( parsed_value: String, - type_registry: &TypeRegistry, + type_registry: &mut TypeRegistry, components: &mut Vec<(Box, TypeRegistration)>, ) { let lookup: HashMap = ron::from_str(&parsed_value).unwrap(); + + let recovery_entity_type = type_registry + .get(TypeId::of::()) + .cloned(); + type_registry.overwrite_registration(fake_entity::Entity::get_type_registration()); + for (key, value) in lookup.into_iter() { let parsed_value: String = match value.clone() { Value::String(str) => str, @@ -121,10 +129,10 @@ fn bevy_components_string_to_components( let reflect_deserializer = ReflectDeserializer::new(type_registry); let component = reflect_deserializer .deserialize(&mut deserializer) - .unwrap_or_else(|_| { + .unwrap_or_else(|e| { panic!( - "failed to deserialize component {} with value: {:?}", - key, value + "failed to deserialize component '{}' with value '{:?}': {:?}", + key, value, e ) }); @@ -136,4 +144,10 @@ fn bevy_components_string_to_components( warn!("no type registration for {}", key); } } + + if let Some(original_entity) = recovery_entity_type { + type_registry.overwrite_registration(original_entity); + } else { + warn!("There isn't an original type registration for `bevy_ecs::entity::Entity` but it was overwriten. Stuff may break and/or panic. Make sure that you register it!"); + } } diff --git a/examples/relations/art/untitled.blend b/examples/relations/art/untitled.blend index c585df9a41b2f5d5fd7db8d66d6168e9c2f7cfd5..2ce2f62bf52b0018efa468cbc87fb0dcda0153db 100644 GIT binary patch delta 99834 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 SgKzz7L$>o@8-~37{{IJK^#+Il delta 101431 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 MZOdEwy}$qe1EVOB6aWAK diff --git a/examples/relations/assets/levels/World.glb b/examples/relations/assets/levels/World.glb index 9cf25cbe1dd0691ee3fa673c7a2cd4892895c6b5..160960541dc9d2286a2de410c500452c18cb71c2 100644 GIT binary patch delta 51 zcmca0)gi^3o)hB6#K6G7!OOs~WFqf_$u5iqljRtt1Y%-hlr%MU6!J?lQj4qx*)}yo)hB6#K6E1z{|k!W+Lx{$r_9@q9LUPIjKRZIf*5i`FX`LN>&OnN*a@6 v8Krpi3=9loVq%muHDi<}zAcdU%g;;I)KSPU$w)1-Qiz6f!PMq<#zt-c%Um8j diff --git a/examples/relations/src/main.rs b/examples/relations/src/main.rs index ee083ce..85b0098 100644 --- a/examples/relations/src/main.rs +++ b/examples/relations/src/main.rs @@ -3,7 +3,7 @@ use blenvy::{BlenvyPlugin, BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlu #[derive(Component, Reflect)] #[reflect(Component)] -pub struct TupleRelations(Entity); +pub struct TupleRelations(Entity); // TODO: Serialization on blender side currently is broken #[derive(Component, Reflect)] #[reflect(Component)] diff --git a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py index 2541cc4..b3437a1 100644 --- a/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py +++ b/tools/blenvy/add_ons/bevy_components/propGroups/conversions_from_prop_group.py @@ -26,7 +26,7 @@ conversion_tables = { "bevy_color::linear_rgba::LinearRgba": lambda value: "LinearRgba(red:"+str(value[0])+ ", green:"+str(value[1])+ ", blue:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", "bevy_color::hsva::Hsva": lambda value: "Hsva(hue:"+str(value[0])+ ", saturation:"+str(value[1])+ ", value:"+str(value[2])+ ", alpha:"+str(value[3])+ ")", - "bevy_ecs::entity::Entity": lambda value: 'Entity(name: ' + ('Some("' + str(value.name) + '")') if value is not None else "None" + ')' + "bevy_ecs::entity::Entity": lambda value: 'Entity(name: ' + (('Some("' + str(value.name) + '")') if value is not None else "None") + ')', } #converts the value of a property group(no matter its complexity) into a single custom property value From 72681ee9f0efe12c6ae597b3e25e535fdfe9098e Mon Sep 17 00:00:00 2001 From: DasLixou Date: Wed, 21 Aug 2024 11:16:36 +0200 Subject: [PATCH 09/19] oh look i didn't change anything but it works now :p --- examples/relations/art/untitled.blend | Bin 893800 -> 894628 bytes examples/relations/assets/levels/World.glb | Bin 3336 -> 3424 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/relations/art/untitled.blend b/examples/relations/art/untitled.blend index 2ce2f62bf52b0018efa468cbc87fb0dcda0153db..189b2b93f21b7f3b0675afd5c4a97444646402a5 100644 GIT binary patch delta 99233 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 Z2TDt}{^@UbfAsyO?dj~&_FnHD_&*s*)pGy< delta 97622 zcmbTf37k~LwLjk7(=#+OKqE8AG6RL|`>@J3EBmmGpopxEfPx4NDk>_>V2mN?Q=|-6 zjhdT0pCQKJD4KRb9E~x=EfZsmF-ALyPkqLx#OF(l&(QyKPMz=V1$_Va3x3AxI`{iM zb?VfqQ&qS7cHjH*gb$vdu&<=B?YB)0CAaoiQF!~G%X@?$y886uL8C{HPLCfyK0R*S zxS-_M6DCZMKb7099ZPLP#}YfPW87}&7~kJ9mQ~P|Xr@}y`K+_f5@oEI{%pFqv@;q} z#dZ`a+|aSuzD1g9gkC&I@nTH%SZ5Rr1E2MgF$G$7&E{~s0|pGRqdKj$H=P-?pPf}= zTT7ztYHMrLb#--i>$Flk@4T2b1B-2{Yt-J}BW|zl8?*5~aeI7fv3(#Ovt@&e?Y$+& z`c$UkQTtIvZ2yp`HKoNiJ|b#c$Hr`H=VE)jCT3guNA11kC8R2DTSpgLQyXO!g$t{x zIeTkqSKHhrYAeP^?U7C~>sQ9?1NAZcQeDiZMn$dPkI-55;XN<3`v>>jKe5<$pI2<( z7*#9~*O*g&*BCOw#BAHp_V!10?W|v4Y_AH4^0+eYfU)3uMv*x0B| zO{Txu&V)?8*fx-9H!UZ#rjSpj#qDEr;zbLpYtpsV_E4vuNoYMSBV`SPh`88-Nly22Sn{vbBb;3j1t>cO`W7pa}VMpVz#+2QTwp#qV|$W#dbK$ zO?3ZYf{^j-a5I%!Bd-gzbVIQe)ujnKH>348fi8XsI;92mP92*FgfCkrauC#{YwVgyXUGUO zk{|q;)Jf{x^>gCZOeSN=zy^*+dOe(?bzIpxyI~SVq>gAqC5<8 z3kD7xXh-$lXm9UFgD+E;W+Fl$#0Kfp0mL}hIf$6 zR?{mgdcQNJ)V55dI2*)MI4&de*qjoIwP>$e8kL3`@*YK~P5_w<*%`8VMv1*^0@=x# zfzq1xwKKQRe>}3zuj}n2)!l6y#p&_sE?(W7kJ;yjQudV@5PbZ+=dVab6 zXj*sj2PMP4#r6ZrdfcB8!`g`t*dHx*JhtNZaJ7AE$QfO-t#I?~m$S~Wt<$5ODSCo- z2xZ?HS5AJ3+qO9_)3wz*|MWSh)Q&St#rF?Z^#~%jmFAxt(-K>8Ht~kWg4N@}+8#mv zaxp>C--&QE2CZbfOFnLOLF~}17*#|4)p!uU!4KKJ$dcK2#+O=uYIn)n6=xTBU|;bc z`OWs3M|PjN)ZSE5Y;T(x58`<6c(yfI74}njwoooLwEi^n#Hx!9gBl(R9s)GaC1mVA zdTslR@4;QSCAD!H9-3A`8sSu4$a%4$y4I$aofGBcs~sy2MU7bfkq16MYL}A zq&-9bb@uZ)WwwGeRScpmKc`rN^qrbgnq1Tg3U*%B;&W&+(K1{yKh{qJB(Rh%%#+!7 z>dOnrdfU0SG-x+tL$m`2`U0AW)LYwUSSbQ(KdnU+6YbO?_7}6tX(6W7a=bL}^2NZF z?Py-IlWgaH<+O-%Zs~6Q8OUPAHgOhK=$M$%bY7`FHZ&eAF6>xp!#+Kd zf1K6*X~mhDbfbm^ZdRx zK`YL1>e0J3aa*#HX5uo=vD8D#Mv2O3c7&MfVon}8hI7ZC9@@i}^y^NYkJGr2!^oc$ z$o7^Q<+LKxc=jQ6lpx&%bt$~8DrOtcFSExN#%;^=s2xtpa@^3RT`Q}mq^HlROi!E5 ze^u$4+A5o#*aPNB@-Pdd`)L7hnGj_QC0uHz#AO4;v3?u%B)ch}aGalxQ0|FuBHnab zC1#O~R;YdSckhI_=*gQ1(hUj=o9<1`s}2`7l=o=_c#K=;#zjYbw#ye!&ndMjT9NkA zx==Hp!gX5A#mVqBcHe|p*VOb#tOujA>pRhglgMKM3E+J4fX)(`Sc%QBu9 ze(=EwlTU zM{QeujKOH1gZ={H`OMlz4hSG?bAGgELp%9qpLg16BJp!ZADkT9q4?fa(dMO4{GYFyd=<+>f6 zyvE){+rE1n2a7jSv@GhF!_16xI*FMSxRmcCaH$mc&h23zNYLK9QDTjV>>3wl&cb=L zDAVpU7>M{L+Ig=tw)kAj6~y{y*c6gzC{M*B!3oxL=e)Wo2k zJAe{IXVhf{D_bkhu`y<&b!5^-bf8^JGl|L;_7*w1VR>|a zRrHMP3@#x^p(uOhs+E#{zSB5btd()3p1`yF=mg$I>0~+QFg9~K#V!BUO{XQGkv%LuvXboYbfDL=*QZzu{7ScX*nlh z)>dNKiHRL0HnEzf3@u)iou=__YsQQj>9uRurq4hB{PcO}otIv;Xi<8}k|pVtD_5r1 ztXU(kSGPK@OV6J_KRv5%T6!M!tJdyb-j#Ect>JXFj{hhd zCA!-L<=oE~#ivzORi!6RocK@wO`0^x4x7HFfb__k%!#}4TuR<+jiyMBaEbDur=RyH zuO>PTaYCNlcr`N4pC%0K1tnblj?RoX- zOV^#7Ub|#=x?#3mwRWVfxoGe#9`RwrhNb)U>-Yck#}PJb)-1WhC=oMzC7u20thJbW zJH0z+px~~>(-+e=m-dz%^zrlQPKeBl?wUV~tCvtD?%BIHee>QM(>LtCE`8Z$m#1gd z*YONU*V3|sxz9_{mc*j;p078jH*el7-Mi}IW%ics<)o85ySjM)wvvCkOLOMTNza=% zFVm&^m9}+g$$r|6w63E>MdQl5lLxkx*uh&%>>CS<_tP5J{W6+_CEh2;O{ z-RWEHx6=D>JCMGB!a}xbWH=H#cWT;<>h#V_*QdYs^{=O|Xxu0r*?iHO^!!;hcI(daIL_sb1Z~Hm{_;08J)ZMO`eNM@P;Dv`5@VJD2rz3zx3% zyQsh2x2Cx3Oq!B&`Nj*`%>%t~VT1i-)*0orl1{Hl?`T||zG2Uv^i4P4LcP5%ed(o_ zrkBmHu}>!k?B8a1#!3$QXN;#HPtTk=(;2_u!qX<5m7X|xQkwUg)yqq1pGce6#gyh~ z57bOHx6zTAr2H1OTWQbU zlD_Ja^C;5jUgXSbn{J$B{hgHO)<*y75SlV&3LBdVp@z-2acy@pmU6*5x+i{Ftbo_v zJ{Qq_&^0Br$VvLVer1X6zNvrvS>*S6@_U_q=E6byX~xjv*l+2A>FH%>&(=db4Z$?G z#dQmt%n-YJ(+Jx@3ujxx<^TUz-}mp|KRtEoRB1zU(4q@Zn^~J4ch-coBuv_m`rBz@ zUrC!^S_0;+r<>9j(jVPSy7z+a`zdr^-RRDP1`SFN9y~bX#B(-E+FrPF05!t{L^F;?KSg`Q=56HE z#c_$~&X<+jMsk8KhV5t54z`|l#^lW{{Y2WhmG%~!De12+lYGhXT{jJTgsSw6ITQ-h z>ul%seLHhv{KwPtAjl2bu*swM|YHS5BnKnI>5*#Hre|yYMrF7rA z#ZYf!VpY>clZx0ObE<9C=AO1~3qwlysIy`towe4>gy~EHNUih2@BGrVx>PKvsHhMt zXhvr&Sh}V&zxgw=VpN)EJ6j;Wp=GmiD=nexN$*8;*t(ML0BzOYhP2mpAwj%(?Mcw@gTQ`XPm<3aGcdmbIE|6!fRIbs!7fn%bYV-ty!HO zJz=Z_%ht7&Y-DosA-T-@w0~)(VQHbetgW;LPQ8ZKMA}fbZYn9_*-4Ih`-;i-uB{Vg zv8U;0Kc7YOocD!0i{`k7oqwv+RdrL-w3MegSM#DdWXO>8>ebXZz5B)^#hI_Xy!@oU zp+kq-ek-=M<1GY7bmxmo$v<@Rq*fkS!8_2wI#Ic0_8l32QE|K3WZ-Ptbgf>)p-kaT znI}P`%#*EkC!Ja;qAKVwv5DU3k{QC+qJ7v=BS%%FhYlMqHd6a({L$pJ?N;6Dwj#@V z$e1No(}`)l;jyS7|1{J3Lc`W!PHkO!PVF?g`}N7C18l>NGTDPQZZGM;xsrFtRNC)s zmI=E5nlk&r>at<%9o}B?R*UmDZ~qv&ZQC{}FSy_Wi7JYJJ1VimUQ7AM?*>rAe zphF@DD4lC)x;N6~ZP`3rok7!s(rfFLa0CYvTU#RGzHmFG-plAd^ycCYyk}dnVue`$ z{+frna9ySxnZoAO*uQM)6--&T{|P=h;ygZl+0KB%&*5ezxqO6FSXHe>>0364zucHA&l;$7rK1kxxxDu8qrW zcV-5i<|v&co&I|fic+={z;CxygDxQXTi^{sI|MH7Wa&E}HDyeRJ2u|pO| z)<1pvbXn**I`jWHdbwZua@2XA)7-bCE?y~_nBS}(HENW&{g%yiE0Tt*nGPt;7xA3r zFy(|p^Lc$te9gA6UOS|KL#6YTbW566gv9nJN724bgGIb>=Lo6}<6z}Kwtm5a1%dV4 z1D5fib2gHcxMGOBl|Jl}ZL~J>p^x6!Coeok$M35sz0%4=o~ujGqLE&>bAUD5hwtB6 zY^T#DLq@jJ&eH6p^W@f8ZX9nm!+3T6KmOT4TejO8(y2=kZGkAS(7VoC>AuP4?vze> z?Ch$I1FfNmZoZOE&2Aa6jdakZ;S5@T=kgI0@$8y-2i}46OlFt8zja72Dl;2f%|nc# zp|Qgn*K}s5@Og$)G&zbg2EBVkd2QdyA$Ih&)bG{qgdjlApo^JSH`k?uAQzdRwU=Pj4hE|7vXv6F6QUq~AP ziUYEPJVSQbF6WbI+AOzHPwuv(G-8VtGiA6=vi*(+$`rKJwB%LCJbLh$O>cXyVQ4QpVYd zon>8@)ABcK(Iz^1%uJuXZghJ3%o_Xtm30?T7kDx6KX6ET)YNm+W2%;Rd^;OlUpeH7K#2rUGwPB!%TqmsnR;%~_Izk~1bJgY-2$ zrs->0YdD+YZ{*04avOpVFq}LlkFQ9tnlq8it&tm4EFU!Gtn{F%XW8l%13Giw=c&GR z>sHyN-*|0bd7GK1+b28AZOt{5GB$OWHH(L7A#G0G{w-<;UsNK=j%*`&DJ|tRWZUDi z4p3ffrT1W5>MXX8@Ql|jUj=oUvd5IklP7aNl)E6jH1X%Fc>Bp)(v5Uah<5`sXqjWr zvI`i)c;fL^ek>nxCRI`%owI~8*4#i3FOBRrUe-8|ayz`_k&EoYaiy}Wp|S(JtY#`L zL{nKl+J3&Pcp>BP$7fOIXa7MLmuwT;hBh!Hd`)ro{axkuvt4m}&bSi$S`)qbu&bn$ z^+Pw~YGy7>PqqJO>Lqd0t9eHO9Zsy*TwchBlsWeC=3ZktBXbDwOyaC8ZF1ixPWq~C zi*4FnZq4qfE#4jLkag$JPT4)WE9>A}HEatX(nz1ZWp|IxSvb~fAKXpvzU`*FvAd&# z_!_sHhmktV`H%G3Pj=s3(6?`2d&_lw+v!~~o4jsw0UgEcps(F(Tfa8hzVfwL+@$;T z;lDoVK88zs+Vwr#an%@ec-ZwDBZZBx(WeCM9XFJfc6_s6k8mjDhaMg%<&zImdH97J z#zosbc?CD~WJ3IJ7yTW3{ND!l@M=#l=;yWkK5WMOQx7`@Ur`na zGZcz#Yn2A~Z2uAQ|1dS&wdk?a>1Egsy{T?V?2!}OxzRljyAt);hjZn7K6b6;m)c0^ z*hsRD^jvlBG49T@Hx)!kFOEifD!tu1!zIzpgb?!h*p6QdcxB77Ufjy`+H-0Rl`#D#YM*q4{FsjR z^N(KPs9yZtaI{N|u7y|~fqb$vY#*{+OVQz_26{{XhFA+`0)Y&x}UBElXw2wP2-Q&l0i{7HPz6c~c6A*A2q+L`GKf@ug&k3VaJyprrD~ipS_N0{c3{U)3?f zOotxv0Z*Z9H&R`FWPf;I*sw;K_-&WC$=0m71EpE#@|sCd$=P+7ZM!=@8Spl3xMzs} zbN|FRZbYfCDaKsDs_YfsyIn7lHoM;zkqIs(>mGY+O}yjm@AmJ_)BfNj$}f`73lDzD ziG=|Z-YDhNjQ+XA@)$QJ%0r=`F}61_!Y;VuEi`)k3D-E6L8Aw?(PQDD(LI?)XLtUJ zMzs+%3bVAQy}$id0rgZHF&$&y)1FNT8rcvuLS2{CXOI7DVN3_%OkNoV?Z3NArDkx9 zGaAD9BR>4>5aZrU-7dI$xDK)pfs!0U0kxkGR#E|Zr{7RPfP)?d223-l-VKo z{2Kl&ds~0&kfqu!MsSYv|r)ipsR&%6!B8a37|a;=qFwET3e$rTkN-wwR7vj zUboiI_kYlf76|UqF<0(8>ee_Zxq(r(=DQtZ=lx!c344F&5;?;&{~9SQCSQTHhZ{Mg z$aG`n-aQ{i>YU44A1I8ez8eKH1nU%-)Uy0LZ*eFzn<{=`j(sb?2mAb=Is0lJ-t)czade#XUbDzF+=w-ROH@0 zb32sT2|rlS$tcd1-l_#1`W0qDUMEQ6YfhCby`$9~&MeZ`qUMVGn_|(NQ62F^ILxTS z8q{G@x~b82cdR3Kr2FDidI?PRl0PJORQEsnRZapCPQvss@f;f~e*_!-pSnQ}sf|(w zk=Odo2u0qaQ`!h7Y#ftoqm3uO%1AKtjr2R^7&-qz7-`hVmLqO@NEsN}EYsucQyK{- zj9mFtZlW=d7sga+{`Al`^NloJbBtX15RCMnbDm77J}KR3H$2=i)^JMuK*DsmAkV(k zccbm0Fwa0x^9}U7p4Y*YiK zbOts*)-g8!lm>zX12>(*Kqzzu4h&X2Z4U-6UJwd3P(>HbRhLA@*?S(pZ$#={cjz>K z&{FM7J>nc0(j4tSN4c8q?PK>nF|`yloJM?Br(4)H}*2 zQcnDa>cD|#l;=xnCm-qA8zMkbe^d(v;yqEq7OD&wU+a!*?>|Bo=0Or#2bGMGe`AVj z$*Wlw=JAZyoj%+1sh&$9LhC6V=!8Nusz=hxjB4P(^ARAzvwKN3M1Uj|0xDEbEqGDF zFz~D5z%yER`s^1^(P=ji0#yl>qdq3WL*~v8eA+b{zBq}sJ)vQ&gcOF5Bg>ul00E_0 zDNyA`n^b2gfPhk=6sSsQE7F>41rShDk2}Ml3KVJ0Q2+sDpHiU8Xe(KU0Rl>mQlJVH zAAKnqt_U!WKj!R$CNL7*n6nEIP<*8XjcH^h&`8%2fPm7V6sU6XN}I$?D}aC!QVLXo zlH%5!VSs?rl5~B6DujG0V;CTyB$NVG0VUH4AfUvR0#!!4?`J50fYSP7XBbq0lFD=+ z5KtPG0#%?SGOYjtictzwVeX_d6hJ^}d(;^QRiOA83Lu~~D+Q`BbF)St5Kt1T=vs0 z;c}^G-3ehjneEhhCw4^2l2zqlFI=t{pa}Llg@=0{I~*<)Q@jNy!Y|o-UZ}3ro}s5T zKhvJ-T8|$3=&9>r$VlDxd~r(I8E%{7YiX9Kap&arQN=LL@a6EMRgovd?RVP97L2Ey@m zUL|;)b9dprRfUngRd4_tl6c-Z1R)?ZhI}tE&10aekVIeD-v7%fWjox&F(?(9{H}r5^6!zND2c*{KYjafK}=n`&D~l`eH3mveEpwpjaKR) zVbGd?>IMyiDVdQB!{A8{V?#NYh3%pbrj(uOqS&CEu3h=^A=o1`RmJFzsbkpTFFv3_ zlb2b8c7mAPhETlIs={T5KmL&BsLBHs+ydi-@4Z<~xT7BtPUXM_o)f-ze=Xr|{+K3( zSnM4d8+o-*0$IFzYt3LUH7*kK51@NxU2p0i&zyL14qeLo*GA#BO$_J&Ozij zH{DFzbhBeBCr{z|!0QD6mb6K#h-{2Qe}G5sq%R#63?z(>#k-?^Dic3`WD z=-dx7N=Oe%({<~YN=UH3)$9B%*RUEy-6XZh%3RU^E^&;Ema zq@qB@M+#wTmXC7NfPwN$P_QVmcmDRydIp;2c z448ysz=co86m<=eNtr`zo^GRcr_VcKB6LQ~!=&C;8&#gsy&?B)QN_U~U+YevoPL); z224URXal-Kq1WYQa7fJ4ZM5$6c|%L-WDOZ~r*wD|g5~3HZ-@Z#72>Ggoup<7WWXd8 z18&Ade$ODwwTc4|IH%7$ty{R~2t*oor8T&(qF^@+l#E?u@!PM80OR;!7o*UW&_PLY zsV6dpfZ}T%jk)ol<5h+N2q+CoL2IBSG88~S2`L4tQW)6`1rShL9(H|!Do}#ncO3x; zC<&!N6)0k$>pmc$#FYY7Zmg;M@Nw4>fPm8akTVRbF!Wg-0|b;tr9c%Z(wZ|25KxR# zph~n;NM#uY2qHw@gR!H^aT)5nw0`oE*y!%Yl^{gIk@}`?a54jQ1BmtOx zh^y2?oR;QYUD;B>iY2SLim|YnKQb)q5GVDl)tu=(dcw;-#OVbnLcg5CNaEN)vjXWGBbBtY&ETwJu;u!nF zUnZBE0eT)l`KEg0wOo&=IPl0D49nW)N1J0zvFG_R`Z zF9oK{%uq3GHEj$_es4^ePEGPU%R#TG3gINL9!J4muCjp7>e)k1PyGbOs0^6EAHq%c zoJg3MnprNVN89-0n0M{^4i$V*-cY3X07gC%?rwMO>wRlY)O%}kcw41<1zrmDs`n5= z@RsuqB@-9gd#8|>`sw7-(!8MNKS!k-VDXZQ(F1dgVfKp;?oYloHB1K^sb_iWc~v94 zB%LqG3n~kAa1-n);U?*9Nf?y@6ZA;9Njg_jdJ$8(pB= zwfMhvWsR;3p&#g)x=Rh(L1nPHj(MNW2u~~p8G9(7mB|jbM`u_zMG^nsPVP#)OknwO{qLcLhDYQY^Zxf1~o=8 zzLegbvuM`|88E3g)f~lQjOaa|NH~=B#*E^?^R@2ud8f_h9c>;ap>?zY-M41FePT!m z9CRDy`BHjUvu?xhoncUAw3V!Y0R)tNN`Wd+vceJ&P->I{RiKE0-2IZ_iU8xdW@>1{bW3H1 z1rShtr38&33uGJy2q+CofhtV)tat$g6f7Z71xjXEng9tXI_IG(ps0aJ2{khbzDayzVMQhmxSxWMXt;I2GbwC#$l1cRq!Ib z>R;>n0BEyi#;6P!xWEWE`Qa+U#MH`D>@%EIbtwcI${bgD%Pt@nZF2d*I;47pn0#{`b+AljfszLl!`vXS^51+?P(Zq0NvteG(!0)jF#sP_uqa8^ zU(8mhEWmJ2dAOLHQRwa@^T8>3370}3m3C^59DtDTj>EYP7$aDL^e*CBR8?nQRc&|dEz+iBI(+^ZeE zE3jA&5GqE;%=Z|UynhFWzr4;GRbN#ICwbj99NH=i`1dHr=~=XseXg)3M81+|p&LE%mb6}i&;OYe3) z-6y{JgP3}4fP9d*sZl=}FP{pcCgWP?bRVNSuJ@-K+0=(nP1be(j5+G`Qm!{{y=>#< z8@Fx=y?xIi*1;I)JPDIddoO-1+`c{Ry^KHhKFVuIhhtTU0mOvi(-2vJX^-{A$28a2 zFcKTyqU$Lp25K(X(%h*7aeFWj5)&$h;|*U9f2%68BDv)2;nm@Csb}JXyTSjQI=*ew zEBT){(E3s+?eJ}z-$i-#bYtyzj&<=i|2i^whOVgJ(3PVD>EOQxm9x8Avg&;IhOeLe z4*YfAU3w^FV{mV4m@-l z!{iQ5vhb!by;CWIjEl^E)g#2@b^pRsM`eK$ZiAre$siaqNnfPi9@g4R;#b%p{6C~fyS!=MV3M1}$gD9uWNDqmX>1D#=j zfKs6pr~*Y=a}+>8N&TBM45|{^N|s@OfU-|1Pz6es#{dDPMk!DQiqEaFVI{*A0mgBi zw$NnId!ARWD}aFFD+P^#;%9se2q+CofhxpY3U<*0r3wKB`2?y!$qY*qAOS_A5vl@; z_6d>AkuRSz)KnELa_e2T1x}ix93$SNGNF280C3#gaBsMqJ_!h3YLYvAqBJ*X7Qc>D zA|K~E?djUrT4G-hbW~ex{!`{ed>EWzAI% zE~S{#aqz#oM=_5L4(!+y*wOb`=$-oP>K}yPg5l4p;UBqYR1;S^!&5xg?$I|hShsRLsdS<}+LysY zg1!t6`cf5(p1Lp4{i1Hdny+we!MfO6TWB1;ML(p@4Zga7JNLaGh8K??o9P_81T?7e zw>vdZAN!ZN?4zL%keZlNbM*tHW=yUc(4eOEa;FCBV|ztS@}uyi@fEo$p#myXmpPSaD)tRg`6j6>`h16UaOfejY-Fw)(4Z!yYM?%Ly{LKk z5Lp)6#6jRJ>**{jdyp&}o~sfnpwe9GEJIVV-J){ugJjukQR%(;AXzpnR}E-TQ?t#f zf%@24qUM4Yvg`xtptI~SKdN&FK%b&o0UM?2xl;&%k2wFgkW|M1CEXitd)sMrs3@^{+0t;@<#f~dF9d~$= zn(UQJ0}QmpMn@BMSxt6&jGF9`%LNwP<_(T3Ivw||$Ee9Oa%q5p=3nG!qAsh+qmNUQ z-Ez6Wg4=qbF$$e>)@zC%u_Jm!A3e zdA<8KhYe4-Z=DG?5xQx>Cc><9KEpW(n+MtIkVOgJC2^UzDH&TtU&BM+7ve>q3HQv~ zP?$2;o1i@54pZh!D#b~i4t95I(nQ%tJSewt8<$dupiY)yelDBk>xeOxfppNmuf?$j{1Y zHi{MAt3MBCz7vE$OLDt=)ky4aijQg}k}4ZbECBp!Df@?K~Q`ya@-F>lCg;Q+6!W`t8AQhH$KC9YWezbP{5KplVb8L! zhz!x56&W9^;bMhX|Eo;SiEFD|2CW{{R`+Bw-G-pm@wcD<6|HJ3K_5TTR@s`|$THrM zUxz0Lk&y|iGUWt1K2#m7J4**WH!zXcrcU0&zX_L|LQ%OA14SRGB5A;T;*HEn$fygn zOkAKF11_b>j%wLA2Wo{tmVFXFTE4KV|*-^23SBNFfHG&~j-}rd2~MTz^5&&%n_o`PaP3CDrVt zW9SNS;5jsHr=YOm6huDiLLn1a>DsNEH`Cio^1KGWxddL;^~SAR)^EA|vd|igsnJft zRp=~n_zf01AKoRtI`PMFxi{^P;Sqh`$T~PKR)@`{=Gk#v{@lCukKu{qqZ#M4(iP}M zJ0y~SXg_ubnyD{6*7b48vD`-tNyuCIr||Rvk&M;`x{8_dlDb@GOxSz=PvOO9^5h|N zaLF~7p`5dIt9SP9qDon9%XQ)g6IpNf8=2tVJ@3*Q&FdpaT*t(67Y|Yf$?ht78?j?6 zwF7`gck_F6<_KpDm&~CJpg~w?*pNVH1HbufytmrIG4J^M;W0r1y|u=4Jhs?{)9gW% z62!8B9~gSck)Z!#Gu-wFb@P_I?R@lu@RUOL^27(>`licAeOh&N&nHKp>r-9L(ED#% zQ~mNC%~ju=`0`P%U-ivj9bWLCORFFKq@7%68UMSsXza5Th1Hi5{|Cf5k#0In;^rfy zi}~}3!}VuL?+v8u5yx*XK3G`y_}6ZEriVFNOP8CfM~)g?J>aI>o_^X?KTSqF{or@+ zst)b$Q+;64%WOo|ZSS4_Nat@9)m(JE-P2^m)7&`!`{>g#b!0@{1sl(-e(bjI zC7-(Wibsx>)E?cl=ogj${r;hb5~7HO#j^tw>=m6$E;_+d!%jp-})w= z^RKvVdhCSvYWr|~a^HvHmT<{K6Kkq({@H6s-}&aQqkTX9_oJ-ci~mQY!d~^q5i#9h zWS$bMEi823j3jR`E&G%|!uo4>Kr*knvgKdhu4JF@%I0M*dRmuK$s?`bf}%9Mjp1`W z|HG?!n1t3{lltM+JdDx0=nK0KujWBgYN=DFA6`{iV2;+EI{qq@-hLh=p>?OuJIddv z0vXg8#rRTs7r$9R?@i_DaYIY9$YDnQH@$%aC*oFlLY)e1N_C{TYwor`AfUvR0#%@h zV;lt#P+Gs|h778FZABdAD1d;{s1&FIMf~O{fPi9@0#yn0g-b^P1eCV#I>Vp}6lu*- z00E_0DNtp!l`O*m0i{AIPz6es#{dB(g&;?3@K~lVfPjK|0afB$%3-NsD4PHQB^Y&W zO}fn#Z4K9DS5Fm8IUG6s^W78#4!i_>qNQ|H-zYioPQie(vHB#BmgbMT-FrJo+VY_Z z6(hHs6vLAAbqw?_y1dTX@-vl8cdC-~z6HHQt}^gprs_HHWtbk$@WqBCeN3)HxKjIr z{z+;frRX>M<)eR^0F2bVFFq)kQZ~x16uy?`Ew$^-+^(q@rWwAhPw>dgOwR(Vh2oyz zIrM6T9ypgK^jjEy#Ys}Xg+X3t?q>ww!k}^P3vF%1ka6?oLk8Oa0qO{z)Nh= zb;KGRlX4CjSQMF3w!}>_gYpe^$P2j+QE}jq*BO?4rHH?mLSAP)VqQ}f!b#p2i_iz6 zR2J}GRSa{p_5ryMU@IsfwJC{}Wk~u_IK3EvUs13qNp|Z*R+OtOz`Udw;U;_joTE}@ z0frsHkt^KfkGpVhR0a(EZkU@f%j>ZPmIutny1HT-Ir3I!Op|LG2miYXadl= zA?tAvbs*XY&b8rf=^N=e0?tJ)KK>o&WMG{gq}e%BzR_7Bp!iycDwvgGv)$?i2q+Co zL2IB$YmNd4C?Talm1yTVpD_#&P+IPBeSs>pB4gxQ0R)tUQlLr)@$xsDKmSKQ^(x?=u%83Ej7eGM4e1R%Zq)$R=0t6I{I#huI192TIF{WaW zn00CbCr$AnsZUZ`%AnyR3wQO8^e;D~-C7)!$21*17o-|li&cz_WS(bOa^wKc&+^-o@B_3v6$A)Mrrk({wr7Vud;TgKen zjNLuiS`ncy>QDq2fipyt`yArwV|bkx%fI4Y@aRfT#?%m81T`TfYjur;IN^eb5LbB% z#z!WXCps=IXB{ZbRcibtf$BI-Yz~Ca<%6bh)ZvPNx4!I){%Am+8eo z(WMGzB^j`MX;PujhN|!f(e^PN;@|KcuRiV;ztRJBjjE2D$*9w1TrURTEeaMT$t{(< zjH@ibupf9Zg`2FZW{k>!f!~dAlbvcQmfORjXSmN&AFqqFFZ}zx?6ebgk>x`Q-Iv(X z3jF4X1VZ;^x8}9o<#MS1Emzi@>&7|Mkh}PThqcCtyZDD2vOYB_Lh1lOsWx3$rBPmd zdzGsQ5MS$#>egP!fJrFEspGZxBsE4Mj_Q_P$eE1Z9wBtGy zQ2+sDpHiU81q5wEGOYjtN{v#W3KVILTPYc?2r!P{>Fk0gbS05#1Q1YsrJ%8db|s4f z2q+Cofhte}yXcda3IQdgb*M7g)519n5Kvm~aD9O)P&5hgrWFuS5=wz8P!imlYXuNc z;!1(4l*V$xr8;f}5KvlgcZNY#K*=~65KtPG0#&}YlFCp30mUcI3N2LzM~r9hQIU$}Iw00K(tfHMrLK#|rQ1rSj7DFv#K2eK%D zfKsCrr~)N$a>;N-fN@;cKWIV{@-tll1e9ROR8^ozm!vCAfPjKj1XZBGK3vEC8>=yP zU5RsabylFvOx{r;>7aD0Jby9ir1HcFeK=K1bFpqSE)4c9vh7kab{b{_!`#EEZC6F; z;ZzZ1?Y)@K+Z7=u>ETq`uBZ%3&>^QR`N}oC^>zm7x7nae=wkC?*F|(ag)Z^@pw@hp zBKKa|MSJhn{N?Cm2+DP8*af*AR55Hbd|7XX$;(XF0<(pZr01gOOEN^eJQ7tXs}|n| z+cZNLuy5!)TDS|=pmH8bz6*x>SKkHOTZOK}75*aU3b;rT5s$V`GYK@Rr=;$!`a12g z8#InlnuPjdRjw~o9QcAShm%D&@Hs?YpTZf!NxuCJ-f}{JJGbSe-+ky&spi7`*0Y`Y z=oW$$BkE&h-AH!ZOCy*e(+tQSu5z)d`qqF!!k z7RGp>-0oc-Z`*cDWYBpcB+p`0AE6QCzj)TD*3kQ{sPm}ub^a$Gt&-h$R(+Vb!dp`q z>FRAcJyLXr-{$h5W6&6m%|aadefV_#3B36K`G5R*!lu;k?w2VNSW){(PTk-BKu+Ck z%B}l}+`3tkTleSY)=h0ry(#2Bnj;9AALiD5KeuiUrM0t zN|P<1kGyrut^4M_91r*%a<7|kZry+MhdFrj!`!;>XVsf%=*@vF0oDB*bL(bzZr$IW zH)NY~>wY4)ZkFWM{kfSs^`8u=%?P;ekI$`}VYzkR)C>;8?ob+bFS?*I2eG~o3AIk)boP;b(?_c{cw?!TB@H_znO{q4DR zvnjXkCvxj%Np9Vrt95GMSy-C~`0wxM^&q$Ir*iA&_1wDuVs70$lUw(&_H+`0+p*4>wJg+g7m1E`ne)d%I( zsY>nPpVwGOAF2*=r)~UG@qq)8SUc6`l5cR?la%Rx6UAwe=#{UJ&8q8fnX*KtlYD$2 zbKRFWH?rz-t0hx6^7}klb@?TnpxzWR^2;-UAY|l+Ub5=?Giodm1N3Lhg1Y|r7V1WS zTPmpQ?>M23pG#U#}SEW_c&~Jz50?q}fVhWf_v*+|`Q#c&36y34KX+ujC(o#BW5XJiu{B zd7Ok#Uy^-ivZ94Xr%dI*1*60KOyfMBWgao2UhH9dGxp1q-i$4Z%6qZ&McMRTta@3$ zqJ+OZKiQIu(6{GnUPs}8W=1isbciY z@a1rF;8Q%3@;Wn;L7#<_JaLpy86iE*^pY8KXLclpZuwkU0!myd7$cY^y>t{nKxwsZ7@^8pM8`62%~1dWrBNwR1&XxhD1d-s zlmb;o`;uiCAfUAEcZNX~D1N55yaL1vo)imd|2IbZ?0QZ9Jr;0VafX6(AqXgUT6Gb z4yg*|h-vB*K@bKvmaNr3cfX>bfONl-SXqXIuUB&y1Moowi<0F2 zw`tc@uCf4gpJGI@ex^)i0ft?|K_^`A!xswfOg5a(8ydX;AjZP5f{b-pA1wR)q`gdG zAPO7-FsYwALmXE>Vx}@Q=4;*Q z(~p?tVG>$*`t&1ac^IR0r%yj(mWN3lQ+rg70m@&ofeUO@o@;|w>~04>jYOCDDhDp1 zb?~8|K0p%YV=PZ>Lqg!dGs^R&^p<_f?=|P?PU)b63*G(0eE%TpJ#xiCx36`l&wGJ& zLk0{225n??=h>a78#t%WoBUt=(K`(~tYyddx!?=1>U)U^w_yMT6kjP&l~78GOGg0& zlm?|hl^ZEacNq#GpoEkHRiGp?6hJ^}xyAJbs!|y53HR0m{>Wm z%kbysZZM@OUJ|)UDpNXU66Kj^6Z)5@M!6j(O7lHkOYaGmNI62Q7%Qpq8Kw^>$m^_a z22;6h;biYH^#YWjQ>yHHU-Ayq8RB-B1Jks_)SjWIt@W;_@Bn(4Ku=LhkKGRQLfv6% zY3@=3?+p6r@1^hYby8So_^NI&XHOKh_5g-|cypJh|2$x9__Qn(y&?g{oURuE;gwouu4!J3CNb1`sJLCYP zl5Z9j&}|cWo$-jdO*M$7f>}uhEO#co=5__qQj$~1nJTuM@ zG^h-iAQpt1{Ip8}e-ct1>^=!ezgOPfYuOp0R=O6*5vsVqhKImWD4^JMzJ&a18S;Ye=ud@d52Gt;%l3!GFS5=0t8rIJ4 zaC%;-WsJ&z3EUyv3|}#`U|USZz4*piAMdl71$R`c z&)`GZL6d30Y|wls3l7WSLn*x%X3;E2?S4bLgVJ25-TN!PEkQnSTdHF8(464M?~|9# zW-rR?EH8fP9?f^ElJ)iMA(aLEFBIeS^qj{Sl?9m36(ii_hw~YuvH-(o@@NP*`NTrT zs0^53G=!Vndo~9r`djKgGtuxkedRIU!1Culq7&p+`YF%GbLqEGQ;Q2qibNhxezCY< zO01GkE7UN2A2gz4g1Cjxk(m?D_m{4q_^ow|y+Qez_T>XA-TahQN5$xl`IKSqYr`k4 zETFFq7eSW)kEGN>653CA%YsC5MN67 zG%{qsq|_~r>z+o23>aTAj+=ErRXK2QG58qj!h+mGByivX=i2d>T~W|;1coWtQ|hn< zSnZp*(QS`I3IU~MuNz^ga$ThK$y7%H1eAnQpvv`_R<8^N5K!VufhtfE844hvw0=`V zPpR-%DnkJTlt!gM6)0KV2Lu$O6sQ7440PQG1eCTt&M>HQ@kia~SalRYKxtMAR7tlf z4fvV900K&dQlQEWdrm8WfRfV53RM9m(+VJ<>{ALCsFPfl_|_lO(I_Nm5~y;mp)PNrE6*4)9m}l zAgjunqhcgq^De{mq$97hmK&yW+rr5{>F5P0fw8LWx?Qvm7x`j{JLwedE~u{5o}s7y zbk|dO06i4na!+%5>`pox^`xVvNvVNv=k`&>FwgL1J?hBIOcw*og_3>LktX!0^Aq;H z9(CmPDULcS4~{xo|LUX8-YR$i9%<9%TQUse_b)m&04eNu)`thWOCTih|NCi zC_B*hnrh=#GTLLtS;2&4%ijxj(k~;r3jhY= zFA9>cTG>IWPfu~Y`FOB*^k~8AN*yVT9MoV$G21a>h-qJ9+FSNC?GY#Gb{yp^YVs~B zoeyNbsu%{Fml&3ewDQ2o>#Tu$K~)GR`Q|e`a4HM<#}vcdjH~78JX`brME4Ayf&$X> zN@8Uhl8%pF48YGRSd=8m_cT5#3oy?rM!5R6hspvBJA%hhxJi23gLBvv z>v+z~v~~RK6kA7@(Fy030{ZxddOx#k{Ga5)Ulq)Z7Ro2Y+^+GJ-|((cCv@T&mxzzw z;8w=ebz0WB$y<}AuNuvMvqO2<+9bGs(zY=VWVG%Y)oo)QCiSc{L=?)06X?gdRffiV ztvh|XZOp?YwC=cW+n5J2T6gMn+n9$*sb8Er-8QN$Fh}c7U$AZL?dRd(W2e)5lfDpV zJ!H^@p$8ZBGYfjlCsjBR^YdyLCoIsujvMf#TK%sob`3^y_<620rXmJ(K@b zKtH8-iQC?pEmQ{CJo~5g6o4;)c0m66IsSs^iQ(QNpq2qZE4~o*8=_rL-Ntm+2edKG zbET43iZI{RJxvs6IBc+7{06eS#^0ZHRN1(ERe~Dt48^nJO`Xi zHl{iyvNxv64zyjY+PIaBHr@E>#Q?lP!J;I2|KE7yqp|?Qy=Tt}H+l8n8KW{_f}s~~ zvi^VMmbcHrf zvN5_RMY&F`T^e*>!dS&H*j&IckG|fiJn0RJ-V-htLDs+}RF4poi-tsL;8YeUS)~}} zW?Y@OF;!4NTA?IXmLci*=*0lMOu?eWqwjdSGr3|^ls>kt7Xl!6mj_7{$c@W?q#|_V zQsuw}9%g=~b+`Nca!mBM(W$|O_`7tkx#iy@MN!tB>^UwLB;@Q-roOdRBzXUXz#*(C;MyUY5l36a)J7JUv$Fg3T^*xl9Rha^q8XjYkkjsy=iQTTVhol z3VUnbZa2sq{{3jI$YH$6-;WM0a(cXrzaKrb8+5W?`2ij6+ZSu1gIxE$kx#T+9&Msg z$QsU@|JHtNAJ|`^dv`x+@?^c&iIYdb8N%I?b>_X{!{9%e%|rj(V9YehQ_%s@%U+-yxtAb?lhrJ z^VVG)HJwcO8FD0r|2PhctfiSG^K02Io?lnxL&XzeHV%>0oKk&(cseonINB8!2uR|eRLqm?^MZO-bFKpqj zSaxUG)_EPe7fC(r?frVR-%4=`%~*}9#Mj-=siwZ+%I1GKo6Jnt$1$S6xth)3e}*R` z_x%}H8Z9Z#c`}}MLv(KO7w+rn&FAXDu>*a5#?EJt6PtgzA^V^CD^rqB+z_n`cS0n% zUt~z0wkNtc+)<}w;#zSPrHX#z)$+sI6Flykka-je$!F`c8Zix$BdCp`-bdez_APYv zSH2%TX*wS27R#QF^Z-;e+62A#QG2Z0=<~yP4j9i1^N4St>+op4eW_i}!zbCdz=v9yb}uV5d3l7Eg?z&co3y?Ei{1P~Y>0pdkazS6PBYwP z!@e+3OEWvy?)18K&D=M(n}gIVyCu4&c%B29dMdp?+#W3{6bW}@d9hkJ`#3#c?4~s( z`j0&s2D!#raabX9DM9+}0>++HE~9EV4O|vOOjB2}I8ZLDNEUQpQ;h6I7ui+W-NZwz zcor28&Ek1uqt7Mdabi5Tj7PxnTr(by#Z$d_w3MDGYUAl$Ja_Et!?k$S9FLIWN$||$#KYZa;vsfCmyG9;Ij9e^ha@d{Z=c?-#@q5l zyI#dRT`?RBOw~WTXMhvR##F!~`ewR@lsEdB_Wf?H ziF$9{9_>*mQi+%-6SD?WBE>bw>!(cEjnEzhzP5^|&hhv<_box)M@nmfmHM1+g+4sR z0nPscE9>&Dy!_i_rARgA^30U!nKAQ#AB|Q*J6p*u7;P0+A;CU`>#w_~gIh1+98c?c z*Y@UwOSqxHU0>c!hKST{H#lo%xl2aJWm0yR*dhAJfWQuI2X?pw9|}FJcHqkbQnJ=K zJHE`f<9eU$5UCrsJUe9Aa_tx>`m*dmJ3$1>>XNlPtj_Hl`B-*`g@t@Uw}-qE$@Xwr z;qj9feYZ1|3$imjYn-k&`5VL3zw5?uao)y|#;v2*cV)C6Zw}iR3XJ!L!wN+cZw>pE zs#5L+pPh=(e1_v=57F6-^f zYx1IDjpKDFWW9Ayk-z!=3it~c^A)}u0D{Hdx(DBswY^F%78Iiclx|n7y}tF z{v_2SSg-0y)}u0DjMg33JH!~sfbl1)9>IFOkFXw<0b{i8xZcf-feaY`EY%}e?}X@4 z88Alcj_YlCiuL4S{0XW@@D8_NUk42Blfbqwu9+7*i zo?$&I1IB3G>GNJ;3}nFgqg9V!y{czfkIH~CT6bLU5Mv+%#;;I4g7td;g!QNl7^8K^ z^=@ViWWe~NRF7c26QW0Dz!IsjP7y}tF z{$SN3Sg-dBtVdd$^>Jhnj4`Uz$#wf;dy-u&N z9+d&(_ftJ0_jWM`GGL5i9M}6;^r#FN|4h{*a&OfySdYqpFc$z$Mp^|1~OoLqk07E_5LO6Q5i5s>yGQ)%oxak@%yMA!Fne|kIH~CT6bJ; z%d4y>599Y%JtFtsW(;J39>qAWx8PT-M`ghH<*G;I-ciOt28>aR<9Z`sV?8PZ#xGMn zBKPiL3}nC<#W=3l>DR1BWx)8oRFBBLU5tSY7^4`+^*$CoDg(yvsd_~2t@{7^x)uPd zs;WH~?`t?XO)7{F#uExYpb-!eQDz7yQlt@04Z)@xDxuOy_{cOyAR{z?L@~CRO-C|A z!4VO;XgZ?5;j{Viks<1IGeRPo5Dm@z$A7PHt#$9dd(QmSxaO?;t+l_i_P6&wuY2YV z$|F9-gtE=~Ob21qryH8oo)kN6Z5$~MQE zrG!zRVxog353r^idBmrfP_{YNG`~rCJWMn|^1yF838TJZ9>H*|Y1~G6#HX03zvO}6 zv=c^siU|e7v8MJd$|F9-LD-lja_Q%rQAdWZ6ePcflvb3W5S81*S8`n==;*3@-U9`PwAlx>bRZG=&uVxnrv z1FWg}6Xg+~VnW&GShJKc>QhYgImrX8=|&#$DJGO{jy25%%Hv_8D#-)C=_HK$ig^UX zv8M6Qlt+AuiT0N~@SFBOC%-mGTnY(gn?p_QyFDRMKgj~9X(fobidkfvvze;D^n^r# zWC7H)5JX(XEV3Okq$>sz^_47unx^eGi@1teWIJR?M+_vYlq`Uny1&{i;wom5?T{gD zF_0)LSpYRPJ8Twl6|=~8$dIKmkSHTr05#nN5mzybY=;bKey=AaN=p_%O(#LbRm>vW zAwwE>_Jl+!$pWZpCy2O;S!6q8NbTQxLZYN(0o1e-L|nxzvK=y{YFAH4w4Y=F)U*&p zT*WN19WtaV1`_p=EP$G(zuPS0DrS-GkRcs0kSHNp05x^HZ5DAAv&eSHkhT~|R3TXa zH8uaRS;VDTqNn(3TgZ^5|Db^{KE;Hx&FM@xVbrG>zNlj_yZ~#OyC@GX^pq~(*vm`! z$FZiCv$)68;oZ0I~8qOi6`=80>ayxCs9(xy~aJ_}&N|OoSPll<; z+s>7?H__*zZrg8VKGwIdsac*pK1Dvhdy1>SX(VwS$l^MXh8?&yjN5^@VLGN#Z|#-t zn4WQ>+`C%4fbU`HPU-f71m93Cw{%1GxKv05!8Zr(J@}_WEFOT7I|B4;*gN`z$Eh z$RM@^Ix;IRJU_5}%P*2<)xPBXtnB_nc&eb`qvY&E^!2}ViE@IarX|Jw=QQ7LH4AR- zJGgiQx-yGvDSKu+-)Bf@xOaq@h-YTd8FEt`(W> zDU*95nauAUo_Zdt$e1&P zT%Dm8SRT(iJhpz5cx?7~0KvVqXT1H)>7}aU`<{>@pU^-ki^Zb>u`rE}uFUXcsT!S^ zSQgJZESAk77SDJrfFR8dFbkSf4XMbZf|9^#|H{Oz*#?3R+qS}m}j|k z(@WK*XHNeqB((Ur* z4H85gFNMXNOV0T>rS>^Pc89`e^pF}kk8IIrzj8$lLtg)7+5o2 zfml2}AV@M0D;V~gNqR_-WF*$(63HuLNRrPEJz9?e1W6AFk_^Op3?N8)K#*i$%ds|N zX=qGZZDm-XKpCPRKTJcklRSLXj^}QGFzp}N;UA~A963d82$d1)(Le>5hFx!68r^wI z<87t!&s6^5_SCb9{@XknK=7;;ZL+ggbsQNug$xq#(3}@jWb)ZJXRIunK{q^WxooAD zOS47(!k1F7*p=Vo0~D`qn@%Yogp_W-T#;&p`sm+3$(*raIA(u9>P;;=Ppa;WhG<9bKCnQo)_qgcVl!zzJzJ|Ls?B$d}L`nuQa++T$3%`RFlmf7r;#I((H_6 z9F+y+6eSc9##-oQ&UR_4S@q<$i z3@DV<%_p$Zfi+?R4dlf{d6HrfW24x~uF_VPS4ePm|B?9xXrM#L&otq9+_E zX!DxpAyE_ui5=tR!b5_ogT$`$qIN|LQSu2<6o*dUp%Q71ztvh&Vn-siEvI;I5}pp!YLyJ zu{>CtV=6;FizEr6^`Zn9sOn~M_g~{P?x|1W$)JNP$y? zh*+NYE{&-U`D}G2*?AAG^SswpWnZOUXik5lVH`Idjuksb>}av0#EuYKD|WcpB0*;)JtVroL4p&D+C!oX93)t?RA$E%gM1=#SLLxQJ+#GbQM zJS2EJNYsX<;vvD)L85xh^V=~z$tOIizV`YlUD@@J;3-JDZn*+Tth$X0(@$lO;U20s z3-8VRF~56J`ptCzq3kP8c)+mG_KYoGU~w6We4;ai@`UFRK^d3`&MQki(o5|)IEuFQ zD*hcf0{yg?aWL4Uhft;$dGs(2;1qs{m9qwqAga#gaIuGq z9Vm8y*n`9#Ahz0CNB&4Blj^LPjwPRTELxP2;z7}~4iuz#qLM)$uc{ET2rolI{NZWiY(*2m_(HA`A ziv81Rdm5PacmTmXD&ly+DLfF%qtN4l5*N#1Z)22rY}jmhq``x4V{H1mec|rR->2lpc|d4;E!Z-RhnP3Z2Eu=U-NuuTY6BUHvCU7 zlR`WDi*pu2X;QdwzZiZwA}#z7$xGu!G1?)Y{o@r`yELM0)7ffo>`f@xRq+XKGkjd^ zMzI^jt{1yb>{_vHV%J#fObbZIL&zfn^)L~fUZO!BLLL(R>mWgihmeOv?HwdY^H84| zQwH+MP{(dDPY(&64iY=gJUt|MI!Kg;d3s3jbdV?>^ZZr}Px1**Dz7Yx9uhnSNsA)> z7%S_pZLihc0~DF((YW*9G#XcNmlfp&glRk5Uh48gz{kYXrKs81Czp;AdJar z)@PQ+eW1ZtWpYC@y`Q1n>#;*1uZWw*l*=F28p$W>N2n}_9z9fE=+S-ce}mqxAhWt* zB{vvGVq3-DE%q+4cZyvh_71VPTk9wv>FA4clg*UreC>|0#1xdpJe|ngQ!@8QxQ>kSXDaU43hjfne zF?VF?Jehv8PgpEve{q~3l$98IooW|~6H<;65z6y$Q%rTpXRAY}C}^BcQ3ji7!!kED z+`^59H;Y{&cCpwS#V!)t&3~CV{8a2G);elLI@36u9$PuFeDshI@dOq=NSLbH%t>aD>8!>ewpQsA^&#Ll};OQVyAy$=# z1WyNv8Zu8037!s;sw~H77sl`;pWI)eZjxi8@tI9YipzHms;o-qw=`t#OB}@AR@B(X zNQ`G07I^)IgAq7oy4wdV-lX7>Kna)xZmpC^Y?v%0+Qo@7)CsY&EO`9TugnkUNod~ey(qKhG;T25C3dIS9b&hOeOGKjY^T__t#!uXZgQKZ z#hJVj%9o0*DJi9uRe7Anw2dhzp$4V_1?;o`?bv=k^{D92tniLe!B*t%n3j2T7Hd zwZKDyr66f77*Hm^wE6utna6r+Fx=OR2Def}js~}(VQ6rI*PYNHoT5R*@`7+dOohmY z1M}fYaJ1{eq2}TrW^Pv*zRqojuZrCwwnOa8VqX;dyx7gwIx>8N+SJtvfp z9a}LzIKc;caMIt5Tbv15i&nzZQ;`>j-G$Tsje#YZ21mA$x4Y zx|xBUS1J%%^nmDP26kMnKxlDVOr^;uBL=nNCB#F5BqQ6tuPH&&1A-(2Td!9jNP0k! zWFT&zmXtVbg-(R_Om%(6Ul5)}f$;d&)VQj{DYqm6#fz@K9<%4aWpE(iRC~#AIp+Q17&3zxM_xzHBV$tHotr*^ILGC%NIS1 za9ybgYe$tU7Se-LM%uN&VlncXM`v;Kd=Ew2_sfv~_?eg$@fyIfBIe>qz-b@Y-mLoP z%LE;z7}c+-x{q>@>0Gi#=EDIbx@Z zZM4=|jhe_Uhb$fi$b%{1R;wasBt0NHl7YC@3LtJAdq9+%fwhWcJBw; zd$IuHki`RnBLkZcRUlRg4+xG7Y&u+lSS36lI5H3iL8u#_4t*_#B>7}5qsq$lArA?b zf}|0T*DobWALuSvQ}o%2ffH_GG%vUHicWG?;6CZYymk%WeDXfMjkO#MTkvO zm9-t6Evjr1w;DExohY_W?5SeMi5)9;jJ1x+PA50tOY<0@+`@p)Xwje?ZJ!fUZ}LgK z!AYd+K~ZoA3fg=m>mgAA2Z6rVbLj&cZl5hA8=jD2l@eIUW)`9VE)fJUt|M zI!G$89C3R{@MI*e0v1Yh+U4W2?WxfenXf&C)Rx=Zi`qsJ$Wa@D_`1u8IJv zL86Y#voVGz`GhAb%{)CMcnXqcxi?C}TYZ5QUJdn8zIi$cFMPij;T_H$S-cp7AQoQX z_?XocP7xkrd7ksAp)gFXtyP6r({69PELdkBFn{W%K9%;nlj)?Hu&Q#P*)%JANW-C` ztbt+&h?SFr@BrDa7F#8@pV+?EIx`^BaaVZU&=pcPngP)ucg0s@x`KSt6`;gj;UUo# z4icnUG9D6@agf+8=IJ59(?Md#ndg)kp5zmrC=K)Ukl^VcQ9S19A;Hr@Qh8^$uT7!7e*vca%aZuJ^Ae3 z(=d1%?Kl4@`#~y+rtwW7dO|mupLR?3=|ulN9t*(a>p~t296?SXr)VCre2duQf!Z<; zzC~QB!;IT)9olI-Z*PXu!R0U}`vnETNni+OTPcal%U z3`#6!4~c?1NRVbRdq@<(L1MR*4HEsa3R{Z(4^#+^$~4b{~Npu_1`X7I|XBIDk{shFBht zr^ghAe6}!jw+F2oJNd6}xR)CYSBj0qwu-%5>|J8-6uUy~9o9N>Lpm?CiP}40x*l_>uII{L9<3_P+lu9vQ&oDV#Vm6%HB1 z$~_d14QlMvDu;JPP=XM%e&^FE*|HV)?v|p$4Z6H6-An_T`uk zB%kd-Dhl4^Y&!PYrEf79*sDqN()3p2wNKhtKvdQz4>oIGwO?+&bzkPtME@H-W{BZ$ ze#LRhkyAJ!l$Sw|6QshNAQik9nmC33g>No~)3IoKl zR6GWdic=N5oz~Pl^QHv`=u|2=Is|lUrh8L=TQMtzV0==yo2oZJ~=YMS3(gf zGVz!|CQdC1^qyQ|GR6!aRQY6TENWqIjoMm_@d)5ER_a`j02BhJ)B>@rkcJqAkWUnX zS1mJx?Z;XMqrm`AXqktaGKc5?d1>W-y*^1l%HxP=UNFL*98XA*Pbeak1>;eKV3;EA zNB)CWD}G9A?o(E^PmHNNuVDnY9M*~*F7`OF$A}#&_9(G~#fH{8D+ki?JnON6c%)#o za-cz;XFVi3*Fl03&$Fk+bOQNgo&{-M4?HAl;UKYF%+o`Hr-Q_fGfxi*o(>YFVV)CX zc#=R3`36tDj;leh5!zjlHNMcPDzJSv*oh_zAjD|!!OSt{Efx9swQ_RdJBm zEzbFr?L_BI4|t0U`6MTHoO60em2F<#e<@7T+DcdQw9ZMS#Z>@ zQ!tc)x$wazxK#bT@DcxHnUQFs?5}&PhTFk^&=}2_Ps{CdN~pM z(4&k@Ja8v?Ofm1lDO3?F^Pa~Qz0X{izNWXpaTTsW3v0MHb#VEmxRDKenMt@uY?s*G zVt0w%DRzh0?PA}x))~D>XIj?B>+MO@4uco%ndS{WfDi)%@wx|U$24v1fkVGA4sUw^ z4)>eL>8J}uVIbc203hy(Jy8zCkRYFoTkJBATMr42jKs4>NQuSJ1A-(2@vKpaqz~L? z4>8d+9yKa){A~}$0~JYD&MebEDXoY4vdudaKJEg!A+ z+LC+m4Us%nJp$NuCctMPAb_!Y%5!$Cz6}=L&sEZ`w!ifv|7{*I1hM=hj~L_+r^p|% zJW@SsC^l2;*sJPqf30$L!&YuDd_(N(VqX=zMQn%Im&Lv)_IYa^ks}>1JRSvTO{zl& zlW33^iN|9)l6)dIP-3xpNL1WGf;2CX9ufs$Bpy2=_Ds_Qf+hp;*b#sj5|8y@DYC>< zN5J7Ov4;ak^2y$yaLmy|f+HjG)KQ6}2Lwk3+C^bF4-V+;`W;qhn<+3~_a5mix3d?W zJxd^G03e8UHZ@LXaEi_l%g1mVdlcn_6#4Aq9|!c6CkMLsTAe+^?S(C3e<1ccvDb>d zM(kB$=ZT$bt)nxfV@-GzP;aJy*%S?Oy*(uA?I1ykMd2Y)a0dy}tlfM}0mvu4joo6N z9uhnqBzBy6dPwkekSGoF^pN1`AW=N#xgmxp`RoHr^hN}#GSl>cpvgcyN{kR(?0P)a z_o-Af1?F4Qed)g1d%b9F4)%lI)g91x zb;D)cS~y$mEU_1hohddawn^-TVy9c{C=Kbj+8zT`n@iKQPHTv%;?bC5lh6L$d3p;1 zHN?gCfG9Qt@fHLCv3PnwNP>ZQ3j%;x;XNQYG7zHyJI#t%A48ISP_9eT1A-(2@n}wo zqz42^2IA425=jr(d5U%=9ufx!NbHlNti+~KT)uq>Nv!bKUL>&31UyH;$Q z*frKVT0=T6xJLm6m*UVd8XDw+uZ<}<`J~{W#KQ29oilZCLzUpny6}M5eITB3{CP0O;m_Z}}k()86exYPWM27Nv$DmfEJH%hymm=1o3P8bWzi^N67;Osug@l~#AF zRoXIcE?g@17O^*rT_Sd|*c-(z65IXjGNmCMm)oNNSuh1C4GnU=SI5+wd{S>vVp(`d z)Z0OVG|R$6q5uvOyTv>`BzQVV>^Sp$pqyvbBV__YWtgT11WoeE4xx5T(?f!$gQV)p ztmYv>laV<4r0(EvIDT?Z-%Ux1%eSw@(ORJwrF}vmXZ`#Xjn!OkpC|T&hJ&@aj?xgy zbK3poMZq;H^4WK3{a%&U($;s)Y1~@4Pwa4RWMPkfhp5F+C(mG7=}AC7F$TT4mP#G!E1L)QilvQ*uXU zJJ1-u9TE1_*$F8}W(eg8&Er+IO~+oxZdFM5$ z%HAb6E5ajyT61CWl6e48>-%DAO+KkL7_lHcBx>y-!I_2YA)yEdiM?W)9^AH6*D*B7Cp1wQrs*L;(?OziOw&Vxrh}y7N;N%X(??1Z=bj~%T~|<*)%_VqXq~;N ztb=kpD%*m#_&Yd5%a={eW?RT9>n37(HoG^bD&(_AX#E1clD4~~vlqG9@OiPD#Xc+c z8L=&5e<1ccYaN}vOm42W#{ku42IxUF$kq0cs5T>U;Swn^O?W^^mx1`YB!H0auVVI| ze0DCMZ?Bk?NP0k!WMIn;3dB_A0l|@h*c+6Eh3g?f(m|qdtlX6`EXgOzrP4|*JtSxf z5@($yojv}UJwCgZA|GuD=qlPfz3A*3!Zd1B{^Z5BI6>}6tSi=8F*Vrw0tAsrXor}frBbM9Cn`*wzR2ypj;0Kjtqo+u+z*jis48;duxua3YIu}Kxl%2 zxGGp8=>b8Kfw(FNAV_*ZkYu1GIr#Har&Ltzv|mdpyv355Zr=ZL;&}6MO|WWA;g>|w z{_&MXZ1vkKbo3umjC_89{oTSUB5a%1hckzoJx2uD^Vv~Rp@5tOXyAu?=hf?vjjzze ziqp7I;v#OKF$@kpUww)xv@%JJee2B&>h;IXtvHQ~B#!f$cFL_j#pDE|v74T%uh$

Z<<;w?VKeJkXp9xRFR(#e{f6GsT`d7DXsdIBHPU9kp<9w!O2=Nx5 zVsf&rv6TCb*Uzo{(T&Nn+=|nefkfQ4-^>6HYYI6Ly4$|DHtItek#I_?HAXt zf8+#opmv_(GPpZuKc9Cm4;T+|NEUvHsSjRb{yqr*WagMX;vvXyPqC#S~Tu zZ}GQ3Illh+&6_d!%7h^}jf-TP^O<(atvqnP$p5invl(-1i)E+~; z#iy9UPldPmU)?gb?zUyi#y_)Z!uT@Yg44K2wmF|^rQGUMOinP`#%r&fjeev7=flv{m@$q7c=&_Pa| z>7Qy)aT*s&Tm);nz*~HZDJ&P>;@_A*ss4wH7NH;A+=|ng^d z^es5$6v;N{Go6%MeTvBmM%yTIwpw&^D^BA=iHl%OW364p)TfxjQsFIF%DsH;@`Gyh z0|iC`S?f-6jyLRrZ`|N+`m*rNR=8hze^O+XPtv zE`l{(;4MDI6n-MS#s6+0H=cfeddER!xfQ2zk;HKurfDSc7N25rvaPXO-#EYiy}w>k zU+8QqtBK+?E|j_sQIsOyNhu zTm1GwzP|JA3+(~VrgGkb)3`{sIiG2z-0D+IPB7ZWV;eUX$7ET(z1*Q}b3Rjb67lvh zg&T#p_&1Vh2)pwYAz_G*{YU2d`4w}Dl{rc)^OJt|BV4h5SeTqpEXn|Y zY*Aj!FZfDuOd`K*JSs!TvdX|=D|0_Sa4I7o=$;6GE3=ls6%{#HsSN+lm3fHxU>6sh z84OHEw2f9Tt17ff?1S)iPY4DNP@lFH0%IDd1m~op-1C}i(-g`@+xAPoQ-Z-Yj4M?; zhn!X<9AER*U~;N3q*(3|&nJ`Smahf}rQx(U%O(a#nc-&#{f^-Qv&7a@b0`<YVSjPzk zTgTl~Z5`oEnDp7fl`;%l&JOw}stXHw9*wr~trT<5MZqRBcV;jmn|o7Sx1AeoG`Wj{ zvDt8I3H6*g>%8E&%qaUe?ybPgJ?8|&2~=$!JSSL^zwnaa(?puHnx=0D^9BrjuryMr zW;++pzsAa=V_I<8&@GpeRJ4*66=O*XcAG|7&bm3)G+hwPOEcDV%?=JtGeuK%sm*`q zn)3W(e~kPs({28>mz3wf^QiLt9BZm(*!+w&t(OHg=@5Ho9+(kaIdFA(`mIP`Q4!Ef zt&cEsE)PyWWS~c3iC{*Wh0}v0%x;Sry6HcxNZr|0M|xDyj+s8kQsI2&@o(5pLztQT zo#53p_k!vB&0yXk6EMg$Sw+P(NjGYF;x|W_mz!;i6TISPoffk;l2e#*SJ;9w)=a-5 zI4lKanCq?xhE{#`%M}%C({{Gw$;wLS6!S_h_@C;W%I6OyVW@mw?xZ$VpCeM(IhN1;<=JQ7MC?8Jcnk&#rX-&;hI~@4o~@xr1kH$gn3Pq|ymSF^A|Lbu z%V(LlV@o8TBcDwkWUSL9$%j+0d>Bjev17BSpW{;}P$%cxt_Wr(_TO^^Qx4xS7JsOV43D13*= z{`pk<`ugXu3~tWsIB?$$6&3Su8#&V4d{r=e*rKZ`>%eR&d$rvkjebM2J6T3t9o(Lr zXm=^!^}S$lB30sEd*>D&B{ca_7DU+$nx&kZY5ZPrcQMoSMB}voDTUK6>MrRn7Q~x;<~v_1&y3F#=Dvl&;B<&OnvR9RdZ&91nf78SWUOsX z#k-9(fAGoLTPjS>Qj(I@1OAaXM%dqUG#zN?`-9Eg1NtP*b(<1>P4kU*2u53|Z26@( z21oTdoSv?*YG`Lm@w06_Z<~(A!S$(O7^RIr4i+V93M-w7#>Nr;PQt@)x|Rg1Q~$n~ zvbWx3OI{Uj4N?%!Q?=4!)TfwGFdS?DZaw7@pJJj%B@g_j3wgw+m{7Jk)-?T!@^~2T7`tEa z+sCVj4?3%~Uv{_gk7G^Uy}>!@!gHio(|tcJ`S%9-AyZ}k?#-TIt9OQ3xGFd>%@9+& zIyh{|{STqDwFyGeKho6{`}-1nZqoM!7lkKZeDR2j$DT0yl9MhP^R1J1BAD~g+&#|7B#`}~e^kjEt>w>6pSIxoFN{2C?5MG0YsZWk zHDbhxgXa_M+-Y{5vIQ@+(C9U-ZFV24g-g6OZ4cSX>1SFw8nkwt+mD8xj^8Oc51r<# z=ggroq)kQh(NyhP+tj8(T+VpQP3dRS)Xq7@riSqEJ)3H1{L;v0KTK3?`s1hr_Wk(D OhlBi+5BGcT!~X-`+tjcC diff --git a/examples/relations/assets/levels/World.glb b/examples/relations/assets/levels/World.glb index 160960541dc9d2286a2de410c500452c18cb71c2..2c9c0cc014eee627a13752ed1b5475f4503a36a3 100644 GIT binary patch delta 69 zcmeB>dLYG{o)hB6#K6Fiz{|k!XCm)|$r_9@q9LUPIjKRZIf*5i`FX`LN>&OnN*a@6 Z8Krpj3=9loVq%muH8o?DHoleS0RX^W6Y&55 delta 26 hcmaDL)gi^3o)hB6#K6G7!OOs~WFqf_&902nJOEpW25 Date: Wed, 21 Aug 2024 13:01:03 +0200 Subject: [PATCH 10/19] I cracked reflection? --- crates/blenvy/src/components/fake_entity.rs | 2 +- crates/blenvy/src/components/mod.rs | 2 + crates/blenvy/src/components/patch_entity.rs | 35 ++++++++++++ .../src/components/reflect_ext/array_ext.rs | 36 ++++++++++++ .../src/components/reflect_ext/enum_ext.rs | 36 ++++++++++++ .../src/components/reflect_ext/list_ext.rs | 36 ++++++++++++ .../src/components/reflect_ext/map_ext.rs | 34 +++++++++++ .../blenvy/src/components/reflect_ext/mod.rs | 56 +++++++++++++++++++ .../src/components/reflect_ext/struct_ext.rs | 36 ++++++++++++ .../src/components/reflect_ext/tuple_ext.rs | 35 ++++++++++++ .../reflect_ext/tuple_struct_ext.rs | 35 ++++++++++++ .../ronstring_to_reflect_component.rs | 6 +- 12 files changed, 346 insertions(+), 3 deletions(-) create mode 100644 crates/blenvy/src/components/patch_entity.rs create mode 100644 crates/blenvy/src/components/reflect_ext/array_ext.rs create mode 100644 crates/blenvy/src/components/reflect_ext/enum_ext.rs create mode 100644 crates/blenvy/src/components/reflect_ext/list_ext.rs create mode 100644 crates/blenvy/src/components/reflect_ext/map_ext.rs create mode 100644 crates/blenvy/src/components/reflect_ext/mod.rs create mode 100644 crates/blenvy/src/components/reflect_ext/struct_ext.rs create mode 100644 crates/blenvy/src/components/reflect_ext/tuple_ext.rs create mode 100644 crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs index fa80971..e7d8c6a 100644 --- a/crates/blenvy/src/components/fake_entity.rs +++ b/crates/blenvy/src/components/fake_entity.rs @@ -1,5 +1,5 @@ pub(crate) struct Entity { - name: Option, + pub name: Option, } const _: () = { diff --git a/crates/blenvy/src/components/mod.rs b/crates/blenvy/src/components/mod.rs index 9c499f2..43a69e3 100644 --- a/crates/blenvy/src/components/mod.rs +++ b/crates/blenvy/src/components/mod.rs @@ -8,6 +8,8 @@ pub mod process_gltfs; pub use process_gltfs::*; mod fake_entity; +mod patch_entity; +mod reflect_ext; pub mod blender_settings; diff --git a/crates/blenvy/src/components/patch_entity.rs b/crates/blenvy/src/components/patch_entity.rs new file mode 100644 index 0000000..f9e763e --- /dev/null +++ b/crates/blenvy/src/components/patch_entity.rs @@ -0,0 +1,35 @@ +use bevy::{ + log::{info, warn}, + prelude::Entity, + reflect::Reflect, +}; + +use super::{fake_entity, reflect_ext}; + +pub fn patch_reflect_entity(reflect: &mut dyn Reflect) -> Option { + // We can put here either `fake_entity::Entity` or `bevy::ecs::entity::Entity`, but the latter would result in a false downcast. + let maybe_fake = reflect + .downcast_mut::() // TODO: doesn't work yet, seems like it doesnt work when it's a dynamic type + .map(|fake| fake.name.clone()); + + info!("{}", reflect.reflect_type_ident().unwrap()); + + if let Some(reference) = maybe_fake { + let entity = if let Some(name) = reference { + info!("Found name {name}"); + bevy::ecs::entity::Entity::PLACEHOLDER + } else { + warn!("No object was specified for Entity relation, using `Entity::PLACEHOLDER`."); + bevy::ecs::entity::Entity::PLACEHOLDER + }; + Some(entity) + } else { + let reflect_mut = reflect.reflect_mut(); + let iter = reflect_ext::DynamicFieldIterMut::from_reflect_mut(reflect_mut); + // TODO: recursively update + for f in iter { + patch_reflect_entity(f); + } + None + } +} diff --git a/crates/blenvy/src/components/reflect_ext/array_ext.rs b/crates/blenvy/src/components/reflect_ext/array_ext.rs new file mode 100644 index 0000000..e73a35b --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/array_ext.rs @@ -0,0 +1,36 @@ +use bevy::reflect::{Array, Reflect}; + +pub struct ArrayIterMut<'a> { + array: &'a mut dyn Array, + index: usize, +} + +impl<'a> ArrayIterMut<'a> { + /// Creates a new [`ArrayIterMut`]. + #[inline] + pub fn new(array: &'a mut dyn Array) -> ArrayIterMut { + ArrayIterMut { array, index: 0 } + } +} + +impl<'a> Iterator for ArrayIterMut<'a> { + type Item = &'a mut dyn Reflect; + + #[inline] + fn next(&mut self) -> Option { + let value = self.array.get_mut(self.index); + self.index += value.is_some() as usize; + value.map(|v| unsafe { + // SAFETY: index can only correspond to one field + &mut *(v as *mut _) + }) + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + let size = self.array.len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for ArrayIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/enum_ext.rs b/crates/blenvy/src/components/reflect_ext/enum_ext.rs new file mode 100644 index 0000000..5c15b73 --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/enum_ext.rs @@ -0,0 +1,36 @@ +use bevy::reflect::{Enum, Reflect}; + +pub struct VariantFieldIterMut<'a> { + container: &'a mut dyn Enum, + index: usize, +} + +impl<'a> VariantFieldIterMut<'a> { + pub fn new(container: &'a mut dyn Enum) -> Self { + Self { + container, + index: 0, + } + } +} + +impl<'a> Iterator for VariantFieldIterMut<'a> { + // TODO: make this work with `VariantFieldMut` again + type Item = &'a mut dyn Reflect; + + fn next(&mut self) -> Option { + let value = self.container.field_at_mut(self.index); + self.index += value.is_some() as usize; + value.map(|v| unsafe { + // SAFETY: index can only correspond to one field + &mut *(v as *mut _) + }) + } + + fn size_hint(&self) -> (usize, Option) { + let size = self.container.field_len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for VariantFieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/list_ext.rs b/crates/blenvy/src/components/reflect_ext/list_ext.rs new file mode 100644 index 0000000..d8d17f6 --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/list_ext.rs @@ -0,0 +1,36 @@ +use bevy::reflect::{List, Reflect}; + +pub struct ListIterMut<'a> { + list: &'a mut dyn List, + index: usize, +} + +impl<'a> ListIterMut<'a> { + /// Creates a new [`ListIterMut`]. + #[inline] + pub fn new(list: &'a mut dyn List) -> ListIterMut { + ListIterMut { list, index: 0 } + } +} + +impl<'a> Iterator for ListIterMut<'a> { + type Item = &'a mut dyn Reflect; + + #[inline] + fn next(&mut self) -> Option { + let value = self.list.get_mut(self.index); + self.index += value.is_some() as usize; + value.map(|v| unsafe { + // SAFETY: index can only correspond to one field + &mut *(v as *mut _) + }) + } + + #[inline] + fn size_hint(&self) -> (usize, Option) { + let size = self.list.len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for ListIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/map_ext.rs b/crates/blenvy/src/components/reflect_ext/map_ext.rs new file mode 100644 index 0000000..d503a57 --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/map_ext.rs @@ -0,0 +1,34 @@ +use bevy::reflect::{Map, Reflect}; + +pub struct MapIterMut<'a> { + map: &'a mut dyn Map, + index: usize, +} + +impl<'a> MapIterMut<'a> { + /// Creates a new [`MapIterMut`]. + #[inline] + pub fn new(map: &'a mut dyn Map) -> MapIterMut { + MapIterMut { map, index: 0 } + } +} + +impl<'a> Iterator for MapIterMut<'a> { + type Item = (&'a dyn Reflect, &'a mut dyn Reflect); + + fn next(&mut self) -> Option { + let value = self.map.get_at_mut(self.index); + self.index += value.is_some() as usize; + value.map(|(k, v)| unsafe { + // SAFETY: index can only correspond to one field + (&*(k as *const _), &mut *(v as *mut _)) + }) + } + + fn size_hint(&self) -> (usize, Option) { + let size = self.map.len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for MapIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/mod.rs b/crates/blenvy/src/components/reflect_ext/mod.rs new file mode 100644 index 0000000..15a63d5 --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/mod.rs @@ -0,0 +1,56 @@ +use bevy::reflect::{Reflect, ReflectMut}; + +pub mod array_ext; +pub mod enum_ext; +pub mod list_ext; +pub mod map_ext; +pub mod struct_ext; +pub mod tuple_ext; +pub mod tuple_struct_ext; + +pub enum DynamicFieldIterMut<'a> { + Struct(struct_ext::FieldIterMut<'a>), + TupleStruct(tuple_struct_ext::TupleStructFieldIterMut<'a>), + Tuple(tuple_ext::TupleFieldIterMut<'a>), + List(list_ext::ListIterMut<'a>), + Array(array_ext::ArrayIterMut<'a>), + Map(map_ext::MapIterMut<'a>), + Enum(enum_ext::VariantFieldIterMut<'a>), + Value, +} + +impl<'a> DynamicFieldIterMut<'a> { + pub fn from_reflect_mut(ref_mut: ReflectMut<'a>) -> Self { + match ref_mut { + ReflectMut::Struct(s) => DynamicFieldIterMut::Struct(struct_ext::FieldIterMut::new(s)), + ReflectMut::TupleStruct(s) => { + DynamicFieldIterMut::TupleStruct(tuple_struct_ext::TupleStructFieldIterMut::new(s)) + } + ReflectMut::Tuple(t) => { + DynamicFieldIterMut::Tuple(tuple_ext::TupleFieldIterMut::new(t)) + } + ReflectMut::List(l) => DynamicFieldIterMut::List(list_ext::ListIterMut::new(l)), + ReflectMut::Array(a) => DynamicFieldIterMut::Array(array_ext::ArrayIterMut::new(a)), + ReflectMut::Map(m) => DynamicFieldIterMut::Map(map_ext::MapIterMut::new(m)), + ReflectMut::Enum(e) => DynamicFieldIterMut::Enum(enum_ext::VariantFieldIterMut::new(e)), + ReflectMut::Value(_) => DynamicFieldIterMut::Value, + } + } +} + +impl<'a> Iterator for DynamicFieldIterMut<'a> { + type Item = &'a mut dyn Reflect; + + fn next(&mut self) -> Option { + match self { + DynamicFieldIterMut::Struct(s) => s.next(), + DynamicFieldIterMut::TupleStruct(s) => s.next(), + DynamicFieldIterMut::Tuple(t) => t.next(), + DynamicFieldIterMut::List(l) => l.next(), + DynamicFieldIterMut::Array(a) => a.next(), + DynamicFieldIterMut::Map(m) => m.next().map(|(_, v)| v), + DynamicFieldIterMut::Enum(e) => e.next(), + DynamicFieldIterMut::Value => None, + } + } +} diff --git a/crates/blenvy/src/components/reflect_ext/struct_ext.rs b/crates/blenvy/src/components/reflect_ext/struct_ext.rs new file mode 100644 index 0000000..d79e62d --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/struct_ext.rs @@ -0,0 +1,36 @@ +use bevy::reflect::{Reflect, Struct}; + +/// An iterator over the field values of a struct. +pub struct FieldIterMut<'a> { + pub(crate) struct_val: &'a mut dyn Struct, + pub(crate) index: usize, +} + +impl<'a> FieldIterMut<'a> { + pub fn new(value: &'a mut dyn Struct) -> Self { + FieldIterMut { + struct_val: value, + index: 0, + } + } +} + +impl<'a> Iterator for FieldIterMut<'a> { + type Item = &'a mut dyn Reflect; + + fn next(&mut self) -> Option { + let value = self.struct_val.field_at_mut(self.index); + self.index += value.is_some() as usize; + value.map(|v| unsafe { + // SAFETY: index can only correspond to one field + &mut *(v as *mut _) + }) + } + + fn size_hint(&self) -> (usize, Option) { + let size = self.struct_val.field_len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for FieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/tuple_ext.rs b/crates/blenvy/src/components/reflect_ext/tuple_ext.rs new file mode 100644 index 0000000..cb67980 --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/tuple_ext.rs @@ -0,0 +1,35 @@ +use bevy::reflect::{Reflect, Tuple}; + +pub struct TupleFieldIterMut<'a> { + pub(crate) tuple: &'a mut dyn Tuple, + pub(crate) index: usize, +} + +impl<'a> TupleFieldIterMut<'a> { + pub fn new(value: &'a mut dyn Tuple) -> Self { + TupleFieldIterMut { + tuple: value, + index: 0, + } + } +} + +impl<'a> Iterator for TupleFieldIterMut<'a> { + type Item = &'a mut dyn Reflect; + + fn next(&mut self) -> Option { + let value = self.tuple.field_mut(self.index); + self.index += value.is_some() as usize; + value.map(|v| unsafe { + // SAFETY: index can only correspond to one field + &mut *(v as *mut _) + }) + } + + fn size_hint(&self) -> (usize, Option) { + let size = self.tuple.field_len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for TupleFieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs b/crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs new file mode 100644 index 0000000..c189ea8 --- /dev/null +++ b/crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs @@ -0,0 +1,35 @@ +use bevy::reflect::{Reflect, TupleStruct}; + +pub struct TupleStructFieldIterMut<'a> { + pub(crate) tuple_struct: &'a mut dyn TupleStruct, + pub(crate) index: usize, +} + +impl<'a> TupleStructFieldIterMut<'a> { + pub fn new(value: &'a mut dyn TupleStruct) -> Self { + TupleStructFieldIterMut { + tuple_struct: value, + index: 0, + } + } +} + +impl<'a> Iterator for TupleStructFieldIterMut<'a> { + type Item = &'a mut dyn Reflect; + + fn next(&mut self) -> Option { + let value = self.tuple_struct.field_mut(self.index); + self.index += value.is_some() as usize; + value.map(|v| unsafe { + // SAFETY: index can only correspond to one field + &mut *(v as *mut _) + }) + } + + fn size_hint(&self) -> (usize, Option) { + let size = self.tuple_struct.field_len(); + (size, Some(size)) + } +} + +impl<'a> ExactSizeIterator for TupleStructFieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/ronstring_to_reflect_component.rs b/crates/blenvy/src/components/ronstring_to_reflect_component.rs index ba1a473..aa83af7 100644 --- a/crates/blenvy/src/components/ronstring_to_reflect_component.rs +++ b/crates/blenvy/src/components/ronstring_to_reflect_component.rs @@ -7,7 +7,7 @@ use bevy::utils::HashMap; use ron::Value; use serde::de::DeserializeSeed; -use super::{capitalize_first_letter, fake_entity}; +use super::{capitalize_first_letter, fake_entity, patch_entity::patch_reflect_entity}; pub fn ronstring_to_reflect_component( ron_string: &str, @@ -127,7 +127,7 @@ fn bevy_components_string_to_components( let mut deserializer = ron::Deserializer::from_str(ron_string.as_str()) .expect("deserialzer should have been generated from string"); let reflect_deserializer = ReflectDeserializer::new(type_registry); - let component = reflect_deserializer + let mut component = reflect_deserializer .deserialize(&mut deserializer) .unwrap_or_else(|e| { panic!( @@ -136,6 +136,8 @@ fn bevy_components_string_to_components( ) }); + patch_reflect_entity(component.as_mut()); + debug!("component {:?}", component); debug!("real type {:?}", component.get_represented_type_info()); components.push((component, type_registration.clone())); From 1b6dec8f5abaa4f34413a3b5f70453df41055b77 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Wed, 21 Aug 2024 14:09:14 +0200 Subject: [PATCH 11/19] fix downcast --- crates/blenvy/src/components/patch_entity.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/crates/blenvy/src/components/patch_entity.rs b/crates/blenvy/src/components/patch_entity.rs index f9e763e..5dac92c 100644 --- a/crates/blenvy/src/components/patch_entity.rs +++ b/crates/blenvy/src/components/patch_entity.rs @@ -1,18 +1,13 @@ use bevy::{ log::{info, warn}, prelude::Entity, - reflect::Reflect, + reflect::{FromReflect, Reflect}, }; use super::{fake_entity, reflect_ext}; pub fn patch_reflect_entity(reflect: &mut dyn Reflect) -> Option { - // We can put here either `fake_entity::Entity` or `bevy::ecs::entity::Entity`, but the latter would result in a false downcast. - let maybe_fake = reflect - .downcast_mut::() // TODO: doesn't work yet, seems like it doesnt work when it's a dynamic type - .map(|fake| fake.name.clone()); - - info!("{}", reflect.reflect_type_ident().unwrap()); + let maybe_fake = fake_entity::Entity::from_reflect(reflect).map(|fake| fake.name.clone()); if let Some(reference) = maybe_fake { let entity = if let Some(name) = reference { From cc71436187e3301985477772903f1bd94a01dac8 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Wed, 21 Aug 2024 15:05:56 +0200 Subject: [PATCH 12/19] The deserialzation hack.. --- crates/blenvy/src/components/fake_entity.rs | 243 +++++++----------- crates/blenvy/src/components/mod.rs | 2 - crates/blenvy/src/components/patch_entity.rs | 30 --- .../src/components/reflect_ext/array_ext.rs | 36 --- .../src/components/reflect_ext/enum_ext.rs | 36 --- .../src/components/reflect_ext/list_ext.rs | 36 --- .../src/components/reflect_ext/map_ext.rs | 34 --- .../blenvy/src/components/reflect_ext/mod.rs | 56 ---- .../src/components/reflect_ext/struct_ext.rs | 36 --- .../src/components/reflect_ext/tuple_ext.rs | 35 --- .../reflect_ext/tuple_struct_ext.rs | 35 --- .../ronstring_to_reflect_component.rs | 6 +- 12 files changed, 102 insertions(+), 483 deletions(-) delete mode 100644 crates/blenvy/src/components/patch_entity.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/array_ext.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/enum_ext.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/list_ext.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/map_ext.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/mod.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/struct_ext.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/tuple_ext.rs delete mode 100644 crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs index e7d8c6a..93aa070 100644 --- a/crates/blenvy/src/components/fake_entity.rs +++ b/crates/blenvy/src/components/fake_entity.rs @@ -1,7 +1,62 @@ +use std::{alloc::Layout, num::NonZeroU32}; + +use bevy::{ + log::{info, warn}, + reflect::ReflectDeserialize, +}; +use serde::Deserialize; + +const _: () = { + let real = Layout::new::(); + let fake = Layout::new::(); + assert!(real.size() == fake.size()); + assert!(real.align() == fake.align()); +}; + +#[derive(Clone)] +#[repr(C, align(8))] pub(crate) struct Entity { - pub name: Option, + // Do not reorder the fields here. The ordering is equivalent to bevy's `Entity` + #[cfg(target_endian = "little")] + index: u32, + generation: NonZeroU32, + #[cfg(target_endian = "big")] + index: u32, } +impl<'de> Deserialize<'de> for Entity { + fn deserialize(deserializer: D) -> Result + where + D: serde::Deserializer<'de>, + { + #[derive(Deserialize)] + #[serde(rename = "Entity")] + struct EntityData { + name: Option, + } + + let entity_data = EntityData::deserialize(deserializer)?; + + let entity = if let Some(name) = entity_data.name { + info!("Found name {name}"); + bevy::ecs::entity::Entity::PLACEHOLDER + } else { + warn!("No object was specified for Entity relation, using `Entity::PLACEHOLDER`."); + bevy::ecs::entity::Entity::PLACEHOLDER + }; + + Ok(unsafe { + // SAFETY: both have the same layout + core::mem::transmute(entity) + }) + } +} + +// This is expanded and modified from +// ``` +// #[derive(Clone, Reflect)] +// #[reflect_value(Deserialize)] +// ``` const _: () = { use bevy::reflect as bevy_reflect; @@ -9,9 +64,6 @@ const _: () = { impl bevy_reflect::GetTypeRegistration for Entity where Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, - Option: bevy_reflect::FromReflect - + bevy_reflect::TypePath - + bevy_reflect::__macro_exports::RegisterForReflection, { fn get_type_registration() -> bevy_reflect::TypeRegistration { let mut registration = bevy_reflect::TypeRegistration::of::(); @@ -22,45 +74,16 @@ const _: () = { registration.insert::( bevy_reflect::FromType::::from_type(), ); + registration.insert::(bevy_reflect::FromType::::from_type()); registration } - #[inline(never)] - fn register_type_dependencies(registry: &mut bevy_reflect::TypeRegistry) { - as bevy_reflect::__macro_exports::RegisterForReflection>::__register( - registry, - ); - } - } - impl bevy_reflect::Typed for Entity - where - Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, - Option: bevy_reflect::FromReflect - + bevy_reflect::TypePath - + bevy_reflect::__macro_exports::RegisterForReflection, - { - fn type_info() -> &'static bevy_reflect::TypeInfo { - static CELL: bevy_reflect::utility::NonGenericTypeInfoCell = - bevy_reflect::utility::NonGenericTypeInfoCell::new(); - CELL.get_or_set(|| { - bevy_reflect::TypeInfo::Struct( - bevy_reflect::StructInfo::new::(&[ - // TODO: changed here - bevy_reflect::NamedField::new::>("name") - .with_custom_attributes( - bevy_reflect::attributes::CustomAttributes::default(), - ), - ]) - .with_custom_attributes(bevy_reflect::attributes::CustomAttributes::default()), - ) - }) - } } impl bevy_reflect::TypePath for Entity where Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, { fn type_path() -> &'static str { - "bevy_ecs::entity::Entity" + "bevy_ecs::entity::Entity" // this is changed } fn short_type_path() -> &'static str { "Entity" @@ -69,74 +92,29 @@ const _: () = { ::core::option::Option::Some("Entity") } fn crate_name() -> Option<&'static str> { + // this is changed ::core::option::Option::Some("bevy_ecs::entity".split(':').next().unwrap()) } fn module_path() -> Option<&'static str> { - ::core::option::Option::Some("bevy_ecs::entity") + ::core::option::Option::Some("bevy_ecs::entity") // this is changed } } - impl bevy_reflect::Struct for Entity + impl bevy_reflect::Typed for Entity where Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, - Option: bevy_reflect::FromReflect - + bevy_reflect::TypePath - + bevy_reflect::__macro_exports::RegisterForReflection, { - fn field(&self, name: &str) -> ::core::option::Option<&dyn bevy_reflect::Reflect> { - match name { - "name" => ::core::option::Option::Some(&self.name), - _ => ::core::option::Option::None, - } - } - fn field_mut( - &mut self, - name: &str, - ) -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> { - match name { - "name" => ::core::option::Option::Some(&mut self.name), - _ => ::core::option::Option::None, - } - } - fn field_at(&self, index: usize) -> ::core::option::Option<&dyn bevy_reflect::Reflect> { - match index { - 0usize => ::core::option::Option::Some(&self.name), - _ => ::core::option::Option::None, - } - } - fn field_at_mut( - &mut self, - index: usize, - ) -> ::core::option::Option<&mut dyn bevy_reflect::Reflect> { - match index { - 0usize => ::core::option::Option::Some(&mut self.name), - _ => ::core::option::Option::None, - } - } - fn name_at(&self, index: usize) -> ::core::option::Option<&str> { - match index { - 0usize => ::core::option::Option::Some("name"), - _ => ::core::option::Option::None, - } - } - fn field_len(&self) -> usize { - 1usize - } - fn iter_fields(&self) -> bevy_reflect::FieldIter { - bevy_reflect::FieldIter::new(self) - } - fn clone_dynamic(&self) -> bevy_reflect::DynamicStruct { - let mut dynamic: bevy_reflect::DynamicStruct = ::core::default::Default::default(); - dynamic.set_represented_type(bevy_reflect::Reflect::get_represented_type_info(self)); - dynamic.insert_boxed("name", bevy_reflect::Reflect::clone_value(&self.name)); - dynamic + fn type_info() -> &'static bevy_reflect::TypeInfo { + static CELL: bevy_reflect::utility::NonGenericTypeInfoCell = + bevy_reflect::utility::NonGenericTypeInfoCell::new(); + CELL.get_or_set(|| { + let info = bevy_reflect::ValueInfo::new::(); // this is changed + bevy_reflect::TypeInfo::Value(info) + }) } } impl bevy_reflect::Reflect for Entity where Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, - Option: bevy_reflect::FromReflect - + bevy_reflect::TypePath - + bevy_reflect::__macro_exports::RegisterForReflection, { #[inline] fn get_represented_type_info( @@ -172,7 +150,29 @@ const _: () = { } #[inline] fn clone_value(&self) -> ::std::boxed::Box { - ::std::boxed::Box::new(bevy_reflect::Struct::clone_dynamic(self)) + ::std::boxed::Box::new(::core::clone::Clone::clone(self)) + } + #[inline] + fn try_apply( + &mut self, + value: &dyn bevy_reflect::Reflect, + ) -> ::core::result::Result<(), bevy_reflect::ApplyError> { + let any = bevy_reflect::Reflect::as_any(value); + if let ::core::option::Option::Some(value) = + ::downcast_ref::(any) + { + *self = ::core::clone::Clone::clone(value); + } else { + return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedTypes { + from_type: ::core::convert::Into::into( + bevy_reflect::DynamicTypePath::reflect_type_path(value), + ), + to_type: ::core::convert::Into::into( + ::type_path(), + ), + }); + } + ::core::result::Result::Ok(()) } #[inline] fn set( @@ -183,75 +183,32 @@ const _: () = { ::core::result::Result::Ok(()) } #[inline] - fn try_apply( - &mut self, - value: &dyn bevy_reflect::Reflect, - ) -> ::core::result::Result<(), bevy_reflect::ApplyError> { - if let bevy_reflect::ReflectRef::Struct(struct_value) = - bevy_reflect::Reflect::reflect_ref(value) - { - for (i, value) in ::core::iter::Iterator::enumerate( - bevy_reflect::Struct::iter_fields(struct_value), - ) { - let name = bevy_reflect::Struct::name_at(struct_value, i).unwrap(); - if let ::core::option::Option::Some(v) = - bevy_reflect::Struct::field_mut(self, name) - { - bevy_reflect::Reflect::try_apply(v, value)?; - } - } - } else { - return ::core::result::Result::Err(bevy_reflect::ApplyError::MismatchedKinds { - from_kind: bevy_reflect::Reflect::reflect_kind(value), - to_kind: bevy_reflect::ReflectKind::Struct, - }); - } - ::core::result::Result::Ok(()) - } - #[inline] fn reflect_kind(&self) -> bevy_reflect::ReflectKind { - bevy_reflect::ReflectKind::Struct + bevy_reflect::ReflectKind::Value } #[inline] fn reflect_ref(&self) -> bevy_reflect::ReflectRef { - bevy_reflect::ReflectRef::Struct(self) + bevy_reflect::ReflectRef::Value(self) } #[inline] fn reflect_mut(&mut self) -> bevy_reflect::ReflectMut { - bevy_reflect::ReflectMut::Struct(self) + bevy_reflect::ReflectMut::Value(self) } #[inline] fn reflect_owned(self: ::std::boxed::Box) -> bevy_reflect::ReflectOwned { - bevy_reflect::ReflectOwned::Struct(self) - } - fn reflect_partial_eq( - &self, - value: &dyn bevy_reflect::Reflect, - ) -> ::core::option::Option { - bevy_reflect::struct_partial_eq(self, value) + bevy_reflect::ReflectOwned::Value(self) } } impl bevy_reflect::FromReflect for Entity where Self: ::core::any::Any + ::core::marker::Send + ::core::marker::Sync, - Option: bevy_reflect::FromReflect - + bevy_reflect::TypePath - + bevy_reflect::__macro_exports::RegisterForReflection, { fn from_reflect(reflect: &dyn bevy_reflect::Reflect) -> ::core::option::Option { - if let bevy_reflect::ReflectRef::Struct(__ref_struct) = - bevy_reflect::Reflect::reflect_ref(reflect) - { - ::core::option::Option::Some(Self { - name: (|| { - as bevy_reflect::FromReflect>::from_reflect( - bevy_reflect::Struct::field(__ref_struct, "name")?, - ) - })()?, - }) - } else { - ::core::option::Option::None - } + ::core::option::Option::Some(::core::clone::Clone::clone( + ::downcast_ref::( + ::as_any(reflect), + )?, + )) } } }; diff --git a/crates/blenvy/src/components/mod.rs b/crates/blenvy/src/components/mod.rs index 43a69e3..9c499f2 100644 --- a/crates/blenvy/src/components/mod.rs +++ b/crates/blenvy/src/components/mod.rs @@ -8,8 +8,6 @@ pub mod process_gltfs; pub use process_gltfs::*; mod fake_entity; -mod patch_entity; -mod reflect_ext; pub mod blender_settings; diff --git a/crates/blenvy/src/components/patch_entity.rs b/crates/blenvy/src/components/patch_entity.rs deleted file mode 100644 index 5dac92c..0000000 --- a/crates/blenvy/src/components/patch_entity.rs +++ /dev/null @@ -1,30 +0,0 @@ -use bevy::{ - log::{info, warn}, - prelude::Entity, - reflect::{FromReflect, Reflect}, -}; - -use super::{fake_entity, reflect_ext}; - -pub fn patch_reflect_entity(reflect: &mut dyn Reflect) -> Option { - let maybe_fake = fake_entity::Entity::from_reflect(reflect).map(|fake| fake.name.clone()); - - if let Some(reference) = maybe_fake { - let entity = if let Some(name) = reference { - info!("Found name {name}"); - bevy::ecs::entity::Entity::PLACEHOLDER - } else { - warn!("No object was specified for Entity relation, using `Entity::PLACEHOLDER`."); - bevy::ecs::entity::Entity::PLACEHOLDER - }; - Some(entity) - } else { - let reflect_mut = reflect.reflect_mut(); - let iter = reflect_ext::DynamicFieldIterMut::from_reflect_mut(reflect_mut); - // TODO: recursively update - for f in iter { - patch_reflect_entity(f); - } - None - } -} diff --git a/crates/blenvy/src/components/reflect_ext/array_ext.rs b/crates/blenvy/src/components/reflect_ext/array_ext.rs deleted file mode 100644 index e73a35b..0000000 --- a/crates/blenvy/src/components/reflect_ext/array_ext.rs +++ /dev/null @@ -1,36 +0,0 @@ -use bevy::reflect::{Array, Reflect}; - -pub struct ArrayIterMut<'a> { - array: &'a mut dyn Array, - index: usize, -} - -impl<'a> ArrayIterMut<'a> { - /// Creates a new [`ArrayIterMut`]. - #[inline] - pub fn new(array: &'a mut dyn Array) -> ArrayIterMut { - ArrayIterMut { array, index: 0 } - } -} - -impl<'a> Iterator for ArrayIterMut<'a> { - type Item = &'a mut dyn Reflect; - - #[inline] - fn next(&mut self) -> Option { - let value = self.array.get_mut(self.index); - self.index += value.is_some() as usize; - value.map(|v| unsafe { - // SAFETY: index can only correspond to one field - &mut *(v as *mut _) - }) - } - - #[inline] - fn size_hint(&self) -> (usize, Option) { - let size = self.array.len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for ArrayIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/enum_ext.rs b/crates/blenvy/src/components/reflect_ext/enum_ext.rs deleted file mode 100644 index 5c15b73..0000000 --- a/crates/blenvy/src/components/reflect_ext/enum_ext.rs +++ /dev/null @@ -1,36 +0,0 @@ -use bevy::reflect::{Enum, Reflect}; - -pub struct VariantFieldIterMut<'a> { - container: &'a mut dyn Enum, - index: usize, -} - -impl<'a> VariantFieldIterMut<'a> { - pub fn new(container: &'a mut dyn Enum) -> Self { - Self { - container, - index: 0, - } - } -} - -impl<'a> Iterator for VariantFieldIterMut<'a> { - // TODO: make this work with `VariantFieldMut` again - type Item = &'a mut dyn Reflect; - - fn next(&mut self) -> Option { - let value = self.container.field_at_mut(self.index); - self.index += value.is_some() as usize; - value.map(|v| unsafe { - // SAFETY: index can only correspond to one field - &mut *(v as *mut _) - }) - } - - fn size_hint(&self) -> (usize, Option) { - let size = self.container.field_len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for VariantFieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/list_ext.rs b/crates/blenvy/src/components/reflect_ext/list_ext.rs deleted file mode 100644 index d8d17f6..0000000 --- a/crates/blenvy/src/components/reflect_ext/list_ext.rs +++ /dev/null @@ -1,36 +0,0 @@ -use bevy::reflect::{List, Reflect}; - -pub struct ListIterMut<'a> { - list: &'a mut dyn List, - index: usize, -} - -impl<'a> ListIterMut<'a> { - /// Creates a new [`ListIterMut`]. - #[inline] - pub fn new(list: &'a mut dyn List) -> ListIterMut { - ListIterMut { list, index: 0 } - } -} - -impl<'a> Iterator for ListIterMut<'a> { - type Item = &'a mut dyn Reflect; - - #[inline] - fn next(&mut self) -> Option { - let value = self.list.get_mut(self.index); - self.index += value.is_some() as usize; - value.map(|v| unsafe { - // SAFETY: index can only correspond to one field - &mut *(v as *mut _) - }) - } - - #[inline] - fn size_hint(&self) -> (usize, Option) { - let size = self.list.len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for ListIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/map_ext.rs b/crates/blenvy/src/components/reflect_ext/map_ext.rs deleted file mode 100644 index d503a57..0000000 --- a/crates/blenvy/src/components/reflect_ext/map_ext.rs +++ /dev/null @@ -1,34 +0,0 @@ -use bevy::reflect::{Map, Reflect}; - -pub struct MapIterMut<'a> { - map: &'a mut dyn Map, - index: usize, -} - -impl<'a> MapIterMut<'a> { - /// Creates a new [`MapIterMut`]. - #[inline] - pub fn new(map: &'a mut dyn Map) -> MapIterMut { - MapIterMut { map, index: 0 } - } -} - -impl<'a> Iterator for MapIterMut<'a> { - type Item = (&'a dyn Reflect, &'a mut dyn Reflect); - - fn next(&mut self) -> Option { - let value = self.map.get_at_mut(self.index); - self.index += value.is_some() as usize; - value.map(|(k, v)| unsafe { - // SAFETY: index can only correspond to one field - (&*(k as *const _), &mut *(v as *mut _)) - }) - } - - fn size_hint(&self) -> (usize, Option) { - let size = self.map.len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for MapIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/mod.rs b/crates/blenvy/src/components/reflect_ext/mod.rs deleted file mode 100644 index 15a63d5..0000000 --- a/crates/blenvy/src/components/reflect_ext/mod.rs +++ /dev/null @@ -1,56 +0,0 @@ -use bevy::reflect::{Reflect, ReflectMut}; - -pub mod array_ext; -pub mod enum_ext; -pub mod list_ext; -pub mod map_ext; -pub mod struct_ext; -pub mod tuple_ext; -pub mod tuple_struct_ext; - -pub enum DynamicFieldIterMut<'a> { - Struct(struct_ext::FieldIterMut<'a>), - TupleStruct(tuple_struct_ext::TupleStructFieldIterMut<'a>), - Tuple(tuple_ext::TupleFieldIterMut<'a>), - List(list_ext::ListIterMut<'a>), - Array(array_ext::ArrayIterMut<'a>), - Map(map_ext::MapIterMut<'a>), - Enum(enum_ext::VariantFieldIterMut<'a>), - Value, -} - -impl<'a> DynamicFieldIterMut<'a> { - pub fn from_reflect_mut(ref_mut: ReflectMut<'a>) -> Self { - match ref_mut { - ReflectMut::Struct(s) => DynamicFieldIterMut::Struct(struct_ext::FieldIterMut::new(s)), - ReflectMut::TupleStruct(s) => { - DynamicFieldIterMut::TupleStruct(tuple_struct_ext::TupleStructFieldIterMut::new(s)) - } - ReflectMut::Tuple(t) => { - DynamicFieldIterMut::Tuple(tuple_ext::TupleFieldIterMut::new(t)) - } - ReflectMut::List(l) => DynamicFieldIterMut::List(list_ext::ListIterMut::new(l)), - ReflectMut::Array(a) => DynamicFieldIterMut::Array(array_ext::ArrayIterMut::new(a)), - ReflectMut::Map(m) => DynamicFieldIterMut::Map(map_ext::MapIterMut::new(m)), - ReflectMut::Enum(e) => DynamicFieldIterMut::Enum(enum_ext::VariantFieldIterMut::new(e)), - ReflectMut::Value(_) => DynamicFieldIterMut::Value, - } - } -} - -impl<'a> Iterator for DynamicFieldIterMut<'a> { - type Item = &'a mut dyn Reflect; - - fn next(&mut self) -> Option { - match self { - DynamicFieldIterMut::Struct(s) => s.next(), - DynamicFieldIterMut::TupleStruct(s) => s.next(), - DynamicFieldIterMut::Tuple(t) => t.next(), - DynamicFieldIterMut::List(l) => l.next(), - DynamicFieldIterMut::Array(a) => a.next(), - DynamicFieldIterMut::Map(m) => m.next().map(|(_, v)| v), - DynamicFieldIterMut::Enum(e) => e.next(), - DynamicFieldIterMut::Value => None, - } - } -} diff --git a/crates/blenvy/src/components/reflect_ext/struct_ext.rs b/crates/blenvy/src/components/reflect_ext/struct_ext.rs deleted file mode 100644 index d79e62d..0000000 --- a/crates/blenvy/src/components/reflect_ext/struct_ext.rs +++ /dev/null @@ -1,36 +0,0 @@ -use bevy::reflect::{Reflect, Struct}; - -/// An iterator over the field values of a struct. -pub struct FieldIterMut<'a> { - pub(crate) struct_val: &'a mut dyn Struct, - pub(crate) index: usize, -} - -impl<'a> FieldIterMut<'a> { - pub fn new(value: &'a mut dyn Struct) -> Self { - FieldIterMut { - struct_val: value, - index: 0, - } - } -} - -impl<'a> Iterator for FieldIterMut<'a> { - type Item = &'a mut dyn Reflect; - - fn next(&mut self) -> Option { - let value = self.struct_val.field_at_mut(self.index); - self.index += value.is_some() as usize; - value.map(|v| unsafe { - // SAFETY: index can only correspond to one field - &mut *(v as *mut _) - }) - } - - fn size_hint(&self) -> (usize, Option) { - let size = self.struct_val.field_len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for FieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/tuple_ext.rs b/crates/blenvy/src/components/reflect_ext/tuple_ext.rs deleted file mode 100644 index cb67980..0000000 --- a/crates/blenvy/src/components/reflect_ext/tuple_ext.rs +++ /dev/null @@ -1,35 +0,0 @@ -use bevy::reflect::{Reflect, Tuple}; - -pub struct TupleFieldIterMut<'a> { - pub(crate) tuple: &'a mut dyn Tuple, - pub(crate) index: usize, -} - -impl<'a> TupleFieldIterMut<'a> { - pub fn new(value: &'a mut dyn Tuple) -> Self { - TupleFieldIterMut { - tuple: value, - index: 0, - } - } -} - -impl<'a> Iterator for TupleFieldIterMut<'a> { - type Item = &'a mut dyn Reflect; - - fn next(&mut self) -> Option { - let value = self.tuple.field_mut(self.index); - self.index += value.is_some() as usize; - value.map(|v| unsafe { - // SAFETY: index can only correspond to one field - &mut *(v as *mut _) - }) - } - - fn size_hint(&self) -> (usize, Option) { - let size = self.tuple.field_len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for TupleFieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs b/crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs deleted file mode 100644 index c189ea8..0000000 --- a/crates/blenvy/src/components/reflect_ext/tuple_struct_ext.rs +++ /dev/null @@ -1,35 +0,0 @@ -use bevy::reflect::{Reflect, TupleStruct}; - -pub struct TupleStructFieldIterMut<'a> { - pub(crate) tuple_struct: &'a mut dyn TupleStruct, - pub(crate) index: usize, -} - -impl<'a> TupleStructFieldIterMut<'a> { - pub fn new(value: &'a mut dyn TupleStruct) -> Self { - TupleStructFieldIterMut { - tuple_struct: value, - index: 0, - } - } -} - -impl<'a> Iterator for TupleStructFieldIterMut<'a> { - type Item = &'a mut dyn Reflect; - - fn next(&mut self) -> Option { - let value = self.tuple_struct.field_mut(self.index); - self.index += value.is_some() as usize; - value.map(|v| unsafe { - // SAFETY: index can only correspond to one field - &mut *(v as *mut _) - }) - } - - fn size_hint(&self) -> (usize, Option) { - let size = self.tuple_struct.field_len(); - (size, Some(size)) - } -} - -impl<'a> ExactSizeIterator for TupleStructFieldIterMut<'a> {} diff --git a/crates/blenvy/src/components/ronstring_to_reflect_component.rs b/crates/blenvy/src/components/ronstring_to_reflect_component.rs index aa83af7..ba1a473 100644 --- a/crates/blenvy/src/components/ronstring_to_reflect_component.rs +++ b/crates/blenvy/src/components/ronstring_to_reflect_component.rs @@ -7,7 +7,7 @@ use bevy::utils::HashMap; use ron::Value; use serde::de::DeserializeSeed; -use super::{capitalize_first_letter, fake_entity, patch_entity::patch_reflect_entity}; +use super::{capitalize_first_letter, fake_entity}; pub fn ronstring_to_reflect_component( ron_string: &str, @@ -127,7 +127,7 @@ fn bevy_components_string_to_components( let mut deserializer = ron::Deserializer::from_str(ron_string.as_str()) .expect("deserialzer should have been generated from string"); let reflect_deserializer = ReflectDeserializer::new(type_registry); - let mut component = reflect_deserializer + let component = reflect_deserializer .deserialize(&mut deserializer) .unwrap_or_else(|e| { panic!( @@ -136,8 +136,6 @@ fn bevy_components_string_to_components( ) }); - patch_reflect_entity(component.as_mut()); - debug!("component {:?}", component); debug!("real type {:?}", component.get_represented_type_info()); components.push((component, type_registration.clone())); From 4d9c451de8ac05098da13f2cf750495213e18bba Mon Sep 17 00:00:00 2001 From: DasLixou Date: Wed, 21 Aug 2024 15:24:44 +0200 Subject: [PATCH 13/19] Fix type shenanigans --- crates/blenvy/src/components/fake_entity.rs | 14 +++++++++++--- .../components/ronstring_to_reflect_component.rs | 4 ++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs index 93aa070..0ff7214 100644 --- a/crates/blenvy/src/components/fake_entity.rs +++ b/crates/blenvy/src/components/fake_entity.rs @@ -124,15 +124,23 @@ const _: () = { } #[inline] fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { - self + // this is changed + unsafe { + core::mem::transmute::< + ::std::boxed::Box, + ::std::boxed::Box, + >(self) + } } #[inline] fn as_any(&self) -> &dyn ::core::any::Any { - self + // this is changed + unsafe { core::mem::transmute::<&Entity, &bevy::ecs::entity::Entity>(self) } } #[inline] fn as_any_mut(&mut self) -> &mut dyn ::core::any::Any { - self + // this is changed + unsafe { core::mem::transmute::<&mut Entity, &mut bevy::ecs::entity::Entity>(self) } } #[inline] fn into_reflect( diff --git a/crates/blenvy/src/components/ronstring_to_reflect_component.rs b/crates/blenvy/src/components/ronstring_to_reflect_component.rs index ba1a473..f23c38a 100644 --- a/crates/blenvy/src/components/ronstring_to_reflect_component.rs +++ b/crates/blenvy/src/components/ronstring_to_reflect_component.rs @@ -1,7 +1,7 @@ use std::any::TypeId; -use bevy::log::{debug, warn}; -use bevy::reflect::serde::ReflectDeserializer; +use bevy::log::{debug, info, warn}; +use bevy::reflect::serde::{ReflectDeserializer, ReflectSerializer}; use bevy::reflect::{GetTypeRegistration, Reflect, TypeRegistration, TypeRegistry}; use bevy::utils::HashMap; use ron::Value; From 3e14cc06bf9c528469dc0a3c078ed37d99fe86c2 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Wed, 21 Aug 2024 15:32:37 +0200 Subject: [PATCH 14/19] better example --- examples/relations/src/main.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/examples/relations/src/main.rs b/examples/relations/src/main.rs index 85b0098..0e1c81e 100644 --- a/examples/relations/src/main.rs +++ b/examples/relations/src/main.rs @@ -1,7 +1,7 @@ use bevy::prelude::*; use blenvy::{BlenvyPlugin, BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlueprint}; -#[derive(Component, Reflect)] +#[derive(Component, Reflect, Debug)] #[reflect(Component)] pub struct TupleRelations(Entity); // TODO: Serialization on blender side currently is broken @@ -21,6 +21,7 @@ fn main() { .register_type::() .register_type::() .add_systems(Startup, setup_game) + .add_systems(Update, (print_names, print_tuple_relations)) .run(); } @@ -33,3 +34,15 @@ fn setup_game(mut commands: Commands) { GameWorldTag, )); } + +fn print_names(query: Query<(Entity, &Name), Added>) { + for (entity, name) in &query { + info!("[EXAMPLE] {name} is {entity}"); + } +} + +fn print_tuple_relations(query: Query<(&Name, &TupleRelations), Added>) { + for (name, r) in &query { + info!("[EXAMPLE] {name} has the relation {r:?}") + } +} From 4aa2ef382ce1bcfe12e0c4fa9ff023f9d44d3d8f Mon Sep 17 00:00:00 2001 From: DasLixou Date: Thu, 22 Aug 2024 15:45:26 +0200 Subject: [PATCH 15/19] HOLY SHIT THAT WORKS --- crates/blenvy/src/components/fake_entity.rs | 73 ++- crates/blenvy/src/components/process_gltfs.rs | 83 ++- examples/relations/Cargo.toml | 1 + examples/relations/art/untitled.blend | Bin 894628 -> 900532 bytes examples/relations/assets/levels/World.glb | Bin 3424 -> 4804 bytes examples/relations/assets/registry.json | 525 ++++++++++++++++++ examples/relations/src/main.rs | 2 + .../bevy_components/registry/registry.py | 2 +- 8 files changed, 674 insertions(+), 12 deletions(-) diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs index 0ff7214..948de26 100644 --- a/crates/blenvy/src/components/fake_entity.rs +++ b/crates/blenvy/src/components/fake_entity.rs @@ -1,11 +1,41 @@ -use std::{alloc::Layout, num::NonZeroU32}; +use std::{alloc::Layout, cell::Cell, num::NonZeroU32}; use bevy::{ + core::Name, + ecs::world::DeferredWorld, + gltf::GltfExtras, log::{info, warn}, + prelude::{HierarchyQueryExt, Parent, QueryState, With, World}, reflect::ReflectDeserialize, + scene::{InstanceId, SceneInstance}, }; use serde::Deserialize; +pub(crate) struct BadWorldAccess { + world: *mut World, + names: QueryState<(bevy::ecs::entity::Entity, &'static Name), With>, + hierarchy: QueryState<&'static Parent, ()>, + scene_instances: QueryState<&'static SceneInstance, ()>, +} + +impl BadWorldAccess { + pub unsafe fn new(world: &mut World) -> Self { + BadWorldAccess { + world, + // We have to check that we focus on a node, not a mesh with the same name. + // Currently, the only possible way of checking this is with `GltfExtras`, so selected entities must at least have one component. + names: world.query_filtered::<(bevy::ecs::entity::Entity, &Name), With>(), + hierarchy: world.query::<&Parent>(), + scene_instances: world.query::<&SceneInstance>(), + } + } +} + +thread_local! { + pub(crate) static BAD_WORLD_ACCESS: Cell> = Cell::new(None); + pub(crate) static INSTANCE_ID: Cell> = Cell::new(None); +} + const _: () = { let real = Layout::new::(); let fake = Layout::new::(); @@ -39,7 +69,46 @@ impl<'de> Deserialize<'de> for Entity { let entity = if let Some(name) = entity_data.name { info!("Found name {name}"); - bevy::ecs::entity::Entity::PLACEHOLDER + let BadWorldAccess { + world, + mut names, + mut hierarchy, + mut scene_instances, + } = BAD_WORLD_ACCESS.take().expect("No bad world access :c"); + let instance = INSTANCE_ID.get().expect("No instance id set :c"); + + let mut target = None; + let w = unsafe { &*world.cast_const() }; + 'search: for (e, n) in names.iter(w) { + if !name.eq(n.as_str()) { + continue; + } + + let mut dw = DeferredWorld::from(unsafe { &mut *world }); + let hierarchy = dw.query(&mut hierarchy); + + for parent in hierarchy.iter_ancestors(e) { + let Ok(id) = scene_instances.get(w, parent) else { + continue; + }; + if instance.eq(id) { + target = Some(e); + break 'search; + } + } + } + + BAD_WORLD_ACCESS.set(Some(BadWorldAccess { + world, + names, + hierarchy, + scene_instances, + })); + + target.unwrap_or_else(|| { + warn!("No entity found for '{name}' - perhaps it doesn't contain any components from blender?"); + bevy::ecs::entity::Entity::PLACEHOLDER + }) } else { warn!("No object was specified for Entity relation, using `Entity::PLACEHOLDER`."); bevy::ecs::entity::Entity::PLACEHOLDER diff --git a/crates/blenvy/src/components/process_gltfs.rs b/crates/blenvy/src/components/process_gltfs.rs index d861662..71b895f 100644 --- a/crates/blenvy/src/components/process_gltfs.rs +++ b/crates/blenvy/src/components/process_gltfs.rs @@ -1,20 +1,26 @@ +use std::ops::Deref; + use bevy::{ core::Name, ecs::{ entity::Entity, query::{Added, Without}, reflect::{AppTypeRegistry, ReflectComponent}, - world::World, + world::{DeferredWorld, World}, }, gltf::{GltfExtras, GltfMaterialExtras, GltfMeshExtras, GltfSceneExtras}, hierarchy::Parent, log::{debug, warn}, + prelude::HierarchyQueryExt, reflect::{Reflect, TypeRegistration}, + scene::SceneInstance, utils::HashMap, }; use crate::{ronstring_to_reflect_component, GltfProcessed}; +use super::fake_entity::{self, BadWorldAccess}; + // , mut entity_components: HashMap, TypeRegistration)>> fn find_entity_components( entity: Entity, @@ -57,22 +63,44 @@ fn find_entity_components( /// main function: injects components into each entity in gltf files that have `gltf_extras`, using reflection pub fn add_components_from_gltf_extras(world: &mut World) { - let mut extras = world.query_filtered::<(Entity, Option<&Name>, &GltfExtras, Option<&Parent>), (Added, Without)>(); - let mut scene_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfSceneExtras, Option<&Parent>), (Added, Without)>(); - let mut mesh_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMeshExtras, Option<&Parent>), (Added, Without)>(); - let mut material_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMaterialExtras, Option<&Parent>), (Added, Without)>(); + let mut extras = world.query_filtered::<(Entity, Option<&Name>, &GltfExtras), (Added, Without)>(); + let mut scene_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfSceneExtras), (Added, Without)>(); + let mut mesh_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMeshExtras), (Added, Without)>(); + let mut material_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMaterialExtras), (Added, Without)>(); + + let mut scene_instances = world.query::<&SceneInstance>(); + + let mut hierarchy_state = world.query::<&Parent>(); + let mut __unsafe_dw = DeferredWorld::from(unsafe { &mut *(world as *mut _) }); + let hierarchy = __unsafe_dw.query(&mut hierarchy_state); let mut entity_components: HashMap, TypeRegistration)>> = HashMap::new(); // let gltf_components_config = world.resource::(); - for (entity, name, extra, parent) in extras.iter(world) { + unsafe { + // SAFETY: we don't do anything harmful until taking this, and have full world access + fake_entity::BAD_WORLD_ACCESS.set(Some(BadWorldAccess::new(world))); + } + + for (entity, name, extra) in extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Gltf Extra: Name: {:?}, entity {:?}, parent: {:?}, extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -80,15 +108,27 @@ pub fn add_components_from_gltf_extras(world: &mut World) { let (target_entity, updated_components) = find_entity_components(entity, name, parent, reflect_components, &entity_components); + entity_components.insert(target_entity, updated_components); } - for (entity, name, extra, parent) in scene_extras.iter(world) { + for (entity, name, extra) in scene_extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Gltf Scene Extra: Name: {:?}, entity {:?}, parent: {:?}, scene_extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -98,12 +138,23 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra, parent) in mesh_extras.iter(world) { + for (entity, name, extra) in mesh_extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Gltf Mesh Extra: Name: {:?}, entity {:?}, parent: {:?}, mesh_extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -113,12 +164,23 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra, parent) in material_extras.iter(world) { + for (entity, name, extra) in material_extras.iter(world) { + let parent = hierarchy.get(entity).ok(); debug!( "Name: {:?}, entity {:?}, parent: {:?}, material_extras {:?}", name, entity, parent, extra ); + if let Some(instance) = hierarchy + .iter_ancestors(entity) + .find_map(|p| scene_instances.get(world, p).ok()) + { + fake_entity::INSTANCE_ID.set(Some(*instance.deref())); + } else { + warn!("Can't find higher-hierarchy `SceneInstance` for entity '{name:?}'"); + fake_entity::INSTANCE_ID.set(None); + }; + let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -128,6 +190,9 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } + fake_entity::BAD_WORLD_ACCESS.set(None); + fake_entity::INSTANCE_ID.set(None); + for (entity, components) in entity_components { let type_registry: &AppTypeRegistry = world.resource(); let type_registry = type_registry.clone(); diff --git a/examples/relations/Cargo.toml b/examples/relations/Cargo.toml index 03981ed..1f7cdae 100644 --- a/examples/relations/Cargo.toml +++ b/examples/relations/Cargo.toml @@ -6,4 +6,5 @@ license = "MIT OR Apache-2.0" [dependencies] bevy = { version = "0.14", features = ["dynamic_linking"] } +bevy-inspector-egui = "0.25.2" blenvy = { path = "../../crates/blenvy" } diff --git a/examples/relations/art/untitled.blend b/examples/relations/art/untitled.blend index 189b2b93f21b7f3b0675afd5c4a97444646402a5..a344db60e7b1a9ab764bc1afcc8061440a7f3fc5 100644 GIT binary patch delta 89789 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�V({A(6pOp}(UX*o^Hsaj6a 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 BN)rG8 delta 91845 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 diff --git a/examples/relations/assets/levels/World.glb b/examples/relations/assets/levels/World.glb index 2c9c0cc014eee627a13752ed1b5475f4503a36a3..a85866c8aaf93da21a3b5088d75158ada1e98dfb 100644 GIT binary patch delta 269 zcmWNKu}Z^07=SOiHqZidnwz+rGc;a?cr0`WGfbs9Z;A*!XY?ld$jKcVk4}V4BSyAz}pb zbecf~o!5uVrIZ1I`AeG5Ch7d?Ifv-hcWJ;W6+tKhUs5SZo4EnwTq+qVL8TXPpR_%f zD&aHALXRs(Dc7;N(m$r7mu71xB+yNI*C$sHNdo=zn@*DS&IS}BRczo*Q#-Y$5$aD2 zdV~)RS=F(jDw1NqUK%>L2(DK8-a5ikiOMa#tgqFWC%Il(2TkUOVsW?FjT;D^UUrLt NZQx?dj`7#f#{bNnMa2LB delta 76 zcmV-S0JHzZCEywkXKYkP0ssI2U=08O{05N@v$4a90h6=>*|YEi2LiLx2EhT7Q3)Fn iF*YzbeO-MZAV>xP076Ml0F$5%C$sAe*#fhC3`hgG))-g- diff --git a/examples/relations/assets/registry.json b/examples/relations/assets/registry.json index 3f40219..1916754 100644 --- a/examples/relations/assets/registry.json +++ b/examples/relations/assets/registry.json @@ -3609,6 +3609,30 @@ "type": "object", "typeInfo": "Value" }, + "bevy_egui::EguiSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "bevy_egui::EguiSettings", + "properties": { + "default_open_url_target": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "scale_factor" + ], + "short_name": "EguiSettings", + "type": "object", + "typeInfo": "Struct" + }, "bevy_gizmos::aabb::AabbGizmoConfigGroup": { "additionalProperties": false, "isComponent": false, @@ -12776,6 +12800,14 @@ "type": "object", "typeInfo": "Value" }, + "core::ops::Range": { + "isComponent": false, + "isResource": false, + "long_name": "core::ops::Range", + "short_name": "Range", + "type": "object", + "typeInfo": "Value" + }, "core::option::Option<(u8, u8)>": { "isComponent": false, "isResource": false, @@ -13490,6 +13522,295 @@ "type": "object", "typeInfo": "Struct" }, + "glam::BVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec2", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "BVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "BVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3A": { + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec3A", + "short_name": "BVec3A", + "type": "object", + "typeInfo": "Value" + }, + "glam::BVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec4", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec4A": { + "isComponent": false, + "isResource": false, + "long_name": "glam::BVec4A", + "short_name": "BVec4A", + "type": "object", + "typeInfo": "Value" + }, + "glam::DAffine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DAffine2", + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::DMat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "DAffine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DAffine3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DAffine3", + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::DMat3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "DAffine3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat2", + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "DMat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat3", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DMat4", + "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", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DQuat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DQuat", + "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", + "type": "object", + "typeInfo": "Struct" + }, "glam::DVec2": { "additionalProperties": false, "isComponent": false, @@ -13515,6 +13836,74 @@ "type": "object", "typeInfo": "Struct" }, + "glam::DVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "DVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::DVec4", + "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", + "type": "object", + "typeInfo": "Struct" + }, "glam::IVec2": { "additionalProperties": false, "isComponent": false, @@ -13540,6 +13929,74 @@ "type": "object", "typeInfo": "Struct" }, + "glam::IVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec3", + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "IVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::IVec4", + "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", + "type": "object", + "typeInfo": "Struct" + }, "glam::Mat2": { "additionalProperties": false, "isComponent": false, @@ -13565,6 +14022,37 @@ "type": "object", "typeInfo": "Struct" }, + "glam::Mat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::Mat3", + "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", + "type": "object", + "typeInfo": "Struct" + }, "glam::Mat3A": { "additionalProperties": false, "isComponent": false, @@ -13726,6 +14214,43 @@ "type": "object", "typeInfo": "Struct" }, + "glam::UVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "long_name": "glam::UVec4", + "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", + "type": "object", + "typeInfo": "Struct" + }, "glam::Vec2": { "additionalProperties": false, "isComponent": false, diff --git a/examples/relations/src/main.rs b/examples/relations/src/main.rs index 0e1c81e..fde8834 100644 --- a/examples/relations/src/main.rs +++ b/examples/relations/src/main.rs @@ -1,4 +1,5 @@ use bevy::prelude::*; +use bevy_inspector_egui::quick::WorldInspectorPlugin; use blenvy::{BlenvyPlugin, BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlueprint}; #[derive(Component, Reflect, Debug)] @@ -17,6 +18,7 @@ fn main() { .add_plugins(( DefaultPlugins.set(AssetPlugin::default()), BlenvyPlugin::default(), + WorldInspectorPlugin::new(), )) .register_type::() .register_type::() diff --git a/tools/blenvy/add_ons/bevy_components/registry/registry.py b/tools/blenvy/add_ons/bevy_components/registry/registry.py index 0d3b210..59941e5 100644 --- a/tools/blenvy/add_ons/bevy_components/registry/registry.py +++ b/tools/blenvy/add_ons/bevy_components/registry/registry.py @@ -26,7 +26,7 @@ def property_group_from_infos(property_group_name, property_group_parameters): return (property_group_pointer, property_group_class) def is_entity_poll(self, object): - return bpy.context.scene in object.users_scene # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? + return True # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? # this is where we store the information for all available components class ComponentsRegistry(PropertyGroup): From 3e24601f1d665230792e7bc93489e3f177ef3f35 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Thu, 22 Aug 2024 15:50:24 +0200 Subject: [PATCH 16/19] remove todo from example --- examples/relations/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/relations/src/main.rs b/examples/relations/src/main.rs index fde8834..47029cd 100644 --- a/examples/relations/src/main.rs +++ b/examples/relations/src/main.rs @@ -4,7 +4,7 @@ use blenvy::{BlenvyPlugin, BlueprintInfo, GameWorldTag, HideUntilReady, SpawnBlu #[derive(Component, Reflect, Debug)] #[reflect(Component)] -pub struct TupleRelations(Entity); // TODO: Serialization on blender side currently is broken +pub struct TupleRelations(Entity); #[derive(Component, Reflect)] #[reflect(Component)] From e47fe1a4bd773d9a2bd5a94679ff983d5ff887e7 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Thu, 22 Aug 2024 19:03:58 +0200 Subject: [PATCH 17/19] didn't meant to commit that --- tools/blenvy/add_ons/bevy_components/registry/registry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/blenvy/add_ons/bevy_components/registry/registry.py b/tools/blenvy/add_ons/bevy_components/registry/registry.py index 59941e5..0d3b210 100644 --- a/tools/blenvy/add_ons/bevy_components/registry/registry.py +++ b/tools/blenvy/add_ons/bevy_components/registry/registry.py @@ -26,7 +26,7 @@ def property_group_from_infos(property_group_name, property_group_parameters): return (property_group_pointer, property_group_class) def is_entity_poll(self, object): - return True # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? + return bpy.context.scene in object.users_scene # TODO: only select `object.type`s that get converted to entities and maybe something against other collection(instances)? # this is where we store the information for all available components class ComponentsRegistry(PropertyGroup): From 20f37715e44262f36692a30830266aa6530e6539 Mon Sep 17 00:00:00 2001 From: DasLixou Date: Thu, 22 Aug 2024 19:18:13 +0200 Subject: [PATCH 18/19] Update blender example file --- examples/relations/art/untitled.blend | Bin 900532 -> 902264 bytes examples/relations/assets/levels/World.glb | Bin 4804 -> 4960 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/relations/art/untitled.blend b/examples/relations/art/untitled.blend index a344db60e7b1a9ab764bc1afcc8061440a7f3fc5..d88a84154c5371321690d598a86ea7892769f753 100644 GIT binary patch delta 92126 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 F{2wMkMn(Vt delta 90324 zcma&P3!GI|**|{v%-J(%xH%~hjx*!(j@(2>2^GgtiAaq`R3b0DM^htIL^CokFq$Hv z+29n5NNHzWeO6=g|K*eq^2X?Cg2jyG93XT~}A_>>6D? zuxoi$W7o>+)4GaP^{YOv?r5oA^xa!l&HK!O4K)iEd~(H=SFZZm>AM2{{q37>UiGsx zZthci_~D0t(%9J8b;9(|cePLNw`#%kdxNg_bF$Tk9CAoWn7=ouKJv&TyN{8gP7 zJhV^k@y8we$+_(lyH1{SbM=%dQ&zn==Zc{An4`yh@})_~uR8hae+9LlIdbGD?QJcq zPQK>fL2$&X6Rta}Pv|yM1-gDXzj4ram;LoOK_-)rTHfI_y7nkaSG_R5C7ZkO&Ofkd zoehU?_Fsp;^BaHqeSHt|>;DwEqoa>MqpUro)fxSp^rKe6Ex4Id|K|8$ zpPHR#97&?CVYi)p)}wE1;Bpo`qG`_ZlU9|>H!VL#l%!KDBeS-lQ|uk`_GyG$_3Uj` z**X~5;UE5cFr;b3cLm|jJzr8VwetSSi?gRpgd_6HkCW1zrTP0bzrOk`kw<~0r=BVK z?o%{%;?S-;79H618LIvXRVXBr$u)T?_K8jGMfSqTov+eQsyot68`yU8#X<9=Sr&{- zq(TYZTLh7xN9UfIDCp*T8{RJ97PQK>yhS% zQNV$hH=gS2I<~9fEQkPc28k?%;(4_j%TxmgUeVf0^ogtd%2`!)XPFqV$nu~=eI_$d ze#VxkcnAe8rmNxm4HrQK)lh{Zke^qpzgYE9`iW>-YrgKV=mNf&bgn=BxxV|11O$}P zMuDm*=~txy0!pz;V;8E#PaFbFRSF=WbQ%S!K#^8g3Lv1g83n4;T@)y#QUC#^$2t{M z!F@v2QUC!3{Sd11)>uLn$~-_ofpeh>6fuk=-u}3eo}k~6b@2_>Na*UoA@Ymn`N-0| zrdG|uoYWHrpdLngikJCO>q*TV&MQypR^>@`D3&wgYyCK8>>7UrgJi8 z9bTT`@!kRp?CeK(ANZl558mHzPY4RFnbZxzB|D0i7@u&YaXsl`**EM|E zAK=?<=37o<-{$U7-wx$@L!{x*M2+ji8I#Dj(k<#>$w5--u546a=Wfx7Vxdm?r$zTS zuB9o1+t$+cPwR{?sTJF=tL^Uoxj&vSK@j-gO$|P+o}GPnm^0o2F67fSZZQ|&C%;mC zl0fdbFU*<7Tm2Pl`VJY2Y1epEwETVPj7(+{`}yWF3(vjh{>I;^g^{HlrcY9{aG+oL zP~U9bkd3`nMz-HeOO_%3 z)7waPWXi~eDI>cd+JliOvX_yzD6qD^?!NmQd3nG-wzRlf+gehYM*9~(ud5tM{rk@a z`_&D3rMJE8R8s<{%Ce}`@LlUyggMh+-ts6N_VOsVoMHe)-y)IJb=C3(&Bg3_5_1cV zTPB7xbOA#}?wi~CHg=7@fARolI8FWJ)A}A*W4{Hnkudpc)ukz84hlu2YUVsJFLzT} ztB!auc9^rec3OobjXTHsyK?=xGDH5*+fm%G<&KK(Pc>|D5Djx z8@&CI{<-zNEo3(u51rzzatpia3wtmzGGf}qXi=Gom#&IUbjD~m6D5Tk`-dElzwd1$ zdog9>Us5*mbXnPrd$RHSWj0>-*!_*qnHw$5m_A9xM&ENxFtC4?tz6gJO7^5t;mK_& zD~oq$>!7y0wIgGuUFm*UX69{$*i2`Pl}~9zN*cFz#}oZ?zw2!ydopF?-zwM$ooeGD znEg^Vo-sL-X(xki`fUC%II3&eFYX)ZY_XfaNB3ZPv(P=RmS$|YjwaBs%@*&!_#4&7 z4@~W6ia(7vcsrgP&@5Rh411Y~4|Cx{^E3Ae_G>Z`AbHCx)lWX4su#o=M78<3msd43 zLk2a)d#xIR^>hCbG)#pIn8+~TQi#akn3`q^mmuB)0|#E-c&e}K*rytrAp*o1B$CuW zIgl!9B0!2iF$+cB^}thPposv9EDvoZ15YF;CJapR@|IV9T@Al#mnHT8&CCh?fMn%g-rwqRDp{8m?~~D zRn2>01TVH}^%l&)qs5CH9lV4cIKmKMbpKMr9-4~QdU-JR83_m|vyFnnwCyR_OB6sr zaYlhEP^2{7qyhrU`X|*esLJ;?3=mK{i~?1l#I>h00R{nOwB?}+l!!}H!vF!L_zN`* zs+<`Xm8uU2D4j-usv_dHR0<%Vv>64eK#|haFhD@*c|r|?s>n)_K}acpfD#!6s$xpX zFhD?QHwskcQ5R0N6hJ`97zL_8NdycapsXxtU7!jSF;GhZ1eCl{pbC8_;W0o!sW%E# zfl@?W297WU7~M8YKodG{qVWL%WwudJ7%0V(j{yM%a}iX5BKAq`=K%r=dOTE#Z{ryV zN9}|JXKk9pX5CHFT?&xkM;6_AON$)kLB^l(FFLnbeD2_;X#bOBszd5F+a`TeX_H>h z8`ru)b_C}l+-r>V&EKkeU{&LqOHERR?fYb)x9`nG+}>Wk?f^+SENo*AuoSHp|PHbq`nJ4oF|v+tE& zHMJu!&@mz?%<8E6WzZzQOSO!R7mgoLUDa5){oud{p%mwLf4l0n8ahY8uG(@_)y#?d zJCnJ^PF>ZJ2L8X^<`CY|btdxj3CG8IzTg?p&fMRAbJfCDcmZC?PgJkKTh6>8;Z03Z z7KlOD11}%fm@_9J-C+4Oy_{l4VyCQUV#7_^QGO=caW|2gyLE`)Ky_phBmxYh3w&g8(wo)f;`KBlU1)$QATkTatX@b7;%ILxmfMv?^#cQB3Co*iB50>z4P?kyUQhQ#&Xs4FE#y zFHyAW-G8nMa%S|NUFB~(G8o+o-@sQ;1s}>(#Jk--ke;CBtoN)lil z8SG#T-ezD?A|peAMh2Rd>_80UdU9)t0vi(E$rhq8pfSM?0u1*$R#Gy7$AlsN(%RtF z>{FEo1r`T|g}H!61#xtNMuky9VRrxE_-v@BWqI%Gw|*+PZ)EXqnY}a7GELV%rpv7L zD>dyt*~X1|YzCjJq$?`f#qU>*9|S74C=sjDOPss|mMqm4hx1mF(s&0k0|anlA8wQ+>YA;Gkh7LJbSn4hy{)3s-Y6=n5YY zP(~wKEk&zH!z%?4P>PRgU_({jN-1)x6hJ`fGzwIKBBdz>5K!8T0#(jRNf-tQC_Ssx zFsK40Dpem4P$Hv16)5>qT>t^4-6&9{jZJ6!OQiq;O2#Nqg|;u2N&y6vm5*p$pb8Wz zO+5w(D0!nmm1w7!N*D$RDD_5xs>qz2M_mSvFa#Lg5360!gz!$-1qdj!je^2r3JTe0 zBp{$Tqd*lpjo7EP2Lu!hw@?L&I8G?@009Nv1gb!RfjG{i248^3NRIitc#`dR3XARWmsxi60vjb3sx|zat zhto!||NgW^s)@v?0`2np1g)qds+_SZ!xgBiGz^!^ZOW-sUAK6VE$u9ITg=4Gy(()* zV54IMws`WpRMFUe;Uu?sQjBi#CdnA8TRi>UdyCg@<1Ds#$p5D;9=rgrxDz!H;4SHK zSvV*$eN$TW!1$qQc=tbT=7vNRC+2?&x@DeHz_ZT|@%iVfL7Va6t`vdu%@YFifBAmiCM+K{bCX>Z{E`eR8dQKV3 z7?S}Ldq=p1hH(M82c|aZeGRi8&-v>nRxhcsa|NRw4Tf~h?QCAumi3#D4Q98(EpSt; z)Pf7a1b3->5L|xYalvtoKe4W6se8d}f1Xll=GaSi1T}DL8QHaK+XIEo;{)D{D>FX6 z#xx19K)X)zg2`eGm%^SBZh>~3gfST~aixSSyUoIy6KUAVnaO(&CfaTe^-oO*>O#He zKvv+pC(sJqSr;xY)xoF3R^Dw7*jzQ&4Eq+P@e17cd^Q+A2wW_)ig)oMhVL@;@4BkJ znm9{!!r{pBO7jEw@)2afTniH#nOyYu0N_X)`W}?V_pGmylH5qhAmPZ-T zy(n?n#gPy=@bbn}ef}EO4H+=bFp;IuJ+F2LouDhNrGWzvfuj2SyQKRf$bf+^aFHKV zbD{j?`GQaXA=t2}7;V7^Jepb}Mwc#tfKvRq#wk>RQsjtG3Lv0#8U?C~)-w4L1rSi$ zi~?0??5IQm1eBf?Y8X`ItrRIu4Fd#}$S6<+ij<}lKtO3X3RF2OB|!lMl#EfJ3Y0uk zwG===S^3{u7pN*Cc1qO;1eCl{pbC^?sT4p!sW%E#fg%R7VFO1P0*vm5Y>+Z}WOhjq zXjK3KWwudJ7$^z500G4r1*-B^N+MnW0cHJzY8X_3QY<+P5Kuad0#%@hfm#re$sRB9GLKgF8;U}|cAoh~kXR$J3ZB)4$UBP0!qn4g#%{6$&=gy(8gKuTmt)D^)#Hv7?S}5KRDqQ-kr|tPMBK0?tG%FqqC9M znh%{%YfZQUuIav33xmrX_X~CfBF^&aB7gP;wAMVvJcINRv-dtq%ROU9V6|Jx$gX$) zy?^0=uLO4nO_EP|XN74Jo}7;^yni798|^@>=ph5Lf;g~nsmcz<;0FxMN)li_A#Dd^ z@Nxr-5BK* z9k4!Ym#SDCcseWHT zcr8b@$zuL8!>FDq*Au4EWHE-VV81gr?Zx(Mf^4CC9$gY>G8kyF^F>|ZgAP)ivkD$6 z`!s*r6ScYiJ@;#HODeY<4~R^psejYgHt4P6kJZ#F_z<}xc;0Ng(_U^Wq5|tJ&!c{h z@;H95Jr&iKINpzrBhR){4KuSZ|N7Ui`r75QGFz6dU>%Hs&R&>LKJhPpJE*IJwO^Mz z=>6zlRn;ADF@TtGyc?nd5G$Bvis?W> z1fH(epIexEbMRk5lL$(I!8PGORmtab_AC5-KJ~az%98Ur;R4>^Noy}^bKc!tHFTng zs1~=_+|ieG@c*5*7i5pEOyv2r4j=D*<^D#0=fYrUE8GG%5mx@tg|K17>=94$;x0M2 zZzbFzC-ot6Km4U~(`S)IL{Wk+IXeV>tq2X5sKB)?03a(9>(;S_HCE_Wc4#e6P- zJBR9-@;%0w3>Z{P_31{uby2W57zDcyAP6bRi2br_u5=OD_xpZuWvY5ZXFsf&lXN<{!i7O!7!V5p7x$g-0y2<)h46?RxW~ftT z{+Vm59_CsNz?qoa?hLL7^%(&Gy{xiYrS~nKj-;nv#J^fK_zyZP9j@QJ3R1Fuve3nh{MGnYRO8I(+*Q1 z112(zsN#l;|NdBZT@5(!^2Sqre%O!s+Ly_Iah8uH|aYkLvT+knWLa z;CNwg4IX2y?$R8(Ny!)ll$FahHlRw~!sD9^Vf+LoAfV)p0#)!*kxSE300E`mC{P7T z1j@h>h5)1cXKEKT70q3FFzDV?gMc#I@+b@xDNOAG1Qcf!sEW`yrBVO^W&M3>7*v6h za2OzVZ4{`=qxz+00R)ty^>U~JrC6#9AfR*_1*)8tlJFQHpkOS4 zDo{%8G7k_?5RFh3Q>-)`=g8;FR~V+^ne8GSWr35TXy7QKv0$|hMsjBCY5Sr2&76MaMVKtDa>!hRa|5a}7Bdaikh^bGl+Tn~8A(|wid zf&SbJqNnP=gH!sC6Fu}|1S-GXAGspf$6xy2!ML&0ddhV|2Xq#{t~yax?l+?IHPTs= zQ`?5EAlsH~FV_Pe^khsA^yi)zJ&&viPVM(Ejs-QXK}~D?IhnTUy>gXM0hR7bH4R1O zo)MJ`e@@}GQ^M=DpR?EgR;~s#sA;=G)j)mjo1*4|mE^UZM{+BwX>a>Ce;(}bH?0gt zjGgvQxlZVS&iriEiL!E6iOypmj!j$mFqyXGujOh$gPM-ZRSneVW{8@-A0ekn4b`$0 zYT1HE$g)j;DOU*xNS-<3(ZYU=M3^K+|QL5zePX$X3*|fgI;~T~>hU3&|6p!UNcgg|+0szHI zv~#CAb?dp)_O0|vmTS6$zVix4$>jLSWkDtajnZkm_3aTecIiuF;`N2CC$PS77pmW| z?!dZ2Rzd6+UO;i0TCcR!(93@41tmWFOfc|B0%S5H^t}}@!riHLiqqY?({dkED$W|P z?aMk(T`fzG#FE3Hm_UUR_@&R3mK-118x1&(mmCW)F&-UHjJf2*ICjX%y(dO_O9k6R zl|X@U9mEiS<#WMitaYZ@jLm6W@HQ)W#!+#>%b!TBb(*g}sdvHSs6cfNpE!A8@Y?(J zokd6|d3HVD7&FOFSrhC%Z|5JiO}Q=W$wUQ|POI?LsMDji8RI%g)-H-N89uGT$A{AY zr3WIAr#5cWu+^hM#(hiQ^JMvX8FxvUAmgq~v^07zv;Eubt^3NknXb3`zQ{*8TP)CB@%*(&@(6^!R=(K zZ&*vAXD>);w+P@gj(|z`+KWo|jU!-2G6KeKIINa#rcrO7n83#JJmH1CBkh4vG#qWadYFcN< zDo6Jp_o_zWq>)@xUXTtN+CV?K-Ry5tp%nXgaY|2^v)0)2-6Q_G^>hb5q5x3=t%w$l z2HFDI(1f8%gTt@e7Bu+m%fa5M9grKN(H*BBn9KMKkkq3!_xy#jq1m)vQ@ln3Rg<`7 zFB=t}b3Lre-|=#3e7ewrgws-x{6d3d!4YwgY$s*?P+ZgZtY9`M4vIYAu79vE{tv}j zGFU8DjT7s5*L1M%gbsRmX`H8tZGhkK$6#OuMNLMG6>T#`Qh+|I^p8!YjbYwgVQKyX zTVHT$uBq?8+}b3Uc*9WAHOW~#WsZ4u_A>3QTp$~J*%TLD&#dvuB(6VjbO>xA#2Ndz{NZ=p8udP_lF;o8~u|-+AU7g-D00NgE8~md20CD zLv9f_7j24-ESuhh?O`*V=%TJp(=kwcy-HGqs?R!LME${jmH%GI?8%?W3hjpC#Gul<9D z`SOElbdvsl=mJMS5%#2N`AQm{5_vc6%iJQ5zY`o6%Fn`%clenvna%l`uS>#EUxP%~ zf?gZxtfS?Bpljfsd)4^$cWc^lwtBUD8l`NkzU9PNxZY4)OzgxBrko|4a5%EO7G^h? zrZ9QSiz>UpGzD>%S9NxSX$n)cdZ;>i%}Fz4u{nlOeSX;M)%!J>2oShKseU^>adr`8 zz@Qx?<03z=_N(!=Dc(B3r8vbMnTvr(wZuDmh93}6+KmELpcJ|GN&y6vj8ULUYeFMr zi2?{HD}SPG4ppG!OB6sr$r}Z#;0rNO4Fd#}dZR!UC{h|z297WU7~S`%UC@+Iwy_oh z2q?3Sg2F&aI1CU_oKc_(l!!~yQUC!3odl}Hw-ooKmYfF&C~>1(X+^7xI4sePWkE?` z^gk@_qc3ZJjP+RjiX;xT$L1F3t!sD*b$6XuEiPp}I2ckb1ZQ z)r8yfR(-AZ4{oobw=eu$H?v6HX0!0MUX`^Yu+uRDkLJklQa$532&X`|a`3w&q$qpy zf;6PPdBGa>7MmsGH!ql+8@H1*)?5BRJ(dFxz#}jOp27f**n?*@pm@uFT;svoe;m?H z=8+eAdBl#y9@!`!SyRjJqmbVvkGNM%i*O3d>Z<6DCX>bd4TfQEX{xiQtLsj8DlteZ>} zTVi=t$Io}r!y73~-twwW9;Z&LaRyPUA9Y|=!$pvxD6~r6u*i?8$-`5q5uL)yHTJjj|MDJ00AXq6sQ6vVHhBwthBg?Du;IA zR6Pa=DCjCs1xhid%mV}zv^rFQlDE=u9P=-FVLbd=uLMqtBKJkcckC0+YwG76QguvI z)M9tCTk6)@pz}Nilz9HNBN%$z8b<2;TMVjb{uM!D6lN7XehINace2wMXEG>(t*Wd* zkHzxbCAQcTu^FosYAIt52ZhNcI4BPS#w`o|`Lm zq{lwb@!wb*e6iq0aYaR%sOWX3PuPXYNAN&xvRD(B#m-=EX`n996QD;1O?D9A*ejx> zK<|j5+h)!9|8UAxUU~xmz+cb>Kf+HE?qpDe=#bP;9LwvJpB&yJkz%R4+Kj&x#&b}# zwN~{Rs0U!Uo5T6S_OUc6H_GpXm##7;tgPe#KHumHGmas@HX0(hs$GRZ{ruaRx+py4mWYs?MlgD;PzkmZTGM?)5 ztyi$!CIcpKd2mIc{PVQ@3*Eqh=ZqIg>Q}IC$bdl@f?LvkhioLE8#wTQQ+>Yq%BqHu z2xZKB-FIn71FP*$Bf7+`eEb3sP-Ytis`AOO(g_(5P@GYq3K1n#r2qoT`a9Jys45~b zxHP2z0!oKbpb8WzO(}qYGTJCmg}OwgQUC#^_#-t8sv<;Qi2?{HokoEwP!fg#0!o`v zpem2*bEOGg9I9Um7(hVD7zL_gO37n@ zfU@$3S{JA)S~rp5O$`GCl)O=(3KVHlr2qm-y-}bF6fuw~14kGFjP50B7c@oazNOj& z0?KTops+luQff&+KygNaDo~^}tqLHZtoLddR5=*NsZsy|rNbyt1xmulfPgaEC{TqF zr&uZl5KxLXXF?Sy`Is^f5Ku4{K@})45XZ3=$8?NUSN=?!o((9SnO9pDs(GY3_v*dA zw_RODkFgx73-UOfX)BG3v2=+S4L5_41$q}Loe`1WiNzPQdA%YWeNWA&uC1as zzS#jNLB&kjn(KJcqPEzA992VAJI>Im!UZy-P*D=}loq**aVk~zYv$2{{0)93I$4AC zLbL9IUUjr1FwZdp=fUK6sgAMf!qHdMTySF*y@gbY(Q{!7WId(l!t{6PrW>3K>$Ei& zH!hzGL;gRV3xgNnm1v531>TCZp)-+n3W+^-fqG@?d|GyQTAU(vd2`G3UT(1?v0E4s z6n4+&rkCFp+#;O9#s%D>T7d?^!E)ggZvQSVvO_6BA5WXa?If#temrePXVuUziHO{K zi=Ezll$wwKZ%;I78$FMPJU1yH=RZC(<77>q$PX7^_(eBY?c*nJ4Qf8^y7ZNh%Al}r zNg&q!DcGAokyro!{14y#H_tVVmM#J-qEnM)kX0v^=cA*?l;Pd*@_gjV^KNi?KI&VR zr@O&|GC?MKtaS5=xaGm}d=!=E-Qx0mbZdFu-B6y7j!x$1Q4NPD1$6(TE6=;(!^>+t zxcqq3w>=c8N8^X`W7eDsYY$_>1vJRjxD^KNP> zPxU7QPAv(<AEzi3k&U5|AfX7Ca*WkhOd=!=E-Qx0m zbZdFu-B6y7{xPy#|KE_Gr+qIfLSTJyV|hM$u{`gdDbGibmFL}q<@qQo&%4Ezr}EVU zx26C$l;@+P%kyq{c|LOGc{jK`AN4KIyFl|?z8dh25#=trq&y$x%kyq(c|JO|Jnv2{ z&qv=#^`c88FXgKN`4nJkc|JO|Jddwt^5&Ie2zmaHVlsbNDomrXxNmmim4XqGV-d}MBYAf$`Xlixw)WpTt8=&$jeEXQr^jTdJ=j0 zCQh8EVN*Uo6ALmQ_u&3E5i z;3k_=7TQCQduLyZNNA9Ryf?Okhz`m~{`W)9PUR z5P4ZbfxZ+sx@z*(S-sB&n-4ezPRf{*;5=+vWLHJz6m1Qvn;O6FK3c#v>E6vDZ8ys& z!18$4VMk!Lo6JalyNEx2b=CN;|K4y&VaLy^jtiRPK*C|CnMzSmpcmqk!%P+{JH;@} zO*l+nhHnRB@FWAXk_1>!>e|5=Jkh|Sq(CpjrxUg&i!oeTZZ6>#=mq#>p~--WTZy@) zLVfWOy5c&c@)cJW+nYp=dbEn(BqB~OtSeN_3|rAyapPGDXjE(%(1_TH=A{w+oL^Dn zwQ8rxTk1}-daQSdECq3vS9Nw5SPE0LdZ;>m&7g^5Yb>wo>@|Za4BVmW`~x3U?RQ}c zf|iL)j(o41z|5mK_Yqkhc+{%MHPQ1pfPm6&6f{m*C6xjQC>f(b6|9uflmZASE5ENz z4ppE?X-WYEl)O=(DsR5Xm+ArtDD_5xDp2C;4;*0#FuJ?cE@%QH;=&=lJ%3JQJJ@o1M9gY-tQ+t*jMwxV{ZZJq}mR&QQFE#c_AHLKQI?*aR> zohq@^J#H30+N-j51SUF0;M|w|F4Z$OUpTl2Op363z{Kx%516$9PLklfSG~z`-V6CX zpZB`;cyj<80z2R+giU0QfMYZ)_!h7O{ZoIe+P87Ajpj%nF|XX)%PV#y_R31}%1N7e z3X|U@uecSaML30q*LXrVS0`wSzB?LIJ*#TfPh2bpjS!~V>*Fc~oLyJK$2Fu4!xy2`5(76+d013RVg@z$!Z zRfpnwe!tnK!byLt>dJ=t2~e4e2lUWXT)b6h&1iw99X16QZ_~!>I8A#)+vj*HF260z zsPPoX`Q&Y3spEOeYms_eSPJ4SA4zJrg{3gXg=(p))7!#K6kB3>RcE(_r7(HRt2(_c zECq3vk0kXo*YI~PQ<&m+%o@ckeZ9J&8M4?M!zkA`e8?AiO$JQf^5CNJzgaV~`~r1~ z=Pa-K{6f|Z8FUw|ZS#hO?t_EUR~sD(fddaQq5AwT(tQzRz(5zc$d9SnK;f+mNVzS} z;tF%pXv+g%gs-`^b+QBml;R=_Nuz4BP#-E$00E`bC{UHRQlvC31rSi$i~?1lNNGv| z1eBgmH4Lhpm69+F5KtncKouxasV;zk(ry%}0wvF-sbPSCk}(QYApnY{QUC#E<@dBM zP!&^3r2qm--Y8I|;X=!TQYnCdQg0Nf0wqEz14kGFjPBdjE@&#Ezmy6A1eDoEL1CaI z>;eQ7XB4PHREvG;V?aPz|6Mf_WX*iCBA|?l{6rxkh7m8984Fh>Dl4mEEM_{321Qv?&yHw5Cdf{N9 zC`H&pQQFTIiq@95*wwUnp=k1Wp=kL%FBBKH!UOO~@$>2tcuK|@@&I}s0$utBy@05; zn(j-ycbMLnXsKIbF1f9jOYBJOlEvbZ4Yk#@N|fIvm$>hn7U2{gsH>*+mC0iM9fo0U zX?^A8R>VA4UxX5U->a<)#UXktqA_Dlou-LPC~4AL5gYAb48GmKtfU0iPpY|Gb+)i= zuWEYjs=;C!`-7uN)D;>&MKx+N88C4m2)FR=-qjq&;#j^raf~m%Su?=T`Xs0+Y#Ug8 z+TpEeFf^c>qz#CM)rKmq4B`PnLfl{3T76vOcx!V@-9oeTCR8u(zIFuGx&@3ZG@QWg zC%+TzH{Y}fr|>}=*Vbe)pG#nm2-nlwof`{VPO7H2YTE$-W4DNc!W|PxS$Sgs?{n2l=-aJYb$CzK$Qr72x{ea^Q&bFGe6JnlivyVeXOsYQEi?cMLDo=;i=V& z=*yLQAXc)=fU0coFR-6Y7GriAM!2HP_taO__-p$F$NQh36NH7+zF7Tv`f_ASH&=nH zE&9}mSK8SKJAeY>_7Mez8>dj%*1;iz^fcpzXI9sTZYrJikGsq`Kl?0t&CaGXs|VJ| zk)ZIwnbpVU=2aJ?+ z=f|8-J-%?+^y+-jB*H}d^q4v!%j>zlppVZJy3vltDz_V&wZzrOJG$*)41UkRtRw-} z?W`S)!S5Pal;}IUzi|fkw(LQCgOZ@6Pr4ox4iOn6PtoK%ZsYOHnAy8alTrq z>U0xpqSzA4t2%wOI7(simREKBXfeHaHidDPk0h06i<==sSw(Z2a=q?iO$H1ct6bmk z&1%{WrZ8x9=tDlNF6}gVH;Bf;!n4g93-}^zX1D2z7!Xi;Zq;^$s>mqfE~NkhN@NtM z(%RD4%T%QR0!q74pb8WzO(}qYk}(QYx!#5W0?NvTS{JASMIuN`0R)u1QJ@Nxe5o#g zfKqQ1sM6S@>ch!{hN~GMbbrUXju9iPNwHK0AfU`P3d%wt#AVQT3Jn5^vpiJAlu{{x zfU@5DG*lrBrAF#6KtSm*3RHn2brQ-vKtMq-LKP@55XZ3_%G(HoJw;7q-4T&Hz>97hO!-bgK4cP%` zg2Ae>aLqhkMyf%H^X8}?svAwv>cS1EW`ye65UADG?a({69kSFF&B86cDr-kzqGJTM zL-M;+&)9t7U^^s5*mg)pE!z&+2zE<)J7n^BJ7oF)v>k#6;1QW>$l>smbOH_l^F(<- z`99yF^`JXsxNL{wbhEi+eJ_{Tk=P}#iAx^&4zCC0cgZDglW7r7Vd1T`%xg4R%-?7j z<|Za=-41c}MHp{~#38yJGG?sl71P8elr-6sS#~f6Z!oYZDGXc0D^Qcg7_K}=u5b&x z?qH0`fQegOxP=$K&q1qRtg!dlKGZ+{boKOBG!dE%TF{i}>u4$jb5VlYPwA$mVopa% zhjg78+e$0>lFN7nZ%1IVdx?>SUESPb@;lLDFPIkL6gE7|EoQQqzt%9!P54>wtgwSI zc#VNsNdm0vLOU3PpEs~5@#OHazUPSSg@w&)tM{b`KJ{pfe%8>U#V&Z5EXJ@mxCw>p z>4L}7!gVi^vPL@qAX>n&f|8xOZai&W^{d%SD=!&YOxvN~SJN}_(iHp*{2@W%bFWl? zHd~{&ap`(-%_d$i-lQwA=tfOPV}iIzo3nV54rgsovmNCZK8zZ#j5wcMGp3H`Ew4rD znlS}&mX9R0HDd}>{I*)E>U7O$qSzA4t2$dVrZ9QSt2$dVrZCR(k)*a}Oks-VIMpX> z#;K6S_812G(6|Rymp>YZMgR{u)#v+cu5K8K2Ez1QyhR%-#=>THn=S$X0j1L@P^HzQ zpe#`U0j13-P^Gn{MH82%r2qm-&wMousz8y_lmZASkx`(^SzQu_0Rl?9QJ@Nxs8km~ zK*<;dszAw?>H-KTD{t1iKvmvivREnw5K!_)fvU*rQY@7M2q^VNfhvSiT*|-^h5)16 zdMPx;j8Y+hfHK=CC=4+tRnlew1Qcf!r~*Z*B$Ro8fP!d*Do|h`j$_e?VJ4n{Y}f%# zyvAz=^P;mf(uUAQV>HfApi57rp~?^ISGzY36Fx_nH~#6&6>$5BWmJbbTCDy)mr zIq%Rp`i!{`?sO;WC=NHnjS<{w@vLsuMd@6f%_2+PSo6S9y_{)B;0MPDEK22f$&WB! zwP8^zMcATLhDuwM+OT;`dQocfcu{Kk|FkHD2jCHz&&aRvl=LwUF!Mxt!1^0|_#FLD zby14cjWL%T+RG(&BzDPYamldvd5I&xOD=JvOp9;|RUh&a$7C^ogkhK)hf&_n(R1}h z7%xi2A-X6vW~^zLY2p$}nru;O2V?M11B;TvJv({9X|fo@mFJ!z+`^T+7-KSE;#L=K z;iQk{guHmOv?yKFR#Rx(&8OqhHfXDujwrVFMjIiDixSQLg~PJPH3m9hJERAjl|xYN zc>iceV5>Wjk%cRVW~r&vnystVcKEeF;KN|FzpOQT zCcPkA{(eCJMpbm$KQ3=Be>%&zT~X7=FFheUJp5Q*BJsir*|YZ=kUznOqgGD+m@j58 z2s^$_%7tB+y);`xFT~upb{Mzo$L-l@QQLuq)u(4y2ZP=9N<~^cmIuSa9cN_6gw4}d z>p?S0-aNVhmeGvR)_3Lrhl>)D`pKvDJ+Kb4I=^U8xUXOKS zpMQ4tgnomqB?hu{~MVrKaKLE>ua+$ zawzcI&(DrM8b#kl)#s5>Zn&Ye`@UmH6}gF|9yf^y~8zBN48QHp=L|!Iysek{o6d`xc$ezj9o#k(_zoHL)97Nu3ANPpSbaf#6pT&Q$5Z?&zVmZ^+d_HlMDmN;2ABHN*_UJw9N=#FtTd$CDIII!CET&1 zVa1C{=&KoOstek)Jy6o~WcLvp)i)bp$y*|5t5FW+q{LE9br}z0XOepz)(_SAmIYFoN-lv+F0 zAL{IBxFS2Ai1gWtvOhOgT>Rw1?63k27W)SMEhO~Y1^$|Ivl9vvzmpvh3~0CB8vP$X z_sRoEv+r1#&5lK7R-xC}gQ`w?S0*Dbmr0cB>SY9>GEWWl=k&F;=Va3zl*U|o_gmaU zhg}SP_fa{l6Hol&$z43*%iU%M9fxz%c10aL0#>kVfY^2RcgZgONh8NOSw@RLZBU%` zi@KIjRCpRVhF@gb{$H%(FPx#NA2M&@iApzC2f+gpp5mV_CsytHUiR8U`e}5yKAHl_ z6<*F!A;)>VJEz|#`f&239_vyEd78;~dof;)`DM4(4i80>jF9~!qbw+vQ)Hl2%I;l# zMr6etX)zWiJ)Lh>fR< z@rWv(t;GYL_9Q7iarmG< zV<#W#m9LB7QF3Qb2ji*WxZR}J`_@iuFdSiQRRh0x5SvAaGdS`auQ1cRKY11^&V%rY&vzKMFQ=yqH zq~1Vp;nzneVG#z+hjH8bDhX4k1H&*)m>i5${}gH+e_%(r`Q;_i8vDq@@?Ka}I@K7=!}j7?kNF zu@;<{(n>zJwICm{wII(mvKAcg$6lLl4oB~KK`4i8L5Qg&y&x?9)E0zi^j;9|omdbm zP8Wo#OBaOD%a!53Fc+*=ru~ zG6akw;#m4n0M|ZMOdj)s)x^8}lc3HQr98ud=PVC> zG4BfIeeTKZr-lLoN_4FiWz?ARCQ-V+_hg;#ev)fuFwmUkp)RJK{xp^Jy~k=o-#)G` z>qq~RtCu22*I1b*kIBz4`R5Pyt@9D{fQt(?9`wb$BfE+B#e2z}^-pnmh66A9mX&An zm=|ng-dbeSsvxaywl$y-j8P2)cN(y0}j0Cn^vCjW8O2&yY@LMuWdD#XE^Yj<)JU;9r-Tt z_CL9A=pS00?Kc!S@S-_Zp7CSe-Nfs<{P8;Pp622V2AZ=x)Wx(<{f%hnykF-#nFbhW z(KoC#qsO!xi01$KG(|Qbpg5yIRZMxGDZ|IrQRnOCq6`OKbd?ol@|bu2d&K+Rhaq)7 z<^czuGamHCyqAgB^~s$!uow!g=<8OR$z#@uf2Yz4&v3;I0*bRd3XCZaGv(ALXkR+| zS*}=$7hP#ZnLOqlu$_39^dpBv%mXei&v?)m^A-`WYu-oH>z?D{3nilKl zKcAh_>`Vqsbh)V(x!=JU$bfN%QLexE*R026z(li5kI4N-#y|#)GmLWm#5JtPWWYq1 znI4h*#~A||FwQW_^@sk3^_UEp=u*=oa=(}{kOAWiqg-FJmi3qnnCKGIBXU27F^~b{ z45M7XRrHt)m}sWy5xJlGTh?PTV4USupI^fm$bgByW_kqc$G*UNOa_dzymI}0jDZZ8 zXol$#tRMU$>oFNH&hpCj^BDsfFws{{k6`@{(PJ`ToaL44FMf&jq%hINrbpy{BV!&L## zdQ1k4v%GTseT;z&m?&?01nUQHU_B-S##vsuem-L$119<}(<4~FL-d#o7-xCq`iuX- zdQzBZy6F+Q-^duqVm*dYuAle{>oFNH(Rrpv<|HFDr226CW=@GeK z%oxakafVT@ui40YOa@GJj_DD(pTii)fN_RVuHPzpOa@GJw&@YMpZZ7EV=`czas5<@))Ifee`FOQuJ# zeuwBW88FWB%Jmn&#(GkiXsYQEx!=eb$YMQ)QLdl(I_ohRFwt42N96u-#y|#)GmLWm zp_^Hc$$*K@G(95six~qMFwQW_^)-KDJthMtI>Ypc+|OYQWWYGXDA#WlJthMtnqqoH z?x${HJthOjSzh(|HH?7_nCNuVBUnH74c22aV4UTZ>+fR>WWYr2rbn=TaFO+x3>as5 z<@))Ifee`Fi>61geuwBW88FWB%Jmn&$$CS)TS<$FVl9?eZT`LrkZ6)= z5vU*hSJGmlSc~PILgrV1M4vM)0`)r>Vxm}!<()z<-qsruO*Ab6^&1&tqF9UNokAwQ z(;E_f*0czez7j|f6UACA?-X+AyS*XN1k)l=znCE=inUnYDWv9ay&=)brbVEB4ns^7 zYq7jj$kqyw=p@r3P(SrO(qf`mi{+g{)>ME*Cz=+4`mui}EhdV!Sl%h*z6y}2&9n&A z58h5%Oav{_(+Y74nZKR8iOGO*mREIt2V)=uMo;_Ec{suPi~pDPtXAE?(CIt*Q?B1g zn8CQnip$b=v92{W1OK^YcA7=rvVo6#7TM7w;Q(WDh(P$AFFPGyC<^ z@ruPUV4)8>>{2Z0r39pUnvi2yy z=HJ<;!!dk8q^s@M(+lkqFP(E1B3X@$YxP)MrALsa`Iwqz%-ID{A5N*>%Hew0wW@ zq}*iRJ}5kI-Y_lK4Yl-8OAog6Kueva&6YM=+Mp>~$LZ_Gk(C=k#OGGd<#dE&=~IUA z#roXmvlYy43DxS!&2-h9%kXm>a_3}srCLC)ld_Oni!Z5*`F{12ea@{;A*HPpx&42j zldk&q)~QZYX!F5&oRc z?#cr5yC2+BRAw|PTi-)e$~DrRm3+a%K)cQGk}-3RB4Y-MF|Gf~U0LHhAFRz5Rvs4~ z9}L<%WsJc5-1lnF4p(+m>LVhhtDbk)o*W9te=P5H|&0uQH$tCHx}AxB3$jOX)ClbW49#D*!l%Bqn~(X%PqMN!orc|1)(WX;M-R)@g`&>SeZTkEEMcWa$%ron z>WH7VUmISryQfg!QdACBq(IPPsal+NEnzln*Obuymu1gv+ z=NDwiW-(;e`?dcY77p(YpAQDTmNG;Te)31Tv%~g^mWb41U&z`yD_GJJiXlH(*Eea$ zs5NBACN5P+jNgPb%WX_qA;)!y$W*jKq&7qdS$p7zsdkYjWMSZCAyR6WtsBUUS4w7_ z6n2J%C9m>0x*=tZp#1Gi>L&Z{*Ta6{%IkU$31ezRYJL$7Hms*jlBiabWEnraWYe-Y z$fosNdO>DhPc!dLJUs00PuN`ZuU(6{OJbXbPu+(cJ};yU5ri62U(pbeikr+3Srk+-q$P}Etx1_9KsBfP+Dfe^Qo3h+8T=wkgAXc&5evz1UZa%UvL>u~ zI(%Nt(Vf>-{c0W#Mjo|?dFI)aeZurBzCzU?#t)}K|0UeTh-tn*}LZC33Js9cb%ozSbDXkb1c2e(km^UZRspZ6O)ao z^Sk@dn2}GLrXi)a4fq+x`%xpP#ucC~p(59vOM@sE##+zGzF(<5SZEtDv0F#xG*n!p z&@B(4c-h~ik!q=Fy#VFQ98v+=5*m^>g5n>Y?s_Vj%0e1}8fYMtO356OMvA41l<9_@ zO#3(9ilw1ys$yjjk?%R_(x>JSipWcuYv%$!I)x*0%pM|gCLR;3LS7A!a{>R4b^s0?1}+UDiJ&x6ELG&(fzT-dlt!wd3f=xXtrOURx?ZXPZ3z`AVaYzW^CN$+ zWGM@2mBc$1LCTJ0;sgrHshlqh%FpZ}D9>bMA}EEaLAm~#)G#iaUKUzR3fJb|w1MIv zHBc7hc{4y38mX2lRANJFuVGXH+Y%~tbqmUuc>h}^OIc`xySPvX_cT;YO+eYpHe{xu zYO7*p$dpgq>5w`9D-@l(`Gap3osSN$q0^_uR&6{xduR!rKK)p~4OiM|bKXzClV+-P zbn2OqM0g5Uhs+8lwuEY-&f-#juOV}3lth`nFdh>XiJz- zE0xoE_nk`Cve2xR`fC)Wp<=8;WtS`EOTed*YHC8Ocu{SwfNcpCD*If~DgnQ(lBq0| zO$wdIkSNwG4L8<2o!iFLOs3wyKdtVMg$r-0d9`NHR+YseC>X!&mwO7q(TNZgu8ojs zTf`S?i)>^|rp)~wb&|KaSnDJs7IP5m3DiRBCBs80-(S$bc7z{wXU)6`MJ?BDv2?SguUWdu(v6nBV(A7;*HfD45Tee@ z=v%>*mQXE`(N9X$zVp{gP0T`zMls6zP8usspxDW?(H$fl(@6D2tTx$mDnMJp7&$zY z+H23*TFF)x(za+0%9oiUjTB22IcpKk_v}Gku%?k}sY1n9>}BiZ6|gO#Lgf@jDFj!q zpb%Wg%)+`ia&u}5J0Gi|Q}r*gB(Yi$gq{%YtQcw{wNMkXo;>(VB}cF@kW&~XJLde7 z?07-!NM1L1mW^4PGDcu(Oj|``L~6ze*?MN$8gaH*!>2Nahw?>Loxet{C41J0J$g~4 zCrcMqURzf~7ge55*&{Hur|0V4{jeoup_wCG?S^SXeB>^>Z(yldlylq;p{j6NRhOX$2EoLbXtLAX2{H@)lhp!c%I2d(zS;EPdS4M=gEC(v_C3u=F8H6Jv&`)6VsFrI=!&4Fpo6 zPD^R1GnwuA{NJK8oMZ&fmug*J=I7lkz-5B-P&@&Tq668$y*Z|<+lwF%>iRAAaa z+ABt%NUehi+4^hR9`T6UBOPR_n9j5M54O}k9o{GAPD5>TnG#&H^|ZcJdsB^t*Suq|N%Dqho0SFB_#3(Z(@tQwn!im?eO z``#wtG*pdMtV|!L3f980)*tC=p9niy#;d!fwWEs1>>(&`XHa6c6%y~w&&j6SR@QZS zmRf%iu8!6f3~UM2KHdCC`MmjgaKdd`q+4j|0!!yxdXuF$TDn_5t?fRxbQh(Gm=tvy zlk_O_0AD|xpw=`5+ zFoBg?Yq(XwwuA|&I7Y*5OC@VrNat*hq17I{OrtH06k8Q39ZtNfwx*$KYXZwHV9UJ< z*p^VCGET}nAavZGa{>*NJDFObYYwi)H*cw}FU*`+`|V)R4i+cEP+&T4ch5AF8cmd$sa7VD@Ghrw#qt!on+4YF`cpeULInP zd8*gNVPbh6wI+uy6wx3=96hNYDb1*gw7`w>d+Eu6(qdHPVM2FE5!&4 zt%plhw9}-a(tru5)K)u98mdlAV8tWa!7E@}LWRzqiC!xw7hbPqD+|q5ajV*zhKj8T zD0|+flQdLqRjgbnEQ`z4;cHB_^8^%Y9(V?XvT`4)z~ytj7>nf zDJ)RaP&HPuG=kbW3R?CY?SJBHSBK9tl>_zduyD$<+TRC*p4Ik^<53WH7geQ3sp({? zU87Y)_}wuT3~33~4!ML}>M-ZrOLojX4{{Ep)y>jS+_k zStqfyF&ZifkH|Zmc$&DHG(Fnvkhz zf=F$W7qSM-A1eh63+a+6-{T}Etp0QDhv7^qJ+ZYO@i+FxjFce)(`oSLRN*9YYv|uD(T$nOJj;Sy56-^MS`9jDV zD`^unR>TH5HwY6x3@?zt5^5P9mc}dnXiIv zEup$cclT0$;xbbE)?h$a`>zMnvoTpeu21gE6Q-*r?p#aHwse}MQ!PEy(kYgc|2q0i8yQrHYjLvzKj!m4>RRik-ZcYQ?W!^ec{|&^wA* z7J8j0ap*-YdkDQT3{8ZdQ1!;RilH|<5qiSav9N-1Euq>b`%)>MA4qy|-e@h+jk0uv zrNb;8YU!bt9&G7>mO4#wbHE;-MY3{wJ&V-YK+ht*T&aavNd0_BSqr6+(n5-q783Jy z$Vo%Bg%Vh)q6Sk1Y)hz6c^HZ-sq6Lil}u%!#l84R<30@)TNNr#Ly1y}`!rHbRj51- zB~Te1D?nR9MT!HYJ=E0SS2C4_HaZq1L`PkdJH{V&PVULDnM*0qwJLgYZvFWjr};5^ zh|@-fCgN16b_S(lpt?k$3facUw2k5;wNdx0Vu5eHpRQKzTt#;P%Nyxd-e2eZxEZ;9 zCp4%bZiuCWEgfj--j>!|I>6F?miD1EF>Z=F4WG1S+9qn+>dzo3rA;b8TS7%jn}|`` zChID-2@5TJ#BL3rG*n!p(A$qk`4T>9q?(%0Dz(>0uYhd{6*}r4&?>{`?<$$fLfYh= z45SR3X{1=HNU1+N*@n$DR83W^oZ6Fj;(7|o55pYOl9#IPydg*H=^AaicxNgwT~Du{ zotmHJt~eIj^ekK*BP&?a5~?Axw|G%|2d}61yCt_elobl!kWTCAs+0+GOxM#LX%qBp zO~M8t>)zs}N-k!hZAPCF8sk@sPOg9 zn2HvTPFN^h>!4{9rES$jT~><$dO7*hes#$Xx-Fs(dX3uQuC{cJrB_*crKPhion`5z zmd>O!(LqI>cF?qC8cJ%Kgq;+rQC|Vu5-L<~hvvexgT7d)Nmxi7l<$TXq(prhDV{N; z+zl;I>7Z$-nyOg29a^9=mQ;YYgbA(UA2s!bN~W^V#u9O%jwNZR*s9RhIjEJGnntRr z3YC)+Vruh-+|hoYRn#qJaNgo_;Edeh!ttAHYH4wO#2(`EV#X)pQuum5)a9wpD?O*k zQtQ3K)!tjd%$88C)U~yguk*&+Pv_2?aG{p#F0eFj>2yoawe)ODr&&7H(laSd#G$Cu zX83KTW?&(8V!rvA6=*A@k)&gyz0aO==Il{2bXhKfOjSbSflu4z zxZHUhxLl}QARJ>I0(6WY_>1rl7cH4UiSyL8dzlhW zRgfU9gTo0zaJftwNoNw%X&wOaKwUXWx_l@>hz~z+M}+2-6%Dr^eWU1�gZ@3%a=n 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 L4Yj*E9Xj@Z$RY^^ diff --git a/examples/relations/assets/levels/World.glb b/examples/relations/assets/levels/World.glb index a85866c8aaf93da21a3b5088d75158ada1e98dfb..d974f5d545bf2d773f268daae0348ac88cbaf8e1 100644 GIT binary patch delta 90 zcmX@2`aq30JtxGCiGhJ3L70Kz&qm%WjFS}@W!a5lVq%muH77r0%%7afXgQgiQJ)tg rq#2`Bt5mDA*`G<3ol8N%gOh>5$ Date: Mon, 9 Sep 2024 12:28:23 +0200 Subject: [PATCH 19/19] Getting rid of most of unsafe stuff --- crates/blenvy/src/components/fake_entity.rs | 45 +++------- crates/blenvy/src/components/process_gltfs.rs | 89 +++++++++++++------ .../ronstring_to_reflect_component.rs | 4 +- 3 files changed, 77 insertions(+), 61 deletions(-) diff --git a/crates/blenvy/src/components/fake_entity.rs b/crates/blenvy/src/components/fake_entity.rs index 948de26..9cac12b 100644 --- a/crates/blenvy/src/components/fake_entity.rs +++ b/crates/blenvy/src/components/fake_entity.rs @@ -2,37 +2,24 @@ use std::{alloc::Layout, cell::Cell, num::NonZeroU32}; use bevy::{ core::Name, - ecs::world::DeferredWorld, + ecs::system::SystemParam, gltf::GltfExtras, log::{info, warn}, - prelude::{HierarchyQueryExt, Parent, QueryState, With, World}, + prelude::{HierarchyQueryExt, Parent, Query, With}, reflect::ReflectDeserialize, scene::{InstanceId, SceneInstance}, }; use serde::Deserialize; -pub(crate) struct BadWorldAccess { - world: *mut World, - names: QueryState<(bevy::ecs::entity::Entity, &'static Name), With>, - hierarchy: QueryState<&'static Parent, ()>, - scene_instances: QueryState<&'static SceneInstance, ()>, -} - -impl BadWorldAccess { - pub unsafe fn new(world: &mut World) -> Self { - BadWorldAccess { - world, - // We have to check that we focus on a node, not a mesh with the same name. - // Currently, the only possible way of checking this is with `GltfExtras`, so selected entities must at least have one component. - names: world.query_filtered::<(bevy::ecs::entity::Entity, &Name), With>(), - hierarchy: world.query::<&Parent>(), - scene_instances: world.query::<&SceneInstance>(), - } - } +#[derive(SystemParam)] +pub(crate) struct BadWorldAccess<'w, 's> { + pub(crate) names: Query<'w, 's, (bevy::ecs::entity::Entity, &'static Name), With>, + pub(crate) hierarchy: Query<'w, 's, &'static Parent, ()>, + pub(crate) scene_instances: Query<'w, 's, &'static SceneInstance, ()>, } thread_local! { - pub(crate) static BAD_WORLD_ACCESS: Cell> = Cell::new(None); + pub(crate) static BAD_WORLD_ACCESS: Cell>> = Cell::new(None); pub(crate) static INSTANCE_ID: Cell> = Cell::new(None); } @@ -70,25 +57,20 @@ impl<'de> Deserialize<'de> for Entity { let entity = if let Some(name) = entity_data.name { info!("Found name {name}"); let BadWorldAccess { - world, - mut names, - mut hierarchy, - mut scene_instances, + names, + hierarchy, + scene_instances, } = BAD_WORLD_ACCESS.take().expect("No bad world access :c"); let instance = INSTANCE_ID.get().expect("No instance id set :c"); let mut target = None; - let w = unsafe { &*world.cast_const() }; - 'search: for (e, n) in names.iter(w) { + 'search: for (e, n) in names.iter() { if !name.eq(n.as_str()) { continue; } - let mut dw = DeferredWorld::from(unsafe { &mut *world }); - let hierarchy = dw.query(&mut hierarchy); - for parent in hierarchy.iter_ancestors(e) { - let Ok(id) = scene_instances.get(w, parent) else { + let Ok(id) = scene_instances.get(parent) else { continue; }; if instance.eq(id) { @@ -99,7 +81,6 @@ impl<'de> Deserialize<'de> for Entity { } BAD_WORLD_ACCESS.set(Some(BadWorldAccess { - world, names, hierarchy, scene_instances, diff --git a/crates/blenvy/src/components/process_gltfs.rs b/crates/blenvy/src/components/process_gltfs.rs index 71b895f..a3a23b0 100644 --- a/crates/blenvy/src/components/process_gltfs.rs +++ b/crates/blenvy/src/components/process_gltfs.rs @@ -6,12 +6,13 @@ use bevy::{ entity::Entity, query::{Added, Without}, reflect::{AppTypeRegistry, ReflectComponent}, - world::{DeferredWorld, World}, + system::{SystemParam, SystemState}, + world::World, }, gltf::{GltfExtras, GltfMaterialExtras, GltfMeshExtras, GltfSceneExtras}, hierarchy::Parent, log::{debug, warn}, - prelude::HierarchyQueryExt, + prelude::{HierarchyQueryExt, Local, Query, Res}, reflect::{Reflect, TypeRegistration}, scene::SceneInstance, utils::HashMap, @@ -61,18 +62,56 @@ fn find_entity_components( (target_entity, reflect_components) } +#[derive(SystemParam)] +#[doc(hidden)] +pub struct ExtrasComponentQueries<'w, 's> { + extras: Query< + 'w, + 's, + (Entity, Option<&'static Name>, &'static GltfExtras), + (Added, Without), + >, + scene_extras: Query< + 'w, + 's, + (Entity, Option<&'static Name>, &'static GltfSceneExtras), + (Added, Without), + >, + mesh_extras: Query< + 'w, + 's, + (Entity, Option<&'static Name>, &'static GltfMeshExtras), + (Added, Without), + >, + material_extras: Query< + 'w, + 's, + (Entity, Option<&'static Name>, &'static GltfMaterialExtras), + (Added, Without), + >, + // Hierarchy and Scene instances are both here and in BadWorldAccess, but they don't clash because read-only. + bad_world_access: BadWorldAccess<'w, 's>, + hierarchy: Query<'w, 's, &'static Parent>, + scene_instances: Query<'w, 's, &'static SceneInstance>, + type_registry: Res<'w, AppTypeRegistry>, +} + /// main function: injects components into each entity in gltf files that have `gltf_extras`, using reflection -pub fn add_components_from_gltf_extras(world: &mut World) { - let mut extras = world.query_filtered::<(Entity, Option<&Name>, &GltfExtras), (Added, Without)>(); - let mut scene_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfSceneExtras), (Added, Without)>(); - let mut mesh_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMeshExtras), (Added, Without)>(); - let mut material_extras = world.query_filtered::<(Entity, Option<&Name>, &GltfMaterialExtras), (Added, Without)>(); - - let mut scene_instances = world.query::<&SceneInstance>(); - - let mut hierarchy_state = world.query::<&Parent>(); - let mut __unsafe_dw = DeferredWorld::from(unsafe { &mut *(world as *mut _) }); - let hierarchy = __unsafe_dw.query(&mut hierarchy_state); +pub fn add_components_from_gltf_extras( + world: &mut World, + mut queries_state: Local>>>, +) { + let state = queries_state.get_or_insert_with(|| SystemState::new(world)); + let ExtrasComponentQueries { + extras, + scene_extras, + mesh_extras, + material_extras, + bad_world_access, + hierarchy, + scene_instances, + type_registry, + } = state.get_mut(world); let mut entity_components: HashMap, TypeRegistration)>> = HashMap::new(); @@ -80,11 +119,11 @@ pub fn add_components_from_gltf_extras(world: &mut World) { // let gltf_components_config = world.resource::(); unsafe { - // SAFETY: we don't do anything harmful until taking this, and have full world access - fake_entity::BAD_WORLD_ACCESS.set(Some(BadWorldAccess::new(world))); + // SAFETY: we set this to `None` again before using world again and fake_entity just uses it in that time. + fake_entity::BAD_WORLD_ACCESS.set(Some(core::mem::transmute(bad_world_access))); } - for (entity, name, extra) in extras.iter(world) { + for (entity, name, extra) in extras.iter() { let parent = hierarchy.get(entity).ok(); debug!( "Gltf Extra: Name: {:?}, entity {:?}, parent: {:?}, extras {:?}", @@ -93,7 +132,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { if let Some(instance) = hierarchy .iter_ancestors(entity) - .find_map(|p| scene_instances.get(world, p).ok()) + .find_map(|p| scene_instances.get(p).ok()) { fake_entity::INSTANCE_ID.set(Some(*instance.deref())); } else { @@ -101,7 +140,6 @@ pub fn add_components_from_gltf_extras(world: &mut World) { fake_entity::INSTANCE_ID.set(None); }; - let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); // let name = name.unwrap_or(&Name::new("")); @@ -112,7 +150,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra) in scene_extras.iter(world) { + for (entity, name, extra) in scene_extras.iter() { let parent = hierarchy.get(entity).ok(); debug!( "Gltf Scene Extra: Name: {:?}, entity {:?}, parent: {:?}, scene_extras {:?}", @@ -121,7 +159,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { if let Some(instance) = hierarchy .iter_ancestors(entity) - .find_map(|p| scene_instances.get(world, p).ok()) + .find_map(|p| scene_instances.get(p).ok()) { fake_entity::INSTANCE_ID.set(Some(*instance.deref())); } else { @@ -129,7 +167,6 @@ pub fn add_components_from_gltf_extras(world: &mut World) { fake_entity::INSTANCE_ID.set(None); }; - let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -138,7 +175,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra) in mesh_extras.iter(world) { + for (entity, name, extra) in mesh_extras.iter() { let parent = hierarchy.get(entity).ok(); debug!( "Gltf Mesh Extra: Name: {:?}, entity {:?}, parent: {:?}, mesh_extras {:?}", @@ -147,7 +184,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { if let Some(instance) = hierarchy .iter_ancestors(entity) - .find_map(|p| scene_instances.get(world, p).ok()) + .find_map(|p| scene_instances.get(p).ok()) { fake_entity::INSTANCE_ID.set(Some(*instance.deref())); } else { @@ -155,7 +192,6 @@ pub fn add_components_from_gltf_extras(world: &mut World) { fake_entity::INSTANCE_ID.set(None); }; - let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); @@ -164,7 +200,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { entity_components.insert(target_entity, updated_components); } - for (entity, name, extra) in material_extras.iter(world) { + for (entity, name, extra) in material_extras.iter() { let parent = hierarchy.get(entity).ok(); debug!( "Name: {:?}, entity {:?}, parent: {:?}, material_extras {:?}", @@ -173,7 +209,7 @@ pub fn add_components_from_gltf_extras(world: &mut World) { if let Some(instance) = hierarchy .iter_ancestors(entity) - .find_map(|p| scene_instances.get(world, p).ok()) + .find_map(|p| scene_instances.get(p).ok()) { fake_entity::INSTANCE_ID.set(Some(*instance.deref())); } else { @@ -181,7 +217,6 @@ pub fn add_components_from_gltf_extras(world: &mut World) { fake_entity::INSTANCE_ID.set(None); }; - let type_registry: &AppTypeRegistry = world.resource(); let mut type_registry = type_registry.write(); let reflect_components = ronstring_to_reflect_component(&extra.value, &mut type_registry); diff --git a/crates/blenvy/src/components/ronstring_to_reflect_component.rs b/crates/blenvy/src/components/ronstring_to_reflect_component.rs index f23c38a..ba1a473 100644 --- a/crates/blenvy/src/components/ronstring_to_reflect_component.rs +++ b/crates/blenvy/src/components/ronstring_to_reflect_component.rs @@ -1,7 +1,7 @@ use std::any::TypeId; -use bevy::log::{debug, info, warn}; -use bevy::reflect::serde::{ReflectDeserializer, ReflectSerializer}; +use bevy::log::{debug, warn}; +use bevy::reflect::serde::ReflectDeserializer; use bevy::reflect::{GetTypeRegistration, Reflect, TypeRegistration, TypeRegistry}; use bevy::utils::HashMap; use ron::Value;