diff --git a/ecs/src/world.rs b/ecs/src/world.rs index 12044bd..8e97c92 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, @@ -335,27 +341,37 @@ impl World { Ok(()) } - pub fn commit_entity_changes(&mut self) -> Result<()> { - if !self.entities_to_remove.is_empty() { - println!("entities to remove {}", self.entities_to_remove.len()); + pub fn commit_entity_changes(&mut self) -> Result { + #[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(false); } 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,7 +409,7 @@ impl World { } } - Ok(()) + Ok(true) } } @@ -415,7 +431,7 @@ impl World { self.updates.update(w)?; } - self.commit_entity_changes()?; + self.had_entity_changes = self.commit_entity_changes()?; for system in systems.iter() { if !system(self)? {