SafiInput
Input is exposed as an ECS singleton. During the EcsOnLoad phase the engine drains SDL's event queue and writes the current state into SafiInput. Gameplay systems then read it — never call SDL_PollEvent yourself or you'll steal events from both the engine and ImGui.
Type
WIP — Scroll / mouse wheel
Scroll wheel events are currently consumed by the debug UI only. SafiInput does not yet expose scroll_x / scroll_y fields for gameplay systems.
Reading from a system
Scancodes vs keycodes
SafiEngine indexes keys[] by scancode (physical key position) — this is usually what games want. If you need layout-aware input (e.g. letters in a rename dialog), handle SDL text-input events yourself; the engine won't consume them.
Helper
Small convenience so call sites read clearly.