Mercurial > sypikslang
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) |