Compare commits

...

3 commits

Author SHA1 Message Date
4a1425824a Merge branch 'main' into renovate/ron-0.x 2025-03-31 12:48:03 +00:00
Michael Huebner
c7a7225c95 Improve change logic 2025-03-24 13:11:55 +01:00
Michael Huebner
5815d2f8f3 Track entity changes 2025-03-24 13:04:45 +01:00

View file

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