def update(self, current): """Update to new world position. Sets internal state to new settlement or no settlement @param current: some kind of position coords with x- and y-values""" settlement = self.session.world.get_settlement(Point(int(round(current.x)), int(round(current.y)))) # check if it's a new settlement independent of player if resolve_weakref(self._cur_settlement) is not settlement: self._cur_settlement = create_weakref(settlement) HoverSettlementChanged.broadcast(self, settlement) # player-sensitive code new_player_settlement = weakref.ref(settlement) if \ settlement and settlement.owner.is_local_player else None need_msg = False # check if actual last player settlement is a new one if new_player_settlement is not None and \ resolve_weakref(self._last_player_settlement) is not resolve_weakref( new_player_settlement): self._last_player_settlement = new_player_settlement need_msg = True # check if we changed to or from None # this doesn't change the last settlement, but we need a message if (new_player_settlement is None and not self._last_player_settlement_hovered_was_none) or \ (new_player_settlement is not None and self._last_player_settlement_hovered_was_none): need_msg = True if need_msg: NewPlayerSettlementHovered.broadcast(self, resolve_weakref(new_player_settlement)) self._last_player_settlement_hovered_was_none = (new_player_settlement is None)
def __init__(self, session): from horizons.session import Session assert isinstance(session, Session) self.session = session # special slot because of special properties self.gold_gui = load_uh_widget(self.__class__.GOLD_ENTRY_GUI_FILE, style=self.__class__.STYLE) self.gold_gui.balance_visible = False self.gold_gui.child_finder = PychanChildFinder(self.gold_gui) gold_icon = self.gold_gui.child_finder("res_icon") gold_icon.image = get_res_icon_path(RES.GOLD) gold_icon.max_size = gold_icon.min_size = gold_icon.size = (32, 32) self.gold_gui.mapEvents({ "resbar_gold_container/mouseClicked/stats" : self._toggle_stats, }) self.gold_gui.helptext = _("Click to show statistics") self.stats_gui = None self.gui = [] # list of slots self.resource_configurations = weakref.WeakKeyDictionary() self.current_instance = weakref.ref(self) # can't weakref to None self.construction_mode = False self._last_build_costs = None self._do_show_dummy = False self._update_default_configuration() NewPlayerSettlementHovered.subscribe(self._on_different_settlement) TabWidgetChanged.subscribe(self._on_tab_widget_changed) # set now and then every few sec ExtScheduler().add_new_object(self._update_balance_display, self, run_in=0) ExtScheduler().add_new_object(self._update_balance_display, self, run_in=Player.STATS_UPDATE_INTERVAL, loops=-1)
def update(self, current): """Update to new world position. Sets internal state to new settlement or no settlement @param current: some kind of position coords with x- and y-values""" settlement = self.session.world.get_settlement(Point(int(round(current.x)), int(round(current.y)))) # check if it's a new settlement independent of player if resolve_weakref(self._cur_settlement) is not settlement: self._cur_settlement = create_weakref(settlement) HoverSettlementChanged.broadcast(self, settlement) # player-sensitive code new_player_settlement = weakref.ref(settlement) if \ settlement and settlement.owner.is_local_player else None need_msg = False # check if actual last player settlement is a new one if new_player_settlement is not None and \ resolve_weakref(self._last_player_settlement) is not resolve_weakref(new_player_settlement): self._last_player_settlement = new_player_settlement need_msg = True # check if we changed to or from None # this doesn't change the last settlement, but we need a message if (new_player_settlement is None and not self._last_player_settlement_hovered_was_none) or \ (new_player_settlement is not None and self._last_player_settlement_hovered_was_none): need_msg = True if need_msg: NewPlayerSettlementHovered.broadcast(self, resolve_weakref(new_player_settlement)) self._last_player_settlement_hovered_was_none = (new_player_settlement is None)
def __init__(self, session): from horizons.session import Session assert isinstance(session, Session) self.session = session # special slot because of special properties self.gold_gui = load_uh_widget(self.__class__.GOLD_ENTRY_GUI_FILE, style=self.__class__.STYLE) self.gold_gui.balance_visible = False self.gold_gui.child_finder = PychanChildFinder(self.gold_gui) self.gold_gui.child_finder("res_icon").image = get_res_icon_path(RES.GOLD, 32) self.gui = [] # list of slots self.resource_configurations = weakref.WeakKeyDictionary() self.current_instance = weakref.ref(self) # can't weakref to None self.construction_mode = False self._last_build_costs = None self._do_show_dummy = False self._update_default_configuration() NewPlayerSettlementHovered.subscribe(self._on_different_settlement) TabWidgetChanged.subscribe(self._on_tab_widget_changed) # set now and then every 2 sec ExtScheduler().add_new_object(self._update_balance_display, self, run_in=0) ExtScheduler().add_new_object(self._update_balance_display, self, run_in=2, loops=-1)
def __add_changelisteners(self): NewPlayerSettlementHovered.subscribe(self.on_settlement_change) if self.__current_settlement is not None: inventory = self.__current_settlement.get_component( StorageComponent).inventory if not inventory.has_change_listener(self.refresh): inventory.add_change_listener(self.refresh)
def end(self): self.set_inventory_instance( None, force_update=True ) self.current_instance = weakref.ref(self) ExtScheduler().rem_all_classinst_calls(self) self.resource_configurations.clear() self.gold_gui = None self.gui = None self._custom_default_resources = None NewPlayerSettlementHovered.unsubscribe(self._on_different_settlement)
def end(self): self.set_inventory_instance( None, force_update=True ) self.current_instance = weakref.ref(self) ExtScheduler().rem_all_classinst_calls(self) self.resource_configurations.clear() self.hide() self.gold_gui = None self.gui = None self.stats_gui = None self._custom_default_resources = None NewPlayerSettlementHovered.unsubscribe(self._on_different_settlement) TabWidgetChanged.unsubscribe(self._on_tab_widget_changed)
def __init__(self, session): from horizons.session import Session assert isinstance(session, Session) self.session = session # special slot because of special properties self.gold_gui = load_uh_widget(self.__class__.GOLD_ENTRY_GUI_FILE, style=self.__class__.STYLE) self.gold_gui.child_finder = PychanChildFinder(self.gold_gui) self.gold_gui.findChild(name="res_icon").image = get_res_icon_path(RES.GOLD, 32) self.gui = [] # list of slots self.resource_configurations = weakref.WeakKeyDictionary() self.current_instance = weakref.ref(self) # can't weakref to None self.construction_mode = False self._last_build_costs = None self._do_show_dummy = False self._update_default_configuration() NewPlayerSettlementHovered.subscribe(self._on_different_settlement)
def __add_changelisteners(self): NewPlayerSettlementHovered.subscribe(self.on_settlement_change) if self.__current_settlement is not None: inventory = self.__current_settlement.get_component(StorageComponent).inventory if not inventory.has_change_listener(self.refresh): inventory.add_change_listener(self.refresh)
def __remove_changelisteners(self): NewPlayerSettlementHovered.discard(self.on_settlement_change) if self.__current_settlement is not None: inventory = self.__current_settlement.get_component(StorageComponent).inventory inventory.discard_change_listener(self.refresh)
def __remove_changelisteners(self): NewPlayerSettlementHovered.discard(self.on_settlement_change) if self.__current_settlement is not None: inventory = self.__current_settlement.get_component( StorageComponent).inventory inventory.discard_change_listener(self.refresh)