changeset 166:0db92b3b5833

Add inventory interactions
author Neil Muller <neil@dip.sun.ac.za>
date Wed, 25 Aug 2010 12:03:08 +0200
parents 9b3bba5e65f3
children 5845a3ed4dad
files gamelib/gamescreen.py gamelib/scenes/cryo.py gamelib/state.py
diffstat 3 files changed, 25 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gamescreen.py	Wed Aug 25 11:19:30 2010 +0200
+++ b/gamelib/gamescreen.py	Wed Aug 25 12:03:08 2010 +0200
@@ -22,9 +22,10 @@
     sel_color = Color("yellow")
     sel_width = 2
 
-    def __init__(self, state):
+    def __init__(self, state, scene_widget):
         PaletteView.__init__(self, (BUTTON_SIZE, BUTTON_SIZE), 1, 6, scrolling=True)
         self.state = state
+        self.scene_widget = scene_widget
 
     def num_items(self):
         return len(self.state.inventory)
@@ -37,7 +38,12 @@
         if self.item_is_selected(item_no):
             self.unselect()
         else:
-            self.state.set_tool(self.state.inventory[item_no])
+            if self.state.tool:
+                result = self.state.inventory[item_no].interact(self.state.tool)
+                if result:
+                    result.process(self.scene_widget)
+            else:
+                self.state.set_tool(self.state.inventory[item_no])
 
     def item_is_selected(self, item_no):
         return self.state.tool is self.state.inventory[item_no]
@@ -164,7 +170,7 @@
 
         self.handbutton = HandButton(action=self.hand_pressed)
 
-        self.inventory = InventoryView(self.state)
+        self.inventory = InventoryView(self.state, self.state_widget)
 
         self.toolbar = ToolBar([
                 self.menubutton,
--- a/gamelib/scenes/cryo.py	Wed Aug 25 11:19:30 2010 +0200
+++ b/gamelib/scenes/cryo.py	Wed Aug 25 12:03:08 2010 +0200
@@ -84,6 +84,9 @@
     INVENTORY_IMAGE = "titanium_femur.png"
     CURSOR = CursorSprite('titanium_femur_cursor.png', 47, 3)
 
+    def interact_with_full_can(self, tool):
+        return Result("You club the can with the femur. It doesn't help")
+
 
 class CryoUnitAlpha(Thing):
     "Cryo unit containing titanium leg."
--- a/gamelib/state.py	Wed Aug 25 11:19:30 2010 +0200
+++ b/gamelib/state.py	Wed Aug 25 12:03:08 2010 +0200
@@ -551,3 +551,16 @@
     def get_inventory_image(self):
         return self.inventory_image
 
+    def interact(self, tool):
+        handler = getattr(self, 'interact_with_' + tool.name, None)
+        inverse_handler = getattr(tool, 'interact_with_' + self.name, None)
+        if handler is not None:
+            return handler(tool)
+        elif inverse_handler is not None:
+            return inverse_handler(self)
+        else:
+            return self.interact_default(tool)
+
+    def interact_default(self, tool):
+        return Result("That doesn't do anything useful")
+