make WorldBuilder non-consuming
This commit is contained in:
		
							parent
							
								
									45e28ef32b
								
							
						
					
					
						commit
						2565a69230
					
				| @ -26,18 +26,16 @@ pub struct WorldBuilder<'a> { | |||||||
|     parent_entity: Option<Entity>, |     parent_entity: Option<Entity>, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // TODO: make this a non-consuming builder
 |  | ||||||
| impl<'a> WorldBuilder<'a> { | 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(); |         let entity = *self.world.insert((), vec![()]).first().unwrap(); | ||||||
|         self.current_entity = Some(entity); |         self.current_entity = Some(entity); | ||||||
|         self.add_parent_to_current_entity(); |         self.add_parent_to_current_entity(); | ||||||
|         self |         self | ||||||
|     } |     } | ||||||
|     pub fn build(self) {} |  | ||||||
| 
 | 
 | ||||||
|     // note: this is slow and does a full entity copy
 |     /// note: this is slow and does a full entity copy
 | ||||||
|     pub fn add<T>(self, component: T) -> Self |     pub fn add<T>(&mut self, component: T) -> &mut Self | ||||||
|     where |     where | ||||||
|         T: legion::storage::Component, |         T: legion::storage::Component, | ||||||
|     { |     { | ||||||
| @ -47,7 +45,7 @@ impl<'a> WorldBuilder<'a> { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn tag<T>(self, tag: T) -> Self |     pub fn tag<T>(&mut self, tag: T) -> &mut Self | ||||||
|     where |     where | ||||||
|         T: legion::storage::Tag, |         T: legion::storage::Tag, | ||||||
|     { |     { | ||||||
| @ -57,7 +55,7 @@ impl<'a> WorldBuilder<'a> { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     pub fn add_entities<T, C>(self, tags: T, components: C) -> Self |     pub fn add_entities<T, C>(&mut self, tags: T, components: C) -> &mut Self | ||||||
|     where |     where | ||||||
|         T: TagSet + TagLayout + for<'b> Filter<ChunksetFilterData<'b>>, |         T: TagSet + TagLayout + for<'b> Filter<ChunksetFilterData<'b>>, | ||||||
|         C: IntoComponentSource, |         C: IntoComponentSource, | ||||||
| @ -66,18 +64,18 @@ impl<'a> WorldBuilder<'a> { | |||||||
|         self |         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); |         let current_entity = entity_archetype.insert(self.world); | ||||||
|         self.current_entity = Some(current_entity); |         self.current_entity = Some(current_entity); | ||||||
|         self.add_parent_to_current_entity(); |         self.add_parent_to_current_entity(); | ||||||
|         self |         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.parent_entity = self.current_entity; | ||||||
|         self.current_entity = None; |         self.current_entity = None; | ||||||
| 
 | 
 | ||||||
|         self = build_children(self); |         build_children(self); | ||||||
| 
 | 
 | ||||||
|         self.current_entity = self.parent_entity; |         self.current_entity = self.parent_entity; | ||||||
|         self.parent_entity = None; |         self.parent_entity = None; | ||||||
|  | |||||||
| @ -126,6 +126,5 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 Vec3::new(0.0, 0.0, 1.0), |                 Vec3::new(0.0, 0.0, 1.0), | ||||||
|             )), |             )), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -104,8 +104,7 @@ fn create_entities_builder_add_component( | |||||||
|             Vec3::new(3.0, 8.0, 5.0), |             Vec3::new(3.0, 8.0, 5.0), | ||||||
|             Vec3::new(0.0, 0.0, 0.0), |             Vec3::new(0.0, 0.0, 0.0), | ||||||
|             Vec3::new(0.0, 0.0, 1.0), |             Vec3::new(0.0, 0.0, 1.0), | ||||||
|         ))) |         ))); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn create_entities_builder_archetype( | fn create_entities_builder_archetype( | ||||||
| @ -143,8 +142,7 @@ fn create_entities_builder_archetype( | |||||||
|                 Vec3::new(0.0, 0.0, 1.0), |                 Vec3::new(0.0, 0.0, 1.0), | ||||||
|             )), |             )), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn setup(world: &mut World, resources: &mut Resources) { | fn setup(world: &mut World, resources: &mut Resources) { | ||||||
|  | |||||||
| @ -89,6 +89,5 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 Vec3::new(0.0, 0.0, 1.0), |                 Vec3::new(0.0, 0.0, 1.0), | ||||||
|             )), |             )), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -44,8 +44,8 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|         ..Default::default() |         ..Default::default() | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     let mut builder = world |     let mut builder = world.build(); | ||||||
|         .build() |     builder | ||||||
|         // plane
 |         // plane
 | ||||||
|         .add_entity(MeshEntity { |         .add_entity(MeshEntity { | ||||||
|             mesh: plane_handle, |             mesh: plane_handle, | ||||||
| @ -84,7 +84,7 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|             ), |             ), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }); |         }); | ||||||
|         builder = builder.add_entity(MeshEntity { |         builder.add_entity(MeshEntity { | ||||||
|             mesh: cube_handle, |             mesh: cube_handle, | ||||||
|             material: spawned_material_handle, |             material: spawned_material_handle, | ||||||
|             translation: Translation::new( |             translation: Translation::new( | ||||||
| @ -97,8 +97,6 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 ..Default::default() |                 ..Default::default() | ||||||
|             }, |             }, | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     builder.build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -52,7 +52,7 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 material: cube_material_handle, |                 material: cube_material_handle, | ||||||
|                 translation: Translation::new(0.0, 0.0, 3.0), |                 translation: Translation::new(0.0, 0.0, 3.0), | ||||||
|                 ..Default::default() |                 ..Default::default() | ||||||
|             }) |             }); | ||||||
|         }) |         }) | ||||||
|         // light
 |         // light
 | ||||||
|         .add_entity(LightEntity { |         .add_entity(LightEntity { | ||||||
| @ -67,6 +67,5 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 Vec3::new(0.0, 0.0, 1.0), |                 Vec3::new(0.0, 0.0, 1.0), | ||||||
|             )), |             )), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -53,6 +53,5 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 Vec3::new(0.0, 0.0, 1.0), |                 Vec3::new(0.0, 0.0, 1.0), | ||||||
|             )), |             )), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -44,8 +44,8 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|         ..Default::default() |         ..Default::default() | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     let mut builder = world |     let mut builder = world.build(); | ||||||
|         .build() |     builder | ||||||
|         // plane
 |         // plane
 | ||||||
|         .add_entity(MeshEntity { |         .add_entity(MeshEntity { | ||||||
|             mesh: plane_handle, |             mesh: plane_handle, | ||||||
| @ -84,7 +84,7 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|             ), |             ), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }); |         }); | ||||||
|         builder = builder.add_entity(MeshEntity { |         builder.add_entity(MeshEntity { | ||||||
|             mesh: cube_handle, |             mesh: cube_handle, | ||||||
|             material: spawned_material_handle, |             material: spawned_material_handle, | ||||||
|             translation: Translation::new( |             translation: Translation::new( | ||||||
| @ -93,8 +93,6 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 0.0, |                 0.0, | ||||||
|             ), |             ), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     builder.build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -71,6 +71,5 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                 Vec3::new(0.0, 0.0, 1.0), |                 Vec3::new(0.0, 0.0, 1.0), | ||||||
|             )), |             )), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -110,7 +110,7 @@ fn setup(world: &mut World, resources: &mut Resources) { | |||||||
|                     Margins::new(20.0, 20.0, 20.0, 20.0), |                     Margins::new(20.0, 20.0, 20.0, 20.0), | ||||||
|                     Color::rgb(0.6, 0.6, 1.0), |                     Color::rgb(0.6, 0.6, 1.0), | ||||||
|                 ), |                 ), | ||||||
|             }) |             }); | ||||||
|         }) |         }) | ||||||
|         // alpha test
 |         // alpha test
 | ||||||
|         .add_entity(UiEntity { |         .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), |                 Margins::new(0.0, 100.0, 0.0, 100.0), | ||||||
|                 Color::rgba(1.0, 0.9, 0.9, 0.4), |                 Color::rgba(1.0, 0.9, 0.9, 0.4), | ||||||
|             ), |             ), | ||||||
|         }) |         }); | ||||||
|         .build(); |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -27,7 +27,8 @@ fn build_move_system() -> Box<dyn Schedulable> { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| fn setup(world: &mut World, _resources: &mut Resources) { | 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()), |         camera: Camera::new(CameraType::default_orthographic()), | ||||||
|         ..Default::default() |         ..Default::default() | ||||||
|     }); |     }); | ||||||
| @ -37,7 +38,7 @@ fn setup(world: &mut World, _resources: &mut Resources) { | |||||||
|     for i in 0..count { |     for i in 0..count { | ||||||
|         // 2d camera
 |         // 2d camera
 | ||||||
|         let cur = Vec2::new(1.0, 1.0) * 1.0 + prev; |         let cur = Vec2::new(1.0, 1.0) * 1.0 + prev; | ||||||
|         builder = builder.add_entity(UiEntity { |         builder.add_entity(UiEntity { | ||||||
|             node: Node::new( |             node: Node::new( | ||||||
|                 math::vec2(75.0, 75.0) + cur, |                 math::vec2(75.0, 75.0) + cur, | ||||||
|                 Anchors::new(0.5, 0.5, 0.5, 0.5), |                 Anchors::new(0.5, 0.5, 0.5, 0.5), | ||||||
| @ -48,6 +49,4 @@ fn setup(world: &mut World, _resources: &mut Resources) { | |||||||
| 
 | 
 | ||||||
|         prev = cur; |         prev = cur; | ||||||
|     } |     } | ||||||
| 
 |  | ||||||
|     builder.build(); |  | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Carter Anderson
						Carter Anderson