changeset 383:87246b84a851

Notification text.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 09 Apr 2011 16:02:51 +0200
parents 3a524c10a95c
children da3f82544fc4
files skaapsteker/engine.py skaapsteker/levelscene.py skaapsteker/sprites/items.py skaapsteker/widgets/bubble.py
diffstat 4 files changed, 55 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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"
--- 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):
--- 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.")
 
 
 
--- 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):