summaryrefslogtreecommitdiff
path: root/ecs/src/uid.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2025-10-13 18:50:30 +0200
committerHampusM <hampus@hampusmat.com>2025-10-13 18:50:30 +0200
commitcb1197a132f87cd5034bb8927fdbd09878d9239a (patch)
treeac234c3d659f06f99e0945a88b73cae28fc4bf59 /ecs/src/uid.rs
parentd1cf80806c3be68d4a96faefbad4e4cdc0a7832e (diff)
feat(ecs): add Actions::remove_comps fnHEADmaster
Diffstat (limited to 'ecs/src/uid.rs')
-rw-r--r--ecs/src/uid.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/ecs/src/uid.rs b/ecs/src/uid.rs
index a361882..bb393a1 100644
--- a/ecs/src/uid.rs
+++ b/ecs/src/uid.rs
@@ -2,8 +2,10 @@ use std::fmt::{Debug, Display, Formatter};
use std::mem::transmute;
use std::sync::atomic::{AtomicU32, Ordering};
+use seq_macro::seq;
+
use crate::component::Component;
-use crate::util::{gen_mask_64, BitMask, NumberExt};
+use crate::util::{gen_mask_64, Array, BitMask, NumberExt};
static NEXT: AtomicU32 = AtomicU32::new(Uid::FIRST_UNIQUE_ID);
@@ -230,3 +232,30 @@ impl<ComponentT: Component> With for ComponentT
Self::id()
}
}
+
+pub trait WithUidTuple
+{
+ type UidsArray: Array<Uid>;
+
+ fn uids() -> Self::UidsArray;
+}
+
+macro_rules! impl_with_uid_tuple {
+ ($c: tt) => {
+ seq!(I in 0..=$c {
+ impl<#(WithUid~I: With,)*> WithUidTuple for (#(WithUid~I,)*)
+ {
+ type UidsArray = [Uid; $c + 1];
+
+ fn uids() -> Self::UidsArray
+ {
+ [#(WithUid~I::uid(),)*]
+ }
+ }
+ });
+ };
+}
+
+seq!(C in 0..=16 {
+ impl_with_uid_tuple!(C);
+});