diff --git a/ecs/src/world.rs b/ecs/src/world.rs index 12044bd..e9d1b41 100644 --- a/ecs/src/world.rs +++ b/ecs/src/world.rs @@ -43,6 +43,7 @@ impl WorldBuilder { entities_to_remove: Default::default(), entities_to_add: Default::default(), entities_updates: Default::default(), + had_entity_changes: false, entity_object_manager: Default::default(), @@ -68,6 +69,7 @@ pub struct World { entities_to_remove: Vec, entities_to_add: Vec, entities_updates: HashMap>, + had_entity_changes: bool, entity_object_manager: EntityObjectManager, @@ -103,6 +105,10 @@ impl World { self.entities.values() } + pub fn had_entity_changes(&self) -> bool { + self.had_entity_changes + } + pub fn entity_resources( &mut self, entity: Entity, @@ -336,26 +342,36 @@ impl World { } pub fn commit_entity_changes(&mut self) -> Result<()> { - if !self.entities_to_remove.is_empty() { - println!("entities to remove {}", self.entities_to_remove.len()); + #[cfg(debug_assertions)] + { + if !self.entities_to_remove.is_empty() { + println!("entities to remove {}", self.entities_to_remove.len()); + } + + if !self.entities_to_add.is_empty() { + println!("entities to add {}", self.entities_to_add.len()); + } + + if !self.entities_updates.is_empty() { + println!("entities to update {}", self.entities_updates.len()); + } + } + + if self.entities_to_remove.is_empty() + && self.entities_to_add.is_empty() + && self.entities_updates.is_empty() + { + return Ok(()); } for entity in core::mem::take(&mut self.entities_to_remove) { self._remove_entity(entity)?; } - if !self.entities_to_add.is_empty() { - println!("entities to add {}", self.entities_to_add.len()); - } - for entity_object in core::mem::take(&mut self.entities_to_add) { self._add_entity(entity_object)?; } - if !self.entities_updates.is_empty() { - println!("entities to update {}", self.entities_updates.len()); - } - for (entity, changes) in core::mem::take(&mut self.entities_updates) { self.updates.remove_entity(entity); self.archetypes.remove_entity(entity); @@ -393,6 +409,7 @@ impl World { } } + self.had_entity_changes = true; Ok(()) } } @@ -422,6 +439,9 @@ impl World { return Ok(()); } } + + // reset flag + self.had_entity_changes = false; } } }