From 60f58e548ef745ec072482954ac37c35d88280d4 Mon Sep 17 00:00:00 2001 From: ewy Date: Thu, 13 Aug 2026 15:13:39 +0200 Subject: switch to single render loop --- events/events.go | 43 +++++++++++++++++++++++++++++++++++++++++++ events/poll.go | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 events/events.go create mode 100644 events/poll.go (limited to 'events') diff --git a/events/events.go b/events/events.go new file mode 100644 index 0000000..6783703 --- /dev/null +++ b/events/events.go @@ -0,0 +1,43 @@ +package events + +type DeviceID int + +type MouseMotion struct { + Which DeviceID + Dx, Dy float32 + Delta uint64 +} + +type MousePress struct { + Delta uint64 + Key uint8 + Which DeviceID + JustPressed, JustReleased, IsPressed bool +} + +type WindowChange struct { + Height, Width int32 +} + +type KeyPress struct { + Delta uint64 + Key string + Which DeviceID + JustPressed, JustReleased, IsPressed bool +} + +type Event interface { + KeyPress | WindowChange | MousePress | MouseMotion +} + +type Events []any + +func OfType[T Event](events ...any) []T { + var result []T + for _, e := range events { + if eT, ok := e.(T); ok { + result = append(result, eT) + } + } + return result +} diff --git a/events/poll.go b/events/poll.go new file mode 100644 index 0000000..faa4151 --- /dev/null +++ b/events/poll.go @@ -0,0 +1,39 @@ +package events + +import ( + "github.com/Zyko0/go-sdl3/sdl" +) + +func Poll(delta uint64) ([]any, error) { + var evs []any + var event sdl.Event + for sdl.PollEvent(&event) { + switch event.Type { + case sdl.EVENT_QUIT: + return nil, sdl.EndLoop + case sdl.EVENT_MOUSE_MOTION: + ev := event.MouseMotionEvent() + evs = append(evs, MouseMotion{ + Delta: delta, + Dy: ev.Yrel, + Dx: ev.Xrel, + Which: DeviceID(ev.Which), + }) + case sdl.EVENT_MOUSE_BUTTON_DOWN, sdl.EVENT_MOUSE_BUTTON_UP: + ev := event.MouseButtonEvent() + evs = append(evs, MousePress{ + Delta: delta, + Key: ev.Button, + Which: DeviceID(ev.Which), + IsPressed: ev.Down, + }) + case sdl.EVENT_WINDOW_RESIZED: + ev := event.WindowEvent() + evs = append(evs, WindowChange{ + Height: ev.Data1, + Width: ev.Data2, + }) + } + } + return evs, nil +} -- cgit v1.3.1