aboutsummaryrefslogtreecommitdiff
path: root/ecs/component.go
diff options
context:
space:
mode:
authorMartin Kagamino Lehoux <martin@lehoux.net>2026-01-15 22:05:38 +0100
committerMartin Kagamino Lehoux <martin@lehoux.net>2026-01-15 22:05:46 +0100
commit13626410c4d6db7fdc15ded5ee7865fcdbf0b88a (patch)
treea549d918804acb7682c857e742f1af189692cf62 /ecs/component.go
parentcf85fc095bc9b6ab4b49e4f88a5f04d7ac2fe74b (diff)
refactor: transition to struct-of-arrays ECS architecture
- Replace individual Entity structs with centralized component slices in Game struct (SoA layout). - Implement bitmask-based component lookup (CM_Position, CM_Move, etc.). - Convert logic from object-oriented Update() methods to standalone Systems (UpdateMoveSystem, UpdateGatherSystem, UpdateSpawnSystem). - Update rendering, selection, and input handling to iterate over component arrays.
Diffstat (limited to 'ecs/component.go')
-rw-r--r--ecs/component.go22
1 files changed, 15 insertions, 7 deletions
diff --git a/ecs/component.go b/ecs/component.go
index 29ef967..ff22e53 100644
--- a/ecs/component.go
+++ b/ecs/component.go
@@ -1,10 +1,18 @@
package ecs
-type Component[T any] struct {
- IsEnabled bool
- Value T
-}
+type Mask uint16
-func C[T any](t T) Component[T] {
- return Component[T]{IsEnabled: true, Value: t}
-}
+const (
+ CM_Position Mask = 1 << iota
+ CM_RelBounds
+ CM_Image
+ CM_Selection
+ CM_Move
+ CM_Order
+ CM_PatrolOrder
+ CM_GatherOrder
+ CM_ResourceGatherer
+ CM_ResourceSource
+ CM_ResourceStorage
+ CM_Spawn
+)