from enum import Enum class ManeuverAlarmType(Enum): ManeuverNode = 1, SOI = 2 class Maneuver: def __init__(self, conn, vessel): self.vessel = vessel self.conn = conn def plan_next_maneuver(self, conn): pass class NodeManeuver(Maneuver): alarm_type = ManeuverAlarmType.ManeuverNode def __init__(self, conn, vessel): super().__init__(conn, vessel) self.mech_jeb = conn.mech_jeb self.node_executor = self.mech_jeb.node_executor def execute(self) -> bool: sc = self.conn.space_center if sc.active_vessel.name != self.vessel.name: sc.active_vessel = self.vessel while self.vessel.control.nodes: self._execute_node() return self.plan_next_maneuver() def _execute_node(self): self.node_executor.execute_all_nodes() with self.conn.stream(getattr, self.node_executor, "enabled") as enabled: enabled.rate = 1 with enabled.condition: while enabled(): enabled.wait() class MechJebManeuver(NodeManeuver): def __init__(self, conn, vessel): super().__init__(conn, vessel) self.maneuver_planner = self.mech_jeb.maneuver_planner