diff options
| author | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-01-15 22:05:38 +0100 |
|---|---|---|
| committer | Martin Kagamino Lehoux <martin@lehoux.net> | 2026-01-15 22:05:46 +0100 |
| commit | 13626410c4d6db7fdc15ded5ee7865fcdbf0b88a (patch) | |
| tree | a549d918804acb7682c857e742f1af189692cf62 /ecs | |
| parent | cf85fc095bc9b6ab4b49e4f88a5f04d7ac2fe74b (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')
| -rw-r--r-- | ecs/component.go | 22 | ||||
| -rw-r--r-- | ecs/entity.go | 3 |
2 files changed, 18 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 +) diff --git a/ecs/entity.go b/ecs/entity.go new file mode 100644 index 0000000..636470c --- /dev/null +++ b/ecs/entity.go @@ -0,0 +1,3 @@ +package ecs + +type Entity int |
