diff options
Diffstat (limited to 'ecs/src/lib.rs')
-rw-r--r-- | ecs/src/lib.rs | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/ecs/src/lib.rs b/ecs/src/lib.rs index 3f0042c..ee33bd1 100644 --- a/ecs/src/lib.rs +++ b/ecs/src/lib.rs @@ -1,6 +1,6 @@ #![deny(clippy::all, clippy::pedantic)] -use std::any::{type_name, TypeId}; +use std::any::{type_name, Any, TypeId}; use std::cell::RefCell; use std::fmt::Debug; use std::mem::ManuallyDrop; @@ -14,7 +14,6 @@ use crate::component::storage::archetype::EntityComponent as ArchetypeEntityComp use crate::component::storage::Storage as ComponentStorage; use crate::component::{Component, Sequence as ComponentSequence}; use crate::entity::CREATE_STATIC_ENTITIES; -use crate::event::component::Kind as ComponentEventKind; use crate::extension::{Collector as ExtensionCollector, Extension}; use crate::lock::{Lock, WriteGuard}; use crate::phase::{Phase, START as START_PHASE}; @@ -466,7 +465,7 @@ impl World { let mut component_storage_lock = self.lock_component_storage_rw(); - let removed_entity = match component_storage_lock.remove_entity(entity_uid) { + let _removed_entity = match component_storage_lock.remove_entity(entity_uid) { Ok(components) => components, Err(err) => { tracing::error!("Failed to despawn entity: {err}"); @@ -474,32 +473,17 @@ impl World } }; - let component_removed_event_uids = removed_entity - .components() - .iter() - .map(|component| { - component - .component() - .read_nonblock() - .unwrap_or_else(|_| { - panic!( - "Failed to acquire read-only {} component lock", - component.name() - ) - }) - .get_event_uid(ComponentEventKind::Removed) - }) - .collect::<Vec<_>>(); - drop(component_storage_lock); if !*has_swapped_active_queue { self.swap_event_queue(has_swapped_active_queue); } - for comp_removed_event_id in component_removed_event_uids { - self.emit_event_by_id(comp_removed_event_id); - } + // TODO: Emit component removed events here + + // for comp_removed_event_id in component_removed_event_uids { + // self.emit_event_by_id(comp_removed_event_id); + // } } fn add_entity_components( @@ -509,6 +493,11 @@ impl World ) { for (component_id, component) in components { + debug_assert!( + !component.self_is_optional(), + "Adding a optional component to a entity is not supported" + ); + if let Err(err) = component_storage.add_entity_component( entity_uid, (component_id, component.name(), component), @@ -618,7 +607,7 @@ pub struct EntityComponentRef<'a> impl<'a> EntityComponentRef<'a> { - fn component(&self) -> &'a Lock<Box<dyn Component>> + fn component(&self) -> &'a Lock<Box<dyn Any>> { self.comp.component() } |