summaryrefslogtreecommitdiff
path: root/src/ecs
diff options
context:
space:
mode:
authorLorenzo Torres <torres@sideros.org>2025-03-22 22:55:31 +0100
committerLorenzo Torres <torres@sideros.org>2025-03-22 22:55:31 +0100
commit00d695e5f08ddff7ba66f2dd1aea4cdaf14f45e7 (patch)
treef907ee775c5d2bf3a1296d8bcee175c2aaabc582 /src/ecs
parent191e1485356ed6a1c0f8e608b4dd775e0939ac77 (diff)
cleaned up ecs interface
Diffstat (limited to 'src/ecs')
-rw-r--r--src/ecs/entities.zig44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/ecs/entities.zig b/src/ecs/entities.zig
index beeb919..149c9ff 100644
--- a/src/ecs/entities.zig
+++ b/src/ecs/entities.zig
@@ -42,6 +42,50 @@ pub const Pool = struct {
return pool;
}
+ pub fn getQuery(self: *@This(), comptime T: type) []T {
+ const set = switch (T) {
+ components.Speed => &self.speed,
+ components.Position => &self.position,
+ else => unreachable,
+ };
+
+ return set.components.items;
+ }
+
+ pub fn getEntity(self: *@This(), component: usize, comptime T: type) usize {
+ const set = switch (T) {
+ components.Speed => &self.speed,
+ components.Position => &self.position,
+ else => unreachable,
+ };
+
+ return set.dense.items[component];
+ }
+
+ pub fn getComponent(self: *@This(), entity: usize, comptime T: type) ?T {
+ const set = switch (T) {
+ components.Speed => &self.speed,
+ components.Position => &self.position,
+ else => unreachable,
+ };
+
+ if (self.hasComponent(entity, T)) {
+ return set.components.items[set.sparse.items[entity]];
+ } else {
+ return null;
+ }
+ }
+
+ pub fn hasComponent(self: *@This(), entity: usize, component: type) bool {
+ const set = switch (component) {
+ components.Speed => &self.speed,
+ components.Position => &self.position,
+ else => unreachable,
+ };
+
+ return set.dense.items[set.sparse.items[entity]] == entity;
+ }
+
pub fn addSystemGroup(self: *@This(), group: SystemGroup) !void {
try self.system_groups.append(group);
}