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):