diff options
| author | HampusM <hampus@hampusmat.com> | 2026-08-03 14:28:41 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-08-03 17:03:02 +0200 |
| commit | 7d578700747928fca0f0f1a4fae2c0cde0fe74f6 (patch) | |
| tree | 1403ece3be1a44d56e6286b9da75d8d470280f9d /engine-ecs/src/component.rs | |
| parent | 22f2a5321162dc42d652949eda36cff63e3ebe64 (diff) | |
Diffstat (limited to 'engine-ecs/src/component.rs')
| -rw-r--r-- | engine-ecs/src/component.rs | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/engine-ecs/src/component.rs b/engine-ecs/src/component.rs index 30869b5..9220ffb 100644 --- a/engine-ecs/src/component.rs +++ b/engine-ecs/src/component.rs @@ -14,7 +14,8 @@ use crate::lock::{ ReadGuard, WriteGuard, }; -use crate::pair::Pair; +use crate::pair::{MemberMetadata as PairMemberMetadata, Pair}; +use crate::reflection::Type as TypeReflection; use crate::system::Input as SystemInput; use crate::uid::Uid; use crate::util::Array; @@ -31,7 +32,7 @@ pub trait Component: SystemInput + Any + IntoParts where Self: Sized; - fn type_reflection() -> Option<&'static crate::reflection::Type> + fn type_reflection() -> Option<&'static TypeReflection> where Self: Sized; @@ -293,8 +294,10 @@ pub struct Parts { pub id: Uid, pub name: &'static str, - pub type_reflection: Option<&'static crate::reflection::Type>, + pub type_reflection: Option<&'static TypeReflection>, pub data: Box<dyn Any>, + pub pair_relation_metadata: Option<PairMemberMetadata>, + pub pair_target_metadata: Option<PairMemberMetadata>, } impl Parts @@ -310,7 +313,9 @@ impl Parts pub struct PartsBuilder { name: &'static str, - type_reflection: Option<&'static crate::reflection::Type>, + type_reflection: Option<&'static TypeReflection>, + pair_relation_metadata: Option<PairMemberMetadata>, + pair_target_metadata: Option<PairMemberMetadata>, } impl PartsBuilder @@ -325,7 +330,7 @@ impl PartsBuilder #[must_use] pub fn type_reflection( mut self, - type_reflection: Option<&'static crate::reflection::Type>, + type_reflection: Option<&'static TypeReflection>, ) -> Self { self.type_reflection = type_reflection; @@ -333,6 +338,26 @@ impl PartsBuilder } #[must_use] + pub fn pair_relation_metadata( + mut self, + metadata: Option<PairMemberMetadata>, + ) -> Self + { + self.pair_relation_metadata = metadata; + self + } + + #[must_use] + pub fn pair_target_metadata( + mut self, + metadata: Option<PairMemberMetadata>, + ) -> Self + { + self.pair_target_metadata = metadata; + self + } + + #[must_use] pub fn build<Data: 'static>(self, id: Uid, data: Data) -> Parts { Parts { @@ -340,6 +365,8 @@ impl PartsBuilder name: self.name, type_reflection: self.type_reflection, data: Box::new(data), + pair_relation_metadata: self.pair_relation_metadata, + pair_target_metadata: self.pair_target_metadata, } } @@ -351,6 +378,8 @@ impl PartsBuilder name: self.name, type_reflection: self.type_reflection, data, + pair_relation_metadata: self.pair_relation_metadata, + pair_target_metadata: self.pair_target_metadata, } } } @@ -362,6 +391,8 @@ impl Default for PartsBuilder Self { name: "(unspecified)", type_reflection: None, + pair_relation_metadata: None, + pair_target_metadata: None, } } } @@ -370,7 +401,7 @@ impl Default for PartsBuilder #[non_exhaustive] pub struct Info { - pub type_reflection: Option<&'static crate::reflection::Type>, + pub type_reflection: Option<&'static TypeReflection>, pub ty_id: TypeId, pub name: &'static str, } |
