From 06798c95cbd9aa93fb0d72c87f83c33e692e7618 Mon Sep 17 00:00:00 2001 From: Tim Blackbird Date: Fri, 18 Jul 2025 21:33:03 +0200 Subject: [PATCH 1/5] Update to `0294fa89db4e213ac8e186eed6966a7ea7459d1a` This is the commit right before cart's BSN PR --- Cargo.toml | 13 ++++---- bevy_editor_panes/bevy_3d_viewport/src/lib.rs | 2 +- bevy_widgets/bevy_scroll_box/src/lib.rs | 32 +++++++++---------- crates/bevy_editor_cam/Cargo.toml | 2 +- crates/bevy_infinite_grid/src/render/mod.rs | 8 ++--- crates/bevy_proto_bsn/src/construct.rs | 11 +------ .../bevy_proto_bsn/src/construct_reflect.rs | 6 ++-- crates/bevy_undo/src/lib.rs | 27 +++++++--------- 8 files changed, 45 insertions(+), 56 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index bec090f2..e6d43769 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -resolver = "2" +resolver = "3" members = ["crates/*", "bevy_editor_panes/*", "bevy_widgets/*"] exclude = ["templates/"] default-members = ["crates/bevy_editor_launcher"] @@ -27,12 +27,12 @@ unsafe_op_in_unsafe_fn = "warn" unused_qualifications = "warn" [workspace.dependencies] -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "a3d406dd497205253e34ace757ab0076d50eec14", features = [ - "wayland", +bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a", features = [ + # "wayland", ] } -bevy_render = { git = "https://github.com/bevyengine/bevy.git", rev = "a3d406dd497205253e34ace757ab0076d50eec14" } -bevy_derive = { git = "https://github.com/bevyengine/bevy.git", rev = "a3d406dd497205253e34ace757ab0076d50eec14" } -bevy_macro_utils = { git = "https://github.com/bevyengine/bevy.git", rev = "a3d406dd497205253e34ace757ab0076d50eec14" } +bevy_render = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a" } +bevy_derive = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a" } +bevy_macro_utils = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a" } thiserror = "2.0" serde = { version = "1", features = ["derive"] } tracing-test = "0.2.5" @@ -78,6 +78,7 @@ bevy_editor_styles = { path = "crates/bevy_editor_styles" } bevy_localization = { path = "crates/bevy_localization" } bevy_pane_layout = { path = "crates/bevy_pane_layout" } bevy_transform_gizmos = { path = "crates/bevy_transform_gizmos" } +bevy_transform_gizmo = { path = "crates/bevy_transform_gizmo" } bevy_undo = { path = "crates/bevy_undo" } bevy_infinite_grid = { path = "crates/bevy_infinite_grid" } bevy_editor_cam = { path = "crates/bevy_editor_cam" } diff --git a/bevy_editor_panes/bevy_3d_viewport/src/lib.rs b/bevy_editor_panes/bevy_3d_viewport/src/lib.rs index d2155b0a..693e6f3c 100644 --- a/bevy_editor_panes/bevy_3d_viewport/src/lib.rs +++ b/bevy_editor_panes/bevy_3d_viewport/src/lib.rs @@ -118,7 +118,7 @@ fn render_target_picking_passthrough( pointer_id: pointer_id_from_entity(pane_root), }; - commands.send_event(event_copy); + commands.write_event(event_copy); } } } diff --git a/bevy_widgets/bevy_scroll_box/src/lib.rs b/bevy_widgets/bevy_scroll_box/src/lib.rs index f73d6001..8c39464a 100644 --- a/bevy_widgets/bevy_scroll_box/src/lib.rs +++ b/bevy_widgets/bevy_scroll_box/src/lib.rs @@ -202,13 +202,13 @@ fn spawn_scroll_bar<'a>( query_computed_node.get(handle_entity).unwrap().size().y / scrollbox_size }; - scrollbox.position.offset_y = + scrollbox.position.y = -((norm_cursor_pos.y - norm_handle_size / 2.0) * content_size); - scrollbox.position.offset_y = scrollbox + scrollbox.position.y = scrollbox .position - .offset_y + .y .clamp(-(content_size - (norm_handle_size * content_size)), 0.0); - content_node.top = Val::Px(scrollbox.position.offset_y); + content_node.top = Val::Px(scrollbox.position.y); } ScrollBarHandleDirection::Horizontal => { let content_size = content_computed.size().x; @@ -218,13 +218,13 @@ fn spawn_scroll_bar<'a>( query_computed_node.get(handle_entity).unwrap().size().x / scrollbox_size }; - scrollbox.position.offset_x = + scrollbox.position.x = -((norm_cursor_pos.x - norm_handle_size / 2.0) * content_size); - scrollbox.position.offset_x = scrollbox + scrollbox.position.x = scrollbox .position - .offset_x + .x .clamp(-(content_size - (norm_handle_size * content_size)), 0.0); - content_node.left = Val::Px(scrollbox.position.offset_x); + content_node.left = Val::Px(scrollbox.position.x); } } } @@ -264,12 +264,12 @@ fn on_scroll( if keys.pressed(KeyCode::ShiftLeft) || keys.pressed(KeyCode::ShiftRight) { let max_scroll = (content_sizes.x - scrollbox_sizes.x).max(0.0); - scrollbox.position.offset_x = - (scrollbox.position.offset_x + scroll_delta).clamp(-max_scroll, 0.0); + scrollbox.position.x = + (scrollbox.position.x + scroll_delta).clamp(-max_scroll, 0.0); } else { let max_scroll = (content_sizes.y - scrollbox_sizes.y).max(0.); - scrollbox.position.offset_y = - (scrollbox.position.offset_y + scroll_delta).clamp(-max_scroll, 0.0); + scrollbox.position.y = + (scrollbox.position.y + scroll_delta).clamp(-max_scroll, 0.0); } return; // We only want to scroll 1 ScrollBox @@ -287,7 +287,7 @@ fn update_scroll_box( .first() .expect("Scrollbox children 0 should be a ScrollBoxContent"); let mut content_node = query_node.get_mut(*scroll_content).unwrap(); - content_node.top = Val::Px(scrollbox.position.offset_y); + content_node.top = Val::Px(scrollbox.position.y); } if scrollbox.overflow.x == OverflowAxis::Scroll { @@ -295,7 +295,7 @@ fn update_scroll_box( .first() .expect("Scrollbox children 0 should be a ScrollBoxContent"); let mut content_node = query_node.get_mut(*scroll_content).unwrap(); - content_node.left = Val::Px(scrollbox.position.offset_x); + content_node.left = Val::Px(scrollbox.position.x); } } } @@ -329,7 +329,7 @@ fn update_scroll_bars( (100.0, 0.0) } else { let height = (scrollbox_height / content_height * 100.0).clamp(5.0, 100.0); - let pos = (-scrollbox.position.offset_y / content_height * 100.0).clamp(0.0, 100.0); + let pos = (-scrollbox.position.y / content_height * 100.0).clamp(0.0, 100.0); (height, pos) }; @@ -370,7 +370,7 @@ fn update_scroll_bars( (100.0, 0.0) } else { let width = (scrollbox_width / content_width * 100.0).clamp(5.0, 100.0); - let pos = (-scrollbox.position.offset_x / content_width * 100.0).clamp(0.0, 100.0); + let pos = (-scrollbox.position.x / content_width * 100.0).clamp(0.0, 100.0); (width, pos) }; diff --git a/crates/bevy_editor_cam/Cargo.toml b/crates/bevy_editor_cam/Cargo.toml index 2512aac6..7a2a20aa 100644 --- a/crates/bevy_editor_cam/Cargo.toml +++ b/crates/bevy_editor_cam/Cargo.toml @@ -17,7 +17,7 @@ bevy.workspace = true bevy_derive.workspace = true [dev-dependencies] -bevy = { workspace = true, features = ["jpeg", "ktx2", "zstd"] } +bevy = { workspace = true, features = ["jpeg", "ktx2", "zstd_rust"] } rand = "0.8" [lints] diff --git a/crates/bevy_infinite_grid/src/render/mod.rs b/crates/bevy_infinite_grid/src/render/mod.rs index d8ef3bef..81ee4417 100755 --- a/crates/bevy_infinite_grid/src/render/mod.rs +++ b/crates/bevy_infinite_grid/src/render/mod.rs @@ -1,7 +1,7 @@ use std::borrow::Cow; use bevy::{ - asset::{load_internal_asset, weak_handle}, + asset::{load_internal_asset, uuid_handle}, core_pipeline::{core_2d::Transparent2d, core_3d::Transparent3d}, ecs::{ query::ROQueryItem, @@ -37,7 +37,7 @@ use bevy::{ use crate::InfiniteGridSettings; -const GRID_SHADER_HANDLE: Handle = weak_handle!("7cd38dd1-d707-481e-b38c-0eccb706e629"); +const GRID_SHADER_HANDLE: Handle = uuid_handle!("7cd38dd1-d707-481e-b38c-0eccb706e629"); pub fn render_app_builder(app: &mut App) { load_internal_asset!(app, GRID_SHADER_HANDLE, "grid.wgsl", Shader::from_wgsl); @@ -531,7 +531,7 @@ impl SpecializedRenderPipeline for InfiniteGridPipeline { vertex: VertexState { shader: GRID_SHADER_HANDLE, shader_defs: vec![], - entry_point: Cow::Borrowed("vertex"), + entry_point: Some(Cow::Borrowed("vertex")), buffers: vec![], }, primitive: PrimitiveState { @@ -567,7 +567,7 @@ impl SpecializedRenderPipeline for InfiniteGridPipeline { fragment: Some(FragmentState { shader: GRID_SHADER_HANDLE, shader_defs: vec![], - entry_point: Cow::Borrowed("fragment"), + entry_point: Some(Cow::Borrowed("fragment")), targets: vec![Some(ColorTargetState { format, blend: Some(BlendState::ALPHA_BLENDING), diff --git a/crates/bevy_proto_bsn/src/construct.rs b/crates/bevy_proto_bsn/src/construct.rs index 63e90c22..c84b83bf 100644 --- a/crates/bevy_proto_bsn/src/construct.rs +++ b/crates/bevy_proto_bsn/src/construct.rs @@ -2,9 +2,7 @@ use alloc::borrow::Cow; use bevy::{ ecs::{ bundle::{BundleFromComponents, DynamicBundle}, - component::{ - ComponentId, Components, ComponentsRegistrator, RequiredComponents, StorageType, - }, + component::{ComponentId, Components, ComponentsRegistrator, StorageType}, system::EntityCommands, world::error::EntityMutableFetchError, }, @@ -195,13 +193,6 @@ unsafe impl Bundle for ConstructTuple { B::component_ids(components, ids); } - fn register_required_components( - components: &mut ComponentsRegistrator, - required_components: &mut RequiredComponents, - ) { - B::register_required_components(components, required_components); - } - fn get_component_ids(components: &Components, ids: &mut impl FnMut(Option)) { B::get_component_ids(components, ids); } diff --git a/crates/bevy_proto_bsn/src/construct_reflect.rs b/crates/bevy_proto_bsn/src/construct_reflect.rs index f3dbab6a..9b9b241b 100644 --- a/crates/bevy_proto_bsn/src/construct_reflect.rs +++ b/crates/bevy_proto_bsn/src/construct_reflect.rs @@ -140,7 +140,7 @@ pub(crate) fn register_reflect_construct(app: &mut App) { app.register_type_data::(); app.register_type_data::(); app.register_type_data::(); - app.register_type_data::(); + app.register_type_data::(); app.register_type_data::(); app.register_type_data::(); app.register_type_data::(); @@ -240,7 +240,7 @@ pub(crate) fn register_reflect_construct(app: &mut App) { app.register_type_data::(); app.register_type_data::(); app.register_type_data::(); - app.register_type_data::(); + app.register_type_data::(); app.register_type_data::(); app.register_type_data::(); app.register_type::(); @@ -252,7 +252,7 @@ pub(crate) fn register_reflect_construct(app: &mut App) { app.register_type_data::(); app.register_type_data::(); app.register_type_data::(); - app.register_type_data::(); + app.register_type_data::(); app.register_type::(); app.register_type::(); app.register_type_data::(); diff --git a/crates/bevy_undo/src/lib.rs b/crates/bevy_undo/src/lib.rs index 08297866..a1210087 100644 --- a/crates/bevy_undo/src/lib.rs +++ b/crates/bevy_undo/src/lib.rs @@ -682,7 +682,7 @@ impl EditorChange for ReflectedComponentCh .entity_mut(e) .insert(::from_reflect(&self.old_value).unwrap()) .insert(OneFrameUndoIgnore::default()); - world.send_event(UndoRedoApplied:: { + world.write_event(UndoRedoApplied:: { entity: e, _phantom: std::marker::PhantomData, }); @@ -794,7 +794,7 @@ impl EditorChange for ReflectedAddedCompon .resource_mut::() .storage .insert(dst, OneFrameUndoIgnore::default()); - world.send_event(UndoRedoApplied:: { + world.write_event(UndoRedoApplied:: { entity: dst, _phantom: std::marker::PhantomData, }); @@ -915,7 +915,7 @@ impl EditorChange for ReflectedRemovedComp .entity_mut(dst) .insert(::from_reflect(&self.old_value).unwrap()) .insert(OneFrameUndoIgnore::default()); - world.send_event(UndoRedoApplied:: { + world.write_event(UndoRedoApplied:: { entity: dst, _phantom: std::marker::PhantomData, }); @@ -1261,11 +1261,8 @@ fn apply_for_every_typed_field( ); } } - bevy::reflect::ReflectMut::Map(s) => { - for field_idx in 0..s.len() { - let (_key, value) = s.get_at_mut(field_idx).unwrap(); - apply_for_every_typed_field(value, applyer, max_recursion - 1); - } + bevy::reflect::ReflectMut::Map(_s) => { + unimplemented!("See: https://github.com/bevyengine/bevy/pull/19802"); } bevy::reflect::ReflectMut::Enum(s) => { for field_idx in 0..s.field_len() { @@ -1535,7 +1532,7 @@ mod tests { app.update(); let test_id = app.world_mut().spawn_empty().id(); - app.world_mut().send_event(NewChange { + app.world_mut().write_event(NewChange { change: Arc::new(AddedEntity { entity: test_id }), }); @@ -1560,7 +1557,7 @@ mod tests { assert!(app.world_mut().get_entity(test_id).is_ok()); - app.world_mut().send_event(UndoRedo::Undo); + app.world_mut().write_event(UndoRedo::Undo); app.update(); app.update(); @@ -1572,7 +1569,7 @@ mod tests { assert!(app.world_mut().get::(test_id).is_none()); assert!(app.world_mut().get_entity(test_id).is_ok()); - app.world_mut().send_event(UndoRedo::Undo); + app.world_mut().write_event(UndoRedo::Undo); app.update(); app.update(); @@ -1589,10 +1586,10 @@ mod tests { let test_id_1 = app.world_mut().spawn(UndoMarker).id(); let test_id_2 = app.world_mut().spawn(UndoMarker).id(); - app.world_mut().send_event(NewChange { + app.world_mut().write_event(NewChange { change: Arc::new(AddedEntity { entity: test_id_1 }), }); - app.world_mut().send_event(NewChange { + app.world_mut().write_event(NewChange { change: Arc::new(AddedEntity { entity: test_id_2 }), }); @@ -1606,14 +1603,14 @@ mod tests { app.cleanup(); app.world_mut().entity_mut(test_id_1).despawn(); - app.world_mut().send_event(NewChange { + app.world_mut().write_event(NewChange { change: Arc::new(RemovedEntity { entity: test_id_1 }), }); app.update(); app.update(); - app.world_mut().send_event(UndoRedo::Undo); + app.world_mut().write_event(UndoRedo::Undo); app.update(); app.update(); From e04b5494dd7a3e15e459d9f38e4172cb90a5fb2f Mon Sep 17 00:00:00 2001 From: Tim Blackbird Date: Fri, 18 Jul 2025 21:39:10 +0200 Subject: [PATCH 2/5] Depend on cart's BSN branch --- Cargo.toml | 8 ++++---- .../bevy_editor_cam/src/extensions/independent_skybox.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e6d43769..22d67a1d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,12 +27,12 @@ unsafe_op_in_unsafe_fn = "warn" unused_qualifications = "warn" [workspace.dependencies] -bevy = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a", features = [ +bevy = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581", features = [ # "wayland", ] } -bevy_render = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a" } -bevy_derive = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a" } -bevy_macro_utils = { git = "https://github.com/bevyengine/bevy.git", rev = "0294fa89db4e213ac8e186eed6966a7ea7459d1a" } +bevy_render = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581" } +bevy_derive = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581" } +bevy_macro_utils = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581" } thiserror = "2.0" serde = { version = "1", features = ["derive"] } tracing-test = "0.2.5" diff --git a/crates/bevy_editor_cam/src/extensions/independent_skybox.rs b/crates/bevy_editor_cam/src/extensions/independent_skybox.rs index 907219b0..8393bafa 100644 --- a/crates/bevy_editor_cam/src/extensions/independent_skybox.rs +++ b/crates/bevy_editor_cam/src/extensions/independent_skybox.rs @@ -68,7 +68,7 @@ impl IndependentSkybox { impl Default for IndependentSkybox { fn default() -> Self { Self { - skybox: Default::default(), + skybox: Handle::default(), brightness: 500.0, skybox_cam_order_offset: -1_000, fov: Default::default(), From 230e4580e65665a0f010e8f66c9a750bc2e0173e Mon Sep 17 00:00:00 2001 From: Tim Blackbird Date: Fri, 18 Jul 2025 21:47:14 +0200 Subject: [PATCH 3/5] argh --- crates/bevy_editor_core/src/utils.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_editor_core/src/utils.rs b/crates/bevy_editor_core/src/utils.rs index d6078166..0b9de23e 100644 --- a/crates/bevy_editor_core/src/utils.rs +++ b/crates/bevy_editor_core/src/utils.rs @@ -46,7 +46,7 @@ fn on_release( }, ); commands.trigger_targets(event.clone(), trigger.target()); - commands.send_event(event); + commands.write_event(event); } } From 696f7dabf408713fa6944068a60ce78f9eb8ab6b Mon Sep 17 00:00:00 2001 From: Tim Blackbird Date: Fri, 18 Jul 2025 21:55:40 +0200 Subject: [PATCH 4/5] this time for real --- crates/bevy_proto_bsn/examples/bsn_edit.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/bevy_proto_bsn/examples/bsn_edit.rs b/crates/bevy_proto_bsn/examples/bsn_edit.rs index 784eff04..880ffe8f 100644 --- a/crates/bevy_proto_bsn/examples/bsn_edit.rs +++ b/crates/bevy_proto_bsn/examples/bsn_edit.rs @@ -5,7 +5,7 @@ use bevy::prelude::*; use bevy_proto_bsn::*; -#[derive(Resource, Default)] +#[derive(Resource)] struct EditorState { bsn: Handle, } @@ -21,7 +21,9 @@ fn main() { .add_plugins(DefaultPlugins) .add_plugins(BsnPlugin) .register_type::() - .init_resource::() + .insert_resource(EditorState { + bsn: Handle::default(), + }) .add_systems( Startup, |mut commands: Commands, From 87e50f9516c11bb7f8251c978c995caee32259e7 Mon Sep 17 00:00:00 2001 From: Tim Blackbird Date: Sat, 19 Jul 2025 01:04:39 +0200 Subject: [PATCH 5/5] Update to latest commit + enable bevy_feathers + remove unintended changes to Cargo.toml I'm keeping the `resolver = "3"` >:D --- Cargo.toml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 22d67a1d..39f5ab6c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,12 +27,13 @@ unsafe_op_in_unsafe_fn = "warn" unused_qualifications = "warn" [workspace.dependencies] -bevy = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581", features = [ - # "wayland", +bevy = { git = "https://github.com/cart/bevy.git", rev = "ab733198b8b59ec90194797f4a1d46a12043ebfc", features = [ + "wayland", + "experimental_bevy_feathers", ] } -bevy_render = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581" } -bevy_derive = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581" } -bevy_macro_utils = { git = "https://github.com/cart/bevy.git", rev = "d5882d45d71ebfa805747bbb4bbf5fb226e85581" } +bevy_render = { git = "https://github.com/cart/bevy.git", rev = "ab733198b8b59ec90194797f4a1d46a12043ebfc" } +bevy_derive = { git = "https://github.com/cart/bevy.git", rev = "ab733198b8b59ec90194797f4a1d46a12043ebfc" } +bevy_macro_utils = { git = "https://github.com/cart/bevy.git", rev = "ab733198b8b59ec90194797f4a1d46a12043ebfc" } thiserror = "2.0" serde = { version = "1", features = ["derive"] } tracing-test = "0.2.5" @@ -78,7 +79,6 @@ bevy_editor_styles = { path = "crates/bevy_editor_styles" } bevy_localization = { path = "crates/bevy_localization" } bevy_pane_layout = { path = "crates/bevy_pane_layout" } bevy_transform_gizmos = { path = "crates/bevy_transform_gizmos" } -bevy_transform_gizmo = { path = "crates/bevy_transform_gizmo" } bevy_undo = { path = "crates/bevy_undo" } bevy_infinite_grid = { path = "crates/bevy_infinite_grid" } bevy_editor_cam = { path = "crates/bevy_editor_cam" }