Handle individual pump unit toggles

This commit is contained in:
Codex Agent
2025-11-22 19:07:45 +01:00
parent c2d44bbdd3
commit e18f100e15
3 changed files with 66 additions and 0 deletions

View File

@@ -204,6 +204,18 @@ class ReactorDashboard:
current = self.reactor.turbine_unit_active[index] current = self.reactor.turbine_unit_active[index]
self._queue_command(ReactorCommand(turbine_units={index + 1: not current})) self._queue_command(ReactorCommand(turbine_units={index + 1: not current}))
def _toggle_primary_pump_unit(self, index: int) -> None:
if index < 0 or index >= len(self.reactor.primary_pump_units):
return
current = self.reactor.primary_pump_units[index]
self._queue_command(ReactorCommand(primary_pumps={index + 1: not current}))
def _toggle_secondary_pump_unit(self, index: int) -> None:
if index < 0 or index >= len(self.reactor.secondary_pump_units):
return
current = self.reactor.secondary_pump_units[index]
self._queue_command(ReactorCommand(secondary_pumps={index + 1: not current}))
def _request_reset(self) -> None: def _request_reset(self) -> None:
self.reset_requested = True self.reset_requested = True
if self.sim: if self.sim:

View File

@@ -369,6 +369,32 @@ class Reactor:
elif active and not any(self.secondary_pump_units): elif active and not any(self.secondary_pump_units):
self.secondary_pump_units = [True] * len(self.secondary_pump_units) self.secondary_pump_units = [True] * len(self.secondary_pump_units)
def _toggle_primary_pump_unit(self, index: int, active: bool) -> None:
if index < 0 or index >= len(self.primary_pump_units):
LOGGER.warning("Ignoring primary pump index %s", index)
return
if self.primary_pump_units[index] == active:
return
self.primary_pump_units[index] = active
LOGGER.info("Primary pump %d %s", index + 1, "enabled" if active else "stopped")
if active:
self._set_primary_pump(True)
elif not any(self.primary_pump_units):
self._set_primary_pump(False)
def _toggle_secondary_pump_unit(self, index: int, active: bool) -> None:
if index < 0 or index >= len(self.secondary_pump_units):
LOGGER.warning("Ignoring secondary pump index %s", index)
return
if self.secondary_pump_units[index] == active:
return
self.secondary_pump_units[index] = active
LOGGER.info("Secondary pump %d %s", index + 1, "enabled" if active else "stopped")
if active:
self._set_secondary_pump(True)
elif not any(self.secondary_pump_units):
self._set_secondary_pump(False)
def _set_turbine_state(self, active: bool, index: int | None = None) -> None: def _set_turbine_state(self, active: bool, index: int | None = None) -> None:
if index is None: if index is None:
for idx in range(len(self.turbine_unit_active)): for idx in range(len(self.turbine_unit_active)):

View File

@@ -101,3 +101,31 @@ def test_toggle_maintenance_progresses_until_restored():
sim.log() sim.log()
assert pump.integrity >= 0.99 assert pump.integrity >= 0.99
assert "primary_pump" not in reactor.maintenance_active assert "primary_pump" not in reactor.maintenance_active
def test_primary_pump_unit_toggle_updates_active_flag():
reactor = Reactor.default()
state = reactor.initial_state()
reactor.primary_pump_active = True
reactor.primary_pump_units = [True, True]
reactor.step(state, dt=1.0, command=ReactorCommand(primary_pumps={1: False}))
assert reactor.primary_pump_units == [False, True]
assert reactor.primary_pump_active is True
reactor.step(state, dt=1.0, command=ReactorCommand(primary_pumps={2: False}))
assert reactor.primary_pump_units == [False, False]
assert reactor.primary_pump_active is False
def test_secondary_pump_unit_toggle_can_restart_pump():
reactor = Reactor.default()
state = reactor.initial_state()
reactor.secondary_pump_active = False
reactor.secondary_pump_units = [False, False]
reactor.step(state, dt=1.0, command=ReactorCommand(secondary_pumps={1: True}))
assert reactor.secondary_pump_units == [True, False]
assert reactor.secondary_pump_active is True
assert state.secondary_loop.mass_flow_rate > 0.0