summaryrefslogtreecommitdiff
path: root/ecs/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ecs/src/lib.rs')
-rw-r--r--ecs/src/lib.rs37
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()
}