Mercurial > sypikslang
comparison gamelib/gamegui.py @ 111:bb76ce231ff9
Merge changes.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Wed, 09 May 2012 22:37:49 +0200 |
parents | 5bb711cdc569 |
children | a79bba0dfcd8 |
comparison
equal
deleted
inserted
replaced
110:ff7c953502d5 | 111:bb76ce231ff9 |
---|---|
18 from gamelib.gui import BigButton, ImageDrawable | 18 from gamelib.gui import BigButton, ImageDrawable |
19 from gamelib.engine import PopWindow, AddWindow, GameOver | 19 from gamelib.engine import PopWindow, AddWindow, GameOver |
20 from gamelib.constants import (WIDTH, FAILURE, SUCCESS, NEW_SCIENCE, | 20 from gamelib.constants import (WIDTH, FAILURE, SUCCESS, NEW_SCIENCE, |
21 NEW_SCHEMATIC, GAME_WIN) | 21 NEW_SCHEMATIC, GAME_WIN) |
22 from gamelib.gamestate import Game | 22 from gamelib.gamestate import Game |
23 | |
24 | |
25 def _lookup_reputation(rep): | |
26 """Turn reputation in a nice string""" | |
27 | |
28 if rep < 0: | |
29 return 'Mindless Thug' | |
30 if rep < 10: | |
31 return 'Fringe Lunatic' | |
32 if rep < 100: | |
33 return 'Mad Scientist' | |
34 return 'Major Threat to World Peace' | |
23 | 35 |
24 | 36 |
25 class ExitGameButton(BigButton): | 37 class ExitGameButton(BigButton): |
26 | 38 |
27 def __init__(self): | 39 def __init__(self): |
308 won = TextLabel((200, 250, 400, 50), msg, font_large, | 320 won = TextLabel((200, 250, 400, 50), msg, font_large, |
309 (255, 255, 255)) | 321 (255, 255, 255)) |
310 self.add_child(won) | 322 self.add_child(won) |
311 | 323 |
312 | 324 |
313 class ActivityWindow(Window): | 325 class GameStateWindow(Window): |
314 | 326 """Base class for windows that show a lot of game state info""" |
315 def __init__(self, screen, lab, develop): | 327 |
316 super(ActivityWindow, self).__init__(screen) | 328 def __init__(self, screen, game): |
317 self.lab = lab | 329 super(GameStateWindow, self).__init__(screen) |
318 self.develop = develop | 330 self.game = game |
319 self.game = lab.game | |
320 self.screen = screen | 331 self.screen = screen |
321 exitbut = ExitGameButton() | 332 exitbut = ExitGameButton() |
322 self.add_child(exitbut) | 333 self.add_child(exitbut) |
323 end_turn = EndTurnButton(self) | 334 end_turn = EndTurnButton(self) |
324 self.add_child(end_turn) | 335 self.add_child(end_turn) |
333 self.milestone = ValueLabel((10, 95), 'Currently taken over') | 344 self.milestone = ValueLabel((10, 95), 'Currently taken over') |
334 self.add_child(self.milestone) | 345 self.add_child(self.milestone) |
335 self.reputation = ValueLabel((310, 95), 'Reputation') | 346 self.reputation = ValueLabel((310, 95), 'Reputation') |
336 self.add_child(self.reputation) | 347 self.add_child(self.reputation) |
337 | 348 |
349 def update_labels(self): | |
350 self.points.set_value(self.game.get_available_points()) | |
351 self.money.set_value(self.game.money) | |
352 self.milestone.set_value(self.game.milestone) | |
353 self.reputation.set_value(_lookup_reputation(self.game.reputation)) | |
354 | |
355 | |
356 class ActivityWindow(GameStateWindow): | |
357 | |
358 def __init__(self, screen, lab, develop): | |
359 super(ActivityWindow, self).__init__(screen, lab.game) | |
360 self.lab = lab | |
361 self.develop = develop | |
362 | |
338 labbut = SwitchWinButton((150, 10), 'Research', lab) | 363 labbut = SwitchWinButton((150, 10), 'Research', lab) |
339 self.add_child(labbut) | 364 self.add_child(labbut) |
340 | |
341 devbut = SwitchWinButton((300, 10), 'Development', develop) | 365 devbut = SwitchWinButton((300, 10), 'Development', develop) |
342 self.add_child(devbut) | 366 self.add_child(devbut) |
343 | 367 |
344 self.update_labels() | 368 self.update_labels() |
345 self._missions = [] | 369 self._missions = [] |
371 self._make_widgets() | 395 self._make_widgets() |
372 | 396 |
373 def update(self): | 397 def update(self): |
374 self.update_labels() | 398 self.update_labels() |
375 | 399 |
376 def update_labels(self): | |
377 self.points.set_value(self.game.get_available_points()) | |
378 self.money.set_value(self.game.money) | |
379 self.milestone.set_value(self.game.milestone) | |
380 self.reputation.set_value(self.game.reputation) | |
381 | |
382 def do_reset(self): | 400 def do_reset(self): |
383 self.lab.reset() | 401 self.lab.reset() |
384 self.develop.reset() | 402 self.develop.reset() |
385 self.reset() | 403 self.reset() |
386 | 404 |
397 for widget in self._missions: | 415 for widget in self._missions: |
398 widget.reset() | 416 widget.reset() |
399 self.update_labels() | 417 self.update_labels() |
400 | 418 |
401 | 419 |
402 class DevelopmentWindow(Window): | 420 class DevelopmentWindow(GameStateWindow): |
403 """Window for handling schematics research""" | 421 """Window for handling schematics research""" |
404 | 422 |
405 def __init__(self, screen, lab): | 423 def __init__(self, screen, lab): |
406 super(DevelopmentWindow, self).__init__(screen) | 424 super(DevelopmentWindow, self).__init__(screen, lab.game) |
407 self.lab = lab | 425 self.lab = lab |
408 self.game = lab.game | |
409 exitbut = ExitGameButton() | |
410 self.add_child(exitbut) | |
411 end_turn = EndTurnButton(self) | |
412 self.add_child(end_turn) | |
413 reset = ResetButton(self) | |
414 self.add_child(reset) | |
415 | |
416 self.points = ValueLabel((10, 75), 'Available Human Resources') | |
417 self.add_child(self.points) | |
418 self.money = ValueLabel((310, 75), 'Money') | |
419 self.add_child(self.money) | |
420 | |
421 self.milestone = ValueLabel((10, 95), 'Currently taken over') | |
422 self.add_child(self.milestone) | |
423 self.reputation = ValueLabel((310, 95), 'Reputation') | |
424 self.add_child(self.reputation) | |
425 | 426 |
426 labbut = SwitchWinButton((150, 10), 'Research', lab) | 427 labbut = SwitchWinButton((150, 10), 'Research', lab) |
427 self.add_child(labbut) | 428 self.add_child(labbut) |
428 self.activity = None | 429 self.activity = None |
429 | 430 |
466 self.update_labels() | 467 self.update_labels() |
467 | 468 |
468 def update(self): | 469 def update(self): |
469 self.update_labels() | 470 self.update_labels() |
470 | 471 |
471 def update_labels(self): | |
472 self.points.set_value(self.game.get_available_points()) | |
473 self.money.set_value(self.game.money) | |
474 self.milestone.set_value(self.game.milestone) | |
475 self.reputation.set_value(self.game.reputation) | |
476 | |
477 def do_reset(self): | 472 def do_reset(self): |
478 self.reset() | 473 self.reset() |
479 self.lab.reset() | 474 self.lab.reset() |
480 self.activity.reset() | 475 self.activity.reset() |
481 | 476 |
482 def reset(self): | 477 def reset(self): |
483 for widget in self._sciences: | 478 for widget in self._sciences: |
484 widget.reset() | 479 widget.reset() |
485 | 480 |
486 | 481 |
487 class LabWindow(Window): | 482 class LabWindow(GameStateWindow): |
488 """Window for the research lab""" | 483 """Window for the research lab""" |
489 | 484 |
490 def __init__(self, screen, game_dict): | 485 def __init__(self, screen, game_dict): |
491 super(LabWindow, self).__init__(screen) | |
492 self.screen = screen | |
493 self.game = Game(game_dict) | 486 self.game = Game(game_dict) |
494 exit = ExitGameButton() | 487 super(LabWindow, self).__init__(screen, self.game) |
495 self.add_child(exit) | |
496 end_turn = EndTurnButton(self) | |
497 self.add_child(end_turn) | |
498 reset = ResetButton(self) | |
499 self.add_child(reset) | |
500 self.autosave = get_save_filename() | 488 self.autosave = get_save_filename() |
501 | |
502 self.points = ValueLabel((10, 75), 'Available Human Resources') | |
503 self.add_child(self.points) | |
504 self.money = ValueLabel((310, 75), 'Money') | |
505 self.add_child(self.money) | |
506 | |
507 self.milestone = ValueLabel((10, 95), 'Currently taken over') | |
508 self.add_child(self.milestone) | |
509 self.reputation = ValueLabel((310, 95), 'Reputation') | |
510 self.add_child(self.reputation) | |
511 | 489 |
512 self.develop = DevelopmentWindow(screen, self) | 490 self.develop = DevelopmentWindow(screen, self) |
513 self.activity = ActivityWindow(screen, self, self.develop) | 491 self.activity = ActivityWindow(screen, self, self.develop) |
514 self.develop.set_activity_window(self.activity) | 492 self.develop.set_activity_window(self.activity) |
515 | 493 |
550 results = ResultsWindow(self.screen, messages, self.game.turn) | 528 results = ResultsWindow(self.screen, messages, self.game.turn) |
551 if results.is_game_over: | 529 if results.is_game_over: |
552 PopWindow.post() | 530 PopWindow.post() |
553 GameOver.post(results) | 531 GameOver.post(results) |
554 return | 532 return |
533 self.save_game() | |
555 self.game.start_turn() | 534 self.game.start_turn() |
556 self.update_labels() | 535 self.update_labels() |
557 self.update_widgets() | 536 self.update_widgets() |
558 self.develop.update_widgets() | 537 self.develop.update_widgets() |
559 self.activity.update_widgets() | 538 self.activity.update_widgets() |
539 AddWindow.post(results) | |
540 | |
541 def save_game(self): | |
560 game_data = self.game.save_data() | 542 game_data = self.game.save_data() |
561 if self.autosave: | 543 if self.autosave: |
562 # Don't corrupt the savefile if json crashes | 544 # Don't corrupt the savefile if json crashes |
563 data = json.dumps(game_data) | 545 data = json.dumps(game_data) |
564 savefile = open(self.autosave, 'w') | 546 savefile = open(self.autosave, 'w') |
565 savefile.write(data) | 547 savefile.write(data) |
566 savefile.close() | 548 savefile.close() |
567 AddWindow.post(results) | |
568 | 549 |
569 def update(self): | 550 def update(self): |
570 self.update_labels() | 551 self.update_labels() |
571 | |
572 def update_labels(self): | |
573 self.points.set_value(self.game.get_available_points()) | |
574 self.money.set_value(self.game.money) | |
575 self.milestone.set_value(self.game.milestone) | |
576 self.reputation.set_value(self.game.reputation) | |
577 | 552 |
578 def do_reset(self): | 553 def do_reset(self): |
579 self.reset() | 554 self.reset() |
580 self.develop.reset() | 555 self.develop.reset() |
581 self.activity.reset() | 556 self.activity.reset() |