Update central_command.py, command_line.py and seven other files
This commit is contained in:
parent
7c3eaa825f
commit
38a2ee7870
@ -1,6 +1,6 @@
|
|||||||
from nullptr.store import Store
|
from nullptr.store import Store
|
||||||
from nullptr.models.ship import Ship
|
from nullptr.models.ship import Ship
|
||||||
from nullptr.mission import *
|
from nullptr.missions import create_mission
|
||||||
from random import choice
|
from random import choice
|
||||||
from time import sleep
|
from time import sleep
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
|
@ -90,5 +90,8 @@ class CommandLine:
|
|||||||
except EOFError:
|
except EOFError:
|
||||||
self.handle_eof()
|
self.handle_eof()
|
||||||
break
|
break
|
||||||
self.handle_cmd(c)
|
try:
|
||||||
|
self.handle_cmd(c)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(e, exc_info=True)
|
||||||
|
|
||||||
|
18
nullptr/missions/__init__.py
Normal file
18
nullptr/missions/__init__.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from nullptr.missions.survey import SurveyMission
|
||||||
|
from nullptr.missions.mine import MiningMission
|
||||||
|
from nullptr.missions.haul import HaulMission
|
||||||
|
from nullptr.missions.travel import TravelMission
|
||||||
|
|
||||||
|
|
||||||
|
def create_mission(mtype, ship, store, api):
|
||||||
|
types = {
|
||||||
|
'survey': SurveyMission,
|
||||||
|
'mine': MiningMission,
|
||||||
|
'haul': HaulMission,
|
||||||
|
'travel': TravelMission
|
||||||
|
}
|
||||||
|
if mtype not in types:
|
||||||
|
logging.warning(f'invalid mission type {mtype}')
|
||||||
|
return
|
||||||
|
m = types[mtype](ship, store, api)
|
||||||
|
return m
|
@ -239,138 +239,3 @@ class BaseMission(Mission):
|
|||||||
f'dock-{nm}': (self.step_dock, f'refuel-{nm}'),
|
f'dock-{nm}': (self.step_dock, f'refuel-{nm}'),
|
||||||
f'refuel-{nm}': (self.step_refuel, next_step)
|
f'refuel-{nm}': (self.step_refuel, next_step)
|
||||||
}
|
}
|
||||||
|
|
||||||
class MiningMission(BaseMission):
|
|
||||||
@classmethod
|
|
||||||
def params(cls):
|
|
||||||
return {
|
|
||||||
'site': MissionParam(Waypoint, True),
|
|
||||||
'resource': MissionParam(str, True),
|
|
||||||
'dest': MissionParam(Waypoint, True),
|
|
||||||
'delivery': MissionParam(str, True, 'deliver'),
|
|
||||||
'contract': MissionParam(Contract, False)
|
|
||||||
}
|
|
||||||
|
|
||||||
def start_state(self):
|
|
||||||
return 'travel-to'
|
|
||||||
|
|
||||||
def steps(self):
|
|
||||||
return {
|
|
||||||
**self.travel_steps('to', 'site', 'extract'),
|
|
||||||
'extract': (self.step_extract, {
|
|
||||||
'done': 'dock',
|
|
||||||
'more': 'extract'
|
|
||||||
}),
|
|
||||||
'dock': (self.step_dock, 'sell'),
|
|
||||||
'sell': (self.step_sell, {
|
|
||||||
'more': 'sell',
|
|
||||||
'done': 'orbit',
|
|
||||||
}),
|
|
||||||
'orbit': (self.step_orbit, 'jettison'),
|
|
||||||
'jettison': (self.step_dispose, {
|
|
||||||
'more': 'jettison',
|
|
||||||
'done': 'extract',
|
|
||||||
'full': 'travel-back'
|
|
||||||
}),
|
|
||||||
**self.travel_steps('back', 'dest', 'unload'),
|
|
||||||
'unload': (self.step_unload, {
|
|
||||||
'done': 'travel-to',
|
|
||||||
'more': 'unload'
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
|
|
||||||
def get_survey(self):
|
|
||||||
resource = self.st('resource')
|
|
||||||
site = self.rst(Waypoint,'site')
|
|
||||||
# todo optimize
|
|
||||||
for s in self.store.all(Survey):
|
|
||||||
if resource in s.deposits and site.symbol == s.waypoint():
|
|
||||||
return s
|
|
||||||
return None
|
|
||||||
|
|
||||||
def step_extract(self):
|
|
||||||
survey = self.get_survey()
|
|
||||||
print('using survey:', str(survey))
|
|
||||||
result = self.api.extract(self.ship, survey)
|
|
||||||
symbol = sg(result,'extraction.yield.symbol')
|
|
||||||
units = sg(result,'extraction.yield.units')
|
|
||||||
print('extracted:', units, symbol)
|
|
||||||
self.next_step = self.ship.cooldown
|
|
||||||
if self.ship.cargo_units < self.ship.cargo_capacity:
|
|
||||||
return 'more'
|
|
||||||
else:
|
|
||||||
return 'done'
|
|
||||||
|
|
||||||
def step_dispose(self):
|
|
||||||
contract = self.rst(Contract, 'contract')
|
|
||||||
typs = self.ship.nondeliverable_cargo(contract)
|
|
||||||
if len(typs) > 0:
|
|
||||||
self.api.jettison(self.ship, typs[0])
|
|
||||||
if len(typs) > 1:
|
|
||||||
return 'more'
|
|
||||||
elif self.ship.cargo_units > self.ship.cargo_capacity - 3:
|
|
||||||
return 'full'
|
|
||||||
else:
|
|
||||||
return 'done'
|
|
||||||
|
|
||||||
class SurveyMission(BaseMission):
|
|
||||||
def start_state(self):
|
|
||||||
return 'survey'
|
|
||||||
|
|
||||||
def steps(self):
|
|
||||||
return {
|
|
||||||
'survey': (self.step_survey, 'survey')
|
|
||||||
}
|
|
||||||
|
|
||||||
def step_survey(self):
|
|
||||||
result = self.api.survey(self.ship)
|
|
||||||
#pprint(result, 2)
|
|
||||||
self.next_step = self.ship.cooldown
|
|
||||||
|
|
||||||
class HaulMission(BaseMission):
|
|
||||||
def start_state(self):
|
|
||||||
return 'travel-to'
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def params(cls):
|
|
||||||
return {
|
|
||||||
'site': MissionParam(Waypoint, True),
|
|
||||||
'resource': MissionParam(str, True),
|
|
||||||
'dest': MissionParam(Waypoint, True),
|
|
||||||
'delivery': MissionParam(str, True, 'deliver'),
|
|
||||||
'contract': MissionParam(Contract, False)
|
|
||||||
}
|
|
||||||
|
|
||||||
def steps(self):
|
|
||||||
return {
|
|
||||||
**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 'travel-to'
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def params(cls):
|
|
||||||
return {
|
|
||||||
'dest': MissionParam(Waypoint, True)
|
|
||||||
}
|
|
||||||
|
|
||||||
def steps(self):
|
|
||||||
return self.travel_steps('to', 'dest', 'done')
|
|
||||||
|
|
||||||
def create_mission(mtype, ship, store, api):
|
|
||||||
types = {
|
|
||||||
'survey': SurveyMission,
|
|
||||||
'mine': MiningMission,
|
|
||||||
'haul': HaulMission,
|
|
||||||
'travel': TravelMission
|
|
||||||
}
|
|
||||||
if mtype not in types:
|
|
||||||
logging.warning(f'invalid mission type {mtype}')
|
|
||||||
return
|
|
||||||
m = types[mtype](ship, store, api)
|
|
||||||
return m
|
|
25
nullptr/missions/haul.py
Normal file
25
nullptr/missions/haul.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
from nullptr.missions.base import BaseMission, MissionParam
|
||||||
|
from nullptr.models.waypoint import Waypoint
|
||||||
|
from nullptr.models.survey import Survey
|
||||||
|
from nullptr.models.contract import Contract
|
||||||
|
class HaulMission(BaseMission):
|
||||||
|
def start_state(self):
|
||||||
|
return 'travel-to'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def params(cls):
|
||||||
|
return {
|
||||||
|
'site': MissionParam(Waypoint, True),
|
||||||
|
'resource': MissionParam(str, True),
|
||||||
|
'dest': MissionParam(Waypoint, True),
|
||||||
|
'delivery': MissionParam(str, True, 'deliver'),
|
||||||
|
'contract': MissionParam(Contract, False)
|
||||||
|
}
|
||||||
|
|
||||||
|
def steps(self):
|
||||||
|
return {
|
||||||
|
**self.travel_steps('to', 'site', 'load'),
|
||||||
|
'load': (self.step_load, 'travel-back'),
|
||||||
|
**self.travel_steps('back', 'dest', 'load'),
|
||||||
|
'unload': (self.step_unload, 'travel-to'),
|
||||||
|
}
|
78
nullptr/missions/mine.py
Normal file
78
nullptr/missions/mine.py
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
from nullptr.missions.base import BaseMission, MissionParam
|
||||||
|
from nullptr.models.waypoint import Waypoint
|
||||||
|
from nullptr.models.survey import Survey
|
||||||
|
from nullptr.models.contract import Contract
|
||||||
|
|
||||||
|
class MiningMission(BaseMission):
|
||||||
|
@classmethod
|
||||||
|
def params(cls):
|
||||||
|
return {
|
||||||
|
'site': MissionParam(Waypoint, True),
|
||||||
|
'resource': MissionParam(str, True),
|
||||||
|
'dest': MissionParam(Waypoint, True),
|
||||||
|
'delivery': MissionParam(str, True, 'deliver'),
|
||||||
|
'contract': MissionParam(Contract, False)
|
||||||
|
}
|
||||||
|
|
||||||
|
def start_state(self):
|
||||||
|
return 'travel-to'
|
||||||
|
|
||||||
|
def steps(self):
|
||||||
|
return {
|
||||||
|
**self.travel_steps('to', 'site', 'extract'),
|
||||||
|
'extract': (self.step_extract, {
|
||||||
|
'done': 'dock',
|
||||||
|
'more': 'extract'
|
||||||
|
}),
|
||||||
|
'dock': (self.step_dock, 'sell'),
|
||||||
|
'sell': (self.step_sell, {
|
||||||
|
'more': 'sell',
|
||||||
|
'done': 'orbit',
|
||||||
|
}),
|
||||||
|
'orbit': (self.step_orbit, 'jettison'),
|
||||||
|
'jettison': (self.step_dispose, {
|
||||||
|
'more': 'jettison',
|
||||||
|
'done': 'extract',
|
||||||
|
'full': 'travel-back'
|
||||||
|
}),
|
||||||
|
**self.travel_steps('back', 'dest', 'unload'),
|
||||||
|
'unload': (self.step_unload, {
|
||||||
|
'done': 'travel-to',
|
||||||
|
'more': 'unload'
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_survey(self):
|
||||||
|
resource = self.st('resource')
|
||||||
|
site = self.rst(Waypoint,'site')
|
||||||
|
# todo optimize
|
||||||
|
for s in self.store.all(Survey):
|
||||||
|
if resource in s.deposits and site.symbol == s.waypoint():
|
||||||
|
return s
|
||||||
|
return None
|
||||||
|
|
||||||
|
def step_extract(self):
|
||||||
|
survey = self.get_survey()
|
||||||
|
print('using survey:', str(survey))
|
||||||
|
result = self.api.extract(self.ship, survey)
|
||||||
|
symbol = sg(result,'extraction.yield.symbol')
|
||||||
|
units = sg(result,'extraction.yield.units')
|
||||||
|
print('extracted:', units, symbol)
|
||||||
|
self.next_step = self.ship.cooldown
|
||||||
|
if self.ship.cargo_units < self.ship.cargo_capacity:
|
||||||
|
return 'more'
|
||||||
|
else:
|
||||||
|
return 'done'
|
||||||
|
|
||||||
|
def step_dispose(self):
|
||||||
|
contract = self.rst(Contract, 'contract')
|
||||||
|
typs = self.ship.nondeliverable_cargo(contract)
|
||||||
|
if len(typs) > 0:
|
||||||
|
self.api.jettison(self.ship, typs[0])
|
||||||
|
if len(typs) > 1:
|
||||||
|
return 'more'
|
||||||
|
elif self.ship.cargo_units > self.ship.cargo_capacity - 3:
|
||||||
|
return 'full'
|
||||||
|
else:
|
||||||
|
return 'done'
|
||||||
|
|
15
nullptr/missions/survey.py
Normal file
15
nullptr/missions/survey.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from nullptr.missions.base import BaseMission, MissionParam
|
||||||
|
|
||||||
|
class SurveyMission(BaseMission):
|
||||||
|
def start_state(self):
|
||||||
|
return 'survey'
|
||||||
|
|
||||||
|
def steps(self):
|
||||||
|
return {
|
||||||
|
'survey': (self.step_survey, 'survey')
|
||||||
|
}
|
||||||
|
|
||||||
|
def step_survey(self):
|
||||||
|
result = self.api.survey(self.ship)
|
||||||
|
#pprint(result, 2)
|
||||||
|
self.next_step = self.ship.cooldown
|
16
nullptr/missions/travel.py
Normal file
16
nullptr/missions/travel.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from nullptr.missions.base import BaseMission, MissionParam
|
||||||
|
from nullptr.models.waypoint import Waypoint
|
||||||
|
|
||||||
|
class TravelMission(BaseMission):
|
||||||
|
def start_state(self):
|
||||||
|
return 'travel-to'
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def params(cls):
|
||||||
|
return {
|
||||||
|
'dest': MissionParam(Waypoint, True)
|
||||||
|
}
|
||||||
|
|
||||||
|
def steps(self):
|
||||||
|
return self.travel_steps('to', 'dest', 'done')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user