Mercurial > skaapsteker
changeset 247:8c0c132b422f
Button widget for cutscene
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Thu, 07 Apr 2011 19:25:48 +0200 |
parents | 8dee25fd070d |
children | 129afb4417cf |
files | skaapsteker/cutscene.py skaapsteker/widgets/text.py |
diffstat | 2 files changed, 55 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/skaapsteker/cutscene.py Thu Apr 07 19:11:08 2011 +0200 +++ b/skaapsteker/cutscene.py Thu Apr 07 19:25:48 2011 +0200 @@ -6,21 +6,33 @@ from . import data from .engine import ChangeScene, Scene -from .widgets.text import Text, unindent_text +from .widgets.text import Text, ButtonSet, TextButton, unindent_text class CutScene(Scene): def __init__(self, game_state, text, background, music=None): super(CutScene, self).__init__(game_state) - self.text = text - self.text_widget = Text(text, pygame.Rect(20, 20, 800-40, 600-40), - size=24, shadow='gray', wrap=True) self.background = data.load_image('backgrounds/' + background) self.start_time = pygame.time.get_ticks() self.run_time = 60000 # ms + self._background_music = None if music and pygame.mixer.get_init(): self._background_music = data.filepath(music) + text_widget = Text(text, pygame.Rect(20, 20, 800-40, 600-40), + size=24, shadow='gray', wrap=True) + self.widgets.append(text_widget) + + button_set = ButtonSet() + button_set.append(TextButton("Continue", (300, 500), size=24, color='yellow')) + button_set.callbacks.append(self.done) + self.widgets.append(button_set) + + def done(self, selected=None, data=None): + # Avoid circular import... + from .menuscene import MenuScene + ChangeScene.post(MenuScene(self.game_state)) + def draw(self, surface, engine): viewport = surface.get_clip() @@ -34,15 +46,12 @@ surface.blit(self.background, viewport.topleft, pygame.Rect((pos, bottom), viewport.size)) - self.text_widget.draw(surface) super(CutScene, self).draw(surface, engine) def dispatch(self, ev): if ev.type is KEYDOWN: if ev.key in(K_q, K_ESCAPE): - # Avoid circular import... - from .menuscene import MenuScene - ChangeScene.post(MenuScene(self.game_state)) + self.done() super(CutScene, self).dispatch(ev) def enter(self):
--- a/skaapsteker/widgets/text.py Thu Apr 07 19:11:08 2011 +0200 +++ b/skaapsteker/widgets/text.py Thu Apr 07 19:25:48 2011 +0200 @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +import collections import os.path import pygame @@ -143,3 +144,40 @@ for option in self.option_widgets: option.draw(surface) self.selector.draw(surface) + + +class TextButton(Widget): + def __init__(self, text, pos, margin=10, **kwargs): + textpos = pygame.Rect((pos[0] + margin, pos[1] + margin), (0, 0)) + self.text = Text(text, textpos, **kwargs) + self.rect = pygame.Rect(pos, (0, 0)) + self.rect.width = self.text.rect.width + 2 * margin + self.rect.height = self.text.rect.height + 2 * margin + + def draw(self, surface, selected=False): + self.text.draw(surface) + pygame.draw.rect(surface, self.text.color, self.rect, 1) + + +class ButtonSet(Widget): + def __init__(self): + self.options = [] + self.selected = 0 + self.callbacks = [] + + def append(self, widget, data=None): + self.options.append((widget, data)) + + def dispatch(self, ev): + if ev.type is KEYDOWN: + if ev.key == K_UP: + self.selected -= 1 + elif ev.key == K_DOWN: + self.selected += 1 + elif ev.key == K_RETURN: + for callback in self.callbacks: + callback(self.selected, self.options[self.selected][1]) + + def draw(self, surface): + for i, widget in enumerate(self.options): + widget[0].draw(surface, i == self.selected)