# HG changeset patch # User Jeremy Thurgood # Date 1329068876 -7200 # Node ID a8c42709a68931147934da95e514fba6607dd153 # Parent 106efeae97450bf1016f1b9c9ccc633607c11d6e Event-driven inventory management magic. No more inventory recreation every frame! diff -r 106efeae9745 -r a8c42709a689 pyntnclick/gamescreen.py --- 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() diff -r 106efeae9745 -r a8c42709a689 pyntnclick/state.py --- 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):