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]; } //Component Manager variables const ComponentTypeList: std.StringArrayHashMap(Etyp.Component) = std.StringArrayHashMap(Etyp.Component); const ComponentArrays: std.StringArrayHashMap(Etyp.ComponentArray) = std.StringArrayHashMap(Etyp.ComponentArray); var NextComponent: Etyp.Component = 0; //component manager pub fn RegisterComponent(in: type) void { var name = @typeName(in); ComponentTypeList.put(name, NextComponent); ComponentArrays.put(name, ComponentArrays{}); } fn GetComponentArray(in: type) Etyp.ComponentArray { return ComponentArrays[@typeName(in)]; }