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.

61 lines
1.5 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];
}
//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)];
}