comparison gamelib/gamegui.py @ 228:3955d126ca26

merge
author Rizmari Versfeld <rizziepit@gmail.com>
date Sat, 12 May 2012 23:09:33 +0200
parents f8c05e6dc0e2
children 0478c8b44acf
comparison
equal deleted inserted replaced
227:ebb62654f61f 228:3955d126ca26
55 55
56 56
57 class EndTurnButton(BigButton): 57 class EndTurnButton(BigButton):
58 58
59 def __init__(self, parent): 59 def __init__(self, parent):
60 super(EndTurnButton, self).__init__(((WIDTH - 128), 10), 'End Turn') 60 super(EndTurnButton, self).__init__(((WIDTH - 128), 0), 'End Turn')
61 self.parent = parent 61 self.parent = parent
62 62
63 def on_click(self): 63 def on_click(self):
64 self.parent.end_turn() 64 self.parent.end_turn()
65 65
66 66
67 class NextTurnButton(PopWindowButton): 67 class NextTurnButton(PopWindowButton):
68 def __init__(self): 68 def __init__(self):
69 super(NextTurnButton, self).__init__(((WIDTH - 128), 10), 'Next Turn') 69 super(NextTurnButton, self).__init__(((WIDTH - 128), 0), 'Next Turn')
70 70
71 71
72 class AssignButton(PopWindowButton): 72 class AssignButton(PopWindowButton):
73 def __init__(self, parent): 73 def __init__(self, parent):
74 super(AssignButton, self).__init__(((WIDTH - 128), 10), 74 super(AssignButton, self).__init__(((WIDTH - 128), 0),
75 'Assign Scheme') 75 'Assign Scheme')
76 self.parent = parent 76 self.parent = parent
77 77
78 def on_click(self): 78 def on_click(self):
79 self.parent.accept() 79 self.parent.accept()
80 super(AssignButton, self).on_click() 80 super(AssignButton, self).on_click()
81 81
82 82
83 class CancelButton(PopWindowButton): 83 class CancelButton(PopWindowButton):
84 def __init__(self, parent): 84 def __init__(self, parent):
85 super(CancelButton, self).__init__(((WIDTH - 256), 10), 85 super(CancelButton, self).__init__(((WIDTH - 256), 0),
86 'Cancel Scheme') 86 'Cancel Scheme')
87 self.parent = parent 87 self.parent = parent
88 88
89 def on_click(self): 89 def on_click(self):
90 self.parent.cancel() 90 self.parent.cancel()
92 92
93 93
94 class ResetButton(BigButton): 94 class ResetButton(BigButton):
95 95
96 def __init__(self, parent, text='Clear calendars'): 96 def __init__(self, parent, text='Clear calendars'):
97 super(ResetButton, self).__init__((10, 10), text) 97 super(ResetButton, self).__init__((10, 0), text)
98 self.parent = parent 98 self.parent = parent
99 99
100 def on_click(self): 100 def on_click(self):
101 self.parent.do_reset() 101 self.parent.do_reset()
102 102
165 165
166 166
167 class MissionWidget(BigButton): 167 class MissionWidget(BigButton):
168 168
169 WIDTH = 260 169 WIDTH = 260
170 HEIGHT = 48
170 171
171 BG_IMAGE_NORMAL = image.load(filepath('images/science_normal.png')) 172 BG_IMAGE_NORMAL = image.load(filepath('images/science_normal.png'))
172 BG_IMAGE_DOWN = image.load(filepath('images/science_down.png')) 173 BG_IMAGE_DOWN = image.load(filepath('images/science_down.png'))
173 BG_IMAGE_SELECTED = image.load(filepath('images/mission_selected.png')) 174 BG_IMAGE_SELECTED = image.load(filepath('images/mission_selected.png'))
174 175
233 234
234 235
235 class EquipWidget(BigButton): 236 class EquipWidget(BigButton):
236 237
237 WIDTH = 260 238 WIDTH = 260
239 HEIGHT = 48
238 240
239 BG_IMAGE_NORMAL = image.load(filepath('images/science_normal.png')) 241 BG_IMAGE_NORMAL = image.load(filepath('images/science_normal.png'))
240 BG_IMAGE_DOWN = image.load(filepath('images/science_down.png')) 242 BG_IMAGE_DOWN = image.load(filepath('images/science_down.png'))
241 BG_IMAGE_UNAVAILABLE = image.load(filepath('images/equip_grey.png')) 243 BG_IMAGE_UNAVAILABLE = image.load(filepath('images/equip_grey.png'))
242 244
287 self.add_child(assign) 289 self.add_child(assign)
288 cancel = CancelButton(self) 290 cancel = CancelButton(self)
289 self.add_child(cancel) 291 self.add_child(cancel)
290 reset = ResetButton(self, 'Clear inventory') 292 reset = ResetButton(self, 'Clear inventory')
291 self.add_child(reset) 293 self.add_child(reset)
292 title = TextBox((170, 20, 370, 50), "Choose equipment for %s" 294 title = TextBox((170, 10, 370, 50), "Choose equipment for %s"
293 % mission.NAME, font_medium, (255, 255, 255)) 295 % mission.NAME, font_medium, (255, 255, 255))
294 self.add_child(title) 296 self.add_child(title)
295 self.description = TextBox((10, 70, 790, 20), 297 self.description = TextBox((10, 60, 790, 20),
296 mission.get_description(), font_medium, (255, 255, 255)) 298 mission.get_description(), font_medium, (255, 255, 255))
297 self.add_child(self.description) 299 self.add_child(self.description)
298 self.parent = parent 300 self.parent = parent
299 self.game = game 301 self.game = game
300 self.money = ValueLabel((10, self.description.rect.height + 75), 302 self.money = ValueLabel((10, self.description.rect.height + 58),
301 'Money') 303 'Money')
302 self.money.set_value(self.game.money) 304 self.money.set_value(self.game.money)
303 self.minions = ValueLabel((310, self.description.rect.height + 75), 305 self.minions = ValueLabel((310, self.description.rect.height + 58),
304 'Minions Assigned') 306 'Minions Assigned')
305 self.minions.set_value(self.parent.minions) 307 self.minions.set_value(self.parent.minions)
306 self.add_child(self.money) 308 self.add_child(self.money)
307 self.add_child(self.minions) 309 self.add_child(self.minions)
308 inventory = TextLabel((10, self.description.rect.height + 90, 400, 20), 310 inventory = TextLabel((10, self.description.rect.height + 75, 400, 20),
309 'Current Inventory', font_medium, (255, 255, 255)) 311 'Current Inventory', font_medium, (255, 255, 255))
310 self.add_child(inventory) 312 self.add_child(inventory)
311 self._equip = [] 313 self._equip = []
312 self._inventory = [] 314 self._inventory = []
313 self._update_widgets() 315 self._update_widgets()
346 for widget in self._equip: 348 for widget in self._equip:
347 self.remove_child(widget) 349 self.remove_child(widget)
348 self._equip = [] 350 self._equip = []
349 x = 0 351 x = 0
350 y = max(250, 130 + self.description.rect.height + 352 y = max(250, 130 + self.description.rect.height +
351 20 * len(self._inventory) // 3) 353 18 * len(self._inventory) // 3)
352 available = self.game.get_available_equipment() 354 available = self.game.get_available_equipment()
353 for equip in sorted(self.game.get_all_equipment(), 355 for equip in sorted(self.game.get_all_equipment(),
354 key=lambda x: x.NAME): 356 key=lambda x: x.NAME):
355 copies = self.parent.equipment.count(equip) 357 copies = self.parent.equipment.count(equip)
356 widget = EquipWidget(equip, (x, y), self, copies, 358 widget = EquipWidget(equip, (x, y), self, copies,
358 self._equip.append(widget) 360 self._equip.append(widget)
359 self.add_child(widget) 361 self.add_child(widget)
360 x += widget.WIDTH + 10 362 x += widget.WIDTH + 10
361 if x >= WIDTH: 363 if x >= WIDTH:
362 x = 0 364 x = 0
363 y += 65 365 y += 45
364 366
365 def buy(self, equip): 367 def buy(self, equip):
366 self.game.money -= equip.COST 368 self.game.money -= equip.COST
367 self.money.set_value(self.game.money) 369 self.money.set_value(self.game.money)
368 self.parent.equipment.append(equip) 370 self.parent.equipment.append(equip)
399 "Nothing of interest happened", font_medium, 401 "Nothing of interest happened", font_medium,
400 (255, 255, 255)) 402 (255, 255, 255))
401 self.add_child(results) 403 self.add_child(results)
402 else: 404 else:
403 y = 200 405 y = 200
404 for msg_type, msg, loot in messages: 406 for mission, msg_type, msg, loot in messages:
405 # FIXME: Better widgets 407 # FIXME: Better widgets
406 if msg_type == GAME_WIN: 408 if msg_type == GAME_WIN:
407 self._make_win_screen(turn, msg) 409 self._make_win_screen(turn, msg)
408 self.is_game_over = True 410 self.is_game_over = True
409 break 411 break
410 colour = self.message_colours.get(msg_type, (255, 255, 255)) 412 colour = self.message_colours.get(msg_type, (255, 255, 255))
413 if mission:
414 msg = '%s: %s' % (mission, msg)
411 y = self.display_message(y, msg, loot, colour) 415 y = self.display_message(y, msg, loot, colour)
412 416
413 def display_message(self, y, msg, loot, colour, font=font_medium): 417 def display_message(self, y, msg, loot, colour, font=font_medium):
414 text = TextBox((50, y, 700, 25), msg, font, colour) 418 text = TextBox((50, y, 700, 25), msg, font, colour)
415 y += text.rect.height + 5 419 y += text.rect.height + 5
455 end_turn = EndTurnButton(self) 459 end_turn = EndTurnButton(self)
456 self.add_child(end_turn) 460 self.add_child(end_turn)
457 reset = ResetButton(self) 461 reset = ResetButton(self)
458 self.add_child(reset) 462 self.add_child(reset)
459 463
460 self.points = ValueLabel((10, 75), 'Blue-Sky Research Projects') 464 self.points = ValueLabel((10, 60), 'Blue-Sky Research Projects')
461 self.add_child(self.points) 465 self.add_child(self.points)
462 self.minions = ValueLabel((310, 75), 'Minions available') 466 self.minions = ValueLabel((310, 60), 'Minions available')
463 self.add_child(self.minions) 467 self.add_child(self.minions)
464 self.money = ValueLabel((510, 75), 'Money') 468 self.money = ValueLabel((510, 60), 'Money')
465 self.add_child(self.money) 469 self.add_child(self.money)
466 470
467 self.milestone = ValueLabel((10, 95), 'Currently taken over') 471 self.milestone = ValueLabel((10, 80), 'Currently taken over')
468 self.add_child(self.milestone) 472 self.add_child(self.milestone)
469 self.reputation = ValueLabel((310, 95), 'Reputation') 473 self.reputation = ValueLabel((310, 80), 'Reputation')
470 self.add_child(self.reputation) 474 self.add_child(self.reputation)
471 475
472 self.advice = ValueLabel((10, 115), 'Research advice', width=780) 476 self.advice = ValueLabel((10, 100), 'Research advice', width=780)
473 self.add_child(self.advice) 477 self.add_child(self.advice)
474 478
475 def update_labels(self): 479 def update_labels(self):
476 self.points.set_value(self.game.get_available_points()) 480 self.points.set_value(self.game.get_available_points())
477 self.money.set_value(self.game.money) 481 self.money.set_value(self.game.money)
486 def __init__(self, screen, lab, develop): 490 def __init__(self, screen, lab, develop):
487 super(ActivityWindow, self).__init__(screen, lab.game) 491 super(ActivityWindow, self).__init__(screen, lab.game)
488 self.lab = lab 492 self.lab = lab
489 self.develop = develop 493 self.develop = develop
490 494
491 labbut = SwitchWinButton((150, 10), 'SCIENCE!!', lab) 495 labbut = SwitchWinButton((150, 0), 'SCIENCE!!', lab)
492 self.add_child(labbut) 496 self.add_child(labbut)
493 devbut = SwitchWinButton((300, 10), 'Engineering', develop) 497 devbut = SwitchWinButton((300, 0), 'Engineering', develop)
494 self.add_child(devbut) 498 self.add_child(devbut)
495 499
496 self.update_labels() 500 self.update_labels()
497 self._missions = [] 501 self._missions = []
498 self._make_widgets() 502 self._make_widgets()
500 def _make_widgets(self): 504 def _make_widgets(self):
501 for widget in self._missions: 505 for widget in self._missions:
502 self.remove_child(widget) 506 self.remove_child(widget)
503 self._missions = [] 507 self._missions = []
504 x = 0 508 x = 0
505 y = 150 509 y = 130
506 for mission in sorted(self.game.get_available_missions(), 510 for mission in sorted(self.game.get_available_missions(),
507 key=lambda x: x.NAME): 511 key=lambda x: x.NAME):
508 widget = MissionWidget(mission, (x, y), self) 512 widget = MissionWidget(mission, (x, y), self)
509 self._missions.append(widget) 513 self._missions.append(widget)
510 self.add_child(widget) 514 self.add_child(widget)
552 556
553 def __init__(self, screen, lab): 557 def __init__(self, screen, lab):
554 super(DevelopmentWindow, self).__init__(screen, lab.game) 558 super(DevelopmentWindow, self).__init__(screen, lab.game)
555 self.lab = lab 559 self.lab = lab
556 560
557 labbut = SwitchWinButton((150, 10), 'SCIENCE!!', lab) 561 labbut = SwitchWinButton((150, 0), 'SCIENCE!!', lab)
558 self.add_child(labbut) 562 self.add_child(labbut)
559 self.activity = None 563 self.activity = None
560 564
561 self.update_labels() 565 self.update_labels()
562 self._sciences = [] 566 self._sciences = []
564 568
565 def set_activity_window(self, activity): 569 def set_activity_window(self, activity):
566 # Oh, what tangled webs we weave 570 # Oh, what tangled webs we weave
567 if not self.activity: 571 if not self.activity:
568 self.activity = activity 572 self.activity = activity
569 actbut = SwitchWinButton((300, 10), 'Schemes', activity) 573 actbut = SwitchWinButton((300, 0), 'Schemes', activity)
570 self.add_child(actbut) 574 self.add_child(actbut)
571 575
572 def _make_science_widgets(self): 576 def _make_science_widgets(self):
573 for widget in self._sciences: 577 for widget in self._sciences:
574 self.remove_child(widget) 578 self.remove_child(widget)
575 self._sciences = [] 579 self._sciences = []
576 x = 0 580 x = 0
577 y = 150 581 y = 130
578 for science in sorted(self.game.lab.science, key=lambda x: x.NAME): 582 for science in sorted(self.game.lab.science, key=lambda x: x.NAME):
579 if science.SCIENCE_TYPE == 'schematic': 583 if science.SCIENCE_TYPE == 'schematic':
580 widget = ScienceWidget(science, (x, y), self) 584 widget = ScienceWidget(science, (x, y), self)
581 self.add_child(widget) 585 self.add_child(widget)
582 self._sciences.append(widget) 586 self._sciences.append(widget)
583 x += widget.WIDTH + 10 587 x += widget.WIDTH + 10
584 if x >= WIDTH: 588 if x >= WIDTH:
585 x = 0 589 x = 0
586 y += widget.HEIGHT + 5 590 y += widget.HEIGHT
587 591
588 def end_turn(self): 592 def end_turn(self):
589 # Drop back to the research screen 593 # Drop back to the research screen
590 PopWindow.post() 594 PopWindow.post()
591 self.lab.update() 595 self.lab.update()
626 630
627 self.develop = DevelopmentWindow(screen, self) 631 self.develop = DevelopmentWindow(screen, self)
628 self.activity = ActivityWindow(screen, self, self.develop) 632 self.activity = ActivityWindow(screen, self, self.develop)
629 self.develop.set_activity_window(self.activity) 633 self.develop.set_activity_window(self.activity)
630 634
631 devbut = SwitchWinButton((150, 10), 'Engineering', self.develop) 635 devbut = SwitchWinButton((150, 0), 'Engineering', self.develop)
632 self.add_child(devbut) 636 self.add_child(devbut)
633 actbut = SwitchWinButton((300, 10), 'Schemes', self.activity) 637 actbut = SwitchWinButton((300, 0), 'Schemes', self.activity)
634 self.add_child(actbut) 638 self.add_child(actbut)
635 639
636 self._sciences = [] 640 self._sciences = []
637 # Setup for the first turn 641 # Setup for the first turn
638 self.update_labels() 642 self.update_labels()
642 # FIXME: Horrible hackery 646 # FIXME: Horrible hackery
643 for widget in self._sciences: 647 for widget in self._sciences:
644 self.remove_child(widget) 648 self.remove_child(widget)
645 self._sciences = [] 649 self._sciences = []
646 x = 0 650 x = 0
647 y = 150 651 y = 130
648 for science in sorted(self.game.lab.science, key=lambda x: x.NAME): 652 for science in sorted(self.game.lab.science, key=lambda x: x.NAME):
649 if science.SCIENCE_TYPE == 'research': 653 if science.SCIENCE_TYPE == 'research':
650 widget = ScienceWidget(science, (x, y), self) 654 widget = ScienceWidget(science, (x, y), self)
651 self.add_child(widget) 655 self.add_child(widget)
652 self._sciences.append(widget) 656 self._sciences.append(widget)