diff options
Diffstat (limited to 'ecs/src/lib.rs')
-rw-r--r-- | ecs/src/lib.rs | 58 |
1 files changed, 31 insertions, 27 deletions
diff --git a/ecs/src/lib.rs b/ecs/src/lib.rs index 32d82bc..3f0042c 100644 --- a/ecs/src/lib.rs +++ b/ecs/src/lib.rs @@ -31,7 +31,6 @@ use crate::relationship::{ChildOf, DependsOn, Relationship}; use crate::sole::Sole; use crate::stats::Stats; use crate::system::{System, SystemComponent}; -use crate::type_name::TypeName; use crate::uid::{Kind as UidKind, Uid}; pub mod actions; @@ -39,7 +38,7 @@ pub mod component; pub mod entity; pub mod event; pub mod extension; -pub mod lock; +mod lock; pub mod phase; pub mod query; pub mod relationship; @@ -47,7 +46,6 @@ pub mod sole; pub mod stats; pub mod system; pub mod tuple; -pub mod type_name; pub mod uid; pub mod util; @@ -511,9 +509,10 @@ impl World ) { for (component_id, component) in components { - if let Err(err) = component_storage - .add_entity_component(entity_uid, (component_id, component)) - { + if let Err(err) = component_storage.add_entity_component( + entity_uid, + (component_id, component.name(), component), + ) { tracing::error!("Failed to add component to entity: {err}"); } } @@ -588,7 +587,7 @@ pub enum StepResult Stop, } -#[derive(Debug, Default)] +#[derive(Debug)] pub struct WorldData { component_storage: Arc<Lock<ComponentStorage>>, @@ -596,6 +595,21 @@ pub struct WorldData action_queue: Arc<ActionQueue>, } +impl Default for WorldData +{ + fn default() -> Self + { + Self { + component_storage: Arc::new(Lock::new( + ComponentStorage::default(), + type_name::<ComponentStorage>(), + )), + sole_storage: SoleStorage::default(), + action_queue: Arc::new(ActionQueue::default()), + } + } +} + #[derive(Debug)] pub struct EntityComponentRef<'a> { @@ -604,7 +618,7 @@ pub struct EntityComponentRef<'a> impl<'a> EntityComponentRef<'a> { - pub fn component(&self) -> &'a Lock<Box<dyn Component>> + fn component(&self) -> &'a Lock<Box<dyn Component>> { self.comp.component() } @@ -623,7 +637,7 @@ enum ActiveActionQueue B, } -#[derive(Debug, Default)] +#[derive(Debug)] struct ActionQueue { queue_a: Lock<Vec<Action>>, @@ -650,11 +664,15 @@ impl ActionQueue } } -impl TypeName for ActionQueue +impl Default for ActionQueue { - fn type_name(&self) -> &'static str + fn default() -> Self { - type_name::<Self>() + Self { + queue_a: Lock::new(Vec::new(), type_name::<Vec<Action>>()), + queue_b: Lock::new(Vec::new(), type_name::<Vec<Action>>()), + active_queue: RefCell::new(ActiveActionQueue::default()), + } } } @@ -699,7 +717,7 @@ impl SoleStorage self.storage.insert( sole_type_id, ManuallyDrop::new(StoredSole { - sole: Arc::new(Lock::new(Box::new(sole))), + sole: Arc::new(Lock::new(Box::new(sole), type_name::<SoleT>())), drop_last, }), ); @@ -716,18 +734,9 @@ impl Drop for SoleStorage for sole in self.storage.values_mut() { if sole.drop_last { - tracing::trace!( - "Sole {} pushed to dropping last queue", - sole.sole.read_nonblock().unwrap().type_name() - ); - soles_to_drop_last.push(sole); continue; } - tracing::trace!( - "Dropping sole {}", - sole.sole.read_nonblock().unwrap().type_name() - ); unsafe { ManuallyDrop::drop(sole); @@ -735,11 +744,6 @@ impl Drop for SoleStorage } for sole in &mut soles_to_drop_last { - tracing::trace!( - "Dropping sole {} last", - sole.sole.read_nonblock().unwrap().type_name() - ); - unsafe { ManuallyDrop::drop(sole); } |