diff gamelib/gamescreen.py @ 384:56a05ae56574

Initial manual implementation.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 28 Aug 2010 19:04:30 +0200
parents 760f6a318d2e
children b1dc0caec668
line wrap: on
line diff
--- a/gamelib/gamescreen.py	Sat Aug 28 18:59:51 2010 +0200
+++ b/gamelib/gamescreen.py	Sat Aug 28 19:04:30 2010 +0200
@@ -35,14 +35,14 @@
         surface.blit(item_image, rect, None, BLEND_ADD)
 
     def click_item(self, item_no, event):
+        item = self.state.inventory[item_no]
         if self.item_is_selected(item_no):
             self.unselect()
+        elif self.state.tool or hasattr(item, 'interact_without'):
+            result = item.interact(self.state.tool, self.state)
+            handle_result(result, self.state_widget)
         else:
-            if self.state.tool:
-                result = self.state.inventory[item_no].interact(self.state.tool, self.state)
-                handle_result(result, self.state_widget)
-            else:
-                self.state.set_tool(self.state.inventory[item_no])
+            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]
@@ -104,6 +104,7 @@
             self._mouse_move(mouse.get_pos())
 
     def show_detail(self, detail):
+        self.clear_detail()
         w, h = self.state.set_current_detail(detail)
         self.detail.set_image_rect(Rect(0, 0, w, h))
         self.add_centered(self.detail)
@@ -111,9 +112,10 @@
 
     def clear_detail(self):
         """Hide the detail view"""
-        self.remove(self.detail)
-        self.state.do_leave_detail()
-        self.state.set_current_detail(None)
+        if self.state.current_detail is not None:
+            self.remove(self.detail)
+            self.state.do_leave_detail()
+            self.state.set_current_detail(None)
 
 
 class DetailWindow(Widget):