def __init__(self, session, building, ship=None, build_related=None): super(BuildingTool, self).__init__(session) assert not (ship and build_related) self.renderer = self.session.view.renderer['InstanceRenderer'] self.ship = ship self._class = building self.__init_selectable_component() self.buildings = [] # list of PossibleBuild objs self.buildings_action_set_ids = [] # list action set ids of list above self.buildings_fife_instances = {} # fife instances of possible builds self.buildings_missing_resources = { } # missing resources for possible builds self.rotation = 45 + random.randint(0, 3) * 90 self.start_point, self.end_point = None, None self.last_change_listener = None self._transparencified_instances = set( ) # fife instances modified for transparency self._buildable_tiles = set() # tiles marked as buildable self._related_buildings = set() # buildings highlighted as related self._highlighted_buildings = set( ) # related buildings highlighted when preview is near it self._build_logic = None self._related_buildings_selected_tiles = frozenset( ) # highlights w.r.t. related buildings if self.ship is not None: self._build_logic = ShipBuildingToolLogic(ship) elif build_related is not None: self._build_logic = BuildRelatedBuildingToolLogic( self, weakref.ref(build_related)) else: self._build_logic = SettlementBuildingToolLogic(self) self.load_gui() self.__class__.gui.show() self.session.ingame_gui.minimap_to_front() self.session.gui.on_escape = self.on_escape self.highlight_buildable() WorldObjectDeleted.subscribe(self._on_worldobject_deleted) SettlementInventoryUpdated.subscribe(self.update_preview) PlayerInventoryUpdated.subscribe(self.update_preview)
def remove(self): self.session.ingame_gui.resource_overview.close_construction_mode() WorldObjectDeleted.unsubscribe(self._on_worldobject_deleted) self._remove_listeners() self._remove_building_instances() self._remove_coloring() self._build_logic.remove(self.session) self._buildable_tiles = None self._transparencified_instances = None self._related_buildings_selected_tiles = None self._related_buildings = None self._highlighted_buildings = None self._build_logic = None self.buildings = None if self.__class__.gui is not None: self.__class__.gui.hide() ExtScheduler().rem_all_classinst_calls(self) SettlementInventoryUpdated.discard(self.update_preview) PlayerInventoryUpdated.discard(self.update_preview) super(BuildingTool, self).remove()
def __init__(self, session, building, ship=None, build_related=None): super(BuildingTool, self).__init__(session) assert not (ship and build_related) self.renderer = self.session.view.renderer['InstanceRenderer'] self.ship = ship self._class = building self.__init_selectable_component() self.buildings = [] # list of PossibleBuild objs self.buildings_action_set_ids = [] # list action set ids of list above self.buildings_fife_instances = {} # fife instances of possible builds self.buildings_missing_resources = {} # missing resources for possible builds self.rotation = 45 + random.randint(0, 3)*90 self.start_point, self.end_point = None, None self.last_change_listener = None self._transparencified_instances = set() # fife instances modified for transparency self._buildable_tiles = set() # tiles marked as buildable self._related_buildings = set() # buildings highlighted as related self._highlighted_buildings = set() # related buildings highlighted when preview is near it self._build_logic = None self._related_buildings_selected_tiles = frozenset() # highlights w.r.t. related buildings if self.ship is not None: self._build_logic = ShipBuildingToolLogic(ship) elif build_related is not None: self._build_logic = BuildRelatedBuildingToolLogic(self, weakref.ref(build_related) ) else: self._build_logic = SettlementBuildingToolLogic(self) self.load_gui() self.__class__.gui.show() self.session.ingame_gui.minimap_to_front() self.session.gui.on_escape = self.on_escape self.highlight_buildable() WorldObjectDeleted.subscribe(self._on_worldobject_deleted) SettlementInventoryUpdated.subscribe(self.update_preview) PlayerInventoryUpdated.subscribe(self.update_preview)