aboutsummaryrefslogtreecommitdiff
path: root/src/ecs/component.zig
diff options
context:
space:
mode:
authorjjanzen <jjanzen@jjanzen.ca>2025-01-21 19:20:50 -0600
committerjjanzen <jjanzen@jjanzen.ca>2025-01-21 19:20:50 -0600
commit8a20d05a7a8cf9f1339142240907ed158449dfa0 (patch)
treebabbf74a7bea83589b05f117a795235deb0e238c /src/ecs/component.zig
parent9f18b702b15b4a26a016170a8a2dfb216ae15810 (diff)
add basic entity component system
Diffstat (limited to 'src/ecs/component.zig')
-rw-r--r--src/ecs/component.zig39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/ecs/component.zig b/src/ecs/component.zig
new file mode 100644
index 0000000..4a10172
--- /dev/null
+++ b/src/ecs/component.zig
@@ -0,0 +1,39 @@
+const std = @import("std");
+
+pub const ComponentStub = struct {
+ pub fn init(args: ComponentStub) ComponentStub {
+ _ = args;
+ return .{};
+ }
+
+ pub fn deinit(self: *ComponentStub) void {
+ _ = self;
+ }
+};
+
+pub const ComponentType = enum(usize) {
+ component_stub = 0,
+};
+
+pub const Component = union(ComponentType) {
+ component_stub: ComponentStub,
+
+ pub fn init(t: ComponentType, args: anytype) Component {
+ switch (t) {
+ ComponentType.component_stub => return Component{
+ .component_stub = ComponentStub.init(args),
+ },
+ }
+ }
+
+ pub fn deinit(self: *Component) void {
+ switch (self.*) {
+ .component_stub => |*comp| comp.deinit(),
+ }
+ }
+};
+
+test "stub component" {
+ var stub = Component.init(ComponentType.component_stub, .{});
+ defer stub.deinit();
+}