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