51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
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):
|
|
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
|
|
|