zig-raylib-engine/src/EntitySystemTypes.zig

67 lines
1.7 KiB
Zig

const std = @import("std");
const rl = @import("raylib");
//Max Vars
pub const MAXEntitys: u32 = 1000;
pub const MAXComponents: u32 = 32;
//Id Types
pub const Entity = usize;
pub const Component = usize;
pub const Signature = std.bit_set.IntegerBitSet(MAXComponents);
//Component array type
pub const ComponentArray = struct {
Components: [MAXEntitys]type,
Entity2Array: [usize]Entity,
Array2Entity: [Entity]usize,
sizeM: usize,
pub fn AddComponent(self: ComponentArray, entity: 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: Entity) void {
var remidx: usize = self.Entity2Array[entity];
var lastidx: usize = self.sizeM - 1;
self.Components[remidx] = self.Components[lastidx];
var lastentity: entity = self.Array2Entity[lastidx];
self.Entity2Array[lastentity] = remidx;
self.Array2Entity[remidx] = lastentity;
self.Entity2Array[entity] = null;
self.Array2Entity[lastentity] = null;
self.sizeM -= 1;
}
pub fn GetData(self: ComponentArray, entity: Entity) type {
return self.Components[self.Entity2Array[entity]];
}
pub fn EntityDestroyed(self: ComponentArray, entity: Entity) void {
for(self.Array2Entity) |val|{
if(val == entity){
self.Removedata(entity);
return;
}
}
}
};
//Components
pub const Transform = struct {
pos: rl.Vector2,
rot: f16,
scale: rl.Vector2,
};