From 7c3eaa825ffabeb7a3a5096f175ee6a719e9e83d Mon Sep 17 00:00:00 2001 From: Richard Bronkhorst Date: Thu, 22 Jun 2023 14:56:51 +0200 Subject: [PATCH] Update commander.py and mission.py --- nullptr/commander.py | 10 ++++- nullptr/mission.py | 94 ++++++++++++++++++++------------------------ 2 files changed, 51 insertions(+), 53 deletions(-) diff --git a/nullptr/commander.py b/nullptr/commander.py index 980dfdd..7509504 100644 --- a/nullptr/commander.py +++ b/nullptr/commander.py @@ -126,7 +126,7 @@ class Commander(CommandLine): self.set_mission('mine') self.centcom.set_mission_param(self.ship, 'site', site) self.centcom.set_mission_param(self.ship, 'resource', resource) - self.centcom.set_mission_param(self.ship, 'destination', destination) + self.centcom.set_mission_param(self.ship, 'dest', destination) self.centcom.set_mission_param(self.ship, 'contract', contract.symbol) self.print_mission() @@ -148,9 +148,15 @@ class Commander(CommandLine): self.set_mission('haul') self.centcom.set_mission_param(self.ship, 'site', site.symbol) self.centcom.set_mission_param(self.ship, 'resource', resource) - self.centcom.set_mission_param(self.ship, 'destination', destination) + self.centcom.set_mission_param(self.ship, 'dest', destination) self.centcom.set_mission_param(self.ship, 'contract', contract.symbol) self.print_mission() + + def do_travel(self, dest): + dest = self.resolve('Waypoint', dest) + self.set_mission('travel') + self.centcom.set_mission_param(self.ship, 'dest', dest.symbol) + self.print_mission() def do_register(self, faction): self.api.register(faction.upper()) diff --git a/nullptr/mission.py b/nullptr/mission.py index 44b2a15..5e0732a 100644 --- a/nullptr/mission.py +++ b/nullptr/mission.py @@ -7,6 +7,7 @@ from nullptr.models.survey import Survey from nullptr.models.ship import Ship from nullptr.analyzer import Analyzer from time import time +from functools import partial import logging from nullptr.util import * @@ -172,16 +173,15 @@ class BaseMission(Mission): resource = self.st('resource') self.api.buy(self.ship, resource, cargo_space) - def travel(self, nm): - dest = self.rst(Waypoint, nm) + def step_travel(self): traject = self.st('traject') + if traject is None or traject == []: + return 'done' + dest = self.store.get(Waypoint, traject[-1]) loc = self.ship.location() if dest == loc: self.sts('traject', None) return 'done' - elif traject is None: - print(f'calculating path to {dest}') - traject = self.calculate_traject(dest) hop = traject.pop(0) if len(hop.split('-')) == 3: self.api.navigate(self.ship, hop) @@ -194,7 +194,9 @@ class BaseMission(Mission): self.sts('traject', traject) return 'more' - def calculate_traject(self, dest): + def step_calculate_traject(self, dest): + if type(dest) == str: + dest = self.store.get(Waypoint, dest) loc = self.ship.location() loc_sys = self.store.get(System, loc.system()) loc_jg = self.analyzer.get_jumpgate(loc_sys) @@ -202,30 +204,41 @@ class BaseMission(Mission): dest_jg = self.analyzer.get_jumpgate(dest_sys) path = self.analyzer.find_path(loc_sys, dest_sys) result = [] - print(loc.symbol, loc_jg.symbol) if loc.symbol != loc_jg.symbol: result.append(loc_jg.symbol) result += [s.symbol for s in path[1:]] if dest_jg.symbol != dest.symbol: result.append(dest.symbol) + self.sts('traject', result) print(result) return result - def step_travel_site(self): - return self.travel('site') - - def step_travel_dest(self): - return self.travel('destination') - def step_dock(self): self.api.dock(self.ship) def step_refuel(self): if self.ship.fuel_current < 100: - self.api.refuel(self.ship) + try: + self.api.refuel(self.ship) + except Exception as e: + pass def step_orbit(self): self.api.orbit(self.ship) + + def travel_steps(self, nm, destination, next_step): + destination = self.st(destination) + calc = partial(self.step_calculate_traject, destination) + return { + f'travel-{nm}': (self.step_orbit, f'calc-trav-{nm}'), + f'calc-trav-{nm}': (calc, f'go-{nm}'), + f'go-{nm}': (self.step_travel, { + 'done': f'dock-{nm}', + 'more': f'go-{nm}' + }), + f'dock-{nm}': (self.step_dock, f'refuel-{nm}'), + f'refuel-{nm}': (self.step_refuel, next_step) + } class MiningMission(BaseMission): @classmethod @@ -233,16 +246,17 @@ class MiningMission(BaseMission): return { 'site': MissionParam(Waypoint, True), 'resource': MissionParam(str, True), - 'destination': MissionParam(Waypoint, True), + 'dest': MissionParam(Waypoint, True), 'delivery': MissionParam(str, True, 'deliver'), 'contract': MissionParam(Contract, False) } def start_state(self): - return 'go_site' + return 'travel-to' def steps(self): return { + **self.travel_steps('to', 'site', 'extract'), 'extract': (self.step_extract, { 'done': 'dock', 'more': 'extract' @@ -256,17 +270,13 @@ class MiningMission(BaseMission): 'jettison': (self.step_dispose, { 'more': 'jettison', 'done': 'extract', - 'full': 'go_dest' + 'full': 'travel-back' }), - 'go_dest': (self.step_go_dest, 'dock_dest'), - 'dock_dest': (self.step_dock, 'unload'), + **self.travel_steps('back', 'dest', 'unload'), 'unload': (self.step_unload, { - 'done': 'refuel', + 'done': 'travel-to', 'more': 'unload' }), - 'refuel': (self.step_refuel, 'orbit_dest'), - 'orbit_dest': (self.step_orbit, 'go_site'), - 'go_site': (self.step_go_site, 'extract') } def get_survey(self): @@ -319,56 +329,38 @@ class SurveyMission(BaseMission): class HaulMission(BaseMission): def start_state(self): - return 'orbit2' + return 'travel-to' @classmethod def params(cls): return { 'site': MissionParam(Waypoint, True), 'resource': MissionParam(str, True), - 'destination': MissionParam(Waypoint, True), + 'dest': MissionParam(Waypoint, True), 'delivery': MissionParam(str, True, 'deliver'), 'contract': MissionParam(Contract, False) } def steps(self): return { - 'travel': (self.step_travel_site, { - 'more': 'travel', - 'done': 'dock' - }), - 'dock': (self.step_dock, 'refuel'), - 'refuel': (self.step_unload, 'load'), - 'load': (self.step_load, 'orbit'), - 'orbit': (self.step_orbit, 'travel_back'), - 'travel_back': (self.step_travel_dest, { - 'more': 'travel_back', - 'done': 'dock2' - }), - 'dock2': (self.step_dock, 'unload'), - 'unload': (self.step_unload, 'refuel2'), - 'refuel2': (self.step_refuel, 'orbit2'), - 'orbit2': (self.step_orbit, 'travel') + **self.travel_steps('to', 'site', 'load'), + 'load': (self.step_load, 'travel-back'), + **self.travel_steps('back', 'dest', 'load'), + 'unload': (self.step_unload, 'travel-to'), } - + class TravelMission(BaseMission): def start_state(self): - return 'orbit' + return 'travel-to' @classmethod def params(cls): return { - 'destination': MissionParam(Waypoint, True) + 'dest': MissionParam(Waypoint, True) } def steps(self): - return { - 'orbit': (self.step_orbit, 'travel'), - 'travel': (self.step_travel_dest, { - 'more': 'travel', - 'done': 'done' - }) - } + return self.travel_steps('to', 'dest', 'done') def create_mission(mtype, ship, store, api): types = {