comparison pyntnclick/gamescreen.py @ 674:94d3552bb4eb pyntnclick

More neat, less crash.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 12 Feb 2012 18:53:58 +0200
parents f67bc162d69e
children 106efeae9745
comparison
equal deleted inserted replaced
673:f67bc162d69e 674:94d3552bb4eb
23 23
24 class InventorySlot(ImageButtonWidget): 24 class InventorySlot(ImageButtonWidget):
25 SELECTED_COLOR = Color("yellow") 25 SELECTED_COLOR = Color("yellow")
26 SELECTED_WIDTH = 2 26 SELECTED_WIDTH = 2
27 27
28 def __init__(self, rect, gd, game, state_widget): 28 def __init__(self, rect, gd):
29 self.item = None 29 self.item = None
30 super(InventorySlot, self).__init__(rect, gd, None) 30 super(InventorySlot, self).__init__(rect, gd, None)
31 self.game = game
32 self.state_widget = state_widget
33 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down) 31 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down)
34 32
35 def set_item(self, item): 33 def set_item(self, item):
36 self.item = item 34 self.item = item
37 35
42 pygame.draw.rect(surface, self.SELECTED_COLOR, 40 pygame.draw.rect(surface, self.SELECTED_COLOR,
43 self.rect, self.SELECTED_WIDTH) 41 self.rect, self.SELECTED_WIDTH)
44 42
45 @property 43 @property
46 def selected(self): 44 def selected(self):
47 return self.game.tool is self.item 45 return self.parent.game.tool is self.item
48 46
49 def mouse_down(self, event, widget): 47 def mouse_down(self, event, widget):
50 if event.button != 1: 48 if event.button != 1 or not self.item:
51 return 49 return
52 if self.selected: 50 if self.selected:
53 self.game.set_tool(None) 51 self.parent.select(None)
54 elif self.item.is_interactive(self.game.tool): 52 elif self.item.is_interactive(self.parent.game.tool):
55 result = self.item.interact(self.game.tool) 53 result = self.item.interact(self.parent.game.tool)
56 handle_result(result, self.state_widget) 54 handle_result(result, self.parent.state_widget)
57 else: 55 else:
58 self.game.set_tool(self.item) 56 self.parent.select(self.item)
59 57
60 58
61 class InventoryView(Container): 59 class InventoryView(Container):
62 MIN_UPDOWN_WIDTH = 16 60 MIN_UPDOWN_WIDTH = 16
63 61
77 self.update_slots() 75 self.update_slots()
78 76
79 def make_slot(self, slot): 77 def make_slot(self, slot):
80 rect = Rect((self.rect.left + slot * self.bsize, self.rect.top), 78 rect = Rect((self.rect.left + slot * self.bsize, self.rect.top),
81 (self.bsize, self.rect.height)) 79 (self.bsize, self.rect.height))
82 return InventorySlot(rect, self.gd, self.game, self.state_widget) 80 return InventorySlot(rect, self.gd)
83 81
84 def update_slots(self): 82 def update_slots(self):
85 items = (self.slot_items + [None] * len(self.slots))[:len(self.slots)] 83 items = (self.slot_items + [None] * len(self.slots))[:len(self.slots)]
86 for item, slot in zip(items, self.slots): 84 for item, slot in zip(items, self.slots):
87 slot.set_item(item) 85 slot.set_item(item)
102 surface.blit(s, rect) 100 surface.blit(s, rect)
103 101
104 def mouse_down(self, event, widget): 102 def mouse_down(self, event, widget):
105 if event.button != 1: 103 if event.button != 1:
106 self.game.cancel_doodah(self.screen) 104 self.game.cancel_doodah(self.screen)
105
106 def select(self, tool):
107 self.game.set_tool(tool)
107 108
108 109
109 class StateWidget(Container): 110 class StateWidget(Container):
110 111
111 def __init__(self, rect, gd, screen): 112 def __init__(self, rect, gd, screen):
294 bg.fill(self.bg_color) 295 bg.fill(self.bg_color)
295 surface.blit(bg, self.rect) 296 surface.blit(bg, self.rect)
296 super(ToolBar, self).draw(surface) 297 super(ToolBar, self).draw(surface)
297 298
298 def hand_callback(self, event, widget): 299 def hand_callback(self, event, widget):
299 self.inventory.unselect() 300 self.inventory.select(None)
300 301
301 def menu_callback(self, event, widget): 302 def menu_callback(self, event, widget):
302 self.screen.change_screen('menu') 303 self.screen.change_screen('menu')
303 304
304 305