You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
1.8 KiB

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