From 621740897f4cb80f5075c48e15424f5de22be2f6 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Mon, 4 Nov 2024 21:08:50 +0000 Subject: [PATCH 01/14] port over to bevy v0.15 --- CHANGELOG.md | 12 + Cargo.toml | 18 +- README.md | 19 +- book/src/SUMMARY.md | 1 + book/src/getting-started.md | 18 +- book/src/guides/map_events.md | 1 - book/src/guides/physics.md | 4 +- book/src/migrations/v0_5.md | 44 + examples/basic.rs | 2 +- examples/helper/assets.rs | 43 +- examples/helper/avian.rs | 6 +- examples/helper/camera.rs | 2 +- examples/helper/map.rs | 4 +- examples/helper/mod.rs | 4 +- examples/helper/rapier.rs | 6 +- examples/map_events.rs | 10 +- examples/map_reload.rs | 4 +- examples/map_settings.rs | 19 +- examples/map_spawn_delay.rs | 2 +- examples/my_tiled_export_file.json | 5020 ++++++++++++++---------- examples/orientation_hexagonal.rs | 2 +- examples/orientation_isometric.rs | 2 +- examples/orientation_orthogonal.rs | 2 +- examples/physics_avian_controller.rs | 2 +- examples/physics_avian_orientation.rs | 2 +- examples/physics_avian_settings.rs | 2 +- examples/physics_custom.rs | 10 +- examples/physics_events.rs | 4 +- examples/physics_rapier_controller.rs | 2 +- examples/physics_rapier_orientation.rs | 2 +- examples/physics_rapier_settings.rs | 2 +- examples/properties_basic.rs | 2 +- src/asset.rs | 12 +- src/components.rs | 8 +- src/lib.rs | 57 +- src/loader.rs | 65 +- src/physics/collider.rs | 9 +- src/physics/mod.rs | 12 +- src/properties/command.rs | 9 +- src/properties/export.rs | 105 +- src/properties/load.rs | 32 +- 41 files changed, 3238 insertions(+), 2344 deletions(-) delete mode 100644 book/src/guides/map_events.md create mode 100644 book/src/migrations/v0_5.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fd3a6e..25963e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ ## [unreleased] +**BREAKING CHANGES** +This version brings breaking changes. +A [migration guide](https://adrien-bon.github.io/bevy_ecs_tiled/migrations/v0_5.html) is available to help adapt to these. + +### Features + +- Update to Bevy 0.15 + +### Changed + +- Remove `map_initial_transform` and `map_initial_visibility` from `TiledMapSettings`, use required components instead + ## v0.4.2 ### Changed diff --git a/Cargo.toml b/Cargo.toml index b2e672f..04cbb6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ default = ["render", "png"] png = ["bevy/png"] bmp = ["bevy/bmp"] jpeg = ["bevy/jpeg"] -#gif = ["bevy/gif"] +gif = ["bevy/gif"] # Expose features of the bevy_ecs_tilemap crate. atlas = ["bevy_ecs_tilemap/atlas"] @@ -46,18 +46,18 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies -bevy = { version = "0.14", default-features = false } -bevy_ecs_tilemap = { version = "0.14", default-features = false } +bevy = { version = "0.15.0-rc.3", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/rparrett/bevy_ecs_tilemap.git", rev = "53bbc0e0a87d0324cc3c86163324f8842262cf07", default-features = false } tiled = "0.13" # Utilities -futures-lite = "2.4" +futures-lite = "2.5" log = "0.4" thiserror = "2.0" # Optional dependencies, enabled via features. -bevy_rapier2d = { version = "0.27", optional = true } -avian2d = { version = "0.1", optional = true } +bevy_rapier2d = { git = "https://github.com/Vrixyz/bevy_rapier.git", rev = "61d3ef2ffc0793008f652a3a2f3552f40bbecdcb", optional = true } +avian2d = { git = "https://github.com/Jondolf/avian.git", rev = "ed6a5c4925107636bfbf8f635d0b6a119c80ed22", optional = true } serde = { version = "1.0", optional = true, features = ["derive"] } serde_json = { version = "1.0", optional = true } @@ -70,11 +70,13 @@ features = ["debug","user_properties","physics","avian","rapier"] # only check 3 features at once max_combination_size = 3 # do not check bevy images features since we don't directly use them -denylist = ["png", "bmp", "jpeg"] +denylist = ["png", "bmp", "jpeg", "gif"] [dev-dependencies] -bevy = { version = "0.14", features = ["file_watcher"] } +bevy = { version = "0.15.0-rc.3", features = ["file_watcher"] } bevy-inspector-egui = "0.27" +#bevy-inspector-egui = "0.27" +#bevy-inspector-egui = { git = "https://github.com/Vrixyz/bevy-inspector-egui.git", rev = "af535e907d0d37987429e821452a425d62bfba18" } [[example]] name = "basic" diff --git a/README.md b/README.md index 04b2cbd..89c01d3 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,9 @@ Add dependencies to your `Cargo.toml` file: ```toml [dependencies] -bevy = "0.14" +bevy = "0.15" bevy_ecs_tiled = "0.4" -bevy_ecs_tilemap = "0.14" +bevy_ecs_tilemap = "0.15" ``` Then add the plugin to your app and spawn a map: @@ -77,7 +77,7 @@ fn main() { fn startup(mut commands: Commands, asset_server: Res) { // Spawn a 2D camera - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); // Load the map: ensure any tile / tileset paths are relative to assets/ folder let map_handle: Handle = asset_server.load("map.tmx"); @@ -87,16 +87,23 @@ fn startup(mut commands: Commands, asset_server: Res) { } ``` -Please note that you should have the `map.tmx` file in your local `assets/` folder, as well as required dependencies (for instance, associated tilesets). +Basically, all you have to do is to spawn a [`TiledMapHandle`](https://docs.rs/bevy_ecs_tiled/latest/bevy_ecs_tiled/struct.TiledMapHandle.html) with the map asset you want to load (the `map.tmx` file). +Note that this map asset should be in your local `assets/` folder, as well as required dependencies (for instance, associated tilesets). -You can customize various settings about how to load the map by inserting the [`TiledMapSettings`](https://docs.rs/bevy_ecs_tiled/latest/bevy_ecs_tiled/components/struct.TiledMapSettings.html) component on the map entity. +You can tweak how to load the map by adding various components on the map entity, notably: -Also, you can browse the [examples](https://github.com/adrien-bon/bevy_ecs_tiled/tree/main/examples/README.md) for more advanced use cases. +- [`TiledMapSettings`](https://docs.rs/bevy_ecs_tiled/latest/bevy_ecs_tiled/components/struct.TiledMapSettings.html) +- [`TilemapRenderSettings`](https://docs.rs/bevy_ecs_tilemap/latest/bevy_ecs_tilemap/map/struct.TilemapRenderSettings.html) +- [`Transform`](https://docs.rs/bevy/latest/bevy/transform/components/struct.Transform.html) +- [`Visibility`](https://docs.rs/bevy/latest/bevy/render/view/visibility/enum.Visibility.html) + +You can browse the [examples](https://github.com/adrien-bon/bevy_ecs_tiled/tree/main/examples/README.md) for more advanced use cases. ## Bevy Compatibility |bevy|bevy_ecs_tilemap|bevy_ecs_tiled| |---|---|---| +|0.15|0.15|0.5| |0.14|0.14|0.3 - 0.4| |0.13|main@e4f3cc6|branch 0.2| |0.12|0.12|0.1| diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md index 16f5a05..b9234ba 100644 --- a/book/src/SUMMARY.md +++ b/book/src/SUMMARY.md @@ -21,6 +21,7 @@ # Migration guides +- [From v0.4.X to v0.5.X](migrations/v0_5.md) - [From v0.3.X to v0.4.X](migrations/v0_4.md) # Miscellaneous diff --git a/book/src/getting-started.md b/book/src/getting-started.md index 6ce5157..bd30f31 100644 --- a/book/src/getting-started.md +++ b/book/src/getting-started.md @@ -3,9 +3,9 @@ Add dependencies to your `Cargo.toml` file: ```toml [dependencies] -bevy = "0.14" +bevy = "0.15" bevy_ecs_tiled = "0.4" -bevy_ecs_tilemap = "0.14" +bevy_ecs_tilemap = "0.15" ``` Then add the plugin to your app and spawn a map: @@ -30,7 +30,7 @@ fn main() { fn startup(mut commands: Commands, asset_server: Res) { // Spawn a 2D camera - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); // Load the map: ensure any tile / tileset paths are relative to assets/ folder let map_handle: Handle = asset_server.load("map.tmx"); @@ -40,8 +40,14 @@ fn startup(mut commands: Commands, asset_server: Res) { } ``` -Please note that you should have the `map.tmx` file in your local `assets/` folder, as well as required dependencies (for instance, associated tilesets). +Basically, all you have to do is to spawn a [`TiledMapHandle`](https://docs.rs/bevy_ecs_tiled/latest/bevy_ecs_tiled/struct.TiledMapHandle.html) with the map asset you want to load (the `map.tmx` file). +Note that this map asset should be in your local `assets/` folder, as well as required dependencies (for instance, associated tilesets). -You can customize various settings about how to load the map by inserting the [`TiledMapSettings`](https://docs.rs/bevy_ecs_tiled/latest/bevy_ecs_tiled/components/struct.TiledMapSettings.html) component on the map entity. +You can tweak how to load the map by adding various components on the map entity, notably: -Also, you can browse the [examples](https://github.com/adrien-bon/bevy_ecs_tiled/tree/main/examples/README.md) for more advanced use cases. +- [`TiledMapSettings`](https://docs.rs/bevy_ecs_tiled/latest/bevy_ecs_tiled/components/struct.TiledMapSettings.html) +- [`TilemapRenderSettings`](https://docs.rs/bevy_ecs_tilemap/latest/bevy_ecs_tilemap/map/struct.TilemapRenderSettings.html) +- [`Transform`](https://docs.rs/bevy/latest/bevy/transform/components/struct.Transform.html) +- [`Visibility`](https://docs.rs/bevy/latest/bevy/render/view/visibility/enum.Visibility.html) + +You can browse the [examples](https://github.com/adrien-bon/bevy_ecs_tiled/tree/main/examples/README.md) for more advanced use cases. diff --git a/book/src/guides/map_events.md b/book/src/guides/map_events.md deleted file mode 100644 index cf71493..0000000 --- a/book/src/guides/map_events.md +++ /dev/null @@ -1 +0,0 @@ -# Use map loading events diff --git a/book/src/guides/physics.md b/book/src/guides/physics.md index 4145069..2888a3b 100644 --- a/book/src/guides/physics.md +++ b/book/src/guides/physics.md @@ -48,7 +48,7 @@ fn main() { // Just load the map as usual fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle(asset_server.load("finite.tmx"))); } ``` @@ -62,7 +62,7 @@ use bevy_ecs_tiled::prelude::*; // Load the map with custom physics settings (and an Avian backend) fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(( TiledMapHandle(asset_server.load("finite.tmx")), // With this configuration, we will restrict the spawn of collider diff --git a/book/src/migrations/v0_5.md b/book/src/migrations/v0_5.md new file mode 100644 index 0000000..a8ad580 --- /dev/null +++ b/book/src/migrations/v0_5.md @@ -0,0 +1,44 @@ +# From v0.4.X to v0.5.X + +## Overview + +Version 0.5 updates the crate for Bevy v0.15. + +It also takes advantages of the new `required_component` feature to simplify the crate API. + +## Bevy v0.15 update + +[Bevy official migration guide](https://bevyengine.org/learn/migration-guides/0-14-to-0-15/) + +## Misc changes + +### `TiledMapSettings` update + +`map_initial_transform` and `map_initial_visibility` have been removed from `TiledMapSettings`. + +If you want to tweak your map positioning or visibility, you should instead directly insert corresponding `Transform` or `Visibility` components on it. + +Before: + +```rust,no_run + let map_handle: Handle = asset_server.load("map.tmx"); + commands.spawn(( + TiledMapHandle(map_handle), + TiledMapSettings { + map_initial_transform: Transform::from_xyz(150., 100., 0.), + map_initial_visibility: Visibility::Hidden, + ..Default::default() + }, + )); +``` + +After: + +```rust,no_run + let map_handle: Handle = asset_server.load("map.tmx"); + commands.spawn(( + TiledMapHandle(map_handle), + Transform::from_xyz(150., 100., 0.), + Visibility::Hidden, + )); +``` diff --git a/examples/basic.rs b/examples/basic.rs index 311fc23..72c6ed3 100644 --- a/examples/basic.rs +++ b/examples/basic.rs @@ -18,7 +18,7 @@ fn main() { fn startup(mut commands: Commands, asset_server: Res) { // Spawn a 2D camera (required by Bevy) - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); // Load the map ... let map_handle: Handle = asset_server.load("finite.tmx"); diff --git a/examples/helper/assets.rs b/examples/helper/assets.rs index 92509dc..275b8f2 100644 --- a/examples/helper/assets.rs +++ b/examples/helper/assets.rs @@ -1,6 +1,5 @@ use bevy::{ecs::system::EntityCommands, prelude::*}; use bevy_ecs_tiled::prelude::*; -use bevy_ecs_tilemap::map::TilemapRenderSettings; pub type MapInfosCallback = fn(&mut EntityCommands); @@ -42,9 +41,7 @@ impl AssetsManager { Self { map_assets: Vec::new(), map_entity: None, - text_entity: commands - .spawn(TextBundle::from(AssetsManager::BASE_TEXT)) - .id(), + text_entity: commands.spawn(Text::from(AssetsManager::BASE_TEXT)).id(), map_index: 0, } } @@ -60,33 +57,25 @@ impl AssetsManager { ); // Update displayed text - commands - .entity(self.text_entity) - .insert(TextBundle::from(format!( - "{}\nmap name = {}\n{}", - AssetsManager::BASE_TEXT, - self.map_assets[self.map_index].path, - self.map_assets[self.map_index].description - ))); + commands.entity(self.text_entity).insert(Text::from(format!( + "{}\nmap name = {}\n{}", + AssetsManager::BASE_TEXT, + self.map_assets[self.map_index].path, + self.map_assets[self.map_index].description + ))); - // Handle map update: spawn the map if it does not exist yet - // or just update the map handle if already spawned + // Handle map update: despawn the map if it already exists if let Some(entity) = self.map_entity { - let mut entity_commands = commands.entity(entity); - entity_commands.insert(TiledMapHandle( - self.map_assets[self.map_index].asset.to_owned(), - )); - entity_commands.remove::(); - entity_commands.remove::(); - (self.map_assets[self.map_index].callback)(&mut entity_commands); - } else { - let mut entity_commands = commands.spawn(TiledMapHandle( - self.map_assets[self.map_index].asset.to_owned(), - )); - (self.map_assets[self.map_index].callback)(&mut entity_commands); - self.map_entity = Some(entity_commands.id()); + commands.entity(entity).despawn_recursive(); } + // Then spawn the new map + let mut entity_commands = commands.spawn(TiledMapHandle( + self.map_assets[self.map_index].asset.to_owned(), + )); + (self.map_assets[self.map_index].callback)(&mut entity_commands); + self.map_entity = Some(entity_commands.id()); + // Update the map index self.map_index += 1; if self.map_index >= self.map_assets.len() { diff --git a/examples/helper/avian.rs b/examples/helper/avian.rs index 0648297..084f2d8 100644 --- a/examples/helper/avian.rs +++ b/examples/helper/avian.rs @@ -15,11 +15,7 @@ pub fn spawn_player(commands: &mut Commands, radius: f32, spawn_position: Vec2) .insert(Name::new("PlayerControlledObject (Avian2D physics)")) .insert(Collider::circle(radius)) .insert(GravityScale(GRAVITY_SCALE)) - .insert(TransformBundle::from(Transform::from_xyz( - spawn_position.x, - spawn_position.y, - 0.0, - ))); + .insert(Transform::from_xyz(spawn_position.x, spawn_position.y, 0.0)); } pub fn move_player( diff --git a/examples/helper/camera.rs b/examples/helper/camera.rs index 3cae5c8..03a1131 100644 --- a/examples/helper/camera.rs +++ b/examples/helper/camera.rs @@ -68,7 +68,7 @@ pub fn movement( } let z = transform.translation.z; - transform.translation += time.delta_seconds() * direction * 500.; + transform.translation += time.delta_secs() * direction * 500.; // Important! We need to restore the Z values when moving the camera around. // Bevy has a specific camera setup and this can mess with how our layers are shown. transform.translation.z = z; diff --git a/examples/helper/map.rs b/examples/helper/map.rs index 36d5448..2398660 100644 --- a/examples/helper/map.rs +++ b/examples/helper/map.rs @@ -10,11 +10,11 @@ pub fn rotate( ) { for (_, mut transform) in tilemap.iter_mut() { if keyboard_input.pressed(KeyCode::KeyQ) { - transform.rotate_z(f32::to_radians(ROTATION_SPEED * time.delta_seconds())); + transform.rotate_z(f32::to_radians(ROTATION_SPEED * time.delta_secs())); } if keyboard_input.pressed(KeyCode::KeyE) { - transform.rotate_z(f32::to_radians(ROTATION_SPEED * time.delta_seconds() * -1.)); + transform.rotate_z(f32::to_radians(ROTATION_SPEED * time.delta_secs() * -1.)); } } } diff --git a/examples/helper/mod.rs b/examples/helper/mod.rs index 3c25e29..cc969de 100644 --- a/examples/helper/mod.rs +++ b/examples/helper/mod.rs @@ -1,5 +1,5 @@ use bevy::prelude::*; -use bevy_inspector_egui::quick::WorldInspectorPlugin; +//use bevy_inspector_egui::quick::WorldInspectorPlugin; #[allow(dead_code)] pub mod assets; @@ -18,7 +18,7 @@ pub struct HelperPlugin; impl Plugin for HelperPlugin { fn build(&self, app: &mut bevy::prelude::App) { - app.add_plugins(WorldInspectorPlugin::new()); + // app.add_plugins(WorldInspectorPlugin::new()); app.add_systems(Update, camera::movement); app.add_systems(Update, map::rotate); #[cfg(feature = "rapier")] diff --git a/examples/helper/rapier.rs b/examples/helper/rapier.rs index d783d00..792c84d 100644 --- a/examples/helper/rapier.rs +++ b/examples/helper/rapier.rs @@ -16,11 +16,7 @@ pub fn spawn_player(commands: &mut Commands, radius: f32, spawn_position: Vec2) .insert(Collider::ball(radius)) .insert(Velocity::zero()) .insert(GravityScale(GRAVITY_SCALE)) - .insert(TransformBundle::from(Transform::from_xyz( - spawn_position.x, - spawn_position.y, - 0.0, - ))); + .insert(Transform::from_xyz(spawn_position.x, spawn_position.y, 0.0)); } pub fn move_player( diff --git a/examples/map_events.rs b/examples/map_events.rs index 8552906..fc19c92 100644 --- a/examples/map_events.rs +++ b/examples/map_events.rs @@ -16,17 +16,17 @@ fn main() { .add_plugins(TilemapPlugin) .add_plugins(TiledMapPlugin::default()) // Add observers for map loading events - .observe(map_created) - .observe(layer_created) - .observe(object_created) - .observe(special_tile_created) + .add_observer(map_created) + .add_observer(layer_created) + .add_observer(object_created) + .add_observer(special_tile_created) // Add our systems and run the app! .add_systems(Startup, startup) .run(); } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle(asset_server.load("finite.tmx"))); } diff --git a/examples/map_reload.rs b/examples/map_reload.rs index 3bce523..4df09b6 100644 --- a/examples/map_reload.rs +++ b/examples/map_reload.rs @@ -34,8 +34,8 @@ fn startup( asset_server: Res, mut next_state: ResMut>, ) { - commands.spawn(Camera2dBundle::default()); - commands.spawn(TextBundle::from( + commands.spawn(Camera2d); + commands.spawn(Text::from( "U = Unload map by removing asset\nI = Unload map by despawning entity\nL = Load finite map\nK = Replace loaded map component without unloading\nR = Reload map using the RespawnTiledMap component", )); diff --git a/examples/map_settings.rs b/examples/map_settings.rs index edd757b..aa6985b 100644 --- a/examples/map_settings.rs +++ b/examples/map_settings.rs @@ -22,7 +22,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let mut mgr = helper::assets::AssetsManager::new(&mut commands); mgr.add_map(helper::assets::MapInfos::new( @@ -56,12 +56,19 @@ fn startup(mut commands: Commands, asset_server: Res) { mgr.add_map(helper::assets::MapInfos::new( &asset_server, "finite.tmx", - "A map using an initial transform (rotation = 45°)", + "A map using an initial Transform (rotation = 45°)", |c| { - c.insert(TiledMapSettings { - map_initial_transform: Transform::from_rotation(Quat::from_rotation_z(45.)), - ..default() - }); + // You can directly insert a Transform to the entity holding the map + c.insert(Transform::from_rotation(Quat::from_rotation_z(45.))); + }, + )); + mgr.add_map(helper::assets::MapInfos::new( + &asset_server, + "finite.tmx", + "A map using an initial Visibility (hidden)", + |c| { + // You can directly insert a Visibility to the entity holding the map + c.insert(Visibility::Hidden); }, )); commands.insert_resource(mgr); diff --git a/examples/map_spawn_delay.rs b/examples/map_spawn_delay.rs index 1a76591..64c0101 100644 --- a/examples/map_spawn_delay.rs +++ b/examples/map_spawn_delay.rs @@ -32,7 +32,7 @@ struct MapSpawner { const DELAY_VALUE_S: u64 = 5; fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); info!("Loading asset, will spawn a map in {}s ...", DELAY_VALUE_S); commands.insert_resource(MapSpawner { diff --git a/examples/my_tiled_export_file.json b/examples/my_tiled_export_file.json index 753a226..544961e 100644 --- a/examples/my_tiled_export_file.json +++ b/examples/my_tiled_export_file.json @@ -1,6 +1,6 @@ [ { - "id": 162, + "id": 187, "name": "()", "type": "class", "useAs": [], @@ -9,8 +9,8 @@ "members": [] }, { - "id": 62, - "name": "(u8, u8)", + "id": 249, + "name": "(bevy_ecs::entity::Entity, bevy_picking::backend::HitData)", "type": "class", "useAs": [], "color": "#000000", @@ -18,78 +18,80 @@ "members": [ { "name": "0", - "type": "int", + "type": "object", "value": null }, { "name": "1", - "type": "int", + "propertyType": "bevy_picking::backend::HitData", + "type": "class", "value": null } ] }, { - "id": 178, - "name": "bevy_animation::AnimationTarget", + "id": 147, + "name": "(u16, u16)", "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], + "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "id", - "propertyType": "bevy_animation::AnimationTargetId", - "type": "class", + "name": "0", + "type": "int", "value": null }, { - "name": "player", - "type": "object", + "name": "1", + "type": "int", "value": null } ] }, { - "id": 217, - "name": "bevy_animation::Interpolation", - "type": "enum", - "storageType": "string", - "values": [ - "Linear", - "Step", - "CubicSpline" - ], - "valuesAsFlags": false + "id": 88, + "name": "(u8, u8)", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "0", + "type": "int", + "value": null + }, + { + "name": "1", + "type": "int", + "value": null + } + ] }, { - "id": 167, - "name": "bevy_asset::assets::AssetIndex", + "id": 75, + "name": "(usize, usize)", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "generation", + "name": "0", "type": "int", "value": null }, { - "name": "index", + "name": "1", "type": "int", "value": null } ] }, { - "id": 233, - "name": "bevy_audio::audio::DefaultSpatialScale", + "id": 5, + "name": "bevy_a11y::Focus", "type": "class", "useAs": [ "property", @@ -103,46 +105,119 @@ "members": [ { "name": "0", - "propertyType": "bevy_audio::audio::SpatialScale", + "type": "object", + "value": null + } + ] + }, + { + "id": 265, + "name": "bevy_animation::ActiveAnimation", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "weight", + "type": "float", + "value": null + }, + { + "name": "repeat", + "propertyType": "bevy_animation::RepeatAnimation", + "type": "class", + "value": null + }, + { + "name": "speed", + "type": "float", + "value": null + }, + { + "name": "elapsed", + "type": "float", + "value": null + }, + { + "name": "seek_time", + "type": "float", + "value": null + }, + { + "name": "last_seek_time", + "propertyType": "core::option::Option", "type": "class", "value": null + }, + { + "name": "completions", + "type": "int", + "value": null + }, + { + "name": "just_completed", + "type": "bool", + "value": null + }, + { + "name": "paused", + "type": "bool", + "value": null } ] }, { - "id": 243, - "name": "bevy_audio::audio::GlobalVolume", + "id": 257, + "name": "bevy_animation::AnimationTarget", "type": "class", "useAs": [ - "map" + "property", + "map", + "layer", + "object", + "tile" ], "color": "#000000", "drawFill": true, "members": [ { - "name": "volume", - "propertyType": "bevy_audio::audio::Volume", + "name": "id", + "propertyType": "bevy_animation::AnimationTargetId", "type": "class", "value": null + }, + { + "name": "player", + "type": "object", + "value": null } ] }, { - "id": 7, - "name": "bevy_audio::audio::PlaybackMode", - "type": "enum", - "storageType": "string", - "values": [ - "Once", - "Loop", - "Despawn", - "Remove" - ], - "valuesAsFlags": false + "id": 159, + "name": "bevy_animation::TimedAnimationEvent", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "time", + "type": "float", + "value": null + }, + { + "name": "event", + "propertyType": "bevy_animation::animation_event::AnimationEventData", + "type": "class", + "value": null + } + ] }, { - "id": 160, - "name": "bevy_audio::audio::SpatialListener", + "id": 267, + "name": "bevy_animation::VariableCurve", "type": "class", "useAs": [ "property", @@ -155,30 +230,16 @@ "drawFill": true, "members": [ { - "name": "left_ear_offset", - "propertyType": "glam::Vec3", - "type": "class", - "value": { - "x": -2.0, - "y": -0.0, - "z": -0.0 - } - }, - { - "name": "right_ear_offset", - "propertyType": "glam::Vec3", + "name": "0", + "propertyType": "()", "type": "class", - "value": { - "x": 2.0, - "y": 0.0, - "z": 0.0 - } + "value": null } ] }, { - "id": 253, - "name": "bevy_audio::audio::SpatialScale", + "id": 6, + "name": "bevy_animation::animation_event::AnimationEventData", "type": "class", "useAs": [ "property", @@ -192,15 +253,15 @@ "members": [ { "name": "0", - "propertyType": "glam::Vec3", + "propertyType": "()", "type": "class", "value": null } ] }, { - "id": 260, - "name": "bevy_audio::audio::Volume", + "id": 234, + "name": "bevy_animation::graph::AnimationGraphHandle", "type": "class", "useAs": [ "property", @@ -214,81 +275,292 @@ "members": [ { "name": "0", - "type": "float", + "type": "file", "value": null } ] }, { - "id": 266, - "name": "bevy_color::hsla::Hsla", + "id": 256, + "name": "bevy_asset::assets::AssetIndex", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "hue", - "type": "float", - "value": 0.0 - }, - { - "name": "saturation", - "type": "float", - "value": 0.0 - }, - { - "name": "lightness", - "type": "float", - "value": 1.0 + "name": "generation", + "type": "int", + "value": null }, { - "name": "alpha", - "type": "float", - "value": 1.0 + "name": "index", + "type": "int", + "value": null } ] }, { - "id": 191, - "name": "bevy_color::hsva::Hsva", + "id": 283, + "name": "bevy_audio::audio::DefaultSpatialScale", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "hue", - "type": "float", - "value": 0.0 - }, - { - "name": "saturation", - "type": "float", - "value": 0.0 - }, - { - "name": "value", - "type": "float", - "value": 1.0 - }, - { - "name": "alpha", - "type": "float", - "value": 1.0 + "name": "0", + "propertyType": "bevy_audio::audio::SpatialScale", + "type": "class", + "value": { + "0": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + } + } } ] }, { - "id": 171, - "name": "bevy_color::hwba::Hwba", + "id": 307, + "name": "bevy_audio::audio::GlobalVolume", "type": "class", - "useAs": [], + "useAs": [ + "map" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "hue", + "name": "volume", + "propertyType": "bevy_audio::audio::Volume", + "type": "class", + "value": { + "0": 1.0 + } + } + ] + }, + { + "id": 148, + "name": "bevy_audio::audio::PlaybackMode", + "type": "enum", + "storageType": "string", + "values": [ + "Once", + "Loop", + "Despawn", + "Remove" + ], + "valuesAsFlags": false + }, + { + "id": 163, + "name": "bevy_audio::audio::PlaybackSettings", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "mode", + "propertyType": "bevy_audio::audio::PlaybackMode", + "type": "string", + "value": "Once" + }, + { + "name": "volume", + "propertyType": "bevy_audio::audio::Volume", + "type": "class", + "value": { + "0": 1.0 + } + }, + { + "name": "speed", + "type": "float", + "value": 1.0 + }, + { + "name": "paused", + "type": "bool", + "value": false + }, + { + "name": "spatial", + "type": "bool", + "value": false + }, + { + "name": "spatial_scale", + "propertyType": "core::option::Option", + "type": "class", + "value": null + } + ] + }, + { + "id": 291, + "name": "bevy_audio::audio::SpatialListener", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "left_ear_offset", + "propertyType": "glam::Vec3", + "type": "class", + "value": { + "x": -2.0, + "y": -0.0, + "z": -0.0 + } + }, + { + "name": "right_ear_offset", + "propertyType": "glam::Vec3", + "type": "class", + "value": { + "x": 2.0, + "y": 0.0, + "z": 0.0 + } + } + ] + }, + { + "id": 308, + "name": "bevy_audio::audio::SpatialScale", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "0", + "propertyType": "glam::Vec3", + "type": "class", + "value": null + } + ] + }, + { + "id": 156, + "name": "bevy_audio::audio::Volume", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "0", + "type": "float", + "value": null + } + ] + }, + { + "id": 155, + "name": "bevy_color::hsla::Hsla", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "hue", + "type": "float", + "value": 0.0 + }, + { + "name": "saturation", + "type": "float", + "value": 0.0 + }, + { + "name": "lightness", + "type": "float", + "value": 1.0 + }, + { + "name": "alpha", + "type": "float", + "value": 1.0 + } + ] + }, + { + "id": 16, + "name": "bevy_color::hsva::Hsva", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "hue", + "type": "float", + "value": 0.0 + }, + { + "name": "saturation", + "type": "float", + "value": 0.0 + }, + { + "name": "value", + "type": "float", + "value": 1.0 + }, + { + "name": "alpha", + "type": "float", + "value": 1.0 + } + ] + }, + { + "id": 293, + "name": "bevy_color::hwba::Hwba", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "hue", "type": "float", "value": 0.0 }, @@ -310,7 +582,7 @@ ] }, { - "id": 41, + "id": 225, "name": "bevy_color::laba::Laba", "type": "class", "useAs": [], @@ -340,7 +612,7 @@ ] }, { - "id": 4, + "id": 180, "name": "bevy_color::lcha::Lcha", "type": "class", "useAs": [], @@ -370,7 +642,7 @@ ] }, { - "id": 63, + "id": 102, "name": "bevy_color::linear_rgba::LinearRgba", "type": "class", "useAs": [], @@ -400,7 +672,7 @@ ] }, { - "id": 26, + "id": 178, "name": "bevy_color::oklaba::Oklaba", "type": "class", "useAs": [], @@ -430,7 +702,7 @@ ] }, { - "id": 39, + "id": 306, "name": "bevy_color::oklcha::Oklcha", "type": "class", "useAs": [], @@ -460,7 +732,7 @@ ] }, { - "id": 109, + "id": 98, "name": "bevy_color::srgba::Srgba", "type": "class", "useAs": [], @@ -490,7 +762,7 @@ ] }, { - "id": 78, + "id": 39, "name": "bevy_color::xyza::Xyza", "type": "class", "useAs": [], @@ -520,7 +792,7 @@ ] }, { - "id": 79, + "id": 135, "name": "bevy_core::name::Name", "type": "class", "useAs": [ @@ -536,7 +808,7 @@ { "name": "hash", "type": "int", - "value": 12041994004009014778 + "value": 10233364524013666415 }, { "name": "name", @@ -546,39 +818,8 @@ ] }, { - "id": 82, - "name": "bevy_core_pipeline::bloom::settings::BloomCompositeMode", - "type": "enum", - "storageType": "string", - "values": [ - "EnergyConserving", - "Additive" - ], - "valuesAsFlags": false - }, - { - "id": 67, - "name": "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "threshold", - "type": "float", - "value": null - }, - { - "name": "threshold_softness", - "type": "float", - "value": null - } - ] - }, - { - "id": 21, - "name": "bevy_core_pipeline::bloom::settings::BloomSettings", + "id": 17, + "name": "bevy_core_pipeline::bloom::settings::Bloom", "type": "class", "useAs": [ "property", @@ -611,8 +852,8 @@ "value": 1.0 }, { - "name": "prefilter_settings", - "propertyType": "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings", + "name": "prefilter", + "propertyType": "bevy_core_pipeline::bloom::settings::BloomPrefilter", "type": "class", "value": { "threshold": 0.0, @@ -624,12 +865,53 @@ "propertyType": "bevy_core_pipeline::bloom::settings::BloomCompositeMode", "type": "string", "value": "EnergyConserving" - } + }, + { + "name": "max_mip_dimension", + "type": "int", + "value": 512 + }, + { + "name": "uv_offset", + "type": "float", + "value": 0.004000000189989805 + } ] }, { - "id": 269, - "name": "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings", + "id": 182, + "name": "bevy_core_pipeline::bloom::settings::BloomCompositeMode", + "type": "enum", + "storageType": "string", + "values": [ + "EnergyConserving", + "Additive" + ], + "valuesAsFlags": false + }, + { + "id": 82, + "name": "bevy_core_pipeline::bloom::settings::BloomPrefilter", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "threshold", + "type": "float", + "value": null + }, + { + "name": "threshold_softness", + "type": "float", + "value": null + } + ] + }, + { + "id": 309, + "name": "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpening", "type": "class", "useAs": [ "property", @@ -644,22 +926,22 @@ { "name": "enabled", "type": "bool", - "value": null + "value": true }, { "name": "sharpening_strength", "type": "float", - "value": null + "value": 0.6000000238418579 }, { "name": "denoise", "type": "bool", - "value": null + "value": false } ] }, { - "id": 259, + "id": 55, "name": "bevy_core_pipeline::core_2d::camera_2d::Camera2d", "type": "class", "useAs": [ @@ -674,8 +956,8 @@ "members": [] }, { - "id": 83, - "name": "bevy_core_pipeline::core_3d::camera_3d::Camera3d", + "id": 205, + "name": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage", "type": "class", "useAs": [ "property", @@ -688,33 +970,28 @@ "drawFill": true, "members": [ { - "name": "depth_load_op", - "propertyType": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp", - "type": "class", - "value": null - }, - { - "name": "depth_texture_usages", - "propertyType": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage", - "type": "class", - "value": null - }, - { - "name": "screen_space_specular_transmission_steps", + "name": "0", "type": "int", "value": null - }, - { - "name": "screen_space_specular_transmission_quality", - "propertyType": "bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality", - "type": "string", - "value": null } ] }, { - "id": 194, - "name": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage", + "id": 136, + "name": "bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality", + "type": "enum", + "storageType": "string", + "values": [ + "Low", + "Medium", + "High", + "Ultra" + ], + "valuesAsFlags": false + }, + { + "id": 253, + "name": "bevy_core_pipeline::dof::DepthOfField", "type": "class", "useAs": [ "property", @@ -727,27 +1004,51 @@ "drawFill": true, "members": [ { - "name": "0", - "type": "int", + "name": "mode", + "propertyType": "bevy_core_pipeline::dof::DepthOfFieldMode", + "type": "string", + "value": "Bokeh" + }, + { + "name": "focal_distance", + "type": "float", + "value": 10.0 + }, + { + "name": "sensor_height", + "type": "float", + "value": 0.01865999959409237 + }, + { + "name": "aperture_f_stops", + "type": "float", + "value": 1.0 + }, + { + "name": "max_circle_of_confusion_diameter", + "type": "float", + "value": 64.0 + }, + { + "name": "max_depth", + "type": "float", "value": null } ] }, { - "id": 247, - "name": "bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality", + "id": 66, + "name": "bevy_core_pipeline::dof::DepthOfFieldMode", "type": "enum", "storageType": "string", "values": [ - "Low", - "Medium", - "High", - "Ultra" + "Bokeh", + "Gaussian" ], "valuesAsFlags": false }, { - "id": 91, + "id": 276, "name": "bevy_core_pipeline::fxaa::Fxaa", "type": "class", "useAs": [ @@ -780,7 +1081,7 @@ ] }, { - "id": 239, + "id": 119, "name": "bevy_core_pipeline::fxaa::Sensitivity", "type": "enum", "storageType": "string", @@ -794,57 +1095,119 @@ "valuesAsFlags": false }, { - "id": 200, - "name": "bevy_core_pipeline::prepass::DeferredPrepass", + "id": 43, + "name": "bevy_core_pipeline::oit::OrderIndependentTransparencySettings", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, + "members": [ + { + "name": "layer_count", + "type": "int", + "value": null + }, + { + "name": "alpha_threshold", + "type": "float", + "value": null + } + ] + }, + { + "id": 140, + "name": "bevy_core_pipeline::post_process::ChromaticAberration", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "color_lut", + "type": "file", + "value": null + }, + { + "name": "intensity", + "type": "float", + "value": 0.019999999552965164 + }, + { + "name": "max_samples", + "type": "int", + "value": 8 + } + ] + }, + { + "id": 313, + "name": "bevy_core_pipeline::prepass::DeferredPrepass", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, "members": [] }, { - "id": 59, + "id": 58, "name": "bevy_core_pipeline::prepass::DepthPrepass", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [] }, { - "id": 131, + "id": 129, "name": "bevy_core_pipeline::prepass::MotionVectorPrepass", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [] }, { - "id": 262, + "id": 100, "name": "bevy_core_pipeline::prepass::NormalPrepass", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [] }, { - "id": 13, - "name": "bevy_core_pipeline::smaa::SmaaPreset", - "type": "enum", - "storageType": "string", - "values": [ - "Low", - "Medium", - "High", - "Ultra" - ], - "valuesAsFlags": false - }, - { - "id": 265, - "name": "bevy_core_pipeline::smaa::SmaaSettings", + "id": 213, + "name": "bevy_core_pipeline::smaa::Smaa", "type": "class", "useAs": [ "property", @@ -865,7 +1228,20 @@ ] }, { - "id": 157, + "id": 59, + "name": "bevy_core_pipeline::smaa::SmaaPreset", + "type": "enum", + "storageType": "string", + "values": [ + "Low", + "Medium", + "High", + "Ultra" + ], + "valuesAsFlags": false + }, + { + "id": 85, "name": "bevy_core_pipeline::tonemapping::DebandDither", "type": "enum", "storageType": "string", @@ -876,7 +1252,7 @@ "valuesAsFlags": false }, { - "id": 235, + "id": 40, "name": "bevy_core_pipeline::tonemapping::Tonemapping", "type": "enum", "storageType": "string", @@ -893,7 +1269,7 @@ "valuesAsFlags": false }, { - "id": 11, + "id": 160, "name": "bevy_ecs_tilemap::FrustumCulling", "type": "class", "useAs": [ @@ -914,7 +1290,7 @@ ] }, { - "id": 96, + "id": 195, "name": "bevy_ecs_tilemap::map::HexCoordSystem", "type": "enum", "storageType": "string", @@ -929,7 +1305,7 @@ "valuesAsFlags": false }, { - "id": 184, + "id": 71, "name": "bevy_ecs_tilemap::map::IsoCoordSystem", "type": "enum", "storageType": "string", @@ -940,7 +1316,7 @@ "valuesAsFlags": false }, { - "id": 205, + "id": 154, "name": "bevy_ecs_tilemap::map::TilemapGridSize", "type": "class", "useAs": [ @@ -966,7 +1342,7 @@ ] }, { - "id": 165, + "id": 10, "name": "bevy_ecs_tilemap::map::TilemapId", "type": "class", "useAs": [ @@ -987,7 +1363,7 @@ ] }, { - "id": 270, + "id": 14, "name": "bevy_ecs_tilemap::map::TilemapSize", "type": "class", "useAs": [ @@ -1013,7 +1389,7 @@ ] }, { - "id": 85, + "id": 133, "name": "bevy_ecs_tilemap::map::TilemapSpacing", "type": "class", "useAs": [ @@ -1039,7 +1415,7 @@ ] }, { - "id": 1, + "id": 22, "name": "bevy_ecs_tilemap::map::TilemapTextureSize", "type": "class", "useAs": [ @@ -1065,7 +1441,7 @@ ] }, { - "id": 57, + "id": 215, "name": "bevy_ecs_tilemap::map::TilemapTileSize", "type": "class", "useAs": [ @@ -1091,7 +1467,7 @@ ] }, { - "id": 112, + "id": 50, "name": "bevy_ecs_tilemap::tiles::AnimatedTile", "type": "class", "useAs": [], @@ -1116,7 +1492,7 @@ ] }, { - "id": 58, + "id": 146, "name": "bevy_ecs_tilemap::tiles::TileColor", "type": "class", "useAs": [ @@ -1137,7 +1513,7 @@ ] }, { - "id": 185, + "id": 247, "name": "bevy_ecs_tilemap::tiles::TileFlip", "type": "class", "useAs": [ @@ -1168,7 +1544,7 @@ ] }, { - "id": 272, + "id": 142, "name": "bevy_ecs_tilemap::tiles::TilePos", "type": "class", "useAs": [ @@ -1194,7 +1570,7 @@ ] }, { - "id": 274, + "id": 227, "name": "bevy_ecs_tilemap::tiles::TilePosOld", "type": "class", "useAs": [ @@ -1216,7 +1592,7 @@ ] }, { - "id": 223, + "id": 166, "name": "bevy_ecs_tilemap::tiles::TileTextureIndex", "type": "class", "useAs": [ @@ -1237,7 +1613,7 @@ ] }, { - "id": 87, + "id": 24, "name": "bevy_ecs_tilemap::tiles::TileVisible", "type": "class", "useAs": [ @@ -1258,28 +1634,28 @@ ] }, { - "id": 238, - "name": "bevy_egui::EguiSettings", + "id": 203, + "name": "bevy_gizmos::aabb::AabbGizmoConfigGroup", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "scale_factor", - "type": "float", + "name": "draw_all", + "type": "bool", "value": null }, { - "name": "default_open_url_target", - "propertyType": "core::option::Option", + "name": "default_color", + "propertyType": "core::option::Option", "type": "class", "value": null } ] }, { - "id": 256, + "id": 164, "name": "bevy_gizmos::config::GizmoConfig", "type": "class", "useAs": [], @@ -1327,7 +1703,7 @@ ] }, { - "id": 183, + "id": 109, "name": "bevy_gizmos::config::GizmoConfigStore", "type": "class", "useAs": [ @@ -1338,7 +1714,7 @@ "members": [] }, { - "id": 154, + "id": 130, "name": "bevy_gizmos::config::GizmoLineStyle", "type": "enum", "storageType": "string", @@ -1349,44 +1725,29 @@ "valuesAsFlags": false }, { - "id": 214, - "name": "bevy_gizmos::light::LightGizmoConfigGroup", - "type": "class", - "useAs": [], + "id": 190, + "name": "bevy_gltf::GltfExtras", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "draw_all", - "type": "bool", - "value": null - }, - { - "name": "color", - "propertyType": "bevy_gizmos::light::LightGizmoColor", - "type": "class", - "value": null - }, - { - "name": "point_light_color", - "type": "color", - "value": null - }, - { - "name": "spot_light_color", - "type": "color", - "value": null - }, - { - "name": "directional_light_color", - "type": "color", - "value": null + "name": "value", + "type": "string", + "value": "" } ] }, { - "id": 103, - "name": "bevy_gltf::GltfExtras", + "id": 270, + "name": "bevy_gltf::GltfMaterialExtras", "type": "class", "useAs": [ "property", @@ -1401,13 +1762,13 @@ { "name": "value", "type": "string", - "value": null + "value": "" } ] }, { - "id": 49, - "name": "bevy_gltf::GltfMaterialExtras", + "id": 254, + "name": "bevy_gltf::GltfMaterialName", "type": "class", "useAs": [ "property", @@ -1420,14 +1781,14 @@ "drawFill": true, "members": [ { - "name": "value", + "name": "0", "type": "string", "value": null } ] }, { - "id": 244, + "id": 210, "name": "bevy_gltf::GltfMeshExtras", "type": "class", "useAs": [ @@ -1443,12 +1804,12 @@ { "name": "value", "type": "string", - "value": null + "value": "" } ] }, { - "id": 98, + "id": 271, "name": "bevy_gltf::GltfSceneExtras", "type": "class", "useAs": [ @@ -1464,12 +1825,12 @@ { "name": "value", "type": "string", - "value": null + "value": "" } ] }, { - "id": 75, + "id": 47, "name": "bevy_hierarchy::components::parent::Parent", "type": "class", "useAs": [ @@ -1490,7 +1851,7 @@ ] }, { - "id": 116, + "id": 7, "name": "bevy_input::ButtonState", "type": "enum", "storageType": "string", @@ -1501,7 +1862,7 @@ "valuesAsFlags": false }, { - "id": 199, + "id": 49, "name": "bevy_input::gamepad::AxisSettings", "type": "class", "useAs": [], @@ -1536,7 +1897,7 @@ ] }, { - "id": 143, + "id": 310, "name": "bevy_input::gamepad::ButtonAxisSettings", "type": "class", "useAs": [], @@ -1561,7 +1922,7 @@ ] }, { - "id": 51, + "id": 273, "name": "bevy_input::gamepad::ButtonSettings", "type": "class", "useAs": [], @@ -1581,62 +1942,56 @@ ] }, { - "id": 254, - "name": "bevy_input::gamepad::Gamepad", + "id": 299, + "name": "bevy_input::gamepad::GamepadAxisChangedEvent", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "id", - "type": "int", + "name": "entity", + "type": "object", "value": null - } - ] - }, - { - "id": 213, - "name": "bevy_input::gamepad::GamepadAxis", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ + }, { - "name": "gamepad", - "propertyType": "bevy_input::gamepad::Gamepad", + "name": "axis", + "propertyType": "bevy_input::gamepad::GamepadAxis", "type": "class", "value": null }, { - "name": "axis_type", - "propertyType": "bevy_input::gamepad::GamepadAxisType", - "type": "class", + "name": "value", + "type": "float", "value": null } ] }, { - "id": 141, - "name": "bevy_input::gamepad::GamepadAxisChangedEvent", + "id": 151, + "name": "bevy_input::gamepad::GamepadButtonChangedEvent", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "gamepad", - "propertyType": "bevy_input::gamepad::Gamepad", - "type": "class", + "name": "entity", + "type": "object", "value": null }, { - "name": "axis_type", - "propertyType": "bevy_input::gamepad::GamepadAxisType", + "name": "button", + "propertyType": "bevy_input::gamepad::GamepadButton", "type": "class", "value": null }, + { + "name": "state", + "propertyType": "bevy_input::ButtonState", + "type": "string", + "value": null + }, { "name": "value", "type": "float", @@ -1645,49 +2000,60 @@ ] }, { - "id": 224, - "name": "bevy_input::gamepad::GamepadButtonChangedEvent", + "id": 303, + "name": "bevy_input::gamepad::GamepadButtonStateChangedEvent", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "gamepad", - "propertyType": "bevy_input::gamepad::Gamepad", - "type": "class", + "name": "entity", + "type": "object", "value": null }, { - "name": "button_type", - "propertyType": "bevy_input::gamepad::GamepadButtonType", + "name": "button", + "propertyType": "bevy_input::gamepad::GamepadButton", "type": "class", "value": null }, { - "name": "value", - "type": "float", + "name": "state", + "propertyType": "bevy_input::ButtonState", + "type": "string", "value": null } ] }, { - "id": 181, - "name": "bevy_input::gamepad::GamepadInfo", + "id": 236, + "name": "bevy_input::gamepad::RawGamepadButtonChangedEvent", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "name", - "type": "string", + "name": "gamepad", + "type": "object", + "value": null + }, + { + "name": "button", + "propertyType": "bevy_input::gamepad::GamepadButton", + "type": "class", + "value": null + }, + { + "name": "value", + "type": "float", "value": null } ] }, { - "id": 36, + "id": 145, "name": "bevy_input::gestures::DoubleTapGesture", "type": "class", "useAs": [], @@ -1696,7 +2062,7 @@ "members": [] }, { - "id": 31, + "id": 33, "name": "bevy_input::gestures::PanGesture", "type": "class", "useAs": [ @@ -1718,7 +2084,7 @@ ] }, { - "id": 70, + "id": 45, "name": "bevy_input::gestures::PinchGesture", "type": "class", "useAs": [ @@ -1739,7 +2105,7 @@ ] }, { - "id": 206, + "id": 295, "name": "bevy_input::gestures::RotationGesture", "type": "class", "useAs": [ @@ -1760,37 +2126,64 @@ ] }, { - "id": 277, - "name": "bevy_input::touch::TouchPhase", - "type": "enum", - "storageType": "string", - "values": [ - "Started", - "Moved", - "Ended", - "Canceled" - ], - "valuesAsFlags": false + "id": 27, + "name": "bevy_input::keyboard::KeyboardFocusLost", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [] }, { - "id": 187, - "name": "bevy_math::rects::rect::Rect", + "id": 97, + "name": "bevy_input::keyboard::KeyboardInput", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "min", - "propertyType": "glam::Vec2", + "name": "key_code", + "propertyType": "bevy_input::keyboard::KeyCode", "type": "class", - "value": { - "x": 0.0, - "y": 0.0 - } + "value": null }, { - "name": "max", + "name": "logical_key", + "propertyType": "bevy_input::keyboard::Key", + "type": "class", + "value": null + }, + { + "name": "state", + "propertyType": "bevy_input::ButtonState", + "type": "string", + "value": null + }, + { + "name": "repeat", + "type": "bool", + "value": null + }, + { + "name": "window", + "type": "object", + "value": null + } + ] + }, + { + "id": 212, + "name": "bevy_input::mouse::AccumulatedMouseMotion", + "type": "class", + "useAs": [ + "map" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "delta", "propertyType": "glam::Vec2", "type": "class", "value": { @@ -1801,106 +2194,281 @@ ] }, { - "id": 138, - "name": "bevy_math::rects::urect::URect", + "id": 248, + "name": "bevy_input::mouse::AccumulatedMouseScroll", "type": "class", - "useAs": [], + "useAs": [ + "map" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "min", - "propertyType": "glam::UVec2", - "type": "class", - "value": { - "x": 0, - "y": 0 - } + "name": "unit", + "propertyType": "bevy_input::mouse::MouseScrollUnit", + "type": "string", + "value": "Line" }, { - "name": "max", - "propertyType": "glam::UVec2", + "name": "delta", + "propertyType": "glam::Vec2", "type": "class", "value": { - "x": 0, - "y": 0 + "x": 0.0, + "y": 0.0 } } ] }, { - "id": 56, - "name": "bevy_pbr::bundle::CascadesVisibleEntities", + "id": 57, + "name": "bevy_input::mouse::MouseMotion", "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], + "useAs": [], "color": "#000000", "drawFill": true, - "members": [] + "members": [ + { + "name": "delta", + "propertyType": "glam::Vec2", + "type": "class", + "value": null + } + ] }, { - "id": 80, - "name": "bevy_pbr::bundle::CubemapVisibleEntities", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" + "id": 115, + "name": "bevy_input::mouse::MouseScrollUnit", + "type": "enum", + "storageType": "string", + "values": [ + "Line", + "Pixel" ], - "color": "#000000", - "drawFill": true, - "members": [] + "valuesAsFlags": false }, { - "id": 249, - "name": "bevy_pbr::cluster::ClusterZConfig", + "id": 138, + "name": "bevy_input::mouse::MouseWheel", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "first_slice_depth", + "name": "unit", + "propertyType": "bevy_input::mouse::MouseScrollUnit", + "type": "string", + "value": null + }, + { + "name": "x", "type": "float", - "value": 5.0 + "value": null }, { - "name": "far_z_mode", - "propertyType": "bevy_pbr::cluster::ClusterFarZMode", - "type": "class", + "name": "y", + "type": "float", + "value": null + }, + { + "name": "window", + "type": "object", "value": null } ] }, { - "id": 203, - "name": "bevy_pbr::light::Cascade", + "id": 228, + "name": "bevy_input::touch::TouchInput", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "world_from_cascade", - "propertyType": "glam::Mat4", - "type": "class", + "name": "phase", + "propertyType": "bevy_input::touch::TouchPhase", + "type": "string", "value": null }, { - "name": "clip_from_cascade", - "propertyType": "glam::Mat4", + "name": "position", + "propertyType": "glam::Vec2", "type": "class", "value": null }, { - "name": "clip_from_world", + "name": "window", + "type": "object", + "value": null + }, + { + "name": "force", + "propertyType": "core::option::Option", + "type": "class", + "value": null + }, + { + "name": "id", + "type": "int", + "value": null + } + ] + }, + { + "id": 96, + "name": "bevy_input::touch::TouchPhase", + "type": "enum", + "storageType": "string", + "values": [ + "Started", + "Moved", + "Ended", + "Canceled" + ], + "valuesAsFlags": false + }, + { + "id": 126, + "name": "bevy_math::compass::CompassOctant", + "type": "enum", + "storageType": "string", + "values": [ + "North", + "NorthEast", + "East", + "SouthEast", + "South", + "SouthWest", + "West", + "NorthWest" + ], + "valuesAsFlags": false + }, + { + "id": 262, + "name": "bevy_math::rects::rect::Rect", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "min", + "propertyType": "glam::Vec2", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0 + } + }, + { + "name": "max", + "propertyType": "glam::Vec2", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0 + } + } + ] + }, + { + "id": 292, + "name": "bevy_math::rects::urect::URect", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "min", + "propertyType": "glam::UVec2", + "type": "class", + "value": { + "x": 0, + "y": 0 + } + }, + { + "name": "max", + "propertyType": "glam::UVec2", + "type": "class", + "value": { + "x": 0, + "y": 0 + } + } + ] + }, + { + "id": 152, + "name": "bevy_pbr::bundle::CascadesVisibleEntities", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [] + }, + { + "id": 222, + "name": "bevy_pbr::bundle::CubemapVisibleEntities", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [] + }, + { + "id": 288, + "name": "bevy_pbr::bundle::VisibleMeshEntities", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [] + }, + { + "id": 69, + "name": "bevy_pbr::light::Cascade", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "world_from_cascade", + "propertyType": "glam::Mat4", + "type": "class", + "value": null + }, + { + "name": "clip_from_cascade", + "propertyType": "glam::Mat4", + "type": "class", + "value": null + }, + { + "name": "clip_from_world", "propertyType": "glam::Mat4", "type": "class", "value": null @@ -1913,7 +2481,7 @@ ] }, { - "id": 161, + "id": 281, "name": "bevy_pbr::light::DirectionalLightShadowMap", "type": "class", "useAs": [ @@ -1925,12 +2493,12 @@ { "name": "size", "type": "int", - "value": null + "value": 2048 } ] }, { - "id": 93, + "id": 263, "name": "bevy_pbr::light::NotShadowCaster", "type": "class", "useAs": [ @@ -1945,7 +2513,7 @@ "members": [] }, { - "id": 9, + "id": 302, "name": "bevy_pbr::light::NotShadowReceiver", "type": "class", "useAs": [ @@ -1960,7 +2528,7 @@ "members": [] }, { - "id": 280, + "id": 220, "name": "bevy_pbr::light::PointLightShadowMap", "type": "class", "useAs": [ @@ -1972,12 +2540,12 @@ { "name": "size", "type": "int", - "value": null + "value": 1024 } ] }, { - "id": 24, + "id": 226, "name": "bevy_pbr::light::ShadowFilteringMethod", "type": "enum", "storageType": "string", @@ -1989,7 +2557,7 @@ "valuesAsFlags": false }, { - "id": 279, + "id": 179, "name": "bevy_pbr::light::ambient_light::AmbientLight", "type": "class", "useAs": [ @@ -1997,32 +2565,6 @@ ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "color", - "type": "color", - "value": null - }, - { - "name": "brightness", - "type": "float", - "value": null - } - ] - }, - { - "id": 152, - "name": "bevy_pbr::light::directional_light::DirectionalLight", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], - "color": "#000000", - "drawFill": true, "members": [ { "name": "color", @@ -2030,29 +2572,14 @@ "value": "#ffffffff" }, { - "name": "illuminance", - "type": "float", - "value": 10000.0 - }, - { - "name": "shadows_enabled", - "type": "bool", - "value": false - }, - { - "name": "shadow_depth_bias", - "type": "float", - "value": 0.019999999552965164 - }, - { - "name": "shadow_normal_bias", + "name": "brightness", "type": "float", - "value": 1.7999999523162842 + "value": 80.0 } ] }, { - "id": 241, + "id": 92, "name": "bevy_pbr::light::point_light::PointLight", "type": "class", "useAs": [ @@ -2090,6 +2617,11 @@ "type": "bool", "value": false }, + { + "name": "soft_shadows_enabled", + "type": "bool", + "value": false + }, { "name": "shadow_depth_bias", "type": "float", @@ -2099,11 +2631,16 @@ "name": "shadow_normal_bias", "type": "float", "value": 0.6000000238418579 + }, + { + "name": "shadow_map_near_z", + "type": "float", + "value": 0.10000000149011612 } ] }, { - "id": 60, + "id": 208, "name": "bevy_pbr::light::spot_light::SpotLight", "type": "class", "useAs": [ @@ -2141,6 +2678,11 @@ "type": "bool", "value": false }, + { + "name": "soft_shadows_enabled", + "type": "bool", + "value": false + }, { "name": "shadow_depth_bias", "type": "float", @@ -2151,6 +2693,11 @@ "type": "float", "value": 1.7999999523162842 }, + { + "name": "shadow_map_near_z", + "type": "float", + "value": 0.10000000149011612 + }, { "name": "outer_angle", "type": "float", @@ -2164,7 +2711,7 @@ ] }, { - "id": 246, + "id": 48, "name": "bevy_pbr::light_probe::LightProbe", "type": "class", "useAs": [ @@ -2179,10 +2726,16 @@ "members": [] }, { - "id": 120, + "id": 18, "name": "bevy_pbr::light_probe::environment_map::EnvironmentMapLight", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ @@ -2199,18 +2752,35 @@ { "name": "intensity", "type": "float", - "value": null + "value": 0.0 + }, + { + "name": "rotation", + "propertyType": "glam::Quat", + "type": "class", + "value": { + "w": 1.0, + "x": 0.0, + "y": 0.0, + "z": 0.0 + } } ] }, { - "id": 237, + "id": 26, "name": "bevy_pbr::light_probe::irradiance_volume::IrradianceVolume", "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ { "name": "voxels", "type": "file", @@ -2219,12 +2789,12 @@ { "name": "intensity", "type": "float", - "value": null + "value": 0.0 } ] }, { - "id": 130, + "id": 218, "name": "bevy_pbr::material::DefaultOpaqueRendererMethod", "type": "class", "useAs": [ @@ -2241,12 +2811,12 @@ "name": "0", "propertyType": "bevy_pbr::material::OpaqueRendererMethod", "type": "string", - "value": null + "value": "Forward" } ] }, { - "id": 102, + "id": 153, "name": "bevy_pbr::material::OpaqueRendererMethod", "type": "enum", "storageType": "string", @@ -2258,19 +2828,8 @@ "valuesAsFlags": false }, { - "id": 202, - "name": "bevy_pbr::pbr_material::UvChannel", - "type": "enum", - "storageType": "string", - "values": [ - "Uv0", - "Uv1" - ], - "valuesAsFlags": false - }, - { - "id": 106, - "name": "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings", + "id": 277, + "name": "bevy_pbr::mesh_material::MeshMaterial3d", "type": "class", "useAs": [ "property", @@ -2283,148 +2842,272 @@ "drawFill": true, "members": [ { - "name": "quality_level", - "propertyType": "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionQualityLevel", - "type": "class", + "name": "0", + "type": "file", "value": null } ] }, { - "id": 148, - "name": "bevy_pbr::ssr::ScreenSpaceReflectionsSettings", + "id": 269, + "name": "bevy_pbr::pbr_material::StandardMaterial", "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], + "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "perceptual_roughness_threshold", + "name": "base_color", + "type": "color", + "value": "#ffffffff" + }, + { + "name": "base_color_channel", + "propertyType": "bevy_pbr::pbr_material::UvChannel", + "type": "string", + "value": "Uv0" + }, + { + "name": "base_color_texture", + "propertyType": "core::option::Option>", + "type": "class", + "value": null + }, + { + "name": "emissive", + "propertyType": "bevy_color::linear_rgba::LinearRgba", + "type": "class", + "value": { + "alpha": 1.0, + "blue": 0.0, + "green": 0.0, + "red": 0.0 + } + }, + { + "name": "emissive_exposure_weight", "type": "float", - "value": 0.10000000149011612 + "value": 0.0 }, { - "name": "thickness", + "name": "emissive_channel", + "propertyType": "bevy_pbr::pbr_material::UvChannel", + "type": "string", + "value": "Uv0" + }, + { + "name": "emissive_texture", + "propertyType": "core::option::Option>", + "type": "class", + "value": null + }, + { + "name": "perceptual_roughness", "type": "float", - "value": 0.25 + "value": 0.5 }, { - "name": "linear_steps", - "type": "int", - "value": 16 + "name": "metallic", + "type": "float", + "value": 0.0 }, { - "name": "linear_march_exponent", + "name": "metallic_roughness_channel", + "propertyType": "bevy_pbr::pbr_material::UvChannel", + "type": "string", + "value": "Uv0" + }, + { + "name": "metallic_roughness_texture", + "propertyType": "core::option::Option>", + "type": "class", + "value": null + }, + { + "name": "reflectance", "type": "float", - "value": 1.0 + "value": 0.5 }, { - "name": "bisection_steps", - "type": "int", - "value": 4 + "name": "diffuse_transmission", + "type": "float", + "value": 0.0 }, { - "name": "use_secant", - "type": "bool", - "value": true - } - ] - }, - { - "id": 3, - "name": "bevy_pbr::volumetric_fog::VolumetricFogSettings", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], - "color": "#000000", - "drawFill": true, - "members": [ + "name": "specular_transmission", + "type": "float", + "value": 0.0 + }, { - "name": "fog_color", - "type": "color", + "name": "thickness", + "type": "float", + "value": 0.0 + }, + { + "name": "ior", + "type": "float", + "value": 1.5 + }, + { + "name": "attenuation_distance", + "type": "float", "value": null }, { - "name": "ambient_color", + "name": "attenuation_color", "type": "color", - "value": null + "value": "#ffffffff" }, { - "name": "ambient_intensity", - "type": "float", + "name": "normal_map_channel", + "propertyType": "bevy_pbr::pbr_material::UvChannel", + "type": "string", + "value": "Uv0" + }, + { + "name": "normal_map_texture", + "propertyType": "core::option::Option>", + "type": "class", "value": null }, { - "name": "step_count", - "type": "int", + "name": "flip_normal_map_y", + "type": "bool", + "value": false + }, + { + "name": "occlusion_channel", + "propertyType": "bevy_pbr::pbr_material::UvChannel", + "type": "string", + "value": "Uv0" + }, + { + "name": "occlusion_texture", + "propertyType": "core::option::Option>", + "type": "class", "value": null }, { - "name": "max_depth", + "name": "clearcoat", "type": "float", - "value": null + "value": 0.0 }, { - "name": "absorption", + "name": "clearcoat_perceptual_roughness", "type": "float", - "value": null + "value": 0.5 }, { - "name": "scattering", + "name": "anisotropy_strength", "type": "float", - "value": null + "value": 0.0 }, { - "name": "density", + "name": "anisotropy_rotation", "type": "float", + "value": 0.0 + }, + { + "name": "double_sided", + "type": "bool", + "value": false + }, + { + "name": "unlit", + "type": "bool", + "value": false + }, + { + "name": "fog_enabled", + "type": "bool", + "value": true + }, + { + "name": "alpha_mode", + "propertyType": "bevy_render::alpha::AlphaMode", + "type": "class", "value": null }, { - "name": "scattering_asymmetry", + "name": "depth_bias", "type": "float", - "value": null + "value": 0.0 }, { - "name": "light_tint", - "type": "color", + "name": "depth_map", + "propertyType": "core::option::Option>", + "type": "class", "value": null }, { - "name": "light_intensity", + "name": "parallax_depth_scale", "type": "float", + "value": 0.10000000149011612 + }, + { + "name": "parallax_mapping_method", + "propertyType": "bevy_pbr::parallax::ParallaxMappingMethod", + "type": "class", "value": null + }, + { + "name": "max_parallax_layer_count", + "type": "float", + "value": 16.0 + }, + { + "name": "lightmap_exposure", + "type": "float", + "value": 1.0 + }, + { + "name": "opaque_render_method", + "propertyType": "bevy_pbr::material::OpaqueRendererMethod", + "type": "string", + "value": "Auto" + }, + { + "name": "deferred_lighting_pass_id", + "type": "int", + "value": 1 + }, + { + "name": "uv_transform", + "propertyType": "glam::Affine2", + "type": "class", + "value": { + "matrix2": { + "x_axis": { + "x": 1.0, + "y": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0 + } + }, + "translation": { + "x": 0.0, + "y": 0.0 + } + } } ] }, { - "id": 140, - "name": "bevy_pbr::volumetric_fog::VolumetricLight", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" + "id": 162, + "name": "bevy_pbr::pbr_material::UvChannel", + "type": "enum", + "storageType": "string", + "values": [ + "Uv0", + "Uv1" ], - "color": "#000000", - "drawFill": true, - "members": [] + "valuesAsFlags": false }, { - "id": 142, - "name": "bevy_render::camera::camera::MipBias", + "id": 286, + "name": "bevy_pbr::ssr::ScreenSpaceReflections", "type": "class", "useAs": [ "property", @@ -2437,15 +3120,40 @@ "drawFill": true, "members": [ { - "name": "0", + "name": "perceptual_roughness_threshold", "type": "float", - "value": 0.0 + "value": 0.10000000149011612 + }, + { + "name": "thickness", + "type": "float", + "value": 0.25 + }, + { + "name": "linear_steps", + "type": "int", + "value": 16 + }, + { + "name": "linear_march_exponent", + "type": "float", + "value": 1.0 + }, + { + "name": "bisection_steps", + "type": "int", + "value": 4 + }, + { + "name": "use_secant", + "type": "bool", + "value": true } ] }, { - "id": 89, - "name": "bevy_render::camera::camera::TemporalJitter", + "id": 94, + "name": "bevy_pbr::volumetric_fog::VolumetricFog", "type": "class", "useAs": [ "property", @@ -2458,19 +3166,30 @@ "drawFill": true, "members": [ { - "name": "offset", - "propertyType": "glam::Vec2", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0 - } + "name": "ambient_color", + "type": "color", + "value": "#ffffffff" + }, + { + "name": "ambient_intensity", + "type": "float", + "value": 0.10000000149011612 + }, + { + "name": "jitter", + "type": "float", + "value": 0.0 + }, + { + "name": "step_count", + "type": "int", + "value": 64 } ] }, { - "id": 149, - "name": "bevy_render::camera::clear_color::ClearColor", + "id": 62, + "name": "bevy_pbr::volumetric_fog::VolumetricLight", "type": "class", "useAs": [ "property", @@ -2481,17 +3200,11 @@ ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "0", - "type": "color", - "value": "#ff070606" - } - ] + "members": [] }, { - "id": 155, - "name": "bevy_render::camera::projection::OrthographicProjection", + "id": 255, + "name": "bevy_picking::PickingBehavior", "type": "class", "useAs": [ "property", @@ -2504,154 +3217,101 @@ "drawFill": true, "members": [ { - "name": "near", - "type": "float", - "value": 0.0 - }, - { - "name": "far", - "type": "float", - "value": 1000.0 - }, - { - "name": "viewport_origin", - "propertyType": "glam::Vec2", - "type": "class", - "value": { - "x": 0.5, - "y": 0.5 - } - }, - { - "name": "scaling_mode", - "propertyType": "bevy_render::camera::projection::ScalingMode", - "type": "class", - "value": null - }, - { - "name": "scale", - "type": "float", - "value": 1.0 + "name": "should_block_lower", + "type": "bool", + "value": true }, { - "name": "area", - "propertyType": "bevy_math::rects::rect::Rect", - "type": "class", - "value": { - "max": { - "x": 1.0, - "y": 1.0 - }, - "min": { - "x": -1.0, - "y": -1.0 - } - } + "name": "is_hoverable", + "type": "bool", + "value": true } ] }, { - "id": 164, - "name": "bevy_render::camera::projection::PerspectiveProjection", + "id": 41, + "name": "bevy_picking::PickingPlugin", "type": "class", "useAs": [ - "property", - "map", - "layer", - "object", - "tile" + "map" ], "color": "#000000", "drawFill": true, "members": [ { - "name": "fov", - "type": "float", - "value": 0.7853981852531433 - }, - { - "name": "aspect_ratio", - "type": "float", - "value": 1.0 + "name": "is_enabled", + "type": "bool", + "value": true }, { - "name": "near", - "type": "float", - "value": 0.10000000149011612 + "name": "is_input_enabled", + "type": "bool", + "value": true }, { - "name": "far", - "type": "float", - "value": 1000.0 + "name": "is_focus_enabled", + "type": "bool", + "value": true } ] }, { - "id": 68, - "name": "bevy_render::globals::GlobalsUniform", + "id": 246, + "name": "bevy_picking::backend::HitData", "type": "class", - "useAs": [ - "map" - ], + "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "time", - "type": "float", - "value": 0.0 + "name": "camera", + "type": "object", + "value": null }, { - "name": "delta_time", + "name": "depth", "type": "float", - "value": 0.0 + "value": null }, { - "name": "frame_count", - "type": "int", - "value": 0 + "name": "position", + "propertyType": "core::option::Option", + "type": "class", + "value": null + }, + { + "name": "normal", + "propertyType": "core::option::Option", + "type": "class", + "value": null } ] }, { - "id": 72, - "name": "bevy_render::primitives::Aabb", + "id": 312, + "name": "bevy_picking::input::PointerInputPlugin", "type": "class", "useAs": [ - "property", - "map", - "layer", - "object", - "tile" + "map" ], "color": "#000000", "drawFill": true, "members": [ { - "name": "center", - "propertyType": "glam::Vec3A", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "name": "is_touch_enabled", + "type": "bool", + "value": true }, { - "name": "half_extents", - "propertyType": "glam::Vec3A", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "name": "is_mouse_enabled", + "type": "bool", + "value": true } ] }, { - "id": 144, - "name": "bevy_render::primitives::CascadesFrusta", + "id": 177, + "name": "bevy_picking::pointer::PointerLocation", "type": "class", "useAs": [ "property", @@ -2665,8 +3325,8 @@ "members": [] }, { - "id": 159, - "name": "bevy_render::primitives::CubemapFrusta", + "id": 12, + "name": "bevy_picking::pointer::PointerPress", "type": "class", "useAs": [ "property", @@ -2677,11 +3337,27 @@ ], "color": "#000000", "drawFill": true, - "members": [] + "members": [ + { + "name": "primary", + "type": "bool", + "value": false + }, + { + "name": "secondary", + "type": "bool", + "value": false + }, + { + "name": "middle", + "type": "bool", + "value": false + } + ] }, { - "id": 25, - "name": "bevy_render::primitives::Frustum", + "id": 243, + "name": "bevy_render::camera::camera::Camera", "type": "class", "useAs": [ "property", @@ -2692,11 +3368,56 @@ ], "color": "#000000", "drawFill": true, - "members": [] + "members": [ + { + "name": "viewport", + "propertyType": "core::option::Option", + "type": "class", + "value": null + }, + { + "name": "order", + "type": "int", + "value": 0 + }, + { + "name": "is_active", + "type": "bool", + "value": true + }, + { + "name": "target", + "propertyType": "bevy_render::camera::camera::RenderTarget", + "type": "class", + "value": null + }, + { + "name": "hdr", + "type": "bool", + "value": false + }, + { + "name": "msaa_writeback", + "type": "bool", + "value": true + }, + { + "name": "clear_color", + "propertyType": "bevy_render::camera::clear_color::ClearColorConfig", + "type": "class", + "value": null + }, + { + "name": "sub_camera_view", + "propertyType": "core::option::Option", + "type": "class", + "value": null + } + ] }, { - "id": 104, - "name": "bevy_render::view::ColorGrading", + "id": 235, + "name": "bevy_render::camera::camera::MipBias", "type": "class", "useAs": [ "property", @@ -2709,107 +3430,173 @@ "drawFill": true, "members": [ { - "name": "global", - "propertyType": "bevy_render::view::ColorGradingGlobal", + "name": "0", + "type": "float", + "value": 0.0 + } + ] + }, + { + "id": 28, + "name": "bevy_render::camera::camera::SubCameraView", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "full_size", + "propertyType": "glam::UVec2", "type": "class", - "value": { - "exposure": 0.0, - "hue": 0.0, - "midtones_range": null, - "post_saturation": 1.0, - "temperature": 0.0, - "tint": 0.0 - } + "value": null }, { - "name": "shadows", - "propertyType": "bevy_render::view::ColorGradingSection", + "name": "offset", + "propertyType": "glam::Vec2", "type": "class", - "value": { - "contrast": 1.0, - "gain": 1.0, - "gamma": 1.0, - "lift": 0.0, - "saturation": 1.0 - } + "value": null }, { - "name": "midtones", - "propertyType": "bevy_render::view::ColorGradingSection", - "type": "class", - "value": { - "contrast": 1.0, - "gain": 1.0, - "gamma": 1.0, - "lift": 0.0, - "saturation": 1.0 - } - }, + "name": "size", + "propertyType": "glam::UVec2", + "type": "class", + "value": null + } + ] + }, + { + "id": 239, + "name": "bevy_render::camera::camera::TemporalJitter", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ { - "name": "highlights", - "propertyType": "bevy_render::view::ColorGradingSection", + "name": "offset", + "propertyType": "glam::Vec2", "type": "class", "value": { - "contrast": 1.0, - "gain": 1.0, - "gamma": 1.0, - "lift": 0.0, - "saturation": 1.0 + "x": 0.0, + "y": 0.0 } } ] }, { - "id": 158, - "name": "bevy_render::view::ColorGradingSection", + "id": 20, + "name": "bevy_render::camera::clear_color::ClearColor", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "saturation", - "type": "float", - "value": null - }, + "name": "0", + "type": "color", + "value": "#ff070606" + } + ] + }, + { + "id": 37, + "name": "bevy_render::camera::manual_texture_view::ManualTextureViewHandle", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ { - "name": "contrast", + "name": "0", + "type": "int", + "value": 0 + } + ] + }, + { + "id": 224, + "name": "bevy_render::camera::projection::PerspectiveProjection", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "fov", "type": "float", - "value": null + "value": 0.7853981852531433 }, { - "name": "gamma", + "name": "aspect_ratio", "type": "float", - "value": null + "value": 1.0 }, { - "name": "gain", + "name": "near", "type": "float", - "value": null + "value": 0.10000000149011612 }, { - "name": "lift", + "name": "far", "type": "float", - "value": null + "value": 1000.0 } ] }, { - "id": 268, - "name": "bevy_render::view::Msaa", - "type": "enum", - "storageType": "string", - "values": [ - "Off", - "Sample2", - "Sample4", - "Sample8" + "id": 74, + "name": "bevy_render::globals::GlobalsUniform", + "type": "class", + "useAs": [ + "map" ], - "valuesAsFlags": false + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "time", + "type": "float", + "value": 0.0 + }, + { + "name": "delta_time", + "type": "float", + "value": 0.0 + }, + { + "name": "frame_count", + "type": "int", + "value": 0 + } + ] }, { - "id": 275, - "name": "bevy_render::view::visibility::InheritedVisibility", + "id": 188, + "name": "bevy_render::mesh::components::Mesh2d", "type": "class", "useAs": [ "property", @@ -2823,14 +3610,14 @@ "members": [ { "name": "0", - "type": "bool", - "value": false + "type": "file", + "value": null } ] }, { - "id": 210, - "name": "bevy_render::view::visibility::NoFrustumCulling", + "id": 280, + "name": "bevy_render::mesh::components::Mesh3d", "type": "class", "useAs": [ "property", @@ -2841,11 +3628,17 @@ ], "color": "#000000", "drawFill": true, - "members": [] + "members": [ + { + "name": "0", + "type": "file", + "value": null + } + ] }, { - "id": 209, - "name": "bevy_render::view::visibility::ViewVisibility", + "id": 193, + "name": "bevy_render::primitives::Aabb", "type": "class", "useAs": [ "property", @@ -2858,27 +3651,30 @@ "drawFill": true, "members": [ { - "name": "0", - "type": "bool", - "value": false + "name": "center", + "propertyType": "glam::Vec3A", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + { + "name": "half_extents", + "propertyType": "glam::Vec3A", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } } ] }, { - "id": 17, - "name": "bevy_render::view::visibility::Visibility", - "type": "enum", - "storageType": "string", - "values": [ - "Inherited", - "Hidden", - "Visible" - ], - "valuesAsFlags": false - }, - { - "id": 54, - "name": "bevy_render::view::visibility::VisibleEntities", + "id": 73, + "name": "bevy_render::primitives::CascadesFrusta", "type": "class", "useAs": [ "property", @@ -2892,8 +3688,8 @@ "members": [] }, { - "id": 6, - "name": "bevy_sprite::SpriteSource", + "id": 125, + "name": "bevy_render::primitives::CubemapFrusta", "type": "class", "useAs": [ "property", @@ -2907,29 +3703,23 @@ "members": [] }, { - "id": 215, - "name": "bevy_sprite::mesh2d::color_material::ColorMaterial", + "id": 259, + "name": "bevy_render::primitives::Frustum", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "color", - "type": "color", - "value": "#ffffffff" - }, - { - "name": "texture", - "propertyType": "core::option::Option>", - "type": "class", - "value": null - } - ] + "members": [] }, { - "id": 19, - "name": "bevy_sprite::mesh2d::mesh::Mesh2dHandle", + "id": 65, + "name": "bevy_render::sync_world::SyncToRenderWorld", "type": "class", "useAs": [ "property", @@ -2940,17 +3730,11 @@ ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "0", - "type": "file", - "value": null - } - ] + "members": [] }, { - "id": 271, - "name": "bevy_sprite::sprite::Sprite", + "id": 297, + "name": "bevy_render::view::ColorGrading", "type": "class", "useAs": [ "property", @@ -2963,156 +3747,143 @@ "drawFill": true, "members": [ { - "name": "color", - "type": "color", - "value": "#ffffffff" + "name": "global", + "propertyType": "bevy_render::view::ColorGradingGlobal", + "type": "class", + "value": { + "exposure": 0.0, + "hue": 0.0, + "midtones_range": null, + "post_saturation": 1.0, + "temperature": 0.0, + "tint": 0.0 + } }, { - "name": "flip_x", - "type": "bool", - "value": false - }, - { - "name": "flip_y", - "type": "bool", - "value": false - }, - { - "name": "custom_size", - "propertyType": "core::option::Option", + "name": "shadows", + "propertyType": "bevy_render::view::ColorGradingSection", "type": "class", - "value": null + "value": { + "contrast": 1.0, + "gain": 1.0, + "gamma": 1.0, + "lift": 0.0, + "saturation": 1.0 + } }, { - "name": "rect", - "propertyType": "core::option::Option", + "name": "midtones", + "propertyType": "bevy_render::view::ColorGradingSection", "type": "class", - "value": null + "value": { + "contrast": 1.0, + "gain": 1.0, + "gamma": 1.0, + "lift": 0.0, + "saturation": 1.0 + } }, { - "name": "anchor", - "propertyType": "bevy_sprite::sprite::Anchor", + "name": "highlights", + "propertyType": "bevy_render::view::ColorGradingSection", "type": "class", - "value": null + "value": { + "contrast": 1.0, + "gain": 1.0, + "gamma": 1.0, + "lift": 0.0, + "saturation": 1.0 + } } ] }, { - "id": 264, - "name": "bevy_sprite::texture_atlas::TextureAtlas", + "id": 34, + "name": "bevy_render::view::ColorGradingSection", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "layout", - "type": "file", + "name": "saturation", + "type": "float", "value": null }, { - "name": "index", - "type": "int", - "value": null - } - ] - }, - { - "id": 219, - "name": "bevy_sprite::texture_slice::border_rect::BorderRect", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "left", + "name": "contrast", "type": "float", "value": null }, { - "name": "right", + "name": "gamma", "type": "float", "value": null }, { - "name": "top", + "name": "gain", "type": "float", "value": null }, { - "name": "bottom", + "name": "lift", "type": "float", "value": null } ] }, { - "id": 111, - "name": "bevy_text::font_atlas_set::GlyphAtlasInfo", + "id": 174, + "name": "bevy_render::view::Msaa", + "type": "enum", + "storageType": "string", + "values": [ + "Off", + "Sample2", + "Sample4", + "Sample8" + ], + "valuesAsFlags": false + }, + { + "id": 113, + "name": "bevy_render::view::visibility::InheritedVisibility", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "texture_atlas", - "type": "file", - "value": null - }, - { - "name": "texture", - "type": "file", - "value": null - }, - { - "name": "glyph_index", - "type": "int", - "value": null + "name": "0", + "type": "bool", + "value": false } ] }, { - "id": 35, - "name": "bevy_text::glyph_brush::PositionedGlyph", + "id": 120, + "name": "bevy_render::view::visibility::NoFrustumCulling", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "position", - "propertyType": "glam::Vec2", - "type": "class", - "value": null - }, - { - "name": "size", - "propertyType": "glam::Vec2", - "type": "class", - "value": null - }, - { - "name": "atlas_info", - "propertyType": "bevy_text::font_atlas_set::GlyphAtlasInfo", - "type": "class", - "value": null - }, - { - "name": "section_index", - "type": "int", - "value": null - }, - { - "name": "byte_index", - "type": "int", - "value": null - } - ] + "members": [] }, { - "id": 276, - "name": "bevy_text::text2d::Text2dBounds", + "id": 60, + "name": "bevy_render::view::visibility::ViewVisibility", "type": "class", "useAs": [ "property", @@ -3125,97 +3896,121 @@ "drawFill": true, "members": [ { - "name": "size", - "propertyType": "glam::Vec2", - "type": "class", - "value": null + "name": "0", + "type": "bool", + "value": false } ] }, { - "id": 176, - "name": "bevy_text::text::BreakLineOn", + "id": 150, + "name": "bevy_render::view::visibility::Visibility", "type": "enum", "storageType": "string", "values": [ - "WordBoundary", - "AnyCharacter", - "NoWrap" + "Inherited", + "Hidden", + "Visible" ], "valuesAsFlags": false }, { - "id": 100, - "name": "bevy_text::text::JustifyText", - "type": "enum", - "storageType": "string", - "values": [ - "Left", - "Center", - "Right" + "id": 93, + "name": "bevy_render::view::visibility::VisibleEntities", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" ], - "valuesAsFlags": false + "color": "#000000", + "drawFill": true, + "members": [] }, { - "id": 166, - "name": "bevy_text::text::TextSection", + "id": 199, + "name": "bevy_render::view::window::screenshot::Screenshot", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "value", - "type": "string", - "value": null - }, - { - "name": "style", - "propertyType": "bevy_text::text::TextStyle", + "name": "0", + "propertyType": "bevy_render::camera::camera::RenderTarget", "type": "class", "value": null } ] }, { - "id": 32, - "name": "bevy_text::text::TextStyle", + "id": 289, + "name": "bevy_scene::components::DynamicSceneRoot", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "font", + "name": "0", "type": "file", "value": null - }, - { - "name": "font_size", - "type": "float", - "value": null - }, + } + ] + }, + { + "id": 275, + "name": "bevy_scene::components::SceneRoot", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [ { - "name": "color", - "type": "color", + "name": "0", + "type": "file", "value": null } ] }, { - "id": 126, - "name": "bevy_time::timer::TimerMode", - "type": "enum", - "storageType": "string", - "values": [ - "Once", - "Repeating" + "id": 106, + "name": "bevy_sprite::SpriteSource", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" ], - "valuesAsFlags": false + "color": "#000000", + "drawFill": true, + "members": [] }, { - "id": 40, - "name": "bevy_transform::components::global_transform::GlobalTransform", + "id": 144, + "name": "bevy_sprite::mesh2d::material::MeshMaterial2d", "type": "class", "useAs": [ "property", @@ -3229,38 +4024,97 @@ "members": [ { "name": "0", - "propertyType": "glam::Affine3A", + "type": "file", + "value": null + } + ] + }, + { + "id": 87, + "name": "bevy_sprite::texture_atlas::TextureAtlas", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "layout", + "type": "file", + "value": null + }, + { + "name": "index", + "type": "int", + "value": 0 + } + ] + }, + { + "id": 170, + "name": "bevy_sprite::texture_slice::border_rect::BorderRect", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "left", + "type": "float", + "value": null + }, + { + "name": "right", + "type": "float", + "value": null + }, + { + "name": "top", + "type": "float", + "value": null + }, + { + "name": "bottom", + "type": "float", + "value": null + } + ] + }, + { + "id": 284, + "name": "bevy_sprite::texture_slice::slicer::TextureSlicer", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "border", + "propertyType": "bevy_sprite::texture_slice::border_rect::BorderRect", "type": "class", - "value": { - "matrix3": { - "x_axis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "y_axis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "z_axis": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } - }, - "translation": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } - } + "value": null + }, + { + "name": "center_scale_mode", + "propertyType": "bevy_sprite::texture_slice::slicer::SliceScaleMode", + "type": "class", + "value": null + }, + { + "name": "sides_scale_mode", + "propertyType": "bevy_sprite::texture_slice::slicer::SliceScaleMode", + "type": "class", + "value": null + }, + { + "name": "max_corner_scale", + "type": "float", + "value": null } ] }, { - "id": 220, - "name": "bevy_transform::components::transform::Transform", + "id": 217, + "name": "bevy_text::bounds::TextBounds", "type": "class", "useAs": [ "property", @@ -3273,41 +4127,107 @@ "drawFill": true, "members": [ { - "name": "translation", - "propertyType": "glam::Vec3", + "name": "width", + "propertyType": "core::option::Option", "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "value": null }, { - "name": "rotation", - "propertyType": "glam::Quat", + "name": "height", + "propertyType": "core::option::Option", "type": "class", - "value": { - "w": 1.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "value": null + } + ] + }, + { + "id": 121, + "name": "bevy_text::glyph::GlyphAtlasInfo", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "texture", + "type": "file", + "value": null }, { - "name": "scale", - "propertyType": "glam::Vec3", + "name": "texture_atlas", + "type": "file", + "value": null + }, + { + "name": "location", + "propertyType": "bevy_text::glyph::GlyphAtlasLocation", "type": "class", - "value": { - "x": 1.0, - "y": 1.0, - "z": 1.0 - } + "value": null } ] }, { - "id": 261, - "name": "bevy_ui::UiScale", + "id": 197, + "name": "bevy_text::glyph::GlyphAtlasLocation", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "glyph_index", + "type": "int", + "value": null + }, + { + "name": "offset", + "propertyType": "glam::IVec2", + "type": "class", + "value": null + } + ] + }, + { + "id": 304, + "name": "bevy_text::glyph::PositionedGlyph", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "position", + "propertyType": "glam::Vec2", + "type": "class", + "value": null + }, + { + "name": "size", + "propertyType": "glam::Vec2", + "type": "class", + "value": null + }, + { + "name": "atlas_info", + "propertyType": "bevy_text::glyph::GlyphAtlasInfo", + "type": "class", + "value": null + }, + { + "name": "span_index", + "type": "int", + "value": null + }, + { + "name": "byte_index", + "type": "int", + "value": null + } + ] + }, + { + "id": 137, + "name": "bevy_text::text2d::Text2d", "type": "class", "useAs": [ "property", @@ -3321,37 +4241,25 @@ "members": [ { "name": "0", - "type": "float", - "value": null + "type": "string", + "value": "" } ] }, { - "id": 197, - "name": "bevy_ui::focus::FocusPolicy", - "type": "enum", - "storageType": "string", - "values": [ - "Block", - "Pass" - ], - "valuesAsFlags": false - }, - { - "id": 211, - "name": "bevy_ui::focus::Interaction", + "id": 167, + "name": "bevy_text::text::FontSmoothing", "type": "enum", "storageType": "string", "values": [ - "Pressed", - "Hovered", - "None" + "None", + "AntiAliased" ], "valuesAsFlags": false }, { - "id": 119, - "name": "bevy_ui::focus::RelativeCursorPosition", + "id": 112, + "name": "bevy_text::text::TextColor", "type": "class", "useAs": [ "property", @@ -3364,31 +4272,15 @@ "drawFill": true, "members": [ { - "name": "normalized_visible_node_rect", - "propertyType": "bevy_math::rects::rect::Rect", - "type": "class", - "value": { - "max": { - "x": 0.0, - "y": 0.0 - }, - "min": { - "x": 0.0, - "y": 0.0 - } - } - }, - { - "name": "normalized", - "propertyType": "core::option::Option", - "type": "class", - "value": null + "name": "0", + "type": "color", + "value": "#ffffffff" } ] }, { - "id": 110, - "name": "bevy_ui::measurement::ContentSize", + "id": 143, + "name": "bevy_text::text::TextFont", "type": "class", "useAs": [ "property", @@ -3399,64 +4291,60 @@ ], "color": "#000000", "drawFill": true, - "members": [] - }, - { - "id": 27, - "name": "bevy_ui::ui_node::AlignContent", - "type": "enum", - "storageType": "string", - "values": [ - "Default", - "Start", - "End", - "FlexStart", - "FlexEnd", - "Center", - "Stretch", - "SpaceBetween", - "SpaceEvenly", - "SpaceAround" - ], - "valuesAsFlags": false + "members": [ + { + "name": "font", + "type": "file", + "value": null + }, + { + "name": "font_size", + "type": "float", + "value": 20.0 + }, + { + "name": "font_smoothing", + "propertyType": "bevy_text::text::FontSmoothing", + "type": "string", + "value": "AntiAliased" + } + ] }, { - "id": 163, - "name": "bevy_ui::ui_node::AlignItems", - "type": "enum", - "storageType": "string", - "values": [ - "Default", - "Start", - "End", - "FlexStart", - "FlexEnd", - "Center", - "Baseline", - "Stretch" + "id": 175, + "name": "bevy_text::text::TextSpan", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" ], - "valuesAsFlags": false + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "0", + "type": "string", + "value": "" + } + ] }, { - "id": 225, - "name": "bevy_ui::ui_node::AlignSelf", + "id": 1, + "name": "bevy_time::timer::TimerMode", "type": "enum", "storageType": "string", "values": [ - "Auto", - "Start", - "End", - "FlexStart", - "FlexEnd", - "Center", - "Baseline", - "Stretch" + "Once", + "Repeating" ], "valuesAsFlags": false }, { - "id": 229, - "name": "bevy_ui::ui_node::BackgroundColor", + "id": 56, + "name": "bevy_transform::components::global_transform::GlobalTransform", "type": "class", "useAs": [ "property", @@ -3470,14 +4358,38 @@ "members": [ { "name": "0", - "type": "color", - "value": "#00000000" + "propertyType": "glam::Affine3A", + "type": "class", + "value": { + "matrix3": { + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "z_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + } + }, + "translation": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + } } ] }, { - "id": 135, - "name": "bevy_ui::ui_node::BorderColor", + "id": 241, + "name": "bevy_transform::components::transform::Transform", "type": "class", "useAs": [ "property", @@ -3490,15 +4402,41 @@ "drawFill": true, "members": [ { - "name": "0", - "type": "color", - "value": "#00000000" + "name": "translation", + "propertyType": "glam::Vec3", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + { + "name": "rotation", + "propertyType": "glam::Quat", + "type": "class", + "value": { + "w": 1.0, + "x": 0.0, + "y": 0.0, + "z": 0.0 + } + }, + { + "name": "scale", + "propertyType": "glam::Vec3", + "type": "class", + "value": { + "x": 1.0, + "y": 1.0, + "z": 1.0 + } } ] }, { - "id": 222, - "name": "bevy_ui::ui_node::CalculatedClip", + "id": 11, + "name": "bevy_ui::UiScale", "type": "class", "useAs": [ "property", @@ -3511,116 +4449,124 @@ "drawFill": true, "members": [ { - "name": "clip", - "propertyType": "bevy_math::rects::rect::Rect", - "type": "class", - "value": { - "max": { - "x": 0.0, - "y": 0.0 - }, - "min": { - "x": 0.0, - "y": 0.0 - } - } + "name": "0", + "type": "float", + "value": 1.0 } ] }, { - "id": 188, - "name": "bevy_ui::ui_node::Direction", - "type": "enum", - "storageType": "string", - "values": [ - "Inherit", - "LeftToRight", - "RightToLeft" - ], - "valuesAsFlags": false - }, - { - "id": 123, - "name": "bevy_ui::ui_node::Display", + "id": 168, + "name": "bevy_ui::focus::FocusPolicy", "type": "enum", "storageType": "string", "values": [ - "Flex", - "Grid", "Block", - "None" - ], - "valuesAsFlags": false - }, - { - "id": 28, - "name": "bevy_ui::ui_node::FlexDirection", - "type": "enum", - "storageType": "string", - "values": [ - "Row", - "Column", - "RowReverse", - "ColumnReverse" + "Pass" ], "valuesAsFlags": false }, { - "id": 44, - "name": "bevy_ui::ui_node::FlexWrap", + "id": 67, + "name": "bevy_ui::focus::Interaction", "type": "enum", "storageType": "string", "values": [ - "NoWrap", - "Wrap", - "WrapReverse" + "Pressed", + "Hovered", + "None" ], "valuesAsFlags": false }, { - "id": 65, - "name": "bevy_ui::ui_node::GridAutoFlow", - "type": "enum", - "storageType": "string", - "values": [ - "Row", - "Column", - "RowDense", - "ColumnDense" + "id": 149, + "name": "bevy_ui::focus::RelativeCursorPosition", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" ], - "valuesAsFlags": false + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "normalized_visible_node_rect", + "propertyType": "bevy_math::rects::rect::Rect", + "type": "class", + "value": { + "max": { + "x": 0.0, + "y": 0.0 + }, + "min": { + "x": 0.0, + "y": 0.0 + } + } + }, + { + "name": "normalized", + "propertyType": "core::option::Option", + "type": "class", + "value": null + } + ] }, { - "id": 284, - "name": "bevy_ui::ui_node::GridPlacement", + "id": 123, + "name": "bevy_ui::geometry::UiRect", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "start", - "propertyType": "core::option::Option", + "name": "left", + "propertyType": "bevy_ui::geometry::Val", "type": "class", "value": null }, { - "name": "span", - "propertyType": "core::option::Option", + "name": "right", + "propertyType": "bevy_ui::geometry::Val", "type": "class", "value": null }, { - "name": "end", - "propertyType": "core::option::Option", + "name": "top", + "propertyType": "bevy_ui::geometry::Val", "type": "class", "value": null - } - ] - }, + }, + { + "name": "bottom", + "propertyType": "bevy_ui::geometry::Val", + "type": "class", + "value": null + } + ] + }, { - "id": 170, - "name": "bevy_ui::ui_node::JustifyContent", + "id": 296, + "name": "bevy_ui::measurement::ContentSize", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [] + }, + { + "id": 32, + "name": "bevy_ui::ui_node::AlignContent", "type": "enum", "storageType": "string", "values": [ @@ -3638,14 +4584,16 @@ "valuesAsFlags": false }, { - "id": 125, - "name": "bevy_ui::ui_node::JustifyItems", + "id": 68, + "name": "bevy_ui::ui_node::AlignItems", "type": "enum", "storageType": "string", "values": [ "Default", "Start", "End", + "FlexStart", + "FlexEnd", "Center", "Baseline", "Stretch" @@ -3653,14 +4601,16 @@ "valuesAsFlags": false }, { - "id": 94, - "name": "bevy_ui::ui_node::JustifySelf", + "id": 206, + "name": "bevy_ui::ui_node::AlignSelf", "type": "enum", "storageType": "string", "values": [ "Auto", "Start", "End", + "FlexStart", + "FlexEnd", "Center", "Baseline", "Stretch" @@ -3668,8 +4618,8 @@ "valuesAsFlags": false }, { - "id": 226, - "name": "bevy_ui::ui_node::Node", + "id": 244, + "name": "bevy_ui::ui_node::BackgroundColor", "type": "class", "useAs": [ "property", @@ -3682,129 +4632,15 @@ "drawFill": true, "members": [ { - "name": "stack_index", - "type": "int", - "value": 0 - }, - { - "name": "calculated_size", - "propertyType": "glam::Vec2", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0 - } - }, - { - "name": "outline_width", - "type": "float", - "value": 0.0 - }, - { - "name": "outline_offset", - "type": "float", - "value": 0.0 - }, - { - "name": "unrounded_size", - "propertyType": "glam::Vec2", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0 - } - }, - { - "name": "border_radius", - "propertyType": "bevy_ui::ui_node::ResolvedBorderRadius", - "type": "class", - "value": { - "bottom_left": 0.0, - "bottom_right": 0.0, - "top_left": 0.0, - "top_right": 0.0 - } - } - ] - }, - { - "id": 38, - "name": "bevy_ui::ui_node::Overflow", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "x", - "propertyType": "bevy_ui::ui_node::OverflowAxis", - "type": "string", - "value": "Visible" - }, - { - "name": "y", - "propertyType": "bevy_ui::ui_node::OverflowAxis", - "type": "string", - "value": "Visible" - } - ] - }, - { - "id": 212, - "name": "bevy_ui::ui_node::OverflowAxis", - "type": "enum", - "storageType": "string", - "values": [ - "Visible", - "Clip", - "Hidden" - ], - "valuesAsFlags": false - }, - { - "id": 34, - "name": "bevy_ui::ui_node::PositionType", - "type": "enum", - "storageType": "string", - "values": [ - "Relative", - "Absolute" - ], - "valuesAsFlags": false - }, - { - "id": 66, - "name": "bevy_ui::ui_node::ResolvedBorderRadius", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "top_left", - "type": "float", - "value": null - }, - { - "name": "top_right", - "type": "float", - "value": null - }, - { - "name": "bottom_left", - "type": "float", - "value": null - }, - { - "name": "bottom_right", - "type": "float", - "value": null + "name": "0", + "type": "color", + "value": "#00000000" } ] }, { - "id": 251, - "name": "bevy_ui::ui_node::TargetCamera", + "id": 290, + "name": "bevy_ui::ui_node::BorderColor", "type": "class", "useAs": [ "property", @@ -3818,14 +4654,14 @@ "members": [ { "name": "0", - "type": "object", - "value": null + "type": "color", + "value": "#00000000" } ] }, { - "id": 180, - "name": "bevy_ui::ui_node::UiImage", + "id": 189, + "name": "bevy_ui::ui_node::BorderRadius", "type": "class", "useAs": [ "property", @@ -3838,45 +4674,34 @@ "drawFill": true, "members": [ { - "name": "color", - "type": "color", - "value": "#ffffffff" + "name": "top_left", + "propertyType": "bevy_ui::geometry::Val", + "type": "class", + "value": null }, { - "name": "texture", - "type": "file", + "name": "top_right", + "propertyType": "bevy_ui::geometry::Val", + "type": "class", "value": null }, { - "name": "flip_x", - "type": "bool", - "value": false + "name": "bottom_left", + "propertyType": "bevy_ui::geometry::Val", + "type": "class", + "value": null }, { - "name": "flip_y", - "type": "bool", - "value": false + "name": "bottom_right", + "propertyType": "bevy_ui::geometry::Val", + "type": "class", + "value": null } ] }, { - "id": 8, - "name": "bevy_ui::widget::button::Button", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], - "color": "#000000", - "drawFill": true, - "members": [] - }, - { - "id": 71, - "name": "bevy_ui::widget::image::UiImageSize", + "id": 114, + "name": "bevy_ui::ui_node::CalculatedClip", "type": "class", "useAs": [ "property", @@ -3889,34 +4714,25 @@ "drawFill": true, "members": [ { - "name": "size", - "propertyType": "glam::UVec2", + "name": "clip", + "propertyType": "bevy_math::rects::rect::Rect", "type": "class", "value": { - "x": 0, - "y": 0 + "max": { + "x": 0.0, + "y": 0.0 + }, + "min": { + "x": 0.0, + "y": 0.0 + } } } ] }, { - "id": 177, - "name": "bevy_ui::widget::label::Label", - "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], - "color": "#000000", - "drawFill": true, - "members": [] - }, - { - "id": 124, - "name": "bevy_ui::widget::text::TextFlags", + "id": 108, + "name": "bevy_ui::ui_node::ComputedNode", "type": "class", "useAs": [ "property", @@ -3929,1031 +4745,1132 @@ "drawFill": true, "members": [ { - "name": "needs_new_measure_func", - "type": "bool", - "value": true + "name": "stack_index", + "type": "int", + "value": 0 }, { - "name": "needs_recompute", - "type": "bool", - "value": true - } - ] - }, - { - "id": 147, - "name": "bevy_window::cursor::CursorIcon", - "type": "enum", - "storageType": "string", - "values": [ - "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" + "name": "size", + "propertyType": "glam::Vec2", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0 + } + }, + { + "name": "outline_width", + "type": "float", + "value": 0.0 + }, + { + "name": "outline_offset", + "type": "float", + "value": 0.0 + }, + { + "name": "unrounded_size", + "propertyType": "glam::Vec2", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0 + } + }, + { + "name": "border", + "propertyType": "bevy_sprite::texture_slice::border_rect::BorderRect", + "type": "class", + "value": { + "bottom": 0.0, + "left": 0.0, + "right": 0.0, + "top": 0.0 + } + }, + { + "name": "border_radius", + "propertyType": "bevy_ui::ui_node::ResolvedBorderRadius", + "type": "class", + "value": { + "bottom_left": 0.0, + "bottom_right": 0.0, + "top_left": 0.0, + "top_right": 0.0 + } + }, + { + "name": "padding", + "propertyType": "bevy_sprite::texture_slice::border_rect::BorderRect", + "type": "class", + "value": { + "bottom": 0.0, + "left": 0.0, + "right": 0.0, + "top": 0.0 + } + } + ] + }, + { + "id": 233, + "name": "bevy_ui::ui_node::Display", + "type": "enum", + "storageType": "string", + "values": [ + "Flex", + "Grid", + "Block", + "None" ], "valuesAsFlags": false }, { - "id": 77, - "name": "bevy_window::event::AppLifecycle", + "id": 173, + "name": "bevy_ui::ui_node::FlexDirection", "type": "enum", "storageType": "string", "values": [ - "Idle", - "Running", - "WillSuspend", - "Suspended", - "WillResume" + "Row", + "Column", + "RowReverse", + "ColumnReverse" ], "valuesAsFlags": false }, { - "id": 64, - "name": "bevy_window::event::CursorEntered", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "window", - "type": "object", - "value": null - } - ] + "id": 99, + "name": "bevy_ui::ui_node::FlexWrap", + "type": "enum", + "storageType": "string", + "values": [ + "NoWrap", + "Wrap", + "WrapReverse" + ], + "valuesAsFlags": false }, { - "id": 198, - "name": "bevy_window::event::CursorLeft", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "window", - "type": "object", - "value": null - } - ] + "id": 8, + "name": "bevy_ui::ui_node::GridAutoFlow", + "type": "enum", + "storageType": "string", + "values": [ + "Row", + "Column", + "RowDense", + "ColumnDense" + ], + "valuesAsFlags": false }, { - "id": 230, - "name": "bevy_window::event::CursorMoved", + "id": 251, + "name": "bevy_ui::ui_node::JustifyContent", + "type": "enum", + "storageType": "string", + "values": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "valuesAsFlags": false + }, + { + "id": 250, + "name": "bevy_ui::ui_node::JustifyItems", + "type": "enum", + "storageType": "string", + "values": [ + "Default", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "valuesAsFlags": false + }, + { + "id": 287, + "name": "bevy_ui::ui_node::JustifySelf", + "type": "enum", + "storageType": "string", + "values": [ + "Auto", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "valuesAsFlags": false + }, + { + "id": 201, + "name": "bevy_ui::ui_node::Outline", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", + "name": "width", + "propertyType": "bevy_ui::geometry::Val", + "type": "class", "value": null }, { - "name": "position", - "propertyType": "glam::Vec2", + "name": "offset", + "propertyType": "bevy_ui::geometry::Val", "type": "class", "value": null }, { - "name": "delta", - "propertyType": "core::option::Option", - "type": "class", - "value": null + "name": "color", + "type": "color", + "value": "#ffffffff" } ] }, { - "id": 92, - "name": "bevy_window::event::RequestRedraw", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [] - }, - { - "id": 172, - "name": "bevy_window::event::WindowBackendScaleFactorChanged", + "id": 101, + "name": "bevy_ui::ui_node::Overflow", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null + "name": "x", + "propertyType": "bevy_ui::ui_node::OverflowAxis", + "type": "string", + "value": "Visible" }, { - "name": "scale_factor", - "type": "float", - "value": null + "name": "y", + "propertyType": "bevy_ui::ui_node::OverflowAxis", + "type": "string", + "value": "Visible" } ] }, { - "id": 173, - "name": "bevy_window::event::WindowCloseRequested", + "id": 209, + "name": "bevy_ui::ui_node::OverflowAxis", + "type": "enum", + "storageType": "string", + "values": [ + "Visible", + "Clip", + "Hidden", + "Scroll" + ], + "valuesAsFlags": false + }, + { + "id": 266, + "name": "bevy_ui::ui_node::OverflowClipBox", + "type": "enum", + "storageType": "string", + "values": [ + "ContentBox", + "PaddingBox", + "BorderBox" + ], + "valuesAsFlags": false + }, + { + "id": 279, + "name": "bevy_ui::ui_node::OverflowClipMargin", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null + "name": "visual_box", + "propertyType": "bevy_ui::ui_node::OverflowClipBox", + "type": "string", + "value": "ContentBox" + }, + { + "name": "margin", + "type": "float", + "value": 0.0 } ] }, { - "id": 236, - "name": "bevy_window::event::WindowClosed", + "id": 111, + "name": "bevy_ui::ui_node::PositionType", + "type": "enum", + "storageType": "string", + "values": [ + "Relative", + "Absolute" + ], + "valuesAsFlags": false + }, + { + "id": 21, + "name": "bevy_ui::ui_node::ResolvedBorderRadius", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", + "name": "top_left", + "type": "float", + "value": null + }, + { + "name": "top_right", + "type": "float", + "value": null + }, + { + "name": "bottom_left", + "type": "float", + "value": null + }, + { + "name": "bottom_right", + "type": "float", "value": null } ] }, { - "id": 105, - "name": "bevy_window::event::WindowClosing", + "id": 298, + "name": "bevy_ui::ui_node::ScrollPosition", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null + "name": "offset_x", + "type": "float", + "value": 0.0 + }, + { + "name": "offset_y", + "type": "float", + "value": 0.0 } ] }, { - "id": 33, - "name": "bevy_window::event::WindowCreated", + "id": 169, + "name": "bevy_ui::ui_node::TargetCamera", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", + "name": "0", "type": "object", "value": null } ] }, { - "id": 255, - "name": "bevy_window::event::WindowFocused", + "id": 116, + "name": "bevy_ui::ui_node::UiAntiAlias", + "type": "enum", + "storageType": "string", + "values": [ + "On", + "Off" + ], + "valuesAsFlags": false + }, + { + "id": 186, + "name": "bevy_ui::ui_node::UiBoxShadowSamples", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null - }, - { - "name": "focused", - "type": "bool", + "name": "0", + "type": "int", "value": null } ] }, { - "id": 16, - "name": "bevy_window::event::WindowMoved", + "id": 268, + "name": "bevy_ui::ui_node::ZIndex", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null - }, - { - "name": "position", - "propertyType": "glam::IVec2", - "type": "class", - "value": null + "name": "0", + "type": "int", + "value": 0 } ] }, { - "id": 101, - "name": "bevy_window::event::WindowOccluded", + "id": 314, + "name": "bevy_ui::widget::button::Button", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "window", - "type": "object", - "value": null - }, - { - "name": "occluded", - "type": "bool", - "value": null - } - ] + "members": [] }, { - "id": 137, - "name": "bevy_window::event::WindowResized", + "id": 315, + "name": "bevy_ui::widget::image::UiImageSize", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null - }, - { - "name": "width", - "type": "float", - "value": null - }, - { - "name": "height", - "type": "float", - "value": null + "name": "size", + "propertyType": "glam::UVec2", + "type": "class", + "value": { + "x": 0, + "y": 0 + } } ] }, { - "id": 281, - "name": "bevy_window::event::WindowScaleFactorChanged", + "id": 25, + "name": "bevy_ui::widget::label::Label", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, - "members": [ - { - "name": "window", - "type": "object", - "value": null - }, - { - "name": "scale_factor", - "type": "float", - "value": null - } - ] + "members": [] }, { - "id": 73, - "name": "bevy_window::event::WindowThemeChanged", + "id": 185, + "name": "bevy_ui::widget::text::Text", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "window", - "type": "object", - "value": null - }, - { - "name": "theme", - "propertyType": "bevy_window::window::WindowTheme", + "name": "0", "type": "string", - "value": null + "value": "" } ] }, { - "id": 20, - "name": "bevy_window::window::CompositeAlphaMode", - "type": "enum", - "storageType": "string", - "values": [ - "Auto", - "Opaque", - "PreMultiplied", - "PostMultiplied", - "Inherit" - ], - "valuesAsFlags": false - }, - { - "id": 5, - "name": "bevy_window::window::Cursor", + "id": 76, + "name": "bevy_ui::widget::text::TextNodeFlags", "type": "class", - "useAs": [], + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], "color": "#000000", "drawFill": true, "members": [ { - "name": "icon", - "propertyType": "bevy_window::cursor::CursorIcon", - "type": "string", - "value": "Default" - }, - { - "name": "visible", + "name": "needs_measure_fn", "type": "bool", "value": true }, { - "name": "grab_mode", - "propertyType": "bevy_window::window::CursorGrabMode", - "type": "string", - "value": "None" - }, - { - "name": "hit_test", + "name": "needs_recompute", "type": "bool", "value": true } ] }, { - "id": 192, - "name": "bevy_window::window::CursorGrabMode", + "id": 95, + "name": "bevy_window::event::AppLifecycle", "type": "enum", "storageType": "string", "values": [ - "None", - "Confined", - "Locked" + "Idle", + "Running", + "WillSuspend", + "Suspended", + "WillResume" ], "valuesAsFlags": false }, { - "id": 242, - "name": "bevy_window::window::EnabledButtons", + "id": 44, + "name": "bevy_window::event::CursorEntered", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "minimize", - "type": "bool", - "value": true - }, - { - "name": "maximize", - "type": "bool", - "value": true - }, + "name": "window", + "type": "object", + "value": null + } + ] + }, + { + "id": 80, + "name": "bevy_window::event::CursorLeft", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ { - "name": "close", - "type": "bool", - "value": true + "name": "window", + "type": "object", + "value": null } ] }, { - "id": 267, - "name": "bevy_window::window::InternalWindowState", + "id": 274, + "name": "bevy_window::event::CursorMoved", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "minimize_request", - "propertyType": "core::option::Option", - "type": "class", + "name": "window", + "type": "object", "value": null }, { - "name": "maximize_request", - "propertyType": "core::option::Option", + "name": "position", + "propertyType": "glam::Vec2", "type": "class", "value": null }, { - "name": "physical_cursor_position", - "propertyType": "core::option::Option", + "name": "delta", + "propertyType": "core::option::Option", "type": "class", "value": null } ] }, { - "id": 234, - "name": "bevy_window::window::PresentMode", - "type": "enum", - "storageType": "string", - "values": [ - "AutoVsync", - "AutoNoVsync", - "Fifo", - "FifoRelaxed", - "Immediate", - "Mailbox" - ], - "valuesAsFlags": false - }, - { - "id": 132, - "name": "bevy_window::window::PrimaryWindow", + "id": 141, + "name": "bevy_window::event::RequestRedraw", "type": "class", - "useAs": [ - "property", - "map", - "layer", - "object", - "tile" - ], + "useAs": [], "color": "#000000", "drawFill": true, "members": [] }, { - "id": 30, - "name": "bevy_window::window::WindowLevel", - "type": "enum", - "storageType": "string", - "values": [ - "AlwaysOnBottom", - "Normal", - "AlwaysOnTop" - ], - "valuesAsFlags": false - }, - { - "id": 122, - "name": "bevy_window::window::WindowMode", - "type": "enum", - "storageType": "string", - "values": [ - "Windowed", - "BorderlessFullscreen", - "SizedFullscreen", - "Fullscreen" - ], - "valuesAsFlags": false - }, - { - "id": 117, - "name": "bevy_window::window::WindowResizeConstraints", + "id": 282, + "name": "bevy_window::event::WindowBackendScaleFactorChanged", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "min_width", - "type": "float", - "value": 180.0 - }, - { - "name": "min_height", - "type": "float", - "value": 120.0 - }, - { - "name": "max_width", - "type": "float", + "name": "window", + "type": "object", "value": null }, { - "name": "max_height", + "name": "scale_factor", "type": "float", "value": null } ] }, { - "id": 127, - "name": "bevy_window::window::WindowTheme", - "type": "enum", - "storageType": "string", - "values": [ - "Light", - "Dark" - ], - "valuesAsFlags": false + "id": 132, + "name": "bevy_window::event::WindowCloseRequested", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ + { + "name": "window", + "type": "object", + "value": null + } + ] }, { - "id": 169, - "name": "glam::Affine2", + "id": 63, + "name": "bevy_window::event::WindowClosed", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "matrix2", - "propertyType": "glam::Mat2", - "type": "class", - "value": { - "x_axis": { - "x": 1.0, - "y": 0.0 - }, - "y_axis": { - "x": 0.0, - "y": 1.0 - } - } - }, - { - "name": "translation", - "propertyType": "glam::Vec2", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0 - } + "name": "window", + "type": "object", + "value": null } ] }, { - "id": 133, - "name": "glam::Affine3A", + "id": 181, + "name": "bevy_window::event::WindowClosing", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "matrix3", - "propertyType": "glam::Mat3A", - "type": "class", - "value": { - "x_axis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "y_axis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "z_axis": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } - } - }, - { - "name": "translation", - "propertyType": "glam::Vec3A", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "name": "window", + "type": "object", + "value": null } ] }, { - "id": 248, - "name": "glam::BVec2", + "id": 229, + "name": "bevy_window::event::WindowCreated", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", - "type": "bool", - "value": false - }, - { - "name": "y", - "type": "bool", - "value": false + "name": "window", + "type": "object", + "value": null } ] }, { - "id": 179, - "name": "glam::BVec3", + "id": 278, + "name": "bevy_window::event::WindowDestroyed", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", - "type": "bool", - "value": false - }, + "name": "window", + "type": "object", + "value": null + } + ] + }, + { + "id": 2, + "name": "bevy_window::event::WindowFocused", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ { - "name": "y", - "type": "bool", - "value": false + "name": "window", + "type": "object", + "value": null }, { - "name": "z", + "name": "focused", "type": "bool", - "value": false + "value": null } ] }, { - "id": 129, - "name": "glam::BVec4", + "id": 242, + "name": "bevy_window::event::WindowMoved", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", - "type": "bool", - "value": false + "name": "window", + "type": "object", + "value": null }, { - "name": "y", - "type": "bool", - "value": false - }, + "name": "position", + "propertyType": "glam::IVec2", + "type": "class", + "value": null + } + ] + }, + { + "id": 91, + "name": "bevy_window::event::WindowOccluded", + "type": "class", + "useAs": [], + "color": "#000000", + "drawFill": true, + "members": [ { - "name": "z", - "type": "bool", - "value": false + "name": "window", + "type": "object", + "value": null }, { - "name": "w", + "name": "occluded", "type": "bool", - "value": false + "value": null } ] }, { - "id": 53, - "name": "glam::DAffine2", + "id": 118, + "name": "bevy_window::event::WindowResized", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "matrix2", - "propertyType": "glam::DMat2", - "type": "class", - "value": { - "x_axis": { - "x": 1.0, - "y": 0.0 - }, - "y_axis": { - "x": 0.0, - "y": 1.0 - } - } + "name": "window", + "type": "object", + "value": null + }, + { + "name": "width", + "type": "float", + "value": null }, { - "name": "translation", - "propertyType": "glam::DVec2", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0 - } + "name": "height", + "type": "float", + "value": null } ] }, { - "id": 43, - "name": "glam::DAffine3", + "id": 78, + "name": "bevy_window::event::WindowScaleFactorChanged", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "matrix3", - "propertyType": "glam::DMat3", - "type": "class", - "value": { - "x_axis": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - }, - "y_axis": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - }, - "z_axis": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } - } + "name": "window", + "type": "object", + "value": null }, { - "name": "translation", - "propertyType": "glam::DVec3", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "name": "scale_factor", + "type": "float", + "value": null } ] }, { - "id": 227, - "name": "glam::DMat2", + "id": 223, + "name": "bevy_window::event::WindowThemeChanged", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x_axis", - "propertyType": "glam::DVec2", - "type": "class", - "value": { - "x": 1.0, - "y": 0.0 - } + "name": "window", + "type": "object", + "value": null }, { - "name": "y_axis", - "propertyType": "glam::DVec2", - "type": "class", - "value": { - "x": 0.0, - "y": 1.0 - } + "name": "theme", + "propertyType": "bevy_window::window::WindowTheme", + "type": "string", + "value": null } ] }, { - "id": 50, - "name": "glam::DMat3", + "id": 79, + "name": "bevy_window::system_cursor::SystemCursorIcon", + "type": "enum", + "storageType": "string", + "values": [ + "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" + ], + "valuesAsFlags": false + }, + { + "id": 216, + "name": "bevy_window::window::CompositeAlphaMode", + "type": "enum", + "storageType": "string", + "values": [ + "Auto", + "Opaque", + "PreMultiplied", + "PostMultiplied", + "Inherit" + ], + "valuesAsFlags": false + }, + { + "id": 4, + "name": "bevy_window::window::CursorGrabMode", + "type": "enum", + "storageType": "string", + "values": [ + "None", + "Confined", + "Locked" + ], + "valuesAsFlags": false + }, + { + "id": 238, + "name": "bevy_window::window::CursorOptions", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x_axis", - "propertyType": "glam::DVec3", - "type": "class", - "value": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - } + "name": "visible", + "type": "bool", + "value": true }, { - "name": "y_axis", - "propertyType": "glam::DVec3", - "type": "class", - "value": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - } + "name": "grab_mode", + "propertyType": "bevy_window::window::CursorGrabMode", + "type": "string", + "value": "None" }, { - "name": "z_axis", - "propertyType": "glam::DVec3", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } + "name": "hit_test", + "type": "bool", + "value": true } ] }, { - "id": 18, - "name": "glam::DMat4", + "id": 124, + "name": "bevy_window::window::EnabledButtons", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x_axis", - "propertyType": "glam::DVec4", - "type": "class", - "value": { - "w": 0.0, - "x": 1.0, - "y": 0.0, - "z": 0.0 - } - }, - { - "name": "y_axis", - "propertyType": "glam::DVec4", - "type": "class", - "value": { - "w": 0.0, - "x": 0.0, - "y": 1.0, - "z": 0.0 - } + "name": "minimize", + "type": "bool", + "value": true }, { - "name": "z_axis", - "propertyType": "glam::DVec4", - "type": "class", - "value": { - "w": 0.0, - "x": 0.0, - "y": 0.0, - "z": 1.0 - } + "name": "maximize", + "type": "bool", + "value": true }, { - "name": "w_axis", - "propertyType": "glam::DVec4", - "type": "class", - "value": { - "w": 1.0, - "x": 0.0, - "y": 0.0, - "z": 0.0 - } + "name": "close", + "type": "bool", + "value": true } ] }, { - "id": 42, - "name": "glam::DQuat", + "id": 237, + "name": "bevy_window::window::PresentMode", + "type": "enum", + "storageType": "string", + "values": [ + "AutoVsync", + "AutoNoVsync", + "Fifo", + "FifoRelaxed", + "Immediate", + "Mailbox" + ], + "valuesAsFlags": false + }, + { + "id": 31, + "name": "bevy_window::window::PrimaryWindow", + "type": "class", + "useAs": [ + "property", + "map", + "layer", + "object", + "tile" + ], + "color": "#000000", + "drawFill": true, + "members": [] + }, + { + "id": 196, + "name": "bevy_window::window::WindowLevel", + "type": "enum", + "storageType": "string", + "values": [ + "AlwaysOnBottom", + "Normal", + "AlwaysOnTop" + ], + "valuesAsFlags": false + }, + { + "id": 214, + "name": "bevy_window::window::WindowResizeConstraints", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", + "name": "min_width", "type": "float", - "value": 0.0 + "value": 180.0 }, { - "name": "y", + "name": "min_height", "type": "float", - "value": 0.0 + "value": 120.0 }, { - "name": "z", + "name": "max_width", "type": "float", - "value": 0.0 + "value": null }, { - "name": "w", + "name": "max_height", "type": "float", - "value": 1.0 + "value": null } ] }, { - "id": 174, - "name": "glam::DVec2", + "id": 200, + "name": "bevy_window::window::WindowResolution", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", - "type": "float", - "value": 0.0 + "name": "physical_width", + "type": "int", + "value": 1280 }, { - "name": "y", - "type": "float", - "value": 0.0 - } - ] - }, - { - "id": 81, - "name": "glam::DVec3", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "x", - "type": "float", - "value": 0.0 + "name": "physical_height", + "type": "int", + "value": 720 }, { - "name": "y", - "type": "float", - "value": 0.0 + "name": "scale_factor_override", + "propertyType": "core::option::Option", + "type": "class", + "value": null }, { - "name": "z", + "name": "scale_factor", "type": "float", - "value": 0.0 + "value": 1.0 } ] }, { - "id": 114, - "name": "glam::DVec4", + "id": 3, + "name": "bevy_window::window::WindowTheme", + "type": "enum", + "storageType": "string", + "values": [ + "Light", + "Dark" + ], + "valuesAsFlags": false + }, + { + "id": 311, + "name": "glam::Affine2", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", - "type": "float", - "value": 0.0 - }, - { - "name": "y", - "type": "float", - "value": 0.0 - }, - { - "name": "z", - "type": "float", - "value": 0.0 + "name": "matrix2", + "propertyType": "glam::Mat2", + "type": "class", + "value": { + "x_axis": { + "x": 1.0, + "y": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0 + } + } }, { - "name": "w", - "type": "float", - "value": 0.0 + "name": "translation", + "propertyType": "glam::Vec2", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0 + } } ] }, { - "id": 186, - "name": "glam::IVec2", + "id": 42, + "name": "glam::Affine3A", "type": "class", "useAs": [], "color": "#000000", "drawFill": true, "members": [ { - "name": "x", - "type": "int", - "value": 0 + "name": "matrix3", + "propertyType": "glam::Mat3A", + "type": "class", + "value": { + "x_axis": { + "x": 1.0, + "y": 0.0, + "z": 0.0 + }, + "y_axis": { + "x": 0.0, + "y": 1.0, + "z": 0.0 + }, + "z_axis": { + "x": 0.0, + "y": 0.0, + "z": 1.0 + } + } }, { - "name": "y", - "type": "int", - "value": 0 + "name": "translation", + "propertyType": "glam::Vec3A", + "type": "class", + "value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + } } ] }, { - "id": 99, - "name": "glam::IVec3", + "id": 264, + "name": "glam::DVec2", "type": "class", "useAs": [], "color": "#000000", @@ -4961,24 +5878,19 @@ "members": [ { "name": "x", - "type": "int", - "value": 0 + "type": "float", + "value": 0.0 }, { "name": "y", - "type": "int", - "value": 0 - }, - { - "name": "z", - "type": "int", - "value": 0 + "type": "float", + "value": 0.0 } ] }, { - "id": 10, - "name": "glam::IVec4", + "id": 15, + "name": "glam::IVec2", "type": "class", "useAs": [], "color": "#000000", @@ -4993,21 +5905,11 @@ "name": "y", "type": "int", "value": 0 - }, - { - "name": "z", - "type": "int", - "value": 0 - }, - { - "name": "w", - "type": "int", - "value": 0 } ] }, { - "id": 113, + "id": 61, "name": "glam::Mat2", "type": "class", "useAs": [], @@ -5035,47 +5937,7 @@ ] }, { - "id": 245, - "name": "glam::Mat3", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "x_axis", - "propertyType": "glam::Vec3", - "type": "class", - "value": { - "x": 1.0, - "y": 0.0, - "z": 0.0 - } - }, - { - "name": "y_axis", - "propertyType": "glam::Vec3", - "type": "class", - "value": { - "x": 0.0, - "y": 1.0, - "z": 0.0 - } - }, - { - "name": "z_axis", - "propertyType": "glam::Vec3", - "type": "class", - "value": { - "x": 0.0, - "y": 0.0, - "z": 1.0 - } - } - ] - }, - { - "id": 252, + "id": 230, "name": "glam::Mat3A", "type": "class", "useAs": [], @@ -5115,7 +5977,7 @@ ] }, { - "id": 190, + "id": 202, "name": "glam::Mat4", "type": "class", "useAs": [], @@ -5169,7 +6031,7 @@ ] }, { - "id": 218, + "id": 134, "name": "glam::Quat", "type": "class", "useAs": [], @@ -5199,7 +6061,7 @@ ] }, { - "id": 231, + "id": 53, "name": "glam::UVec2", "type": "class", "useAs": [], @@ -5219,7 +6081,7 @@ ] }, { - "id": 204, + "id": 139, "name": "glam::UVec3", "type": "class", "useAs": [], @@ -5244,37 +6106,7 @@ ] }, { - "id": 257, - "name": "glam::UVec4", - "type": "class", - "useAs": [], - "color": "#000000", - "drawFill": true, - "members": [ - { - "name": "x", - "type": "int", - "value": 0 - }, - { - "name": "y", - "type": "int", - "value": 0 - }, - { - "name": "z", - "type": "int", - "value": 0 - }, - { - "name": "w", - "type": "int", - "value": 0 - } - ] - }, - { - "id": 221, + "id": 252, "name": "glam::Vec2", "type": "class", "useAs": [], @@ -5294,7 +6126,7 @@ ] }, { - "id": 74, + "id": 171, "name": "glam::Vec3", "type": "class", "useAs": [], @@ -5319,7 +6151,7 @@ ] }, { - "id": 189, + "id": 110, "name": "glam::Vec3A", "type": "class", "useAs": [], @@ -5344,7 +6176,7 @@ ] }, { - "id": 216, + "id": 232, "name": "glam::Vec4", "type": "class", "useAs": [], @@ -5374,7 +6206,7 @@ ] }, { - "id": 207, + "id": 204, "name": "properties_basic::BiomeInfos", "type": "class", "useAs": [ @@ -5401,7 +6233,7 @@ ] }, { - "id": 146, + "id": 83, "name": "properties_basic::BiomeType", "type": "enum", "storageType": "string", @@ -5416,7 +6248,7 @@ "valuesAsFlags": false }, { - "id": 150, + "id": 72, "name": "properties_basic::SpawnInfos", "type": "class", "useAs": [ @@ -5438,7 +6270,7 @@ ] }, { - "id": 263, + "id": 258, "name": "properties_basic::SpawnType", "type": "enum", "storageType": "string", diff --git a/examples/orientation_hexagonal.rs b/examples/orientation_hexagonal.rs index da57712..96edb21 100644 --- a/examples/orientation_hexagonal.rs +++ b/examples/orientation_hexagonal.rs @@ -24,7 +24,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let default_callback: helper::assets::MapInfosCallback = |c| { c.insert(TiledMapSettings { diff --git a/examples/orientation_isometric.rs b/examples/orientation_isometric.rs index aaa4ceb..7b81192 100644 --- a/examples/orientation_isometric.rs +++ b/examples/orientation_isometric.rs @@ -24,7 +24,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let default_callback: helper::assets::MapInfosCallback = |c| { c.insert(TiledMapSettings { diff --git a/examples/orientation_orthogonal.rs b/examples/orientation_orthogonal.rs index ad5653c..161258b 100644 --- a/examples/orientation_orthogonal.rs +++ b/examples/orientation_orthogonal.rs @@ -24,7 +24,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let default_callback: helper::assets::MapInfosCallback = |c| { c.insert(TiledMapSettings { diff --git a/examples/physics_avian_controller.rs b/examples/physics_avian_controller.rs index 562ff2b..5a7e045 100644 --- a/examples/physics_avian_controller.rs +++ b/examples/physics_avian_controller.rs @@ -30,7 +30,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle( asset_server.load("multiple_layers_with_colliders.tmx"), )); diff --git a/examples/physics_avian_orientation.rs b/examples/physics_avian_orientation.rs index dd653c6..a8ecac4 100644 --- a/examples/physics_avian_orientation.rs +++ b/examples/physics_avian_orientation.rs @@ -28,7 +28,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let default_callback: helper::assets::MapInfosCallback = |c| { c.insert(TiledMapSettings { diff --git a/examples/physics_avian_settings.rs b/examples/physics_avian_settings.rs index 6004115..0f2db14 100644 --- a/examples/physics_avian_settings.rs +++ b/examples/physics_avian_settings.rs @@ -28,7 +28,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let mut mgr = helper::assets::AssetsManager::new(&mut commands); mgr.add_map(helper::assets::MapInfos::new( diff --git a/examples/physics_custom.rs b/examples/physics_custom.rs index dec4d0f..fb93c3a 100644 --- a/examples/physics_custom.rs +++ b/examples/physics_custom.rs @@ -4,7 +4,6 @@ use bevy::{ color::palettes::css::{PURPLE, RED}, ecs::component::StorageType, prelude::*, - sprite::MaterialMesh2dBundle, }; use bevy_ecs_tiled::prelude::*; use bevy_ecs_tilemap::prelude::*; @@ -29,7 +28,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle(asset_server.load("finite.tmx"))); } @@ -114,12 +113,7 @@ impl Component for MyCustomPhysicsComponent { world .commands() .entity(entity) - .insert(MaterialMesh2dBundle { - mesh: mesh.into(), - transform: Transform::default(), - material, - ..default() - }); + .insert((Mesh2d(mesh), MeshMaterial2d(material))); }); } } diff --git a/examples/physics_events.rs b/examples/physics_events.rs index e2a5953..ded7462 100644 --- a/examples/physics_events.rs +++ b/examples/physics_events.rs @@ -19,14 +19,14 @@ fn main() { // bevy_ecs_tiled physics plugin: this is where we select which physics backend to use .add_plugins(TiledPhysicsPlugin::::default()) // Add observers for physics collider events - .observe(handle_physics_events) + .add_observer(handle_physics_events) // Add our systems and run the app! .add_systems(Startup, startup) .run(); } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle(asset_server.load("finite.tmx"))); } diff --git a/examples/physics_rapier_controller.rs b/examples/physics_rapier_controller.rs index 1ea5b6c..6c23118 100644 --- a/examples/physics_rapier_controller.rs +++ b/examples/physics_rapier_controller.rs @@ -28,7 +28,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle( asset_server.load("multiple_layers_with_colliders.tmx"), )); diff --git a/examples/physics_rapier_orientation.rs b/examples/physics_rapier_orientation.rs index d429b9e..02d13df 100644 --- a/examples/physics_rapier_orientation.rs +++ b/examples/physics_rapier_orientation.rs @@ -28,7 +28,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let default_callback: helper::assets::MapInfosCallback = |c| { c.insert(TiledMapSettings { diff --git a/examples/physics_rapier_settings.rs b/examples/physics_rapier_settings.rs index b87476b..4d999d0 100644 --- a/examples/physics_rapier_settings.rs +++ b/examples/physics_rapier_settings.rs @@ -28,7 +28,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); let mut mgr = helper::assets::AssetsManager::new(&mut commands); mgr.add_map(helper::assets::MapInfos::new( diff --git a/examples/properties_basic.rs b/examples/properties_basic.rs index 8c50c04..e43fe87 100644 --- a/examples/properties_basic.rs +++ b/examples/properties_basic.rs @@ -37,7 +37,7 @@ fn main() { } fn startup(mut commands: Commands, asset_server: Res) { - commands.spawn(Camera2dBundle::default()); + commands.spawn(Camera2d); commands.spawn(TiledMapHandle( asset_server.load("hex_map_pointy_top_odd.tmx"), )); diff --git a/src/asset.rs b/src/asset.rs index 1927987..be4cd7a 100644 --- a/src/asset.rs +++ b/src/asset.rs @@ -13,7 +13,7 @@ use bevy::reflect::TypeRegistryArc; use crate::properties::load::DeserializedMapProperties; use bevy::{ - asset::{io::Reader, AssetLoader, AssetPath, AsyncReadExt, LoadContext}, + asset::{io::Reader, AssetLoader, AssetPath, LoadContext}, prelude::*, utils::HashMap, }; @@ -94,11 +94,11 @@ impl AssetLoader for TiledLoader { type Settings = (); type Error = TiledAssetLoaderError; - async fn load<'a>( - &'a self, - reader: &'a mut Reader<'_>, - _settings: &'a Self::Settings, - load_context: &'a mut LoadContext<'_>, + async fn load( + &self, + reader: &mut dyn Reader, + _settings: &Self::Settings, + load_context: &mut LoadContext<'_>, ) -> Result { let mut bytes = Vec::new(); reader.read_to_end(&mut bytes).await?; diff --git a/src/components.rs b/src/components.rs index 41747bc..cf4586a 100644 --- a/src/components.rs +++ b/src/components.rs @@ -14,10 +14,6 @@ pub struct TiledMapSettings { pub layer_positioning: LayerPositioning, /// Z-offset between two consecutives layers. pub layer_z_offset: f32, - /// Initial map [Transform]. - pub map_initial_transform: Transform, - /// Initial map [Visibility]. - pub map_initial_visibility: Visibility, } impl Default for TiledMapSettings { @@ -25,8 +21,6 @@ impl Default for TiledMapSettings { Self { layer_positioning: LayerPositioning::default(), layer_z_offset: 100., - map_initial_transform: Transform::default(), - map_initial_visibility: Visibility::Inherited, } } } @@ -85,6 +79,7 @@ pub struct TiledMapMarker; /// Marker [Component] for a Tiled map layer. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapLayer { // Store the map id so that we can delete layers for this map later. // We don't want to store the handle as a [Component] because the parent @@ -98,6 +93,7 @@ pub struct TiledMapTileLayer; /// Marker [Component] for a Tiled map tile layer for a given tileset. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapTileLayerForTileset; /// Marker [Component] for a Tiled map object layer. diff --git a/src/lib.rs b/src/lib.rs index 638bcd6..8783a56 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -42,12 +42,21 @@ pub mod prelude { } use crate::prelude::*; -use bevy::{asset::RecursiveDependencyLoadState, prelude::*}; +use bevy::prelude::*; use bevy_ecs_tilemap::prelude::*; use std::{env, path::PathBuf}; -/// Wrapper around the [Handle] to the `.tmx` file representing the map. +/// Wrapper around the [Handle] to the `.tmx` file representing the [TiledMap]. +/// +/// This is the main [Component] that must be spawned to load a Tiled map. #[derive(Component)] +#[require( + TiledIdStorage, + TiledMapSettings, + TilemapRenderSettings, + Visibility, + Transform +)] pub struct TiledMapHandle(pub Handle); /// [TiledMapPlugin] [Plugin] global configuration. @@ -120,18 +129,18 @@ fn process_loaded_maps( ( Entity, &TiledMapHandle, - Option<&mut TiledIdStorage>, - Option<&TilemapRenderSettings>, - Option<&TiledMapSettings>, + &mut TiledIdStorage, + &TilemapRenderSettings, + &TiledMapSettings, ), Or<(Changed, With)>, >, ) { - for (map_entity, map_handle, tiled_id_storage, render_settings, tiled_settings) in + for (map_entity, map_handle, mut tiled_id_storage, render_settings, tiled_settings) in map_query.iter_mut() { if let Some(load_state) = asset_server.get_recursive_dependency_load_state(&map_handle.0) { - if load_state != RecursiveDependencyLoadState::Loaded { + if !load_state.is_loaded() { // If not fully loaded yet, insert the 'Respawn' marker so we will try to load it at next frame commands.entity(map_entity).insert(RespawnTiledMap); debug!( @@ -147,31 +156,8 @@ fn process_loaded_maps( map_handle.0.path().unwrap() ); - if let Some(mut tiled_id_storage) = tiled_id_storage { - debug!("Found already spawned layers, remove them"); - remove_layers(&mut commands, &tile_storage_query, &mut tiled_id_storage); - } - let mut tiled_id_storage = TiledIdStorage::default(); - - let render_settings = match render_settings { - Some(a) => a, - _ => { - commands - .entity(map_entity) - .insert(TilemapRenderSettings::default()); - &TilemapRenderSettings::default() - } - }; - - let tiled_settings = match tiled_settings { - Some(a) => a, - _ => { - commands - .entity(map_entity) - .insert(TiledMapSettings::default()); - &TiledMapSettings::default() - } - }; + // Make sure our tile_storage is empty + remove_layers(&mut commands, &tile_storage_query, &mut tiled_id_storage); debug!("Spawn map layers"); loader::load_map( @@ -184,11 +170,8 @@ fn process_loaded_maps( tiled_settings, ); - // Update ID storage and remove the respawn marker - commands - .entity(map_entity) - .insert(tiled_id_storage) - .remove::(); + // Remove the respawn marker + commands.entity(map_entity).remove::(); } } } diff --git a/src/loader.rs b/src/loader.rs index 7b4cfbb..6c038b5 100644 --- a/src/loader.rs +++ b/src/loader.rs @@ -54,12 +54,7 @@ pub(super) fn load_map( "TiledMap({} x {})", tiled_map.map.width, tiled_map.map.height ))) - .insert(TiledMapMarker) - .insert(SpatialBundle { - transform: tiled_settings.map_initial_transform, - visibility: tiled_settings.map_initial_visibility, - ..SpatialBundle::INHERITED_IDENTITY - }); + .insert(TiledMapMarker); let map_type = get_map_type(&tiled_map.map); let map_size = get_map_size(&tiled_map.map); @@ -78,12 +73,9 @@ pub(super) fn load_map( for (layer_id, layer) in tiled_map.map.layers().enumerate() { // Spawn layer entity and attach it to the map entity let layer_entity = commands - .spawn(( - TiledMapLayer { - map_handle_id: map_handle.id(), - }, - TransformBundle::from_transform(Transform::from_xyz(0., 0., 0.)), - )) + .spawn(TiledMapLayer { + map_handle_id: map_handle.id(), + }) .set_parent(map_entity) .id(); @@ -92,16 +84,15 @@ pub(super) fn load_map( // Apply layer offset and MapPositioning setting let offset_transform = Transform::from_xyz(layer.offset_x, -layer.offset_y, offset_z); - commands.entity(layer_entity).insert(SpatialBundle { - transform: match &tiled_settings.layer_positioning { + commands + .entity(layer_entity) + .insert(match &tiled_settings.layer_positioning { LayerPositioning::TiledOffset => offset_transform, LayerPositioning::Centered => { get_tilemap_center_transform(&map_size, &grid_size, &map_type, 0.) * offset_transform } - }, - ..default() - }); + }); let layer_infos = TiledLayerCreated { map: map_entity, @@ -112,10 +103,10 @@ pub(super) fn load_map( match layer.layer_type() { LayerType::Tiles(tile_layer) => { - commands - .entity(layer_entity) - .insert(Name::new(format!("TiledMapTileLayer({})", layer.name))) - .insert(TiledMapTileLayer); + commands.entity(layer_entity).insert(( + Name::new(format!("TiledMapTileLayer({})", layer.name)), + TiledMapTileLayer, + )); load_tiles_layer( commands, tiled_map, @@ -128,10 +119,10 @@ pub(super) fn load_map( ); } LayerType::Objects(object_layer) => { - commands - .entity(layer_entity) - .insert(Name::new(format!("TiledMapObjectLayer({})", layer.name))) - .insert(TiledMapObjectLayer); + commands.entity(layer_entity).insert(( + Name::new(format!("TiledMapObjectLayer({})", layer.name)), + TiledMapObjectLayer, + )); load_objects_layer( commands, tiled_map, @@ -142,18 +133,18 @@ pub(super) fn load_map( ); } LayerType::Group(_group_layer) => { - commands - .entity(layer_entity) - .insert(Name::new(format!("TiledMapGroupLayer({})", layer.name))) - .insert(TiledMapGroupLayer); - // TODO: not implemented yet. + commands.entity(layer_entity).insert(( + Name::new(format!("TiledMapGroupLayer({})", layer.name)), + TiledMapGroupLayer, + )); + warn!("Group layers are not yet implemented"); } LayerType::Image(_image_layer) => { - commands - .entity(layer_entity) - .insert(Name::new(format!("TiledMapImageLayer({})", layer.name))) - .insert(TiledMapImageLayer); - // TODO: not implemented yet. + commands.entity(layer_entity).insert(( + Name::new(format!("TiledMapImageLayer({})", layer.name)), + TiledMapImageLayer, + )); + warn!("Image layers are not yet implemented"); } }; @@ -543,11 +534,11 @@ fn load_objects_layer( &grid_size, ); let object_entity = commands - .spawn(SpatialBundle::from_transform(Transform::from_xyz( + .spawn(Transform::from_xyz( object_position.x, object_position.y, 0., - ))) + )) .insert(Name::new(format!("Object({})", object_data.name))) .insert(TiledMapObject) .set_parent(layer_infos.layer) diff --git a/src/physics/collider.rs b/src/physics/collider.rs index 3da2d58..7b6e7f9 100644 --- a/src/physics/collider.rs +++ b/src/physics/collider.rs @@ -5,6 +5,7 @@ use tiled::{Layer, Map, Object, Tile}; /// Marker component for colliders #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledColliderMarker; /// Describe the type of the [TiledColliderSource]. @@ -201,9 +202,11 @@ pub(super) fn spawn_collider( )); commands .entity(collider.entity) - .insert(TiledColliderMarker) - .insert(TransformBundle::from_transform(transform)) - .insert(Name::new(format!("Collider: {}", collider.name))) + .insert(( + TiledColliderMarker, + transform, + Name::new(format!("Collider: {}", collider.name)), + )) .set_parent(collider_source.entity); commands.trigger(TiledColliderCreated { map_handle: map_handle.clone(), diff --git a/src/physics/mod.rs b/src/physics/mod.rs index 867e949..6f78103 100644 --- a/src/physics/mod.rs +++ b/src/physics/mod.rs @@ -96,9 +96,9 @@ impl { fn build(&self, app: &mut bevy::prelude::App) { - app.observe(default_physics_settings::); - app.observe(collider_from_object::); - app.observe(collider_from_tile::); + app.add_observer(default_physics_settings::); + app.add_observer(collider_from_object::); + app.add_observer(collider_from_tile::); } } @@ -195,11 +195,7 @@ fn collider_from_tile< let world_position = trigger.event().world_position(&map_asset); commands .entity(trigger.event().tile) - .insert(TransformBundle::from_transform(Transform::from_xyz( - world_position.x, - world_position.y, - 0.0, - ))); + .insert(Transform::from_xyz(world_position.x, world_position.y, 0.0)); for (object_id, object_data) in collision.object_data().iter().enumerate() { if objects_filter.contains(&object_data.name) { diff --git a/src/properties/command.rs b/src/properties/command.rs index 9021dde..2bf412e 100644 --- a/src/properties/command.rs +++ b/src/properties/command.rs @@ -3,7 +3,7 @@ use bevy::ecs::reflect::ReflectBundle; use bevy::ecs::system::EntityCommands; use bevy::ecs::world::Command; use bevy::prelude::{AppTypeRegistry, Entity, ReflectComponent, ReflectResource, World}; -use bevy::reflect::{Reflect, TypeRegistry}; +use bevy::reflect::{PartialReflect, TypeRegistry}; use std::ops::Deref; pub(crate) trait PropertiesCommandExt { @@ -13,7 +13,8 @@ pub(crate) trait PropertiesCommandExt { impl PropertiesCommandExt for EntityCommands<'_> { fn insert_properties(&mut self, properties: DeserializedProperties) -> &mut Self { let entity = self.id(); - self.commands().add(InsertProperties { entity, properties }); + self.commands() + .queue(InsertProperties { entity, properties }); self } @@ -39,7 +40,7 @@ fn insert_reflect( world: &mut World, entity: Entity, type_registry: &TypeRegistry, - property: Box, + property: Box, ) { let type_info = property .get_represented_type_info() @@ -54,7 +55,7 @@ fn insert_reflect( return; } - let Some(mut entity) = world.get_entity_mut(entity) else { + let Ok(mut entity) = world.get_entity_mut(entity) else { panic!("error[B0003]: Could not insert a reflected property (of type {type_path}) for entity {entity:?} because it doesn't exist in this World. See: https://bevyengine.org/learn/errors/#b0003"); }; diff --git a/src/properties/export.rs b/src/properties/export.rs index 3c4c213..3eb0a54 100644 --- a/src/properties/export.rs +++ b/src/properties/export.rs @@ -26,6 +26,8 @@ enum ExportConversionError { MapUnsupported, #[error("field of type {0} is not supported")] UnsupportedValue(&'static str), + #[error("set fields are not supported")] + SetUnsupported, //#[error("type {0} does not reflect Component, Bundle or Resource")] //NotReflectable(&'static str), } @@ -118,7 +120,8 @@ impl TypeExportRegistry { TypeInfo::Array(info) => self.generate_array_export(info, registry, use_as), TypeInfo::Map(_) => Err(ExportConversionError::MapUnsupported), TypeInfo::Enum(info) => self.generate_enum_export(info, registry), - TypeInfo::Value(_) => Ok(vec![]), + TypeInfo::Opaque(_) => Ok(vec![]), + TypeInfo::Set(_) => Err(ExportConversionError::SetUnsupported), } } @@ -165,7 +168,10 @@ impl TypeExportRegistry { name: s.index().to_string(), property_type, type_field, - value: unnamed_field_json_value(default_value, s), + value: unnamed_field_json_value( + default_value.map(|v| v.as_partial_reflect()), + s, + ), }) }) .collect::>()?, @@ -182,7 +188,7 @@ impl TypeExportRegistry { use_as: Vec, ) -> ExportConversionResult { let (type_field, property_type) = - type_to_field(registry.get(info.item_type_id()).unwrap())?; + type_to_field(registry.get(info.item_ty().id()).unwrap())?; let root = TypeExport { id: self.next_id(), @@ -228,7 +234,10 @@ impl TypeExportRegistry { name: s.index().to_string(), property_type, type_field, - value: unnamed_field_json_value(default_value, s), + value: unnamed_field_json_value( + default_value.map(|v| v.as_partial_reflect()), + s, + ), }) }) .collect::>()?, @@ -261,7 +270,10 @@ impl TypeExportRegistry { name: s.name().to_string(), property_type, type_field, - value: named_field_json_value(default_value, s), + value: named_field_json_value( + default_value.map(|v| v.as_partial_reflect()), + s, + ), }) }) .collect::>()?, @@ -294,39 +306,61 @@ impl TypeExportRegistry { } } -fn value_to_json(value: &dyn Reflect) -> serde_json::Value { +fn value_to_json(value: &dyn PartialReflect) -> serde_json::Value { let Some(type_info) = value.get_represented_type_info() else { return serde_json::Value::default(); }; match (type_info.type_path(), type_info, value.reflect_ref()) { - ("bool", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("f32", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("f64", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("isize", _, ReflectRef::Value(v)) => { - serde_json::json!(*v.downcast_ref::().unwrap()) - } - ("i8", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("i16", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("i32", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("i64", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("i128", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("usize", _, ReflectRef::Value(v)) => { - serde_json::json!(*v.downcast_ref::().unwrap()) - } - ("u8", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("u16", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("u32", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("u64", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("u128", _, ReflectRef::Value(v)) => serde_json::json!(*v.downcast_ref::().unwrap()), - ("alloc::string::String", _, ReflectRef::Value(v)) => { - serde_json::json!(*v.downcast_ref::().unwrap()) - } - ("alloc::borrow::Cow", _, ReflectRef::Value(v)) => { - serde_json::json!(*v.downcast_ref::>().unwrap()) + ("bool", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("f32", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("f64", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("isize", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("i8", _, ReflectRef::Opaque(v)) => serde_json::json!(*v.try_downcast_ref::().unwrap()), + ("i16", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("i32", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("i64", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("i128", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("usize", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("u8", _, ReflectRef::Opaque(v)) => serde_json::json!(*v.try_downcast_ref::().unwrap()), + ("u16", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("u32", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("u64", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("u128", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("alloc::string::String", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::().unwrap()) + } + ("alloc::borrow::Cow", _, ReflectRef::Opaque(v)) => { + serde_json::json!(*v.try_downcast_ref::>().unwrap()) } ("bevy_color::color::Color", _, _) => { - let c = value.downcast_ref::().unwrap(); + let c = value.try_downcast_ref::().unwrap(); serde_json::json!(format!("#{:08x}", c.to_linear().as_u32())) } (_, TypeInfo::Enum(info), ReflectRef::Enum(v)) => { @@ -369,7 +403,10 @@ fn value_to_json(value: &dyn Reflect) -> serde_json::Value { } } -fn named_field_json_value(value: Option<&dyn Reflect>, field: &NamedField) -> serde_json::Value { +fn named_field_json_value( + value: Option<&dyn PartialReflect>, + field: &NamedField, +) -> serde_json::Value { match value { Some(v) => match v.reflect_ref() { ReflectRef::Struct(t) => t @@ -383,7 +420,7 @@ fn named_field_json_value(value: Option<&dyn Reflect>, field: &NamedField) -> se } fn unnamed_field_json_value( - value: Option<&dyn Reflect>, + value: Option<&dyn PartialReflect>, field: &UnnamedField, ) -> serde_json::Value { match value { @@ -427,7 +464,7 @@ fn type_to_field( "std::path::PathBuf" => (FieldType::File, None), f if f.starts_with("bevy_asset::handle::Handle") => (FieldType::File, None), path => { - if matches!(info, TypeInfo::Value(_)) { + if matches!(info, TypeInfo::Opaque(_)) { return Err(ExportConversionError::UnsupportedValue(info.type_path())); } diff --git a/src/properties/load.rs b/src/properties/load.rs index fc7d099..ab31b91 100644 --- a/src/properties/load.rs +++ b/src/properties/load.rs @@ -114,7 +114,7 @@ impl DeserializedMapProperties { /// Properties for an entity deserialized from a [`Properties`](tiled::Properties) #[derive(Debug)] pub(crate) struct DeserializedProperties { - pub(crate) properties: Vec>, + pub(crate) properties: Vec>, } impl Clone for DeserializedProperties { @@ -132,7 +132,7 @@ impl DeserializedProperties { load_cx: &mut LoadContext<'_>, resources_allowed: bool, ) -> Self { - let mut props: Vec> = Vec::new(); + let mut props: Vec> = Vec::new(); for (name, property) in properties.clone() { let PropertyValue::ClassValue { @@ -141,7 +141,7 @@ impl DeserializedProperties { } = &property else { if let PropertyValue::FileValue(file) = &property { - props.push(Box::new(load_cx.loader().untyped().load(file))); + props.push(Box::new(load_cx.loader().with_unknown_type().load(file))); continue; } @@ -188,7 +188,7 @@ impl DeserializedProperties { registration: &TypeRegistration, registry: &TypeRegistry, load_cx: &mut Option<&mut LoadContext<'_>>, - ) -> Result, String> { + ) -> Result, String> { // I wonder if it's possible to call FromStr for String? // or ToString/Display? use PropertyValue as PV; @@ -225,7 +225,7 @@ impl DeserializedProperties { ("std::path::PathBuf", PV::FileValue(s), _) => Ok(Box::new(PathBuf::from(s))), (a, PV::FileValue(s), _) if a.starts_with("bevy_asset::handle::Handle") => { if let Some(cx) = load_cx.as_mut() { - Ok(Box::new(cx.loader().untyped().load(s))) + Ok(Box::new(cx.loader().with_unknown_type().load(s))) } else { Err("No LoadContext provided: cannot load Handle".to_string()) } @@ -272,7 +272,7 @@ impl DeserializedProperties { } else if let Some(default_value) = default_value_from_type_path(registry, field.type_path()) { - value = default_value; + value = default_value.into_partial_reflect(); } else { return Err(format!( "missing property on `{}`: `{}`", @@ -299,7 +299,7 @@ impl DeserializedProperties { } else if let Some(default_value) = default_value_from_type_path(registry, field.type_path()) { - value = default_value; + value = default_value.into_partial_reflect(); } else { return Err(format!( "missing property on `{}`: `{}`", @@ -327,7 +327,7 @@ impl DeserializedProperties { } else if let Some(default_value) = default_value_from_type_path(registry, field.type_path()) { - value = default_value; + value = default_value.into_partial_reflect(); } else { return Err(format!( "missing property on `{}`: `{}`", @@ -344,10 +344,10 @@ impl DeserializedProperties { (_, PV::ClassValue { mut properties, .. }, TypeInfo::Array(info)) => { let mut array = Vec::new(); - let Some(reg) = registry.get(info.item_type_id()) else { + let Some(reg) = registry.get(info.item_ty().id()) else { return Err(format!( "type `{}` is not registered", - info.item_type_path_table().path() + info.item_ty().path() )); }; @@ -398,9 +398,9 @@ fn default_value_from_type_path(registry: &TypeRegistry, path: &str) -> Option, -) -> Option> { +) -> Option> { if obj.represents::() { let obj = Entity::take_from_reflect(obj.clone_value()).unwrap(); if let Some(&e) = obj_entity_map.get(&obj.index()) { @@ -423,9 +423,9 @@ fn object_ref( } } -fn hydrate(object: &mut dyn Reflect, obj_entity_map: &HashMap) { +fn hydrate(object: &mut dyn PartialReflect, obj_entity_map: &HashMap) { if let Some(obj) = object_ref(object, obj_entity_map) { - object.apply(&*obj); + object.apply(obj.as_partial_reflect()); return; } @@ -469,8 +469,10 @@ fn hydrate(object: &mut dyn Reflect, obj_entity_map: &HashMap) { hydrate(v, obj_entity_map); } } + // Cannot hydrate a Set since it does not have a get_mut() function + ReflectMut::Set(_) => {} // we don't care about any of the other values - ReflectMut::Value(_) => {} + ReflectMut::Opaque(_) => {} } } From 5d8e951624bee9c5ac878653852389544371fe60 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:56:59 +0000 Subject: [PATCH 02/14] feat: simplify map reload mechanisms --- CHANGELOG.md | 1 + book/src/guides/spawn_reload.md | 11 ++-- examples/map_reload.rs | 41 +++++------- src/lib.rs | 112 +++++++++----------------------- 4 files changed, 58 insertions(+), 107 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25963e2..c126209 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ A [migration guide](https://adrien-bon.github.io/bevy_ecs_tiled/migrations/v0_5. ### Changed - Remove `map_initial_transform` and `map_initial_visibility` from `TiledMapSettings`, use required components instead +- Simplify map reload mechanisms and update corresponding example ## v0.4.2 diff --git a/book/src/guides/spawn_reload.md b/book/src/guides/spawn_reload.md index 780409a..994b07b 100644 --- a/book/src/guides/spawn_reload.md +++ b/book/src/guides/spawn_reload.md @@ -43,13 +43,13 @@ pub fn despawn_map( All child entities, like layers and tiles, will automatically be despawned. -## Reload a map +## Respawn / reload a map -If you want to reload a map, you can of course despawn it then spawn it again. +If you want to reload or respawn a map, you can of course despawn it then spawn it again. It's tedious, but it works. However, there is an easier way. -Instead, you can insert the `RespawnTiledMap` component: +You can instead insert the `RespawnTiledMap` component to the map entity: ```rust,no_run fn respawn_map( @@ -62,12 +62,13 @@ fn respawn_map( } ``` -This will reload the exact same map but using new entities. +This will load the exact same map but using new entities for layers or tiles (map entity will be preserved). It means that if you updated some components (for instance, a tile color or an object position) they will be back as they were when you first loaded the map. It's useful to implement a level respawn for instance. Another use case is to load a new map over an existing one. An easy way to do that is to just spawn a new `TiledMapHandle` over an existing map. +Note you can also reload the exact same map, which is equivalent to using the `RespawnTiledMap` component. ```rust,no_run fn handle_reload( @@ -83,3 +84,5 @@ fn handle_reload( } } ``` + +In both cases, note that map additional components such as `TiledMapSettings` or `TilemapRenderSettings` will be preserved. diff --git a/examples/map_reload.rs b/examples/map_reload.rs index 4df09b6..007358b 100644 --- a/examples/map_reload.rs +++ b/examples/map_reload.rs @@ -22,7 +22,7 @@ fn main() { Update, ( handle_load.run_if(in_state(MapState::Unloaded)), - (handle_unload, handle_reload, handle_respawn).run_if(in_state(MapState::Loaded)), + (handle_unload, handle_reload).run_if(in_state(MapState::Loaded)), ), ) .add_systems(Update, log_transitions) @@ -57,6 +57,7 @@ fn handle_load( mut next_state: ResMut>, ) { if keyboard_input.just_pressed(KeyCode::KeyL) { + info!("Load map"); commands.spawn(TiledMapHandle(asset_server.load("finite.tmx"))); next_state.set(MapState::Loaded); } @@ -69,16 +70,29 @@ fn handle_reload( maps_query: Query>, mut next_state: ResMut>, ) { + // Reload the map by inserting a map asset on an existing map entity + // Note that you can use the same map asset or a different one if keyboard_input.just_pressed(KeyCode::KeyK) { if let Ok(entity) = maps_query.get_single() { + info!("Reload map"); commands .entity(entity) .insert(TiledMapHandle(asset_server.load("infinite.tmx"))); + next_state.set(MapState::Loaded); } else { warn!("Cannot reload: no map loaded ?"); } + } - next_state.set(MapState::Loaded); + // Reload the same map by pushing the RespawnTiledMap component on it + if keyboard_input.just_pressed(KeyCode::KeyR) { + if let Ok(entity) = maps_query.get_single() { + info!("Respawn map"); + commands.entity(entity).insert(RespawnTiledMap); + next_state.set(MapState::Loaded); + } else { + warn!("Cannot respawn: no map loaded ?"); + } } } @@ -94,21 +108,16 @@ fn handle_unload( // `TiledMap` asset is removed. // // However, typically you would remove the map entity instead. + info!("Unload map"); let handles: Vec<_> = maps.iter().map(|(handle, _)| handle).collect(); for handle in handles { // This will cause the map to unload. maps.remove(handle); } - - // Actually remove the entities, so that we can re-add later. - // If we don't do this, the entity still exists and the map will not be - // reloaded properly. - for entity in maps_query.iter() { - commands.entity(entity).despawn_recursive(); - } next_state.set(MapState::Unloaded); } else if keyboard_input.just_pressed(KeyCode::KeyI) { // Just remove the entities directly. This will also unload the map. + info!("Remove map entities"); for entity in maps_query.iter() { commands.entity(entity).despawn_recursive(); } @@ -116,20 +125,6 @@ fn handle_unload( } } -fn handle_respawn( - mut commands: Commands, - keyboard_input: Res>, - maps_query: Query>, -) { - if keyboard_input.just_pressed(KeyCode::KeyR) { - if let Ok(entity) = maps_query.get_single() { - commands.entity(entity).insert(RespawnTiledMap); - } else { - warn!("Cannot respawn: no map loaded ?"); - } - } -} - fn log_transitions(mut transitions: EventReader>) { for transition in transitions.read() { info!( diff --git a/src/lib.rs b/src/lib.rs index 8783a56..06fa44c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -124,7 +124,6 @@ fn process_loaded_maps( asset_server: Res, mut commands: Commands, maps: ResMut>, - tile_storage_query: Query<(Entity, &TileStorage)>, mut map_query: Query< ( Entity, @@ -150,29 +149,28 @@ fn process_loaded_maps( continue; } - if let Some(tiled_map) = maps.get(&map_handle.0) { - info!( - "Map '{}' has finished loading, spawn it", - map_handle.0.path().unwrap() - ); - - // Make sure our tile_storage is empty - remove_layers(&mut commands, &tile_storage_query, &mut tiled_id_storage); - - debug!("Spawn map layers"); - loader::load_map( - &mut commands, - map_entity, - &map_handle.0, - tiled_map, - &mut tiled_id_storage, - render_settings, - tiled_settings, - ); - - // Remove the respawn marker - commands.entity(map_entity).remove::(); - } + let tiled_map = maps.get(&map_handle.0).unwrap(); + info!( + "Map '{}' has finished loading, spawn it", + map_handle.0.path().unwrap() + ); + + // Clean map layers + remove_layers(&mut commands, &mut tiled_id_storage); + + debug!("Spawn map layers"); + loader::load_map( + &mut commands, + map_entity, + &map_handle.0, + tiled_map, + &mut tiled_id_storage, + render_settings, + tiled_settings, + ); + + // Remove the respawn marker + commands.entity(map_entity).remove::(); } } } @@ -181,79 +179,33 @@ fn process_loaded_maps( fn handle_map_events( mut commands: Commands, mut map_events: EventReader>, - tile_storage_query: Query<(Entity, &TileStorage)>, - mut map_query: Query<(Entity, &TiledMapHandle, &mut TiledIdStorage)>, - layer_query: Query<(Entity, &TiledMapLayer), With>, + mut map_query: Query<(Entity, &TiledMapHandle)>, ) { for event in map_events.read() { match event { AssetEvent::Modified { id } => { - log::info!("Map changed: {id}"); - for (map_entity, map_handle, _) in map_query.iter() { + info!("Map changed: {id}"); + for (map_entity, map_handle) in map_query.iter() { if map_handle.0.id() == *id { commands.entity(map_entity).insert(RespawnTiledMap); } } } AssetEvent::Removed { id } => { - log::info!("Map removed: {id}"); - remove_map_by_asset_id( - &mut commands, - &tile_storage_query, - &mut map_query, - &layer_query, - id, - ); + info!("Map removed: {id}"); + for (map_entity, map_handle) in map_query.iter_mut() { + if map_handle.0.id() == *id { + commands.entity(map_entity).despawn_recursive(); + } + } } _ => continue, } } } -fn remove_map_by_asset_id( - commands: &mut Commands, - tile_storage_query: &Query<(Entity, &TileStorage)>, - map_query: &mut Query<(Entity, &TiledMapHandle, &mut TiledIdStorage)>, - layer_query: &Query<(Entity, &TiledMapLayer), With>, - asset_id: &AssetId, -) { - log::info!("removing map by asset id: {}", asset_id); - for (_, map_handle, mut tiled_id_storage) in map_query.iter_mut() { - log::info!("checking layer to remove: {}", map_handle.0.id()); - - // Only process the map that was removed. - if map_handle.0.id() != *asset_id { - continue; - } - - remove_layers(commands, tile_storage_query, &mut tiled_id_storage); - } - - // Also manually despawn layers for this map. - // This is necessary because when a new layer is added, the map handle - // generation is incremented, and then a subsequent removal event will not - // match the map_handle in the loop above. - for (layer_entity, map_layer) in layer_query.iter() { - // only deal with currently changed map - if map_layer.map_handle_id != *asset_id { - continue; - } - - commands.entity(layer_entity).despawn_recursive(); - } -} - -fn remove_layers( - commands: &mut Commands, - tile_storage_query: &Query<(Entity, &TileStorage)>, - tiled_id_storage: &mut TiledIdStorage, -) { +fn remove_layers(commands: &mut Commands, tiled_id_storage: &mut TiledIdStorage) { for layer_entity in tiled_id_storage.layers.values() { - if let Ok((_, layer_tile_storage)) = tile_storage_query.get(*layer_entity) { - for tile in layer_tile_storage.iter().flatten() { - commands.entity(*tile).despawn_recursive() - } - } commands.entity(*layer_entity).despawn_recursive(); } tiled_id_storage.layers.clear(); From cea3e532c1f84a5a5d8b909b94c289d26508a627 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Mon, 25 Nov 2024 21:37:33 +0000 Subject: [PATCH 03/14] wip: fix bevy_ecs_tilemap build + tilemap changes detection --- Cargo.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 04cbb6d..fef872e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,8 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies bevy = { version = "0.15.0-rc.3", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/rparrett/bevy_ecs_tilemap.git", rev = "53bbc0e0a87d0324cc3c86163324f8842262cf07", default-features = false } +#bevy_ecs_tilemap = { git = "https://github.com/rparrett/bevy_ecs_tilemap.git", rev = "53bbc0e0a87d0324cc3c86163324f8842262cf07", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/adrien-bon/bevy_ecs_tilemap.git", rev = "6e757906c2fedd62de9c9dbb52c2f001412476f2", default-features = false } tiled = "0.13" # Utilities From 83b7227d0caed22d5d4aa9c9a047307026e05b7a Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Tue, 26 Nov 2024 20:09:06 +0000 Subject: [PATCH 04/14] wip: fix render entities removal --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index fef872e..ad7f089 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -48,7 +48,7 @@ user_properties = ["dep:serde", "dep:serde_json"] # Main dependencies bevy = { version = "0.15.0-rc.3", default-features = false } #bevy_ecs_tilemap = { git = "https://github.com/rparrett/bevy_ecs_tilemap.git", rev = "53bbc0e0a87d0324cc3c86163324f8842262cf07", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/adrien-bon/bevy_ecs_tilemap.git", rev = "6e757906c2fedd62de9c9dbb52c2f001412476f2", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/adrien-bon/bevy_ecs_tilemap.git", rev = "d814be54acfc014e61a1193bcaa42f9472d2f237", default-features = false } tiled = "0.13" # Utilities From 96e395d2a87794a8ac9754c9c00da431082e6b8a Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Sun, 1 Dec 2024 19:28:09 +0000 Subject: [PATCH 05/14] update bevy to v0.15 release, bevy_egui_inspector and avian2d --- Cargo.toml | 13 +++++-------- examples/helper/mod.rs | 4 ++-- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ad7f089..2fcae08 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -46,9 +46,8 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies -bevy = { version = "0.15.0-rc.3", default-features = false } -#bevy_ecs_tilemap = { git = "https://github.com/rparrett/bevy_ecs_tilemap.git", rev = "53bbc0e0a87d0324cc3c86163324f8842262cf07", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/adrien-bon/bevy_ecs_tilemap.git", rev = "d814be54acfc014e61a1193bcaa42f9472d2f237", default-features = false } +bevy = { version = "0.15", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/adrien-bon/bevy_ecs_tilemap.git", rev = "de93ff7a0edc0ffe13f0c49e637414a1ab65f656", default-features = false } tiled = "0.13" # Utilities @@ -58,7 +57,7 @@ thiserror = "2.0" # Optional dependencies, enabled via features. bevy_rapier2d = { git = "https://github.com/Vrixyz/bevy_rapier.git", rev = "61d3ef2ffc0793008f652a3a2f3552f40bbecdcb", optional = true } -avian2d = { git = "https://github.com/Jondolf/avian.git", rev = "ed6a5c4925107636bfbf8f635d0b6a119c80ed22", optional = true } +avian2d = { git = "https://github.com/Jondolf/avian.git", rev = "52cbcecce0fd05a65005ab6935ebeb231373c2c6", optional = true } serde = { version = "1.0", optional = true, features = ["derive"] } serde_json = { version = "1.0", optional = true } @@ -74,10 +73,8 @@ max_combination_size = 3 denylist = ["png", "bmp", "jpeg", "gif"] [dev-dependencies] -bevy = { version = "0.15.0-rc.3", features = ["file_watcher"] } -bevy-inspector-egui = "0.27" -#bevy-inspector-egui = "0.27" -#bevy-inspector-egui = { git = "https://github.com/Vrixyz/bevy-inspector-egui.git", rev = "af535e907d0d37987429e821452a425d62bfba18" } +bevy = { version = "0.15", features = ["file_watcher"] } +bevy-inspector-egui = "0.28" [[example]] name = "basic" diff --git a/examples/helper/mod.rs b/examples/helper/mod.rs index cc969de..3c25e29 100644 --- a/examples/helper/mod.rs +++ b/examples/helper/mod.rs @@ -1,5 +1,5 @@ use bevy::prelude::*; -//use bevy_inspector_egui::quick::WorldInspectorPlugin; +use bevy_inspector_egui::quick::WorldInspectorPlugin; #[allow(dead_code)] pub mod assets; @@ -18,7 +18,7 @@ pub struct HelperPlugin; impl Plugin for HelperPlugin { fn build(&self, app: &mut bevy::prelude::App) { - // app.add_plugins(WorldInspectorPlugin::new()); + app.add_plugins(WorldInspectorPlugin::new()); app.add_systems(Update, camera::movement); app.add_systems(Update, map::rotate); #[cfg(feature = "rapier")] From 4daebbd1c919bc7a72df2dcb5a618650d33e84fa Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Tue, 3 Dec 2024 15:02:15 +0000 Subject: [PATCH 06/14] update bevy_ecs_tilemap to latest PR --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 2fcae08..e67a1d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,7 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies bevy = { version = "0.15", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/adrien-bon/bevy_ecs_tilemap.git", rev = "de93ff7a0edc0ffe13f0c49e637414a1ab65f656", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/StarArawn/bevy_ecs_tilemap.git", rev = "17ff958538c0431afb8e6d53fc4916ed3fb821b0", default-features = false } tiled = "0.13" # Utilities From c1f0343fb7ac2910cfb73c8d662d91b2d82ced5a Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Tue, 3 Dec 2024 15:02:55 +0000 Subject: [PATCH 07/14] downgrade thiserror to 1.0.X since Bevy still use it --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index e67a1d7..3f63ec8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,7 +53,7 @@ tiled = "0.13" # Utilities futures-lite = "2.5" log = "0.4" -thiserror = "2.0" +thiserror = "1.0" # Optional dependencies, enabled via features. bevy_rapier2d = { git = "https://github.com/Vrixyz/bevy_rapier.git", rev = "61d3ef2ffc0793008f652a3a2f3552f40bbecdcb", optional = true } From 856bc711448ead3834b64db4e9b80b24d3bffdc2 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:08:44 +0000 Subject: [PATCH 08/14] update bevy_ecs_tilemap rev --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 3f63ec8..d859106 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,7 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies bevy = { version = "0.15", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/StarArawn/bevy_ecs_tilemap.git", rev = "17ff958538c0431afb8e6d53fc4916ed3fb821b0", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/StarArawn/bevy_ecs_tilemap.git", rev = "ffaae04cb48f7cf7d937d2b6f988c9689139d889", default-features = false } tiled = "0.13" # Utilities From d96857ad5c50a659807538d7d64b47d9e254be9b Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:01:41 +0000 Subject: [PATCH 09/14] update bevy_ecs_tilemap and bevy_rapier2d rev --- Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d859106..9b7bcd4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,7 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies bevy = { version = "0.15", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/StarArawn/bevy_ecs_tilemap.git", rev = "ffaae04cb48f7cf7d937d2b6f988c9689139d889", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/StarArawn/bevy_ecs_tilemap.git", rev = "05eb36a58f5481f6f065f362d2b35089a9d1502d", default-features = false } tiled = "0.13" # Utilities @@ -56,7 +56,7 @@ log = "0.4" thiserror = "1.0" # Optional dependencies, enabled via features. -bevy_rapier2d = { git = "https://github.com/Vrixyz/bevy_rapier.git", rev = "61d3ef2ffc0793008f652a3a2f3552f40bbecdcb", optional = true } +bevy_rapier2d = { git = "https://github.com/Vrixyz/bevy_rapier.git", rev = "fd85257d234833696e40c3d69e63f9d004286b5d", optional = true } avian2d = { git = "https://github.com/Jondolf/avian.git", rev = "52cbcecce0fd05a65005ab6935ebeb231373c2c6", optional = true } serde = { version = "1.0", optional = true, features = ["derive"] } serde_json = { version = "1.0", optional = true } From 37d188f7e372dd7e5fdab6a0199fd01847075ca4 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:54:08 +0000 Subject: [PATCH 10/14] fix broken hierarchy warning when using tile colliders, do not add Visibility to colliders --- src/physics/collider.rs | 2 +- src/physics/mod.rs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/physics/collider.rs b/src/physics/collider.rs index 7b6e7f9..635b38b 100644 --- a/src/physics/collider.rs +++ b/src/physics/collider.rs @@ -5,7 +5,7 @@ use tiled::{Layer, Map, Object, Tile}; /// Marker component for colliders #[derive(Component)] -#[require(Visibility, Transform)] +#[require(Transform)] pub struct TiledColliderMarker; /// Describe the type of the [TiledColliderSource]. diff --git a/src/physics/mod.rs b/src/physics/mod.rs index 6f78103..7876826 100644 --- a/src/physics/mod.rs +++ b/src/physics/mod.rs @@ -190,12 +190,12 @@ fn collider_from_tile< .as_ref() .and_then(|tile| tile.collision.as_ref()) { - // We need to add a Transform to our tile so Transform from the map and layers - // will be propagated down to the collider(s) + // We need to add a Transform to our tile so Transform from + // the map and layers will be propagated down to the collider(s) let world_position = trigger.event().world_position(&map_asset); - commands - .entity(trigger.event().tile) - .insert(Transform::from_xyz(world_position.x, world_position.y, 0.0)); + commands.entity(trigger.event().tile).insert( + Transform::from_xyz(world_position.x, world_position.y, 0.0), + ); for (object_id, object_data) in collision.object_data().iter().enumerate() { if objects_filter.contains(&object_data.name) { From c42d1917b5b9f8a9c7ef06394bdb0f9376e9e509 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:55:31 +0000 Subject: [PATCH 11/14] add required components to our marker components + compact spawn / insert directives --- src/components.rs | 11 +++++++ src/loader.rs | 75 +++++++++++++++++++++++------------------------ 2 files changed, 48 insertions(+), 38 deletions(-) diff --git a/src/components.rs b/src/components.rs index cf4586a..ecdfc4a 100644 --- a/src/components.rs +++ b/src/components.rs @@ -75,6 +75,7 @@ pub struct TiledIdStorage { /// Marker [Component] for a Tiled map. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapMarker; /// Marker [Component] for a Tiled map layer. @@ -89,6 +90,7 @@ pub struct TiledMapLayer { /// Marker [Component] for a Tiled map tile layer. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapTileLayer; /// Marker [Component] for a Tiled map tile layer for a given tileset. @@ -98,20 +100,29 @@ pub struct TiledMapTileLayerForTileset; /// Marker [Component] for a Tiled map object layer. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapObjectLayer; /// Marker [Component] for a Tiled map group layer. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapGroupLayer; /// Marker [Component] for a Tiled map image layer. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapImageLayer; /// Marker [Component] for a Tiled map tile. +/// +/// Note that this component does not require [Visibility] or [Transform] +/// It would be useless to add these components to tile entities: +/// - it will not do what you think: rendering is done at the [TiledMapTileLayerForTileset] level through `TilemapBundle` from `bevy_ecs_tilemap` +/// - it could impact performances pretty badly since it would mean to compute both [GlobalTransform] and [InheritedVisibility] for all tiles #[derive(Component)] pub struct TiledMapTile; /// Marker [Component] for a Tiled map object. #[derive(Component)] +#[require(Visibility, Transform)] pub struct TiledMapObject; diff --git a/src/loader.rs b/src/loader.rs index 6c038b5..09c7657 100644 --- a/src/loader.rs +++ b/src/loader.rs @@ -48,13 +48,13 @@ pub(super) fn load_map( render_settings: &TilemapRenderSettings, tiled_settings: &TiledMapSettings, ) { - commands - .entity(map_entity) - .insert(Name::new(format!( + commands.entity(map_entity).insert(( + Name::new(format!( "TiledMap({} x {})", tiled_map.map.width, tiled_map.map.height - ))) - .insert(TiledMapMarker); + )), + TiledMapMarker, + )); let map_type = get_map_type(&tiled_map.map); let map_size = get_map_size(&tiled_map.map); @@ -344,23 +344,22 @@ fn load_finite_tiles_layer( let tile_pos = TilePos { x, y }; let tile_entity = commands - .spawn(TileBundle { - position: tile_pos, - tilemap_id: TilemapId(layer_for_tileset_entity), - texture_index: TileTextureIndex(texture_index), - flip: TileFlip { - x: layer_tile_data.flip_h, - y: layer_tile_data.flip_v, - d: layer_tile_data.flip_d, + .spawn(( + TileBundle { + position: tile_pos, + tilemap_id: TilemapId(layer_for_tileset_entity), + texture_index: TileTextureIndex(texture_index), + flip: TileFlip { + x: layer_tile_data.flip_h, + y: layer_tile_data.flip_v, + d: layer_tile_data.flip_d, + }, + ..Default::default() }, - ..Default::default() - }) + Name::new(format!("TiledMapTile({},{})", tile_pos.x, tile_pos.y)), + TiledMapTile, + )) .set_parent(layer_for_tileset_entity) - .insert(Name::new(format!( - "TiledMapTile({},{})", - tile_pos.x, tile_pos.y - ))) - .insert(TiledMapTile) .id(); handle_special_tile( @@ -474,20 +473,22 @@ fn load_infinite_tiles_layer( y: map_size.y - 1 - tile_y as u32, }; let tile_entity = commands - .spawn(TileBundle { - position: tile_pos, - tilemap_id: TilemapId(layer_for_tileset_entity), - texture_index: TileTextureIndex(texture_index), - flip: TileFlip { - x: layer_tile_data.flip_h, - y: layer_tile_data.flip_v, - d: layer_tile_data.flip_d, + .spawn(( + TileBundle { + position: tile_pos, + tilemap_id: TilemapId(layer_for_tileset_entity), + texture_index: TileTextureIndex(texture_index), + flip: TileFlip { + x: layer_tile_data.flip_h, + y: layer_tile_data.flip_v, + d: layer_tile_data.flip_d, + }, + ..Default::default() }, - ..Default::default() - }) + Name::new(format!("Tile({},{})", tile_pos.x, tile_pos.y)), + TiledMapTile, + )) .set_parent(layer_for_tileset_entity) - .insert(Name::new(format!("Tile({},{})", tile_pos.x, tile_pos.y))) - .insert(TiledMapTile) .id(); handle_special_tile( commands, @@ -534,13 +535,11 @@ fn load_objects_layer( &grid_size, ); let object_entity = commands - .spawn(Transform::from_xyz( - object_position.x, - object_position.y, - 0., + .spawn(( + Name::new(format!("Object({})", object_data.name)), + TiledMapObject, + Transform::from_xyz(object_position.x, object_position.y, 0.), )) - .insert(Name::new(format!("Object({})", object_data.name))) - .insert(TiledMapObject) .set_parent(layer_infos.layer) .id(); From 86e489ad42941a40f329628695ea5232d427875d Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:05:55 +0000 Subject: [PATCH 12/14] cargo fmt --- src/physics/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/physics/mod.rs b/src/physics/mod.rs index 7876826..c1ddc7b 100644 --- a/src/physics/mod.rs +++ b/src/physics/mod.rs @@ -193,9 +193,9 @@ fn collider_from_tile< // We need to add a Transform to our tile so Transform from // the map and layers will be propagated down to the collider(s) let world_position = trigger.event().world_position(&map_asset); - commands.entity(trigger.event().tile).insert( - Transform::from_xyz(world_position.x, world_position.y, 0.0), - ); + commands + .entity(trigger.event().tile) + .insert(Transform::from_xyz(world_position.x, world_position.y, 0.0)); for (object_id, object_data) in collision.object_data().iter().enumerate() { if objects_filter.contains(&object_data.name) { From 1783d26ca4d221d05674c5961fdbac9dc6fb939e Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Thu, 5 Dec 2024 22:11:09 +0000 Subject: [PATCH 13/14] chore: migration guide spelling --- book/src/migrations/v0_5.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/book/src/migrations/v0_5.md b/book/src/migrations/v0_5.md index a8ad580..76b18c9 100644 --- a/book/src/migrations/v0_5.md +++ b/book/src/migrations/v0_5.md @@ -4,7 +4,7 @@ Version 0.5 updates the crate for Bevy v0.15. -It also takes advantages of the new `required_component` feature to simplify the crate API. +It also takes advantage of the new `required_component` feature to simplify the crate API. ## Bevy v0.15 update @@ -16,7 +16,7 @@ It also takes advantages of the new `required_component` feature to simplify the `map_initial_transform` and `map_initial_visibility` have been removed from `TiledMapSettings`. -If you want to tweak your map positioning or visibility, you should instead directly insert corresponding `Transform` or `Visibility` components on it. +If you want to tweak your map positioning or visibility, you should instead directly insert corresponding `Transform` or `Visibility` components on the map entity. Before: From 9263357d4fdfc3e5df4d01c635ab84a2f040bdd2 Mon Sep 17 00:00:00 2001 From: Adrien BON <63343541+adrien-bon@users.noreply.github.com> Date: Sat, 14 Dec 2024 17:54:46 +0000 Subject: [PATCH 14/14] update dependencies --- Cargo.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9b7bcd4..40c1868 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -47,7 +47,7 @@ user_properties = ["dep:serde", "dep:serde_json"] [dependencies] # Main dependencies bevy = { version = "0.15", default-features = false } -bevy_ecs_tilemap = { git = "https://github.com/StarArawn/bevy_ecs_tilemap.git", rev = "05eb36a58f5481f6f065f362d2b35089a9d1502d", default-features = false } +bevy_ecs_tilemap = { git = "https://github.com/rparrett/bevy_ecs_tilemap.git", rev = "86235d6f9f4f05cd4e3f6af9d3392b08a590a48f", default-features = false } tiled = "0.13" # Utilities @@ -56,8 +56,8 @@ log = "0.4" thiserror = "1.0" # Optional dependencies, enabled via features. -bevy_rapier2d = { git = "https://github.com/Vrixyz/bevy_rapier.git", rev = "fd85257d234833696e40c3d69e63f9d004286b5d", optional = true } -avian2d = { git = "https://github.com/Jondolf/avian.git", rev = "52cbcecce0fd05a65005ab6935ebeb231373c2c6", optional = true } +bevy_rapier2d = { version = "0.28", optional = true } +avian2d = { git = "https://github.com/Jondolf/avian.git", rev = "5cd89f141cc97d37e6ad2575184158372d1f1f6c", optional = true } serde = { version = "1.0", optional = true, features = ["derive"] } serde_json = { version = "1.0", optional = true }