diff options
| author | ewy <ewy0@protonmail.com> | 2026-08-13 15:13:39 +0200 |
|---|---|---|
| committer | ewy <ewy0@protonmail.com> | 2026-08-13 15:13:39 +0200 |
| commit | 60f58e548ef745ec072482954ac37c35d88280d4 (patch) | |
| tree | b1d89c0c1e47a427334e7fe708367b1263aaef40 /tree/tree.go | |
| parent | d0fe29558b040a11c5c8a744c37fbd2e3826f6c4 (diff) | |
switch to single render loop
Diffstat (limited to 'tree/tree.go')
| -rw-r--r-- | tree/tree.go | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/tree/tree.go b/tree/tree.go new file mode 100644 index 0000000..a48dbc0 --- /dev/null +++ b/tree/tree.go @@ -0,0 +1,43 @@ +package tree + +import ( + "github.com/Zyko0/go-sdl3/sdl" + "ponger/ecs" + "ponger/events" + "ponger/input" + "ponger/render" +) + +func Process(root ecs.IsGameObject, delta uint64, renderer *sdl.Renderer) error { + evs, err := events.Poll(delta) + if err != nil { + return err + } + ParseRecursive(root, delta, renderer, evs...) + return nil +} + +func ParseRecursive(current ecs.IsGameObject, delta uint64, renderer *sdl.Renderer, evs ...any) { + ParseSingle(current, delta, renderer, evs...) + for _, c := range current.GO().Children { + if c == nil { + continue + } + ParseSingle(c, delta, renderer, evs...) + } +} + +func ParseSingle(obj ecs.IsGameObject, delta uint64, renderer *sdl.Renderer, evs ...any) { + switch impl := obj.(type) { + case input.MouseMotionHandler: + for _, e := range events.OfType[events.MouseMotion](evs...) { + impl.ProcessMouseMotion(e) + } + case input.MousePressHandler: + for _, e := range events.OfType[events.MousePress](evs...) { + impl.ProcessMousePress(e) + } + case render.Renders: + impl.Render(renderer) + } +} |
