diff --git a/src/ecs/entity.zig b/src/ecs/entity.zig index f461f44..92b986a 100644 --- a/src/ecs/entity.zig +++ b/src/ecs/entity.zig @@ -7,13 +7,13 @@ pub const EntityTraitsSize = enum { small, medium, large }; pub fn EntityTraitsType(comptime size: EntityTraitsSize) type { return switch (size) { - .small => EntityTraitsDefinition(u16, u12, u4), - .medium => EntityTraitsDefinition(u32, u20, u12), - .large => EntityTraitsDefinition(u64, u32, u32), + .small => EntityTraitsDefinition(u16, u12, u4, 0xFFFF, 0xFFF, 10), + .medium => EntityTraitsDefinition(u32, u20, u12, 0xFFFFF, 0xFFF, 20), + .large => EntityTraitsDefinition(u64, u32, u32, 0xFFFFFFFF, 0xFFFFFFFF, 32), }; } -fn EntityTraitsDefinition(comptime EntityType: type, comptime IndexType: type, comptime VersionType: type) type { +fn EntityTraitsDefinition(comptime EntityType: type, comptime IndexType: type, comptime VersionType: type, comptime EntityMask: EntityType, comptime VersionMask: EntityType, comptime EntityShift: EntityType) type { std.debug.assert(@typeInfo(EntityType) == .Int and std.meta.Int(.unsigned, @bitSizeOf(EntityType)) == EntityType); std.debug.assert(@typeInfo(IndexType) == .Int and std.meta.Int(.unsigned, @bitSizeOf(IndexType)) == IndexType); std.debug.assert(@typeInfo(VersionType) == .Int and std.meta.Int(.unsigned, @bitSizeOf(VersionType)) == VersionType); @@ -26,9 +26,10 @@ fn EntityTraitsDefinition(comptime EntityType: type, comptime IndexType: type, c index_type: type = IndexType, version_type: type = VersionType, /// Mask to use to get the entity index number out of an identifier - entity_mask: EntityType = std.math.maxInt(IndexType), + entity_mask: EntityType = EntityMask, /// Mask to use to get the version out of an identifier - version_mask: EntityType = std.math.maxInt(VersionType), + version_mask: EntityType = VersionMask, + entity_shift: EntityType = EntityShift, pub fn init() @This() { return @This(){};