New store setup
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
from nullptr.models.base import Base
|
||||
from nullptr.models.waypoint import Waypoint
|
||||
from nullptr.models.sector import Sector
|
||||
from nullptr.models.system import System
|
||||
from nullptr.models.agent import Agent
|
||||
from nullptr.models.marketplace import Marketplace
|
||||
from nullptr.models.jumpgate import Jumpgate
|
||||
from nullptr.models.ship import Ship
|
||||
from nullptr.models.contract import Contract
|
||||
from nullptr.models.survey import Survey
|
||||
|
||||
__all__ = [ 'Waypoint', 'Sector', 'Ship', 'Survey', 'Agent', 'Marketplace', 'Jumpgate', 'Contract', 'Base' ]
|
||||
|
||||
@@ -1,18 +1,38 @@
|
||||
from copy import deepcopy
|
||||
from nullptr.util import sg
|
||||
|
||||
class Reference:
|
||||
def __init__(self, typ, symbol, store):
|
||||
self.typ = typ
|
||||
self.symbol = symbol
|
||||
self.store = store
|
||||
|
||||
@classmethod
|
||||
def create(cls, obj):
|
||||
o = cls(type(obj), obj.symbol, obj.store)
|
||||
return o
|
||||
|
||||
def resolve(self):
|
||||
self.store.get(self.typ, self.symbol)
|
||||
|
||||
def __repr__(self):
|
||||
return f'*REF*{self.symbol}.{self.typ.ext()}'
|
||||
|
||||
class Base:
|
||||
identifier = 'symbol'
|
||||
symbol: str
|
||||
store: object
|
||||
|
||||
def __init__(self, symbol, store):
|
||||
self.disable_dirty = True
|
||||
self.file_offset = 0
|
||||
self.store = store
|
||||
self.symbol = symbol
|
||||
self.define()
|
||||
self.disable_dirty = False
|
||||
|
||||
@classmethod
|
||||
def ext(cls):
|
||||
raise NotImplementedError('no ext')
|
||||
|
||||
def define(self):
|
||||
pass
|
||||
|
||||
@@ -38,10 +58,18 @@ class Base:
|
||||
setattr(self, attr, lst)
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
if name not in ['symbol','store','disable_dirty'] and not self.disable_dirty:
|
||||
if name not in ['symbol','store','disable_dirty', 'file_offset'] and not self.disable_dirty:
|
||||
self.store.dirty(self)
|
||||
if issubclass(type(value), Base):
|
||||
value = Reference.create(value)
|
||||
super().__setattr__(name, value)
|
||||
|
||||
def __getattribute__(self, nm):
|
||||
val = super().__getattribute__(nm)
|
||||
if type(val) == Reference:
|
||||
val = val.resolve()
|
||||
return val
|
||||
|
||||
def update(self, d):
|
||||
pass
|
||||
|
||||
@@ -52,22 +80,15 @@ class Base:
|
||||
self.disable_dirty = True
|
||||
self.__dict__.update(d)
|
||||
self.disable_dirty = False
|
||||
|
||||
def dict(self):
|
||||
|
||||
def __getstate__(self):
|
||||
r = {}
|
||||
for k,v in self.__dict__.items():
|
||||
if k in ['store']:
|
||||
if k in ['store','file_offset', 'disable_dirty', 'file_offset']:
|
||||
continue
|
||||
r[k] = deepcopy(v)
|
||||
return r
|
||||
|
||||
def path(self):
|
||||
raise NotImplementedError('path')
|
||||
|
||||
@classmethod
|
||||
def ext(self):
|
||||
raise NotImplementedError('extension')
|
||||
|
||||
def type(self):
|
||||
return self.__class__.__name__
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from .system_member import SystemMember
|
||||
from .base import Base
|
||||
from dataclasses import field
|
||||
|
||||
class Jumpgate(SystemMember):
|
||||
class Jumpgate(Base):
|
||||
def define(self):
|
||||
self.range: int = 0
|
||||
self.faction: str = ''
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
|
||||
from .system_member import SystemMember
|
||||
from .base import Base
|
||||
from time import time
|
||||
from nullptr.util import *
|
||||
from dataclasses import field
|
||||
|
||||
class Marketplace(SystemMember):
|
||||
class Marketplace(Base):
|
||||
def define(self):
|
||||
self.imports:list = []
|
||||
self.exports:list = []
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from time import time
|
||||
from nullptr.util import *
|
||||
from .system_member import SystemMember
|
||||
from .base import Base
|
||||
|
||||
size_names = ['SMALL','MODERATE','LARGE']
|
||||
|
||||
class Survey(SystemMember):
|
||||
class Survey(Base):
|
||||
identifier = 'signature'
|
||||
def define(self):
|
||||
self.type: str = ''
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
from .base import Base
|
||||
|
||||
class SystemMember(Base):
|
||||
@classmethod
|
||||
def ext(cls):
|
||||
return 'obj'
|
||||
|
||||
def system(self):
|
||||
p = self.symbol.split('-')
|
||||
return f'{p[0]}-{p[1]}'
|
||||
@@ -1,8 +1,8 @@
|
||||
from .system_member import SystemMember
|
||||
from .base import Base
|
||||
from nullptr.util import *
|
||||
from dataclasses import field
|
||||
|
||||
class Waypoint(SystemMember):
|
||||
class Waypoint(Base):
|
||||
def define(self):
|
||||
self.x:int = 0
|
||||
self.y:int = 0
|
||||
|
||||
Reference in New Issue
Block a user