# HG changeset patch # User Jeremy Thurgood # Date 1302357771 -7200 # Node ID 87246b84a851f2a36e85fefb2359a19229d67499 # Parent 3a524c10a95c0602e5797d86c06b7cadfbe6179c Notification text. diff -r 3a524c10a95c -r 87246b84a851 skaapsteker/engine.py --- a/skaapsteker/engine.py Sat Apr 09 15:57:47 2011 +0200 +++ b/skaapsteker/engine.py Sat Apr 09 16:02:51 2011 +0200 @@ -121,6 +121,17 @@ # no text super(OpenDialog, cls).post(npc=npc) +class OpenNotification(UserEvent): + + utype = "OPEN_NOTIFICATION" + + @classmethod + def post(cls, text): + # request to open dialog box for given NPC sprite + # will do nothing if the NPC's current state has + # no text + super(OpenNotification, cls).post(text=text) + class CloseDialog(UserEvent): utype = "CLOSE_DIALOG" diff -r 3a524c10a95c -r 87246b84a851 skaapsteker/levelscene.py --- a/skaapsteker/levelscene.py Sat Apr 09 15:57:47 2011 +0200 +++ b/skaapsteker/levelscene.py Sat Apr 09 16:02:51 2011 +0200 @@ -15,7 +15,7 @@ from . import data from .sprites import player from .widgets.text import Text -from .widgets.bubble import DialogueWidget +from .widgets.bubble import DialogueWidget, NotificationWidget class LevelScene(engine.Scene): @@ -134,6 +134,12 @@ else: self._close_dialogue() + def _open_notification(self, text): + if self._dialogue is not None: + self._dialogue.close() + self._world.freeze() + self._dialogue = NotificationWidget(text) + def _close_dialogue(self): if self._dialogue is not None: self._world.thaw() @@ -325,6 +331,8 @@ self._player_dead = True elif engine.OpenDialog.matches(ev): self._open_dialogue(ev.npc) + elif engine.OpenNotification.matches(ev): + self._open_notification(ev.text) elif engine.CloseDialog.matches(ev): self._close_dialogue() elif engine.AddSpriteEvent.matches(ev): diff -r 3a524c10a95c -r 87246b84a851 skaapsteker/sprites/items.py --- a/skaapsteker/sprites/items.py Sat Apr 09 15:57:47 2011 +0200 +++ b/skaapsteker/sprites/items.py Sat Apr 09 16:02:51 2011 +0200 @@ -1,4 +1,5 @@ -from base import Item +from .. import engine +from .base import Item class BreakableItem(Item): @@ -73,6 +74,7 @@ if player.has_item('tealeaf'): self._me.brewed = True player.discard_item() + engine.OpenNotification.post(text="A nice cup of tea is brewing.") return if player.has_item('teacup'): if self._me.brewed: @@ -81,6 +83,8 @@ self._me.brewed = False else: print "Sadly, the teapot is empty." + return + engine.OpenNotification.post(text="A proper tea ceremony requires a cup.") diff -r 3a524c10a95c -r 87246b84a851 skaapsteker/widgets/bubble.py --- a/skaapsteker/widgets/bubble.py Sat Apr 09 15:57:47 2011 +0200 +++ b/skaapsteker/widgets/bubble.py Sat Apr 09 16:02:51 2011 +0200 @@ -8,6 +8,36 @@ from .text import Text, TextChoice +class NotificationWidget(object): + + def __init__(self, text): + pos = pygame.Rect((0, 0), (300, 1)) + self._text = Text(text, pos, wrap=True) + + + def draw(self, level_surface): + if self._text: + self._text.rect.center = level_surface.get_clip().center + + bgrect = self._text.rect.inflate(10, 10) + bgrect2 = bgrect.move(0, 0) # + bgrect2.topleft = (0, 0) + bgsurf = pygame.Surface(bgrect.size, flags=SRCALPHA) + bgsurf.fill((255, 255, 127, 120)) + pygame.draw.rect(bgsurf, (0, 0, 0, 120), bgrect2, 1) + level_surface.blit(bgsurf, bgrect) + + self._text.draw(level_surface) + + def close(self): + pass + + def dispatch(self, ev): + if ev.type == KEYDOWN and ev.key == K_RETURN: + CloseDialog.post(None) + + + class DialogueWidget(object): def __init__(self, npc):