Пример #1
0
    def __init__(self,
                 app,
                 player,
                 font=None,
                 colour=None,
                 shadowColour=None,
                 backColour=None):
        pygame.sprite.Sprite.__init__(self)

        if font is None:
            font = app.fonts.countdownFont
        if colour is None:
            colour = app.theme.colours.countDownColour
        if shadowColour is None:
            shadowColour = app.theme.colours.countDownShadow

        self.app = app
        self.player = player
        self.font = font
        self.colour = colour
        self.shadowColour = shadowColour

        self.foreText = TextImage(' ',
                                  font,
                                  colour,
                                  backColour,
                                  antialias=True)
        self.shadowText = TextImage('',
                                    font,
                                    shadowColour,
                                    backColour,
                                    antialias=True)
Пример #2
0
class CountDown(pygame.sprite.Sprite):
    def __init__(self,
                 app,
                 player,
                 font=None,
                 colour=None,
                 shadowColour=None,
                 backColour=None):
        pygame.sprite.Sprite.__init__(self)

        if font is None:
            font = app.fonts.countdownFont
        if colour is None:
            colour = app.theme.colours.countDownColour
        if shadowColour is None:
            shadowColour = app.theme.colours.countDownShadow

        self.app = app
        self.player = player
        self.font = font
        self.colour = colour
        self.shadowColour = shadowColour

        self.foreText = TextImage(' ',
                                  font,
                                  colour,
                                  backColour,
                                  antialias=True)
        self.shadowText = TextImage('',
                                    font,
                                    shadowColour,
                                    backColour,
                                    antialias=True)

    def update(self):
        bomber = self.player.items.get(Bomber)
        counter = int(5.99 * bomber.timeRemaining / bomber.totalTimeLimit)
        if counter == 0:
            text = ''
        else:
            text = str(counter)
        if text == self.foreText.text:
            return

        self.foreText.text = text
        self.shadowText.text = text

        image1 = self.foreText.getImage(self.app)
        image2 = self.shadowText.getImage(self.app)

        self.image = pygame.Surface(
            (image1.get_width() + 2, image1.get_height() + 2), pygame.SRCALPHA)
        self.rect = self.image.get_rect()

        self.image.blit(image2, (2, 2))
        self.image.blit(image1, (0, 0))
Пример #3
0
    def __init__(self,
                 app,
                 pos,
                 text,
                 font,
                 stdColour,
                 hvrColour,
                 hotkey=None,
                 backColour=None,
                 onClick=None):
        self.stdImage = TextImage(text, font, stdColour, backColour)
        self.hvrImage = TextImage(text, font, hvrColour, backColour)

        super(TextButton, self).__init__(app, pos, self.stdImage,
                                         self.hvrImage, hotkey, onClick)

        self.app.screenManager.onResize.addListener(self.appResized)
Пример #4
0
    def __init__(self,
                 app,
                 text,
                 font,
                 pos,
                 colour=(0, 128, 0),
                 anchor='topleft',
                 shadow=False,
                 backColour=None,
                 antialias=True):
        super(TextElement, self).__init__(app)

        self.pos = pos
        self.anchor = anchor
        self.image = TextImage(text, font, colour, backColour, antialias)
        self.__shadow = None
        self.setShadow(shadow)
        self._surface = None
        self.rect = None

        app.screenManager.onResize.addListener(self.appResized)
Пример #5
0
    def __init__(self,
                 app,
                 area,
                 items,
                 font,
                 colour,
                 hlColour=None,
                 showBtns=True):
        super(ListBox, self).__init__(app)
        self.area = area
        self.items = items
        self.font = font
        self.showBtns = showBtns
        self.onValueChanged = Event()

        self.setColour(colour, hlColour)

        self.offset = 0
        self.index = -1

        # Create up and down buttons.
        if showBtns:
            img1 = TextImage('up', font, colour)
            img2 = TextImage('up', font, self.hlColour)
            self.upBtn = HoverButton(
                self.app,
                Location(AttachedPoint((0, 0), self._getRect, 'topright'),
                         'topright'), img1, img2)
            self.upBtn.onClick.addListener(self.upClick)
            img1 = TextImage('down', font, colour)
            img2 = TextImage('down', font, self.hlColour)
            self.dnBtn = HoverButton(
                self.app,
                Location(AttachedPoint((0, 0), self._getRect, 'bottomright'),
                         'bottomright'), img1, img2)
            self.dnBtn.onClick.addListener(self.dnClick)
Пример #6
0
class TextButton(HoverButton):
    'A HoverButton which has text rather than images.'

    def __init__(self,
                 app,
                 pos,
                 text,
                 font,
                 stdColour,
                 hvrColour,
                 hotkey=None,
                 backColour=None,
                 onClick=None):
        self.stdImage = TextImage(text, font, stdColour, backColour)
        self.hvrImage = TextImage(text, font, hvrColour, backColour)

        super(TextButton, self).__init__(app, pos, self.stdImage,
                                         self.hvrImage, hotkey, onClick)

        self.app.screenManager.onResize.addListener(self.appResized)

    def appResized(self):
        # The font may be scaled, so refresh the images
        self.stdImage.refresh()
        self.hvrImage.refresh()

    def setText(self, text):
        self.stdImage.text = text
        self.hvrImage.text = text

    def setFont(self, font):
        self.stdImage.setFont(font)
        self.hvrImage.setFont(font)

    def setColour(self, colour):
        self.stdImage.setColour(colour)

    def setHoverColour(self, colour):
        self.hvrImage.setColour(colour)

    def setBackColour(self, colour):
        self.hvrImage.setBackColour(colour)
        self.stdImage.setBackColour(colour)
Пример #7
0
class TextElement(Element):
    '''Shows text at a specified screen location.
    @param pos: should be an instance of trosnoth.ui.common.Location'''
    def __init__(self,
                 app,
                 text,
                 font,
                 pos,
                 colour=(0, 128, 0),
                 anchor='topleft',
                 shadow=False,
                 backColour=None,
                 antialias=True):
        super(TextElement, self).__init__(app)

        self.pos = pos
        self.anchor = anchor
        self.image = TextImage(text, font, colour, backColour, antialias)
        self.__shadow = None
        self.setShadow(shadow)
        self._surface = None
        self.rect = None

        app.screenManager.onResize.addListener(self.appResized)

    def appResized(self):
        self.rect = None
        self._surface = None

    def _getImage(self):
        if self._surface is None:
            self.image.refresh()
            self._surface = self.image.getImage(self.app)
        return self._surface

    def getRect(self, app):
        assert app is self.app
        return self._getRect()

    def _getRect(self):
        if self.rect is not None:
            return self.rect

        rect = self._getImage().get_rect()
        pos = self.pos
        if hasattr(pos, 'apply'):
            pos.apply(self.app, rect)
        else:
            setattr(rect, defaultAnchor, pos)

        self.rect = rect
        return rect

    def getText(self):
        return self.image.text

    def setColour(self, colour):
        self.image.colour = colour
        self._surface = None

    def setText(self, text):
        if self.image.text != text:
            self._surface = None
            self.image.text = text
            if self.__shadow is not None:
                self.__shadow.setText(text)

    def setFont(self, font):
        if self.image.font != font:
            self.image.font = font
            if self.__shadow is not None:
                self.__shadow.setFont(font)
            self._surface = None

    def setPos(self, pos):
        if self.pos != pos:
            self.pos = pos
            if self.__shadow is not None:
                self.__shadow.setPos(self.__getShadowPos())
            self._surface = None
            self.rect = None

    def __getShadowPos(self):
        x = self._shadowOffset
        pos = RelativeLocation(self.pos, (x, x))
        return pos

    def setShadow(self, shadow, offset=None):
        if shadow:
            if self.__shadow is None:
                if offset is None:
                    height = self.image.font.getHeight(self.app)
                    self._shadowOffset = (height / 45) + 1
                else:
                    self._shadowOffset = offset

                self.__shadow = TextElement(self.app, self.image.text,
                                            self.image.font,
                                            self.__getShadowPos(),
                                            colours.shadowDefault, self.anchor,
                                            False)
                self._surface = None
        else:
            if self.__shadow is not None:
                self.__shadow = None
                self._surface = None

    def setShadowOffset(self, offset):
        if self.__shadow is not None:
            self.setShadow(False)
            self.setShadow(True, offset)

    def setShadowColour(self, colour):
        if self.__shadow is not None:
            self.__shadow.setColour(colour)
            self._surface = None

    def draw(self, screen):
        if self.__shadow is not None:
            assert self.__shadow.__shadow is None
            self.__shadow.draw(screen)

        rect = self._getRect()

        # Adjust text position based on anchor.
        image = self._getImage()

        rectPos = getattr(rect, self.anchor)
        imagePos = getattr(image.get_rect(), self.anchor)
        pos = (rectPos[0] - imagePos[0], rectPos[1] - imagePos[1])

        screen.blit(image, pos)