0ptr/nullptr/analyzer.py
Richard Bronkhorst 939215ef5e Update analyzer.py
2023-06-13 22:34:28 +02:00

43 lines
1.2 KiB
Python

from nullptr.models.marketplace import Marketplace
from nullptr.models.jumpgate import Jumpgate
from nullptr.models.system import System
class Analyzer:
def __init__(self, store):
self.store = store
def find_markets(self, resource, sellbuy, location):
for m in self.store.all(Marketplace):
resources = m.imports if sellbuy == 'sell' else m.exports
if resource in resources:
yield m
def get_jumpgate(self, system):
gates = self.store.all_members(system, Jumpgate)
return next(gates, None)
def find_path(self, orig, to):
if orig == to: return []
jg = self.get_jumpgate(orig)
if jg is None:
print(f'{orig} no jg')
return None
best_distance = orig.distance(to)
best_hop = None
for hop_str in jg.systems:
hop = self.store.get(System, hop_str)
if hop is None:
print(f'{hop_str} hopnon')
continue
dist = hop.distance(to)
if dist < best_distance:
best_distance = dist
best_hop = hop
if best_hop is None:
print('nobest')
return None
print(best_hop, best_distance)
tail = self.find_path(best_hop, to)
if tail is None: return None
return [best_hop] + tail