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.rs58
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);
}