Mercurial > boomslang
comparison pyntnclick/gamescreen.py @ 676:106efeae9745 pyntnclick
Multiple inventory rows.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 12 Feb 2012 19:29:31 +0200 |
parents | 94d3552bb4eb |
children | a8c42709a689 |
comparison
equal
deleted
inserted
replaced
675:67373f9d2d20 | 676:106efeae9745 |
---|---|
54 handle_result(result, self.parent.state_widget) | 54 handle_result(result, self.parent.state_widget) |
55 else: | 55 else: |
56 self.parent.select(self.item) | 56 self.parent.select(self.item) |
57 | 57 |
58 | 58 |
59 class UpDownButton(TextButton): | |
60 # TextButton for now. | |
61 def __init__(self, rect, gd): | |
62 super(UpDownButton, self).__init__(rect, gd, self.TEXT, padding=3) | |
63 | |
64 | |
65 class UpButton(UpDownButton): | |
66 TEXT = 'UP' | |
67 | |
68 | |
69 class DownButton(UpDownButton): | |
70 TEXT = 'DN' | |
71 | |
72 | |
59 class InventoryView(Container): | 73 class InventoryView(Container): |
60 MIN_UPDOWN_WIDTH = 16 | 74 MIN_UPDOWN_WIDTH = 16 |
61 | 75 |
62 def __init__(self, rect, gd, screen): | 76 def __init__(self, rect, gd, screen): |
63 self.bsize = gd.constants.button_size | 77 self.bsize = gd.constants.button_size |
66 self.game = screen.game | 80 self.game = screen.game |
67 self.state_widget = screen.state_widget | 81 self.state_widget = screen.state_widget |
68 | 82 |
69 slots = (self.rect.width - self.MIN_UPDOWN_WIDTH) / self.bsize | 83 slots = (self.rect.width - self.MIN_UPDOWN_WIDTH) / self.bsize |
70 self.slots = [self.add(self.make_slot(i)) for i in range(slots)] | 84 self.slots = [self.add(self.make_slot(i)) for i in range(slots)] |
85 self.inv_offset = 0 | |
86 | |
71 self.updown_width = self.rect.width - slots * self.bsize | 87 self.updown_width = self.rect.width - slots * self.bsize |
72 self.inv_offset = 0 | 88 ud_left = self.rect.right - self.updown_width |
89 self.up_button = self.add(UpButton(Rect( | |
90 (ud_left, self.rect.top), | |
91 (self.updown_width, self.rect.height / 2)), gd)) | |
92 self.up_button.add_callback(MOUSEBUTTONDOWN, self.up_callback) | |
93 self.down_button = self.add(DownButton(Rect( | |
94 (ud_left, self.rect.top + self.rect.height / 2), | |
95 (self.updown_width, self.rect.height / 2)), gd)) | |
96 self.down_button.add_callback(MOUSEBUTTONDOWN, self.down_callback) | |
73 | 97 |
74 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down) | 98 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down) |
75 self.update_slots() | 99 self.update_slots() |
76 | 100 |
77 def make_slot(self, slot): | 101 def make_slot(self, slot): |
78 rect = Rect((self.rect.left + slot * self.bsize, self.rect.top), | 102 rect = Rect((self.rect.left + slot * self.bsize, self.rect.top), |
79 (self.bsize, self.rect.height)) | 103 (self.bsize, self.rect.height)) |
80 return InventorySlot(rect, self.gd) | 104 return InventorySlot(rect, self.gd) |
81 | 105 |
106 def up_callback(self, event, widget): | |
107 self.inv_offset = max(self.inv_offset - len(self.slots), 0) | |
108 | |
109 def down_callback(self, event, widget): | |
110 self.inv_offset += len(self.slots) | |
111 | |
82 def update_slots(self): | 112 def update_slots(self): |
83 items = (self.slot_items + [None] * len(self.slots))[:len(self.slots)] | 113 items = (self.slot_items + [None] * len(self.slots))[:len(self.slots)] |
84 for item, slot in zip(items, self.slots): | 114 for item, slot in zip(items, self.slots): |
85 slot.set_item(item) | 115 slot.set_item(item) |
116 | |
117 if self.inv_offset <= 0: | |
118 self.up_button.disable() | |
119 else: | |
120 self.up_button.enable() | |
121 | |
122 max_slot = (self.inv_offset + len(self.slots)) | |
123 if max_slot >= len(self.game.inventory): | |
124 self.down_button.disable() | |
125 else: | |
126 self.down_button.enable() | |
86 | 127 |
87 def draw(self, surface): | 128 def draw(self, surface): |
88 self.update_slots() | 129 self.update_slots() |
89 super(InventoryView, self).draw(surface) | 130 super(InventoryView, self).draw(surface) |
90 | 131 |
268 self.bg_color = (31, 31, 31) | 309 self.bg_color = (31, 31, 31) |
269 self.left = self.rect.left | 310 self.left = self.rect.left |
270 | 311 |
271 self.menu_button = self.add_tool( | 312 self.menu_button = self.add_tool( |
272 0, TextButton, gd, "Menu", fontname=gd.constants.bold_font, | 313 0, TextButton, gd, "Menu", fontname=gd.constants.bold_font, |
273 color="red", padding=2, border=0) | 314 color="red", padding=1, border=0, bg_color="black") |
274 self.menu_button.add_callback(MOUSEBUTTONDOWN, self.menu_callback) | 315 self.menu_button.add_callback(MOUSEBUTTONDOWN, self.menu_callback) |
275 | 316 |
276 hand_image = gd.resource.get_image('items', 'hand.png') | 317 hand_image = gd.resource.get_image('items', 'hand.png') |
277 self.hand_button = self.add_tool( | 318 self.hand_button = self.add_tool( |
278 None, ImageButtonWidget, gd, hand_image) | 319 None, ImageButtonWidget, gd, hand_image) |