ui/curses: wait for keys instead of polling

The main loop slept 100 ms whenever no key was pending, so keys took
up to a tick to register and every screen woke ten times a second.
Each view now declares how often it needs idle(): the game view keeps
its 100 ms tick, while menus wait for a key. getch() blocks for that
long, so keys register at once, and over 15 s in the roster menu the
process goes from about 300 wake-ups to 6.
This commit is contained in:
Dash committed 2026-10-17 19:57:28 +02:00
1 parent c9bce751ac
commit 9ceda9b873
3 files changed
+14 -4

No files matched your search

+3
View File
@@ -2,6 +2,9 @@ import curses
class BaseView:
# How often idle() runs, in milliseconds; None waits for a key.
idle_interval: int | None = None
def __init__(self, screen: curses.window) -> None:
self.screen = screen