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