Compare commits
3 commits
e5348154e5
...
4a1425824a
Author | SHA1 | Date | |
---|---|---|---|
4a1425824a | |||
|
c7a7225c95 | ||
|
5815d2f8f3 |
1 changed files with 30 additions and 10 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue