changeset 677:a8c42709a689 pyntnclick

Event-driven inventory management magic. No more inventory recreation every frame!
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 12 Feb 2012 19:47:56 +0200
parents 106efeae9745
children 36d7f7e9650e
files pyntnclick/gamescreen.py pyntnclick/state.py
diffstat 2 files changed, 12 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/pyntnclick/gamescreen.py	Sun Feb 12 19:29:31 2012 +0200
+++ b/pyntnclick/gamescreen.py	Sun Feb 12 19:47:56 2012 +0200
@@ -105,9 +105,11 @@
 
     def up_callback(self, event, widget):
         self.inv_offset = max(self.inv_offset - len(self.slots), 0)
+        self.update_slots()
 
     def down_callback(self, event, widget):
         self.inv_offset += len(self.slots)
+        self.update_slots()
 
     def update_slots(self):
         items = (self.slot_items + [None] * len(self.slots))[:len(self.slots)]
@@ -126,20 +128,12 @@
             self.down_button.enable()
 
     def draw(self, surface):
-        self.update_slots()
         super(InventoryView, self).draw(surface)
 
     @property
     def slot_items(self):
         return self.game.inventory[self.inv_offset:][:len(self.slots)]
 
-    def draw_updown(self, surface):
-        rect = Rect((self.rect.width - self.updown_width, 0),
-                    (self.updown_width, self.rect.height))
-        s = Surface(rect.size)
-        s.fill(Color("blue"))
-        surface.blit(s, rect)
-
     def mouse_down(self, event, widget):
         if event.button != 1:
             self.game.cancel_doodah(self.screen)
@@ -360,6 +354,8 @@
     def process_event(self, event_name, data):
         if event_name == 'restart':
             self.start_game()
+        elif event_name == 'inventory':
+            self.inventory.update_slots()
 
     def start_game(self):
         self._clear_all()
--- a/pyntnclick/state.py	Sun Feb 12 19:29:31 2012 +0200
+++ b/pyntnclick/state.py	Sun Feb 12 19:47:56 2012 +0200
@@ -5,6 +5,8 @@
 from widgets.text import LabelWidget
 from pygame.color import Color
 
+from pyntnclick.engine import ScreenEvent
+
 
 def frame_rect(surface, color, rect, thick=1):
     # FIXME: Stolen from albow
@@ -169,8 +171,12 @@
             self.current_detail = self.detail_views[name]
             return self.current_detail
 
+    def _update_inventory(self):
+        ScreenEvent.post('game', 'inventory', None)
+
     def add_inventory_item(self, name):
         self.inventory.append(self.items[name])
+        self._update_inventory()
 
     def is_in_inventory(self, name):
         if name in self.items:
@@ -182,6 +188,7 @@
         # Unselect tool if it's removed
         if self.tool == self.items[name]:
             self.set_tool(None)
+        self._update_inventory()
 
     def replace_inventory_item(self, old_item_name, new_item_name):
         """Try to replace an item in the inventory with a new one"""
@@ -192,6 +199,7 @@
                 self.set_tool(self.items[new_item_name])
         except ValueError:
             return False
+        self._update_inventory()
         return True
 
     def set_tool(self, item):