Mercurial > boomslang
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 |