ecs: allow infinite child nesting in WorldBuilder
This commit is contained in:
		
							parent
							
								
									92c44320ee
								
							
						
					
					
						commit
						bcfc27483b
					
				@ -94,6 +94,7 @@ impl CommandBufferBuilderSource for CommandBuffer {
 | 
				
			|||||||
            command_buffer: self,
 | 
					            command_buffer: self,
 | 
				
			||||||
            current_entity: None,
 | 
					            current_entity: None,
 | 
				
			||||||
            parent_entity: None,
 | 
					            parent_entity: None,
 | 
				
			||||||
 | 
					            parent_entities: Vec::new(),
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -101,6 +102,7 @@ impl CommandBufferBuilderSource for CommandBuffer {
 | 
				
			|||||||
pub struct CommandBufferBuilder<'a> {
 | 
					pub struct CommandBufferBuilder<'a> {
 | 
				
			||||||
    command_buffer: &'a mut CommandBuffer,
 | 
					    command_buffer: &'a mut CommandBuffer,
 | 
				
			||||||
    current_entity: Option<Entity>,
 | 
					    current_entity: Option<Entity>,
 | 
				
			||||||
 | 
					    parent_entities: Vec<Entity>,
 | 
				
			||||||
    parent_entity: Option<Entity>,
 | 
					    parent_entity: Option<Entity>,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -140,13 +142,15 @@ impl<'a> CommandBufferBuilder<'a> {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pub fn with_children(&mut self, mut build_children: impl FnMut(&mut Self) -> &mut Self) -> &mut Self {
 | 
					    pub fn with_children(&mut self, mut build_children: impl FnMut(&mut Self) -> &mut Self) -> &mut Self {
 | 
				
			||||||
        self.parent_entity = self.current_entity;
 | 
					        let current_entity = self.current_entity.expect("Cannot add children without a parent. Try creating an entity first.");
 | 
				
			||||||
 | 
					        self.parent_entities.push(current_entity);
 | 
				
			||||||
 | 
					        self.parent_entity = Some(current_entity);
 | 
				
			||||||
        self.current_entity = None;
 | 
					        self.current_entity = None;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        build_children(self);
 | 
					        build_children(self);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.current_entity = self.parent_entity;
 | 
					        self.current_entity = self.parent_entities.pop();
 | 
				
			||||||
        self.parent_entity = None;
 | 
					        self.parent_entity = if self.parent_entities.is_empty() { None } else { self.parent_entities.last().cloned() };
 | 
				
			||||||
        self
 | 
					        self
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user