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) } }