def create_inventory(self): """Some buildings don't have an own inventory (e.g. storage building). Those can just overwrite this function to do nothing. see also: save_inventory() and load_inventory()""" db_data = horizons.main.db("SELECT resource, size FROM balance.storage WHERE object_id = ?", \ self.id) if len(db_data) == 0: # no db data about inventory. Create default inventory. self.inventory = PositiveSizedSlotStorage(STORAGE.DEFAULT_STORAGE_SIZE) else: # specialised storage; each res and limit is stored in db. self.inventory = PositiveSizedSpecializedStorage() for res, size in db_data: self.inventory.add_resource_slot(res, size)
def create_inventory(self): """Some buildings don't have an own inventory (e.g. storage building). Those can just overwrite this function to do nothing. see also: save_inventory() and load_inventory()""" db_data = horizons.main.db.cached_query("SELECT resource, size FROM balance.storage WHERE object_id = ?", \ self.id) if len(db_data) == 0: # no db data about inventory. Create default inventory. self.inventory = PositiveSizedSlotStorage( STORAGE.DEFAULT_STORAGE_SIZE) else: # specialised storage; each res and limit is stored in db. self.inventory = PositiveSizedSpecializedStorage() for res, size in db_data: self.inventory.add_resource_slot(res, size)
class StorageHolder(object): """The StorageHolder class is used as as a parent class for everything that has an inventory. Examples for these classes are ships, settlements, buildings, etc. Basically it just adds an inventory, nothing more, nothing less. If you want something different than a PositiveSizedSlotStorage, you'll have to overwrite that in the subclass. TUTORIAL: Continue to horizons/world/provider.py for further digging. """ has_own_inventory = True # some objs share inventory, which requires different handling here. def __init__(self, **kwargs): super(StorageHolder, self).__init__(**kwargs) self.__init() def __init(self): self.create_inventory() if self.has_own_inventory: self.inventory.add_change_listener(self._changed) def remove(self): super(StorageHolder, self).remove() if self.has_own_inventory: # no changelister calls on remove self.inventory.clear_change_listeners() # remove inventory to prevent any action here in subclass remove self.inventory.reset_all() def create_inventory(self): """Some buildings don't have an own inventory (e.g. storage building). Those can just overwrite this function to do nothing. see also: save_inventory() and load_inventory()""" db_data = horizons.main.db("SELECT resource, size FROM balance.storage WHERE object_id = ?", \ self.id) if len(db_data) == 0: # no db data about inventory. Create default inventory. self.inventory = PositiveSizedSlotStorage(STORAGE.DEFAULT_STORAGE_SIZE) else: # specialised storage; each res and limit is stored in db. self.inventory = PositiveSizedSpecializedStorage() for res, size in db_data: self.inventory.add_resource_slot(res, size) def save(self, db): super(StorageHolder, self).save(db) if self.has_own_inventory: self.inventory.save(db, self.worldid) def load(self, db, worldid): super(StorageHolder, self).load(db, worldid) self.__init() if self.has_own_inventory: self.inventory.load(db, worldid) def transfer_to_storageholder(self, amount, res_id, transfer_to_id): transfer_to = WorldObject.get_object_by_id(transfer_to_id) # take res from self ret = self.inventory.alter(res_id, -amount) # check if we were able to get the planed amount ret = amount if amount < abs(ret) else abs(ret) # put res to transfer_to ret = transfer_to.inventory.alter(res_id, amount-ret) self.inventory.alter(res_id, ret) #return resources that did not fit
class StorageHolder(object): """The StorageHolder class is used as as a parent class for everything that has an inventory. Examples for these classes are ships, settlements, buildings, etc. Basically it just adds an inventory, nothing more, nothing less. If you want something different than a PositiveSizedSlotStorage, you'll have to overwrite that in the subclass. TUTORIAL: Continue to horizons/world/provider.py for further digging. """ has_own_inventory = True # some objs share inventory, which requires different handling here. def __init__(self, **kwargs): super(StorageHolder, self).__init__(**kwargs) self.__init() def __init(self): self.create_inventory() if self.has_own_inventory: self.inventory.add_change_listener(self._changed) def remove(self): super(StorageHolder, self).remove() if self.has_own_inventory: # no changelister calls on remove self.inventory.clear_change_listeners() # remove inventory to prevent any action here in subclass remove self.inventory.reset_all() def create_inventory(self): """Some buildings don't have an own inventory (e.g. storage building). Those can just overwrite this function to do nothing. see also: save_inventory() and load_inventory()""" db_data = horizons.main.db.cached_query("SELECT resource, size FROM balance.storage WHERE object_id = ?", \ self.id) if len(db_data) == 0: # no db data about inventory. Create default inventory. self.inventory = PositiveSizedSlotStorage( STORAGE.DEFAULT_STORAGE_SIZE) else: # specialised storage; each res and limit is stored in db. self.inventory = PositiveSizedSpecializedStorage() for res, size in db_data: self.inventory.add_resource_slot(res, size) def save(self, db): super(StorageHolder, self).save(db) if self.has_own_inventory: self.inventory.save(db, self.worldid) def load(self, db, worldid): super(StorageHolder, self).load(db, worldid) self.__init() if self.has_own_inventory: self.inventory.load(db, worldid) def transfer_to_storageholder(self, amount, res_id, transfer_to_id): transfer_to = WorldObject.get_object_by_id(transfer_to_id) # take res from self ret = self.inventory.alter(res_id, -amount) # check if we were able to get the planed amount ret = amount if amount < abs(ret) else abs(ret) # put res to transfer_to ret = transfer_to.inventory.alter(res_id, amount - ret) self.inventory.alter(res_id, ret) #return resources that did not fit