store fixes and probe role

This commit is contained in:
Richard
2024-01-13 21:42:49 +01:00
parent 188ef320cc
commit 7d92a45d12
12 changed files with 65 additions and 42 deletions

View File

@@ -14,6 +14,9 @@ class Reference:
def resolve(self):
return self.store.get(self.typ, self.symbol)
def f(self, detail):
return f'{self.symbol}.{self.typ.ext()}'
def __repr__(self):
return f'*REF*{self.symbol}.{self.typ.ext()}'
@@ -46,6 +49,9 @@ class Base:
def define(self):
pass
def created(self):
pass
def __hash__(self):
return hash((str(type(self)), self.symbol))
@@ -84,12 +90,16 @@ class Base:
def __setattr__(self, name, value):
if not name.startswith('_') and not self._disable_dirty:
self.store.dirty(self)
self.dirty()
if issubclass(type(value), Base):
value = Reference.create(value)
super().__setattr__(name, value)
def __getattribute__(self, nm):
if nm == 'system':
return self.get_system()
if nm == 'waypoint':
return self.get_waypoint()
val = super().__getattribute__(nm)
if type(val) == Reference:
val = val.resolve()

View File

@@ -5,7 +5,6 @@ from dataclasses import field
class Jumpgate(Base):
def define(self):
self.connections: list = []
self.system = self.get_system()
def update(self, d):
getter = self.store.getter(Waypoint, create=True)

View File

@@ -1,5 +1,5 @@
from .base import Base
from .base import Base, Reference
from time import time
from nullptr.util import *
from dataclasses import field, dataclass
@@ -32,12 +32,9 @@ class Marketplace(Base):
self.exchange:list = []
self.prices:dict = {}
self.last_prices:int = 0
self.set_waypoint()
self.system = self.get_system()
def set_waypoint(self):
waypoint = self.store.get(Waypoint, self.symbol, create=True)
self.waypoint = waypoint
def get_waypoint(self):
return self.store.get('Waypoint', self.symbol, create=True)
def is_fuel(self):
return self.imports + self.exports + self.exchange == ['FUEL']
@@ -51,7 +48,7 @@ class Marketplace(Base):
e = self.prices[symbol] = MarketEntry()
buy = mg(g, 'purchasePrice')
sell = mg(g, 'sellPrice')
volume = mg(g, 'tradeVolumes')
volume = mg(g, 'tradeVolume')
supply = SUPPLY.index(mg(g, 'supply'))
activity = ACTIVITY.index(sg(g, 'activity','STRONG'))
e.add(buy, sell, volume, supply, activity)
@@ -68,12 +65,12 @@ class Marketplace(Base):
def buy_price(self, resource):
if resource not in self.prices:
return None
return self.prices[resource]['buy']
return self.prices[resource].buy
def volume(self, resource):
if resource not in self.prices:
return None
return self.prices[resource]['volume']
return self.prices[resource].volume
def sellable_items(self, resources):
return [r for r in resources if r in self.prices]

View File

@@ -28,7 +28,7 @@ class Survey(Base):
def api_dict(self):
return {
'signature': self.symbol,
'symbol': self.waypoint(),
'symbol': self.waypoint,
'deposits': [{'symbol': d} for d in self.deposits],
'expiration': self.expires_str,
'size': size_names[self.size]

View File

@@ -12,7 +12,6 @@ class Waypoint(Base):
self.traits:list = []
self.faction:str = ''
self.is_under_construction:bool = False
self.system = self.get_system()
self.uncharted = True
@@ -24,6 +23,9 @@ class Waypoint(Base):
self.seta('is_under_construction', d, 'isUnderConstruction')
self.setlst('traits', d, 'traits', 'symbol')
self.uncharted = 'UNCHARTED' in self.traits
def created(self):
self.get_system()
def distance(self, other):
return int(sqrt((self.x - other.x) ** 2 + (self.y - other.y) ** 2))