diff --git a/bevy_core/src/transform/world_builder.rs b/bevy_core/src/transform/world_builder.rs index 58b2d57014..2c2ce96e6b 100644 --- a/bevy_core/src/transform/world_builder.rs +++ b/bevy_core/src/transform/world_builder.rs @@ -26,18 +26,16 @@ pub struct WorldBuilder<'a> { parent_entity: Option, } -// TODO: make this a non-consuming builder impl<'a> WorldBuilder<'a> { - pub fn build_entity(mut self) -> Self { + pub fn build_entity(&mut self) -> &mut Self { let entity = *self.world.insert((), vec![()]).first().unwrap(); self.current_entity = Some(entity); self.add_parent_to_current_entity(); self } - pub fn build(self) {} - // note: this is slow and does a full entity copy - pub fn add(self, component: T) -> Self + /// note: this is slow and does a full entity copy + pub fn add(&mut self, component: T) -> &mut Self where T: legion::storage::Component, { @@ -47,7 +45,7 @@ impl<'a> WorldBuilder<'a> { self } - pub fn tag(self, tag: T) -> Self + pub fn tag(&mut self, tag: T) -> &mut Self where T: legion::storage::Tag, { @@ -57,7 +55,7 @@ impl<'a> WorldBuilder<'a> { self } - pub fn add_entities(self, tags: T, components: C) -> Self + pub fn add_entities(&mut self, tags: T, components: C) -> &mut Self where T: TagSet + TagLayout + for<'b> Filter>, C: IntoComponentSource, @@ -66,18 +64,18 @@ impl<'a> WorldBuilder<'a> { self } - pub fn add_entity(mut self, entity_archetype: impl EntityArchetype) -> Self { + pub fn add_entity(&mut self, entity_archetype: impl EntityArchetype) -> &mut Self { let current_entity = entity_archetype.insert(self.world); self.current_entity = Some(current_entity); self.add_parent_to_current_entity(); self } - pub fn add_children(mut self, build_children: impl Fn(WorldBuilder) -> WorldBuilder) -> Self { + pub fn add_children(&mut self, build_children: impl Fn(&mut WorldBuilder)) -> &mut Self { self.parent_entity = self.current_entity; self.current_entity = None; - self = build_children(self); + build_children(self); self.current_entity = self.parent_entity; self.parent_entity = None; diff --git a/examples/custom_material_shader.rs b/examples/custom_material_shader.rs index bbe48e3469..42514ec8cd 100644 --- a/examples/custom_material_shader.rs +++ b/examples/custom_material_shader.rs @@ -126,6 +126,5 @@ fn setup(world: &mut World, resources: &mut Resources) { Vec3::new(0.0, 0.0, 1.0), )), ..Default::default() - }) - .build(); + }); } diff --git a/examples/entity_builder_comparison.rs b/examples/entity_builder_comparison.rs index f4e7bbe9fc..fe74561e21 100644 --- a/examples/entity_builder_comparison.rs +++ b/examples/entity_builder_comparison.rs @@ -104,8 +104,7 @@ fn create_entities_builder_add_component( Vec3::new(3.0, 8.0, 5.0), Vec3::new(0.0, 0.0, 0.0), Vec3::new(0.0, 0.0, 1.0), - ))) - .build(); + ))); } fn create_entities_builder_archetype( @@ -143,8 +142,7 @@ fn create_entities_builder_archetype( Vec3::new(0.0, 0.0, 1.0), )), ..Default::default() - }) - .build(); + }); } fn setup(world: &mut World, resources: &mut Resources) { diff --git a/examples/input_keyboard.rs b/examples/input_keyboard.rs index f75feb7a38..7a74e6ff8a 100644 --- a/examples/input_keyboard.rs +++ b/examples/input_keyboard.rs @@ -89,6 +89,5 @@ fn setup(world: &mut World, resources: &mut Resources) { Vec3::new(0.0, 0.0, 1.0), )), ..Default::default() - }) - .build(); + }); } diff --git a/examples/instancing.rs b/examples/instancing.rs index 2cf50aa7ed..d3c8fa9112 100644 --- a/examples/instancing.rs +++ b/examples/instancing.rs @@ -44,8 +44,8 @@ fn setup(world: &mut World, resources: &mut Resources) { ..Default::default() }); - let mut builder = world - .build() + let mut builder = world.build(); + builder // plane .add_entity(MeshEntity { mesh: plane_handle, @@ -84,7 +84,7 @@ fn setup(world: &mut World, resources: &mut Resources) { ), ..Default::default() }); - builder = builder.add_entity(MeshEntity { + builder.add_entity(MeshEntity { mesh: cube_handle, material: spawned_material_handle, translation: Translation::new( @@ -97,8 +97,6 @@ fn setup(world: &mut World, resources: &mut Resources) { ..Default::default() }, ..Default::default() - }) + }); } - - builder.build(); } diff --git a/examples/parenting.rs b/examples/parenting.rs index e74703d4bd..c95c55874d 100644 --- a/examples/parenting.rs +++ b/examples/parenting.rs @@ -52,7 +52,7 @@ fn setup(world: &mut World, resources: &mut Resources) { material: cube_material_handle, translation: Translation::new(0.0, 0.0, 3.0), ..Default::default() - }) + }); }) // light .add_entity(LightEntity { @@ -67,6 +67,5 @@ fn setup(world: &mut World, resources: &mut Resources) { Vec3::new(0.0, 0.0, 1.0), )), ..Default::default() - }) - .build(); + }); } diff --git a/examples/scene.rs b/examples/scene.rs index 86dd332072..069a32c8d6 100644 --- a/examples/scene.rs +++ b/examples/scene.rs @@ -53,6 +53,5 @@ fn setup(world: &mut World, resources: &mut Resources) { Vec3::new(0.0, 0.0, 1.0), )), ..Default::default() - }) - .build(); + }); } diff --git a/examples/spawner.rs b/examples/spawner.rs index 370a1a7392..4abfe7ff90 100644 --- a/examples/spawner.rs +++ b/examples/spawner.rs @@ -44,8 +44,8 @@ fn setup(world: &mut World, resources: &mut Resources) { ..Default::default() }); - let mut builder = world - .build() + let mut builder = world.build(); + builder // plane .add_entity(MeshEntity { mesh: plane_handle, @@ -84,7 +84,7 @@ fn setup(world: &mut World, resources: &mut Resources) { ), ..Default::default() }); - builder = builder.add_entity(MeshEntity { + builder.add_entity(MeshEntity { mesh: cube_handle, material: spawned_material_handle, translation: Translation::new( @@ -93,8 +93,6 @@ fn setup(world: &mut World, resources: &mut Resources) { 0.0, ), ..Default::default() - }) + }); } - - builder.build(); } diff --git a/examples/texture.rs b/examples/texture.rs index abc0d62536..454f86f6f0 100644 --- a/examples/texture.rs +++ b/examples/texture.rs @@ -71,6 +71,5 @@ fn setup(world: &mut World, resources: &mut Resources) { Vec3::new(0.0, 0.0, 1.0), )), ..Default::default() - }) - .build(); + }); } diff --git a/examples/ui.rs b/examples/ui.rs index affd4a6df1..feaea8cea1 100644 --- a/examples/ui.rs +++ b/examples/ui.rs @@ -110,7 +110,7 @@ fn setup(world: &mut World, resources: &mut Resources) { Margins::new(20.0, 20.0, 20.0, 20.0), Color::rgb(0.6, 0.6, 1.0), ), - }) + }); }) // alpha test .add_entity(UiEntity { @@ -120,6 +120,5 @@ fn setup(world: &mut World, resources: &mut Resources) { Margins::new(0.0, 100.0, 0.0, 100.0), Color::rgba(1.0, 0.9, 0.9, 0.4), ), - }) - .build(); + }); } diff --git a/examples/ui_bench.rs b/examples/ui_bench.rs index d74fc0f76c..0051b11c95 100644 --- a/examples/ui_bench.rs +++ b/examples/ui_bench.rs @@ -27,7 +27,8 @@ fn build_move_system() -> Box { } fn setup(world: &mut World, _resources: &mut Resources) { - let mut builder = world.build().add_entity(Camera2dEntity { + let mut builder = world.build(); + builder.add_entity(Camera2dEntity { camera: Camera::new(CameraType::default_orthographic()), ..Default::default() }); @@ -37,7 +38,7 @@ fn setup(world: &mut World, _resources: &mut Resources) { for i in 0..count { // 2d camera let cur = Vec2::new(1.0, 1.0) * 1.0 + prev; - builder = builder.add_entity(UiEntity { + builder.add_entity(UiEntity { node: Node::new( math::vec2(75.0, 75.0) + cur, Anchors::new(0.5, 0.5, 0.5, 0.5), @@ -48,6 +49,4 @@ fn setup(world: &mut World, _resources: &mut Resources) { prev = cur; } - - builder.build(); }