def level_down(self): if self.level == TIER.LOWEST: # Can't level down any more. self.make_ruin() self.log.debug("%s: Destroyed by lack of happiness", self) if self.owner.is_local_player: # check_duplicate: only trigger once for different settlers of a neighborhood self.session.ingame_gui.message_widget.add(point=self.position.center, string_id='SETTLERS_MOVED_OUT', check_duplicate=True) else: self.level -= 1 self._update_level_data() # reset happiness value for new level new_happiness = self.__get_data("happiness_init_value") - self.happiness self.get_component(StorageComponent).inventory.alter(RES.HAPPINESS, new_happiness) self.log.debug("%s: Level down to %s", self, self.level) self._changed() # update the level of our inhabitants so graphics can change if self.has_component(CollectingComponent): for collector in self.get_component(CollectingComponent).get_local_collectors(): collector.level_upgrade(self.level) # Notify the world about the level down SettlerUpdate.broadcast(self, self.level, -1)
def end(self): self._stats = None self.session = None if self.regular_player: SettlerUpdate.unsubscribe(self.notify_settler_reached_level) NewDisaster.unsubscribe(self.notify_new_disaster, sender=self)
def end(self): self.widgets['minimap'].mapEvents({ 'zoomIn': None, 'zoomOut': None, 'rotateRight': None, 'rotateLeft': None, 'destroy_tool': None, 'build': None, 'diplomacyButton': None, 'gameMenuButton': None }) for w in self.widgets.itervalues(): if w.parent is None: w.hide() self.message_widget = None self.tabwidgets = None self.minimap = None self.resource_overview.end() self.resource_overview = None self.hide_menu() SettlerUpdate.unsubscribe(self._on_settler_level_change) ResourceBarResize.unsubscribe(self._on_resourcebar_resize) HoverSettlementChanged.unsubscribe(self._cityinfo_set) SettlerInhabitantsChanged.unsubscribe( self._on_settler_inhabitant_change) super(IngameGui, self).end()
def __init(self, name, color, clientid, difficulty_level, max_tier_notification, settlerlevel=0): assert isinstance(color, Color) assert isinstance(name, str) and name try: self.name = str(name) except UnicodeDecodeError: # WORKAROUND: this line should be the only unicode conversion here. # however, if unicode() gets a parameter, it will fail if the string is already unicode. self.name = str(name, errors='ignore') self.color = color self.clientid = clientid self.difficulty = DifficultySettings.get_settings(difficulty_level) self.max_tier_notification = max_tier_notification self.settler_level = settlerlevel self._stats = None assert self.color.is_default_color, "Player color has to be a default color" if self.regular_player: SettlerUpdate.subscribe(self.notify_settler_reached_level)
def end(self): self.widgets['minimap'].mapEvents({ 'zoomIn' : None, 'zoomOut' : None, 'rotateRight' : None, 'rotateLeft': None, 'destroy_tool' : None, 'build' : None, 'diplomacyButton' : None, 'gameMenuButton' : None }) for w in self.widgets.itervalues(): if w.parent is None: w.hide() self.message_widget = None self.tabwidgets = None self.minimap = None self.resource_overview.end() self.resource_overview = None self.hide_menu() SettlerUpdate.unsubscribe(self._on_settler_level_change) ResourceBarResize.unsubscribe(self._on_resourcebar_resize) HoverSettlementChanged.unsubscribe(self._cityinfo_set) SettlerInhabitantsChanged.unsubscribe(self._on_settler_inhabitant_change) super(IngameGui, self).end()
def level_down(self): if self.level == 0: # can't level down any more # replace this building with a ruin command = Build(BUILDINGS.SETTLER_RUIN, self.position.origin.x, \ self.position.origin.y, island=self.island, settlement=self.settlement) Scheduler().add_new_object( Callback.ChainedCallbacks(self.remove, Callback(command, self.owner)), # remove, then build new self, run_in=0) self.log.debug("%s: Destroyed by lack of happiness", self) if self.owner.is_local_player: # check_duplicate: only trigger once for different settlers of a neighborhood self.session.ingame_gui.message_widget.add(self.position.center().x, self.position.center().y, \ 'SETTLERS_MOVED_OUT', check_duplicate=True) else: self.level -= 1 self._update_level_data() # reset happiness value for new level self.get_component(StorageComponent).inventory.alter(RES.HAPPINESS, self.__get_data("happiness_init_value") - self.happiness) self.log.debug("%s: Level down to %s", self, self.level) self._changed() # Notify the world about the level down SettlerUpdate.broadcast(self, self.level, -1)
def load(self, db, worldid): super(Settler, self).load(db, worldid) self.inhabitants, last_tax_payed = \ db("SELECT inhabitants, last_tax_payed FROM settler WHERE rowid=?", worldid)[0] remaining_ticks = \ db("SELECT ticks FROM remaining_ticks_of_month WHERE rowid=?", worldid)[0][0] self.__init(loading=True, last_tax_payed=last_tax_payed) self._load_upgrade_data(db) SettlerUpdate.broadcast(self, self.level, self.level) self.run(remaining_ticks)
def _do_level_up(): self.level += 1 self.log.debug("%s: Levelling up to %s", self, self.level) self._update_level_data() # Notify the world about the level up SettlerUpdate.broadcast(self, self.level, 1) # reset happiness value for new level self.get_component(StorageComponent).inventory.alter(RES.HAPPINESS, self.__get_data("happiness_init_value") - self.happiness) self._changed()
def _do_level_up(): # NOTE: production is unused, but gets passed by the production code self.level += 1 self.log.debug("%s: Levelling up to %s", self, self.level) self._update_level_data() # Notify the world about the level up SettlerUpdate.broadcast(self, self.level) # reset happiness value for new level self.get_component(StorageComponent).inventory.alter(RES.HAPPINESS_ID, self.__get_data("happiness_init_value") - self.happiness) self._changed()
def _do_level_up(): self.level += 1 self.log.debug("%s: Levelling up to %s", self, self.level) self._update_level_data() # Notify the world about the level up SettlerUpdate.broadcast(self, self.level, 1) # reset happiness value for new level new_happiness = self.__get_data("happiness_init_value") - self.happiness self.get_component(StorageComponent).inventory.alter(RES.HAPPINESS, new_happiness) self._changed()
def __init(self, name, color, difficulty_level, settlerlevel = 0): assert isinstance(color, Color) assert (isinstance(name, str) or isinstance(name, unicode)) and len(name) > 0 try: self.name = unicode(name) except UnicodeDecodeError: # WORKAROUND: this line should be the only unicode conversion here. # however, if unicode() gets a parameter, it will fail if the string is already unicode. self.name = unicode(name, errors='ignore') self.color = color self.difficulty = DifficultySettings.get_settings(difficulty_level) self.settler_level = settlerlevel self.stats = None assert self.color.is_default_color, "Player color has to be a default color" SettlerUpdate.subscribe(self.notify_settler_reached_level) NewDisaster.subscribe(self, self.notify_new_disaster)
def _do_level_up(): self.level += 1 self.log.debug("%s: Levelling up to %s", self, self.level) self._update_level_data() # update the level of our inhabitants so graphics can change if self.has_component(CollectingComponent): for collector in self.get_component(CollectingComponent).get_local_collectors(): collector.level_upgrade(self.level) # Notify the world about the level up SettlerUpdate.broadcast(self, self.level, 1) # reset happiness value for new level new_happiness = self.__get_data("happiness_init_value") - self.happiness self.get_component(StorageComponent).inventory.alter(RES.HAPPINESS, new_happiness) self._changed()
def __init(self, name, color, difficulty_level, settlerlevel=0): assert isinstance(color, Color) assert (isinstance(name, str) or isinstance(name, unicode)) and len(name) > 0 try: self.name = unicode(name) except UnicodeDecodeError: # WORKAROUND: this line should be the only unicode conversion here. # however, if unicode() gets a parameter, it will fail if the string is already unicode. self.name = unicode(name, errors="ignore") self.color = color self.difficulty = DifficultySettings.get_settings(difficulty_level) self.settler_level = settlerlevel assert self.color.is_default_color, "Player color has to be a default color" SettlerUpdate.subscribe(self.notify_settler_reached_level) if self.regular_player: Scheduler().add_new_object(Callback(self.update_stats), self, run_in=0)
def __init(self, name, color, clientid, difficulty_level, max_tier_notification, settlerlevel=0): assert isinstance(color, Color) assert isinstance(name, basestring) and name try: self.name = unicode(name) except UnicodeDecodeError: # WORKAROUND: this line should be the only unicode conversion here. # however, if unicode() gets a parameter, it will fail if the string is already unicode. self.name = unicode(name, errors='ignore') self.color = color self.clientid = clientid self.difficulty = DifficultySettings.get_settings(difficulty_level) self.max_tier_notification = max_tier_notification self.settler_level = settlerlevel self._stats = None assert self.color.is_default_color, "Player color has to be a default color" if self.regular_player: SettlerUpdate.subscribe(self.notify_settler_reached_level)
def level_down(self): if self.level == 0: # can't level down any more self.make_ruin() self.log.debug("%s: Destroyed by lack of happiness", self) if self.owner.is_local_player: # check_duplicate: only trigger once for different settlers of a neighborhood self.session.ingame_gui.message_widget.add( point=self.position.center(), string_id="SETTLERS_MOVED_OUT", check_duplicate=True ) else: self.level -= 1 self._update_level_data() # reset happiness value for new level self.get_component(StorageComponent).inventory.alter( RES.HAPPINESS, self.__get_data("happiness_init_value") - self.happiness ) self.log.debug("%s: Level down to %s", self, self.level) self._changed() # Notify the world about the level down SettlerUpdate.broadcast(self, self.level, -1)
def end(self): self.mainhud.mapEvents({ 'zoomIn' : None, 'zoomOut' : None, 'rotateRight' : None, 'rotateLeft': None, 'destroy_tool' : None, 'build' : None, 'diplomacyButton' : None, 'gameMenuButton' : None }) self.message_widget = None self.minimap = None self.resource_overview.end() self.resource_overview = None self.keylistener = None self.cityinfo.end() self.cityinfo = None self.hide_menu() SettlerUpdate.unsubscribe(self._on_settler_level_change) SpeedChanged.unsubscribe(self._on_speed_changed) self.session.view.remove_change_listener(self._update_zoom) if self.cursor: self.cursor.remove() self.cursor.end() self.cursor = None LastActivePlayerSettlementManager().remove() LastActivePlayerSettlementManager.destroy_instance() self.production_finished_icon_manager.end() self.production_finished_icon_manager = None self.status_icon_manager.end() self.status_icon_manager = None super(IngameGui, self).end()
def change_tier(session, tier): """ Changes the tier of the settlements. """ for settlement in session.world.settlements: if settlement.owner == session.world.player: # Settler levels are zero-based! SettlerUpdate.broadcast(settlement.warehouse, tier - 1, tier - 1)
def hide(self): SettlerUpdate.discard(self.on_settler_level_change, sender=self.instance) super().hide()
def hide(self): SettlerUpdate.discard(self.on_settler_level_change, sender=self.instance) super(SettlerOverviewTab, self).hide()
def show(self): super(SettlerOverviewTab, self).show() SettlerUpdate.subscribe(self.on_settler_level_change, sender=self.instance)
def __init__(self, session, gui): super(IngameGui, self).__init__() self.session = session assert isinstance(self.session, horizons.session.Session) self.main_gui = gui self.main_widget = None self.tabwidgets = {} self.settlement = None self.resource_source = None self.resources_needed, self.resources_usable = {}, {} self._old_menu = None self.widgets = LazyWidgetsDict(self.styles, center_widgets=False) self.cityinfo = self.widgets['city_info'] self.cityinfo.child_finder = PychanChildFinder(self.cityinfo) self.logbook = LogBook(self.session) self.message_widget = MessageWidget(self.session) self.players_overview = PlayersOverview(self.session) self.players_settlements = PlayersSettlements(self.session) self.players_ships = PlayersShips(self.session) # self.widgets['minimap'] is the guichan gui around the actual minimap, # which is saved in self.minimap minimap = self.widgets['minimap'] minimap.position_technique = "right+0:top+0" icon = minimap.findChild(name="minimap") self.minimap = Minimap(icon, targetrenderer=horizons.globals.fife.targetrenderer, imagemanager=horizons.globals.fife.imagemanager, session=self.session, view=self.session.view) def speed_up(): SpeedUpCommand().execute(self.session) def speed_down(): SpeedDownCommand().execute(self.session) minimap.mapEvents({ 'zoomIn' : self.session.view.zoom_in, 'zoomOut' : self.session.view.zoom_out, 'rotateRight' : Callback.ChainedCallbacks(self.session.view.rotate_right, self.minimap.rotate_right), 'rotateLeft' : Callback.ChainedCallbacks(self.session.view.rotate_left, self.minimap.rotate_left), 'speedUp' : speed_up, 'speedDown' : speed_down, 'destroy_tool' : self.session.toggle_destroy_tool, 'build' : self.show_build_menu, 'diplomacyButton' : self.show_diplomacy_menu, 'gameMenuButton' : self.main_gui.toggle_pause, 'logbook' : self.logbook.toggle_visibility }) minimap.show() #minimap.position_technique = "right+15:top+153" self.widgets['tooltip'].hide() self.resource_overview = ResourceOverviewBar(self.session) ResourceBarResize.subscribe(self._on_resourcebar_resize) # Register for messages SettlerUpdate.subscribe(self._on_settler_level_change) SettlerInhabitantsChanged.subscribe(self._on_settler_inhabitant_change) HoverSettlementChanged.subscribe(self._cityinfo_set)
def __init__(self, session, gui): super(IngameGui, self).__init__() self.session = session assert isinstance(self.session, horizons.session.Session) self.main_gui = gui self.main_widget = None self.settlement = None self._old_menu = None self.cursor = None self.coordinates_tooltip = None self.keylistener = IngameKeyListener(self.session) self.cityinfo = CityInfo(self) LastActivePlayerSettlementManager.create_instance(self.session) self.logbook = LogBook(self.session) self.message_widget = MessageWidget(self.session) self.players_overview = PlayersOverview(self.session) self.players_settlements = PlayersSettlements(self.session) self.players_ships = PlayersShips(self.session) self.chat_dialog = ChatDialog(self.main_gui, self, self.session) self.change_name_dialog = ChangeNameDialog(self.main_gui, self, self.session) self.pausemenu = PauseMenu(self.session, self.main_gui, self, in_editor_mode=False) # Icon manager self.status_icon_manager = StatusIconManager( renderer=self.session.view.renderer['GenericRenderer'], layer=self.session.view.layers[LAYERS.OBJECTS] ) self.production_finished_icon_manager = ProductionFinishedIconManager( renderer=self.session.view.renderer['GenericRenderer'], layer=self.session.view.layers[LAYERS.OBJECTS] ) # 'minimap' is the guichan gui around the actual minimap, which is saved # in self.minimap self.mainhud = load_uh_widget('minimap.xml') self.mainhud.position_technique = "right+0:top+0" icon = self.mainhud.findChild(name="minimap") self.minimap = Minimap(icon, targetrenderer=horizons.globals.fife.targetrenderer, imagemanager=horizons.globals.fife.imagemanager, session=self.session, view=self.session.view) def speed_up(): SpeedUpCommand().execute(self.session) def speed_down(): SpeedDownCommand().execute(self.session) self.mainhud.mapEvents({ 'zoomIn' : self.session.view.zoom_in, 'zoomOut' : self.session.view.zoom_out, 'rotateRight' : Callback.ChainedCallbacks(self.session.view.rotate_right, self.minimap.rotate_right), 'rotateLeft' : Callback.ChainedCallbacks(self.session.view.rotate_left, self.minimap.rotate_left), 'speedUp' : speed_up, 'speedDown' : speed_down, 'destroy_tool' : self.toggle_destroy_tool, 'build' : self.show_build_menu, 'diplomacyButton' : self.show_diplomacy_menu, 'gameMenuButton' : self.toggle_pause, 'logbook' : self.logbook.toggle_visibility }) self.mainhud.show() self.resource_overview = ResourceOverviewBar(self.session) # Register for messages SettlerUpdate.subscribe(self._on_settler_level_change) SpeedChanged.subscribe(self._on_speed_changed) self.session.view.add_change_listener(self._update_zoom) self._display_speed(self.session.timer.ticks_per_second)
def change_increment(session, increment): """ Changes the increment of the settlements. """ for settlement in session.world.settlements: if settlement.owner == session.world.player: # Settler levels are zero-based! SettlerUpdate.broadcast(settlement.warehouse, increment - 1, increment - 1)
def __init__(self, session, gui): super(IngameGui, self).__init__() self.session = session assert isinstance(self.session, horizons.session.Session) self.main_gui = gui self.main_widget = None self.tabwidgets = {} self.settlement = None self.resource_source = None self.resources_needed, self.resources_usable = {}, {} self._old_menu = None self.widgets = LazyWidgetsDict(self.styles, center_widgets=False) self.cityinfo = self.widgets['city_info'] self.cityinfo.child_finder = PychanChildFinder(self.cityinfo) self.logbook = LogBook(self.session) self.message_widget = MessageWidget(self.session) self.players_overview = PlayersOverview(self.session) self.players_settlements = PlayersSettlements(self.session) self.players_ships = PlayersShips(self.session) # self.widgets['minimap'] is the guichan gui around the actual minimap, # which is saved in self.minimap minimap = self.widgets['minimap'] minimap.position_technique = "right+0:top+0" icon = minimap.findChild(name="minimap") self.minimap = Minimap( icon, targetrenderer=horizons.globals.fife.targetrenderer, imagemanager=horizons.globals.fife.imagemanager, session=self.session, view=self.session.view) def speed_up(): SpeedUpCommand().execute(self.session) def speed_down(): SpeedDownCommand().execute(self.session) minimap.mapEvents({ 'zoomIn': self.session.view.zoom_in, 'zoomOut': self.session.view.zoom_out, 'rotateRight': Callback.ChainedCallbacks(self.session.view.rotate_right, self.minimap.rotate_right), 'rotateLeft': Callback.ChainedCallbacks(self.session.view.rotate_left, self.minimap.rotate_left), 'speedUp': speed_up, 'speedDown': speed_down, 'destroy_tool': self.session.toggle_destroy_tool, 'build': self.show_build_menu, 'diplomacyButton': self.show_diplomacy_menu, 'gameMenuButton': self.main_gui.toggle_pause, 'logbook': self.logbook.toggle_visibility }) minimap.show() #minimap.position_technique = "right+15:top+153" self.widgets['tooltip'].hide() self.resource_overview = ResourceOverviewBar(self.session) ResourceBarResize.subscribe(self._on_resourcebar_resize) # Register for messages SettlerUpdate.subscribe(self._on_settler_level_change) SettlerInhabitantsChanged.subscribe(self._on_settler_inhabitant_change) HoverSettlementChanged.subscribe(self._cityinfo_set)
def end(self): self._stats = None self.session = None if self.regular_player: SettlerUpdate.unsubscribe(self.notify_settler_reached_level)
def hide(self): SettlerUpdate.unsubscribe(self.on_settler_level_change, sender=self.instance) super(SettlerOverviewTab, self).hide()
def __init__(self, session, gui): super(IngameGui, self).__init__() self.session = session assert isinstance(self.session, horizons.session.Session) self.main_gui = gui self.main_widget = None self.tabwidgets = {} self.settlement = None self.resource_source = None self.resources_needed, self.resources_usable = {}, {} self._old_menu = None self.widgets = LazyWidgetsDict(self.styles, center_widgets=False) cityinfo = self.widgets['city_info'] cityinfo.child_finder = PychanChildFinder(cityinfo) # special settings for really small resolutions #TODO explain what actually happens width = horizons.main.fife.engine_settings.getScreenWidth() x = 'center' y = 'top' x_offset = +15 y_offset = +4 if width < 800: x = 'left' x_offset = 10 y_offset = +66 elif width < 1020: x_offset = (1050 - width) / 2 cityinfo.position_technique = "%s%+d:%s%+d" % (x, x_offset, y, y_offset) # usually "center-10:top+4" self.logbook = LogBook(self.session) self.message_widget = MessageWidget(self.session) self.players_overview = PlayersOverview(self.session) self.players_settlements = PlayersSettlements(self.session) self.players_ships = PlayersShips(self.session) self.scenario_chooser = ScenarioChooser(self.session) # self.widgets['minimap'] is the guichan gui around the actual minimap, # which is saved in self.minimap minimap = self.widgets['minimap'] minimap.position_technique = "right+0:top+0" icon = minimap.findChild(name="minimap") self.minimap = Minimap(icon, targetrenderer=horizons.main.fife.targetrenderer, imagemanager=horizons.main.fife.imagemanager, session=self.session, view=self.session.view) def speed_up(): SpeedUpCommand().execute(self.session) def speed_down(): SpeedDownCommand().execute(self.session) minimap.mapEvents({ 'zoomIn' : self.session.view.zoom_in, 'zoomOut' : self.session.view.zoom_out, 'rotateRight' : Callback.ChainedCallbacks(self.session.view.rotate_right, self.minimap.rotate_right), 'rotateLeft' : Callback.ChainedCallbacks(self.session.view.rotate_left, self.minimap.rotate_left), 'speedUp' : speed_up, 'speedDown' : speed_down, 'destroy_tool' : self.session.toggle_destroy_tool, 'build' : self.show_build_menu, 'diplomacyButton' : self.show_diplomacy_menu, 'gameMenuButton' : self.main_gui.toggle_pause, 'logbook' : self.logbook.toggle_visibility }) minimap.show() #minimap.position_technique = "right+15:top+153" self.widgets['tooltip'].hide() self.resource_overview = ResourceOverviewBar(self.session) ResourceBarResize.subscribe(self._on_resourcebar_resize) # map buildings to build functions calls with their building id. # This is necessary because BuildTabs have no session. self.callbacks_build = dict() for building_id in Entities.buildings.iterkeys(): self.callbacks_build[building_id] = Callback(self._build, building_id) # Register for messages SettlerUpdate.subscribe(self._on_settler_level_change) SettlerInhabitantsChanged.subscribe(self._on_settler_inhabitant_change) HoverSettlementChanged.subscribe(self._cityinfo_set)