def __init__(self, tile_width, use_svg, seethrough, debug, use_char): super(TileWidget, self).__init__() ResetItem.__init__(self, tile_width) self._seethrough = seethrough self._use_svg = use_svg self.being = None self.background = self.background_klass(self, tile_width, use_svg, seethrough, debug, use_char) self.inventory = InventoryWidget(self, tile_width, use_svg) self.features = {} for name, klass in self.feature_klasses.items(): self.features[name] = klass(self, tile_width, use_svg) self.features[name].setZValue(2) self.debug = FloorDebugItem(self, tile_width) if debug else None self.debug and self.debug.setZValue(101)
class TileWidget(QtGui.QGraphicsWidget, ResetItem): attrs = ('x', 'y', 'features') tile_clicked = QtCore.pyqtSignal(QtGui.QGraphicsWidget) being_added = QtCore.pyqtSignal(QtGui.QGraphicsWidget) background_klass = BackgroundWidget feature_klasses = { 'face': DummyItem, 'roof': DummyItem, 'side': DummyItem, 'arch': DummyItem, 'door': DummyItem, 'stairs': CharItem, } svg_feature_klass = DummyItem def __init__(self, tile_width, use_svg, seethrough, debug, use_char): super(TileWidget, self).__init__() ResetItem.__init__(self, tile_width) self._seethrough = seethrough self._use_svg = use_svg self.being = None self.background = self.background_klass(self, tile_width, use_svg, seethrough, debug, use_char) self.inventory = InventoryWidget(self, tile_width, use_svg) self.features = {} for name, klass in self.feature_klasses.items(): self.features[name] = klass(self, tile_width, use_svg) self.features[name].setZValue(2) self.debug = FloorDebugItem(self, tile_width) if debug else None self.debug and self.debug.setZValue(101) def __repr__(self): return "<TileWidget ({},{}) {}>".format(self['x'], self['y'], self.being) def reset(self, tile, nobeing): super(TileWidget, self).reset(tile) self.setPos(*self.offset()) self.background.reset(tile) self.inventory.reset(tile.inventory) if not nobeing and tile.being: self.setBeing(tile.being) for feature, item in self.features.items(): if self._seethrough: item.hide() elif feature in self['features']: item.reset(tile) item.show() else: item.hide() if self.debug: self.debug.reset(tile) self.background.floor.setPen(QtGui.QColor('white')) def updateSvgCacheMode(self, mode): if self._use_svg: for feature in self.features.values(): if feature.svg_item: feature.svg_item.setCacheMode(mode) def setBeing(self, being): widget = BeingWidget(self, self.tile_width, self._use_svg, being.is_player) self.being = widget widget.reset(being) self.being_added.emit(widget) def offset(self): return (self['x'] * self.tile_width, self['y'] * self.tile_width) def center(self): return self.background.center() @property def idx(self): return self['x'], self['y'] @property def floor(self): return self.background.floor