summaryrefslogtreecommitdiff
path: root/ecs/src/component.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ecs/src/component.rs')
-rw-r--r--ecs/src/component.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/ecs/src/component.rs b/ecs/src/component.rs
index 67ae453..057b5ff 100644
--- a/ecs/src/component.rs
+++ b/ecs/src/component.rs
@@ -6,7 +6,7 @@ use seq_macro::seq;
use crate::lock::WriteGuard;
use crate::system::{ComponentRefMut, Input as SystemInput};
use crate::type_name::TypeName;
-use crate::EntityComponent;
+use crate::{EntityComponent, WorldData};
pub mod local;
@@ -36,6 +36,12 @@ pub trait Component: SystemInput + Any + TypeName
{
false
}
+
+ fn prepare(_world_data: &WorldData)
+ where
+ Self: Sized,
+ {
+ }
}
impl dyn Component
@@ -144,6 +150,8 @@ pub trait Sequence
fn from_components<'component>(
components: impl Iterator<Item = &'component EntityComponent>,
) -> Self::Refs<'component>;
+
+ fn prepare(_world_data: &WorldData);
}
/// [`Component`] metadata.
@@ -254,6 +262,13 @@ macro_rules! inner {
Comp~I::RefMut::from_optional_component(comp_~I),
)*)
}
+
+ fn prepare(world_data: &WorldData)
+ {
+ #(
+ Comp~I::prepare(world_data);
+ )*
+ }
}
});
};