diff gamelib/state.py @ 167:5845a3ed4dad

Inventory interaction can (surprisingly) affect the inventory
author Neil Muller <neil@dip.sun.ac.za>
date Wed, 25 Aug 2010 12:21:16 +0200
parents 0db92b3b5833
children c6ea3b11514c
line wrap: on
line diff
--- a/gamelib/state.py	Wed Aug 25 12:03:08 2010 +0200
+++ b/gamelib/state.py	Wed Aug 25 12:21:16 2010 +0200
@@ -120,6 +120,17 @@
         if self.tool == self.items[name]:
             self.set_tool(None)
 
+    def replace_inventory_item(self, old_item, new_item):
+        """Try to replace an item in the inventory with a new one"""
+        try:
+            index = self.inventory.index(old_item)
+            self.inventory[index] = new_item
+            if self.tool == old_item:
+                self.set_tool(new_item)
+        except ValueError:
+            return False
+        return True
+
     def set_tool(self, item):
         self.tool = item
         if item is None:
@@ -551,16 +562,16 @@
     def get_inventory_image(self):
         return self.inventory_image
 
-    def interact(self, tool):
+    def interact(self, tool, state):
         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)
+            return handler(tool, state)
         elif inverse_handler is not None:
-            return inverse_handler(self)
+            return inverse_handler(self, state)
         else:
-            return self.interact_default(tool)
+            return self.interact_default(tool, state)
 
-    def interact_default(self, tool):
+    def interact_default(self, tool, state):
         return Result("That doesn't do anything useful")