const std = @import("std"); const Etyp = @import("EntitySystemTypes.zig"); //Variables Entity const EntityIDs: std.TailQueue(u32) = init: { var temp = std.TailQueue(u32); var i = 0; while(i < Etyp.MAXEntitys){ temp.append(i); i += 1; } break :init temp; }; var EntityAmount: u32 = 0; const Signatures: [Etyp.MAXEntitys]Etyp.Signature = undefined; //Entity System pub fn CreateEntity() !Etyp.entity { if(EntityAmount >= Etyp.MAXEntitys) { return error{}; } EntityAmount += 1; return EntityIDs.popFirst(); } pub fn DestroyEntity(entity: Etyp.entity) void { Signatures[entity] = null; EntityIDs.append(entity); EntityAmount -= 1; } pub fn SetSignature(entity: Etyp.entity, signature: Etyp.Signature) void { Signatures[entity] = signature; } pub fn GetSignature(entity: Etyp.entity) Etyp.signature { return Signatures[entity]; } const ComponentArray = struct { Components: [Etyp.MAXEntitys]type, Entity2Array: [usize]EntityIDs, Array2Entity: [EntityIDs]usize, sizeM: usize, pub fn AddComponent(self: ComponentArray, entity: Etyp.entity, comp: type) void{ var newidx: usize = self.sizeM; self.Entity2Array[entity] = newidx; self.Entity2Array[newidx] = entity; self.Components[newidx] = comp; self.sizeM += 1; } pub fn Removedata(self: ComponentArray, entity: Etyp.entity) void{ var remidx: usize = self.Entity2Array[entity]; var lastidx: usize = self.sizeM-1; self.Components[remidx] = self.Components[lastidx]; var lastentity: Etyp.entity = self.Array2Entity[lastidx]; self.Entity2Array[lastentity] = remidx; self.Array2Entity[remidx] = lastentity; self.Entity2Array[entity] = null; self.Array2Entity[lastentity] = null; self.sizeM -= 1; } };