cleaned up ecs interface

This commit is contained in:
Lorenzo Torres 2025-03-22 22:55:31 +01:00
parent 191e148535
commit 00d695e5f0
2 changed files with 52 additions and 16 deletions

View file

@ -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);
}