本文整理汇总了Python中horizons.world.building.settler.SettlerUpgradeData.get_production_line_id方法的典型用法代码示例。如果您正苦于以下问题:Python SettlerUpgradeData.get_production_line_id方法的具体用法?Python SettlerUpgradeData.get_production_line_id怎么用?Python SettlerUpgradeData.get_production_line_id使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类horizons.world.building.settler.SettlerUpgradeData
的用法示例。
在下文中一共展示了SettlerUpgradeData.get_production_line_id方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: Producer
# 需要导入模块: from horizons.world.building.settler import SettlerUpgradeData [as 别名]
# 或者: from horizons.world.building.settler.SettlerUpgradeData import get_production_line_id [as 别名]
class Producer(Component):
"""Class for objects, that produce something.
@param auto_init: bool. If True, the producer automatically adds one
production for each production_line.
"""
log = logging.getLogger("world.production")
NAME = "producer"
DEPENDENCIES = [StorageComponent]
utilisation_mapping = {
'FieldUtilisation': FieldUtilisation,
'FullUtilisation': FullUtilisation
}
production_class = Production
# INIT
def __init__(self, auto_init=True, start_finished=False, productionlines=None,
utilisation_calculator=None, is_mine_for=None, settler_upgrade_lines=None,
**kwargs):
"""
@param productionline: yaml-dict for prod line data. Must not be changed since it is cached.
@param utilisation_calculator: one of utilisatoin_mapping
@param settler_upgrade_lines: data for settler upgrades. can one day be generalised to other upgrades
"""
if productionlines is None:
productionlines = {}
super(Producer, self).__init__(**kwargs)
self.__auto_init = auto_init
self.__start_finished = start_finished
self.production_lines = productionlines
assert utilisation_calculator is not None
self.__utilisation = utilisation_calculator
if settler_upgrade_lines:
from horizons.world.building.settler import SettlerUpgradeData
self.settler_upgrade_lines = SettlerUpgradeData(self, settler_upgrade_lines)
self.production_lines = self.production_lines.copy()
self.production_lines.update(self.settler_upgrade_lines.get_production_lines())
else:
self.settler_upgrade_lines = None
def __init(self):
# we store productions in 2 dicts, one for the active ones, and one for the inactive ones.
# the inactive ones won't get considered for needed_resources and such.
# the production_line id is the key in the dict (=> a building must not have two identical
# production lines)
self._productions = {}
self._inactive_productions = {}
# Store whether or not the producer is active
self.__active = True
# Store whether or not the utilisation level is currently ok
self.__utilisation_ok = True
# BIG FAT NOTE: this has to be executed for all players for mp
# even if this building has no status icons
# TODO: think about whether this is enough gui-related so it belongs to the ExtScheduler, also check its performance when moving
interval = Scheduler().get_ticks(3)
run_in = self.session.random.randint(1, interval) # don't update all at once
if self.instance.has_status_icon:
Scheduler().add_new_object(self.update_capacity_utilisation, self, run_in=run_in, loops=-1, loop_interval = interval)
def initialize(self):
self.__init()
# add production lines as specified in db.
if self.__auto_init:
for prod_line, attributes in self.production_lines.iteritems():
if 'enabled_by_default' in attributes and not attributes['enabled_by_default']:
continue # It's set to false, don't add
prod = self.create_production(prod_line)
self.add_production(prod)
# For newly built producers we set the utilisation to full for the first
# few seconds, this avoids the low productivity icon being shown every
# time a new producer is built
temp_util = self.__utilisation
self.__utilisation = FullUtilisation()
Scheduler().add_new_object(Callback(self.__set_utilisation, temp_util), self, Scheduler().get_ticks(15))
def get_production_lines_by_level(self, level):
prod_lines = []
for key, data in self.production_lines.iteritems():
if 'level' in data and level in data['level']:
prod_lines.append(key)
return prod_lines
def create_production(self, id, load=False):
"""
@param id: production line id
@param load: whether the production is used for loading.
"""
data = self.production_lines[id]
production_class = self.production_class
owner_inventory = self.instance._get_owner_inventory()
# not really fancy way of selecting special production class
if self.settler_upgrade_lines:
if id == self.settler_upgrade_lines.get_production_line_id(self.instance.level+1):
#.........这里部分代码省略.........