Mercurial > boomslang
comparison pyntnclick/gamescreen.py @ 657:0df0c81a3d8b pyntnclick
Better inventory magic.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sun, 12 Feb 2012 14:04:52 +0200 |
parents | 59d16b45ee4c |
children | 2703924c8c70 |
comparison
equal
deleted
inserted
replaced
656:59d16b45ee4c | 657:0df0c81a3d8b |
---|---|
9 from pyntnclick.cursor import CursorWidget | 9 from pyntnclick.cursor import CursorWidget |
10 from pyntnclick.engine import Screen | 10 from pyntnclick.engine import Screen |
11 from pyntnclick.state import handle_result | 11 from pyntnclick.state import handle_result |
12 from pyntnclick.widgets.base import Widget, Container | 12 from pyntnclick.widgets.base import Widget, Container |
13 from pyntnclick.widgets.text import TextButton | 13 from pyntnclick.widgets.text import TextButton |
14 from pyntnclick.widgets.imagebutton import ImageButtonWidget | |
14 | 15 |
15 # XXX: Need a way to get at the constants. | 16 # XXX: Need a way to get at the constants. |
16 from pyntnclick.constants import GameConstants | 17 from pyntnclick.constants import GameConstants |
17 constants = GameConstants() | 18 constants = GameConstants() |
18 SCREEN = constants.screen | 19 SCREEN = constants.screen |
19 BUTTON_SIZE = constants.button_size | |
20 SCENE_SIZE = constants.scene_size | |
21 LEAVE = constants.leave | 20 LEAVE = constants.leave |
22 | 21 |
23 | 22 |
24 class InventoryView(Widget): | 23 class InventoryView(Widget): |
25 # TODO: Make this work again | 24 # TODO: Make this work again |
26 | 25 |
27 sel_color = Color("yellow") | 26 sel_color = Color("yellow") |
28 sel_width = 2 | 27 sel_width = 2 |
29 | 28 |
30 def __init__(self, gd, screen): | 29 def __init__(self, rect, gd, screen): |
31 self.bsize = gd.constants.button_size | 30 self.bsize = gd.constants.button_size |
32 rect = Rect((2 * self.bsize, screen.surface_size[1] - self.bsize), | |
33 (screen.surface_size[0] - 2 * self.bsize, self.bsize)) | |
34 super(InventoryView, self).__init__(rect, gd) | 31 super(InventoryView, self).__init__(rect, gd) |
35 self.screen = screen | 32 self.screen = screen |
36 self.game = screen.game | 33 self.game = screen.game |
37 self.state_widget = screen.state_widget | 34 self.state_widget = screen.state_widget |
38 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down) | 35 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down) |
39 self.update_surface() | 36 self.update_surface() |
40 | 37 |
41 def update_surface(self): | 38 def update_surface(self): |
42 self.surface = Surface(self.rect.size) | 39 self.surface = Surface(self.rect.size) |
43 self.surface.fill(Color(0, 0, 0)) | |
44 for item_no in range(self.num_items()): | 40 for item_no in range(self.num_items()): |
45 self.draw_item(self.surface, item_no, | 41 self.draw_item(self.surface, item_no, |
46 Rect((item_no * self.bsize, 0), | 42 Rect((item_no * self.bsize, 0), |
47 (self.bsize, self.bsize))) | 43 (self.bsize, self.bsize))) |
48 | 44 |
228 # self.parent.show_message(message, style) | 224 # self.parent.show_message(message, style) |
229 # self.invalidate() | 225 # self.invalidate() |
230 print message | 226 print message |
231 | 227 |
232 | 228 |
233 class ToolBar(Widget): | 229 class ToolBar(Container): |
234 def __init__(self, items): | 230 def __init__(self, rect, gd, screen): |
235 # XXX: ?o! | 231 self.screen = screen |
236 super(ToolBar, self).__init__(Rect(0, 0, 100, 100)) | 232 button_size = gd.constants.button_size |
237 for item in items: | 233 |
238 item.height = BUTTON_SIZE | 234 if not isinstance(rect, Rect): |
235 rect = Rect(rect, (gd.constants.scene_size[0], button_size)) | |
236 super(ToolBar, self).__init__(rect, gd) | |
237 | |
239 self.bg_color = (31, 31, 31) | 238 self.bg_color = (31, 31, 31) |
240 | 239 self.left = self.rect.left |
241 def draw(self, surface): | 240 |
242 surface.fill(self.bg_color) | 241 # TODO: Menu button |
243 # Row.draw(self, surface) | 242 # XXX: self.popup_menu = PopupMenu(self) |
243 # XXX: self.menubutton = PopupMenuButton('Menu', | |
244 # action=self.popup_menu.show_menu) | |
245 | |
246 hand_image = gd.resource.get_image('items', 'hand.png') | |
247 self.hand_button = self.add_tool( | |
248 hand_image.get_width(), ImageButtonWidget, gd, hand_image) | |
249 self.hand_button.add_callback(MOUSEBUTTONDOWN, self.hand_pressed) | |
250 | |
251 self.inventory = self.add_tool( | |
252 self.rect.width - self.left, InventoryView, gd, screen) | |
253 | |
254 def add_tool(self, width, cls, *args, **kw): | |
255 rect = Rect((self.left, self.rect.top), (width, self.rect.height)) | |
256 tool = cls(rect, *args, **kw) | |
257 self.add(tool) | |
258 self.left += width | |
259 return tool | |
260 | |
261 def draw(self, surface): | |
262 bg = Surface(self.rect.size) | |
263 bg.fill(self.bg_color) | |
264 surface.blit(bg, self.rect) | |
265 super(ToolBar, self).draw(surface) | |
266 | |
267 def hand_pressed(self, event, widget): | |
268 self.inventory.unselect() | |
244 | 269 |
245 | 270 |
246 class GameScreen(Screen): | 271 class GameScreen(Screen): |
247 | 272 |
248 def setup(self): | 273 def setup(self): |
265 self.surface_size[1] - toolbar_height) | 290 self.surface_size[1] - toolbar_height) |
266 self.game = self.create_initial_state() | 291 self.game = self.create_initial_state() |
267 self.state_widget = StateWidget(rect, self.gd, self) | 292 self.state_widget = StateWidget(rect, self.gd, self) |
268 self.container.add(self.state_widget) | 293 self.container.add(self.state_widget) |
269 | 294 |
270 # XXX: self.popup_menu = PopupMenu(self) | 295 self.toolbar = ToolBar((0, rect.height), self.gd, self) |
271 # XXX: self.menubutton = PopupMenuButton('Menu', | 296 self.inventory = self.toolbar.inventory |
272 # action=self.popup_menu.show_menu) | 297 self.container.add(self.toolbar) |
273 | |
274 # XXX: self.handbutton = HandButton(action=self.hand_pressed) | |
275 | |
276 self.inventory = InventoryView(self.gd, self) | |
277 self.container.add(self.inventory) | |
278 | |
279 # XXX: self.toolbar = ToolBar([ | |
280 # self.menubutton, | |
281 # self.handbutton, | |
282 # self.inventory, | |
283 # ]) | |
284 # XXX: self.toolbar.bottomleft = self.bottomleft | |
285 # self.container.add(self.toolbar) | |
286 | 298 |
287 self.running = True | 299 self.running = True |
288 | 300 |
289 def key_pressed(self, event, widget): | 301 def key_pressed(self, event, widget): |
290 if event.key == K_ESCAPE: | 302 if event.key == K_ESCAPE: |
296 | 308 |
297 # albow callback: | 309 # albow callback: |
298 def quit_cmd(self): | 310 def quit_cmd(self): |
299 self.shell.quit() | 311 self.shell.quit() |
300 | 312 |
301 def hand_pressed(self): | |
302 self.inventory.unselect() | |
303 | |
304 | 313 |
305 class DefEndScreen(Screen): | 314 class DefEndScreen(Screen): |
306 """A placeholder 'Game Over' screen so people can get started easily""" | 315 """A placeholder 'Game Over' screen so people can get started easily""" |
307 | 316 |
308 def setup(self): | 317 def setup(self): |