示例#1
0
    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)
示例#2
0
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