From 00d695e5f08ddff7ba66f2dd1aea4cdaf14f45e7 Mon Sep 17 00:00:00 2001 From: Lorenzo Torres Date: Sat, 22 Mar 2025 22:55:31 +0100 Subject: cleaned up ecs interface --- src/ecs/entities.zig | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/ecs/entities.zig') 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); } -- cgit v1.2.3