changeset 201:9531a22721d1

Add support for lists of results
author Neil Muller <neil@dip.sun.ac.za>
date Thu, 26 Aug 2010 10:54:25 +0200
parents 7bedca2376f5
children 6c84eb5ff80a
files gamelib/gamescreen.py gamelib/state.py
diffstat 2 files changed, 16 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gamescreen.py	Thu Aug 26 09:48:49 2010 +0200
+++ b/gamelib/gamescreen.py	Thu Aug 26 10:54:25 2010 +0200
@@ -14,9 +14,10 @@
 from cursor import CursorWidget
 from hand import HandButton
 from popupmenu import PopupMenu, PopupMenuButton
-from state import initial_state, Item
+from state import initial_state, Item, handle_result
 from widgets import MessageDialog
 
+
 class InventoryView(PaletteView):
 
     sel_color = Color("yellow")
@@ -40,8 +41,7 @@
         else:
             if self.state.tool:
                 result = self.state.inventory[item_no].interact(self.state.tool, self.state)
-                if result:
-                    result.process(self.state_widget)
+                handle_result(result, self.state_widget)
             else:
                 self.state.set_tool(self.state.inventory[item_no])
 
@@ -73,8 +73,7 @@
             self._mouse_move(event.pos)
         else:
             result = self.state.interact(event.pos)
-            if result:
-                result.process(self)
+            handle_result(result, self)
 
     def animate(self):
         if self.state.animate():
@@ -83,8 +82,7 @@
         # We do this here so we can get enter and leave events regardless
         # of what happens
         result = self.state.check_enter_leave(self.screen)
-        if result:
-            result.process(self)
+        handle_result(result, self)
 
     def mouse_move(self, event):
         if not self.subwidgets:
@@ -134,8 +132,7 @@
             self.state.set_tool(None)
             return
         result = self.state.interact_detail(self.global_to_local(event.pos))
-        if result:
-            result.process(self)
+        handle_result(result, self)
 
     def mouse_move(self, event):
         self._mouse_move(event.pos)
--- a/gamelib/state.py	Thu Aug 26 09:48:49 2010 +0200
+++ b/gamelib/state.py	Thu Aug 26 10:54:25 2010 +0200
@@ -34,6 +34,16 @@
         if self.detail_view:
             scene_widget.show_detail(self.detail_view)
 
+
+def handle_result(result, scene_widget):
+    """Handle dealing with result or result sequences"""
+    if result:
+        if hasattr(result, 'process'):
+            result.process(scene_widget)
+        else:
+            for res in result:
+                res.process(scene_widget)
+
 def initial_state():
     """Load the initial state."""
     state = State()