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