Add numpad rod presets and keypad handling

This commit is contained in:
Codex Agent
2025-11-25 17:57:10 +01:00
parent 27b34d1c71
commit cde6731119

View File

@@ -17,6 +17,18 @@ from .state import PlantState
LOGGER = logging.getLogger(__name__) LOGGER = logging.getLogger(__name__)
_NUMPAD_ROD_KEYS = {
curses.KEY_C1: 0.1, # numpad 1
curses.KEY_C2: 0.2, # numpad 2
curses.KEY_C3: 0.3, # numpad 3
curses.KEY_B1: 0.4, # numpad 4
curses.KEY_B2: 0.5, # numpad 5
curses.KEY_B3: 0.6, # numpad 6
curses.KEY_A1: 0.7, # numpad 7
curses.KEY_A2: 0.8, # numpad 8
curses.KEY_A3: 0.9, # numpad 9
}
@dataclass @dataclass
class DashboardKey: class DashboardKey:
@@ -57,7 +69,7 @@ class ReactorDashboard:
DashboardKey("r", "Reset & clear state"), DashboardKey("r", "Reset & clear state"),
DashboardKey("a", "Toggle auto rod control"), DashboardKey("a", "Toggle auto rod control"),
DashboardKey("+/-", "Withdraw/insert rods"), DashboardKey("+/-", "Withdraw/insert rods"),
DashboardKey("1-9", "Set rods to 0.1 … 0.9 (manual)"), DashboardKey("1-9 / Numpad", "Set rods to 0.1 … 0.9 (manual)"),
DashboardKey("[/]", "Adjust consumer demand /+50 MW"), DashboardKey("[/]", "Adjust consumer demand /+50 MW"),
DashboardKey("s/d", "Setpoint /+250 MW"), DashboardKey("s/d", "Setpoint /+250 MW"),
DashboardKey("p", "Maintain core (shutdown required)"), DashboardKey("p", "Maintain core (shutdown required)"),
@@ -104,6 +116,7 @@ class ReactorDashboard:
curses.init_pair(3, curses.COLOR_GREEN, -1) curses.init_pair(3, curses.COLOR_GREEN, -1)
curses.init_pair(4, curses.COLOR_RED, -1) curses.init_pair(4, curses.COLOR_RED, -1)
stdscr.nodelay(True) stdscr.nodelay(True)
stdscr.keypad(True)
self._install_log_capture() self._install_log_capture()
try: try:
while True: while True:
@@ -176,6 +189,8 @@ class ReactorDashboard:
elif ord("1") <= ch <= ord("9"): elif ord("1") <= ch <= ord("9"):
target = (ch - ord("0")) / 10.0 target = (ch - ord("0")) / 10.0
self._queue_command(ReactorCommand(rod_position=target, rod_manual=True)) self._queue_command(ReactorCommand(rod_position=target, rod_manual=True))
elif ch in _NUMPAD_ROD_KEYS:
self._queue_command(ReactorCommand(rod_position=_NUMPAD_ROD_KEYS[ch], rod_manual=True))
elif ch in (ord("!"), ord("@"), ord("#"), ord("$"), ord("%"), ord("^"), ord("&"), ord("*"), ord("(")): elif ch in (ord("!"), ord("@"), ord("#"), ord("$"), ord("%"), ord("^"), ord("&"), ord("*"), ord("(")):
idx = ch - ord("!") idx = ch - ord("!")
if 0 <= idx < len(self.reactor.turbines): if 0 <= idx < len(self.reactor.turbines):