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)