diff 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
line wrap: on
line diff
--- a/gamelib/gamegui.py	Wed May 09 22:37:07 2012 +0200
+++ b/gamelib/gamegui.py	Wed May 09 22:37:49 2012 +0200
@@ -22,6 +22,18 @@
 from gamelib.gamestate import Game
 
 
+def _lookup_reputation(rep):
+    """Turn reputation in a nice string"""
+
+    if rep < 0:
+        return 'Mindless Thug'
+    if rep < 10:
+        return 'Fringe Lunatic'
+    if rep < 100:
+        return 'Mad Scientist'
+    return 'Major Threat to World Peace'
+
+
 class ExitGameButton(BigButton):
 
     def __init__(self):
@@ -310,13 +322,12 @@
         self.add_child(won)
 
 
-class ActivityWindow(Window):
+class GameStateWindow(Window):
+    """Base class for windows that show a lot of game state info"""
 
-    def __init__(self, screen, lab, develop):
-        super(ActivityWindow, self).__init__(screen)
-        self.lab = lab
-        self.develop = develop
-        self.game = lab.game
+    def __init__(self, screen, game):
+        super(GameStateWindow, self).__init__(screen)
+        self.game = game
         self.screen = screen
         exitbut = ExitGameButton()
         self.add_child(exitbut)
@@ -335,9 +346,22 @@
         self.reputation = ValueLabel((310, 95), 'Reputation')
         self.add_child(self.reputation)
 
+    def update_labels(self):
+        self.points.set_value(self.game.get_available_points())
+        self.money.set_value(self.game.money)
+        self.milestone.set_value(self.game.milestone)
+        self.reputation.set_value(_lookup_reputation(self.game.reputation))
+
+
+class ActivityWindow(GameStateWindow):
+
+    def __init__(self, screen, lab, develop):
+        super(ActivityWindow, self).__init__(screen, lab.game)
+        self.lab = lab
+        self.develop = develop
+
         labbut = SwitchWinButton((150, 10), 'Research', lab)
         self.add_child(labbut)
-
         devbut = SwitchWinButton((300, 10), 'Development', develop)
         self.add_child(devbut)
 
@@ -373,12 +397,6 @@
     def update(self):
         self.update_labels()
 
-    def update_labels(self):
-        self.points.set_value(self.game.get_available_points())
-        self.money.set_value(self.game.money)
-        self.milestone.set_value(self.game.milestone)
-        self.reputation.set_value(self.game.reputation)
-
     def do_reset(self):
         self.lab.reset()
         self.develop.reset()
@@ -399,29 +417,12 @@
         self.update_labels()
 
 
-class DevelopmentWindow(Window):
+class DevelopmentWindow(GameStateWindow):
     """Window for handling schematics research"""
 
     def __init__(self, screen, lab):
-        super(DevelopmentWindow, self).__init__(screen)
+        super(DevelopmentWindow, self).__init__(screen, lab.game)
         self.lab = lab
-        self.game = lab.game
-        exitbut = ExitGameButton()
-        self.add_child(exitbut)
-        end_turn = EndTurnButton(self)
-        self.add_child(end_turn)
-        reset = ResetButton(self)
-        self.add_child(reset)
-
-        self.points = ValueLabel((10, 75), 'Available Human Resources')
-        self.add_child(self.points)
-        self.money = ValueLabel((310, 75), 'Money')
-        self.add_child(self.money)
-
-        self.milestone = ValueLabel((10, 95), 'Currently taken over')
-        self.add_child(self.milestone)
-        self.reputation = ValueLabel((310, 95), 'Reputation')
-        self.add_child(self.reputation)
 
         labbut = SwitchWinButton((150, 10), 'Research', lab)
         self.add_child(labbut)
@@ -468,12 +469,6 @@
     def update(self):
         self.update_labels()
 
-    def update_labels(self):
-        self.points.set_value(self.game.get_available_points())
-        self.money.set_value(self.game.money)
-        self.milestone.set_value(self.game.milestone)
-        self.reputation.set_value(self.game.reputation)
-
     def do_reset(self):
         self.reset()
         self.lab.reset()
@@ -484,31 +479,14 @@
             widget.reset()
 
 
-class LabWindow(Window):
+class LabWindow(GameStateWindow):
     """Window for the research lab"""
 
     def __init__(self, screen, game_dict):
-        super(LabWindow, self).__init__(screen)
-        self.screen = screen
         self.game = Game(game_dict)
-        exit = ExitGameButton()
-        self.add_child(exit)
-        end_turn = EndTurnButton(self)
-        self.add_child(end_turn)
-        reset = ResetButton(self)
-        self.add_child(reset)
+        super(LabWindow, self).__init__(screen, self.game)
         self.autosave = get_save_filename()
 
-        self.points = ValueLabel((10, 75), 'Available Human Resources')
-        self.add_child(self.points)
-        self.money = ValueLabel((310, 75), 'Money')
-        self.add_child(self.money)
-
-        self.milestone = ValueLabel((10, 95), 'Currently taken over')
-        self.add_child(self.milestone)
-        self.reputation = ValueLabel((310, 95), 'Reputation')
-        self.add_child(self.reputation)
-
         self.develop = DevelopmentWindow(screen, self)
         self.activity = ActivityWindow(screen, self, self.develop)
         self.develop.set_activity_window(self.activity)
@@ -552,11 +530,15 @@
             PopWindow.post()
             GameOver.post(results)
             return
+        self.save_game()
         self.game.start_turn()
         self.update_labels()
         self.update_widgets()
         self.develop.update_widgets()
         self.activity.update_widgets()
+        AddWindow.post(results)
+
+    def save_game(self):
         game_data = self.game.save_data()
         if self.autosave:
             # Don't corrupt the savefile if json crashes
@@ -564,17 +546,10 @@
             savefile = open(self.autosave, 'w')
             savefile.write(data)
             savefile.close()
-        AddWindow.post(results)
 
     def update(self):
         self.update_labels()
 
-    def update_labels(self):
-        self.points.set_value(self.game.get_available_points())
-        self.money.set_value(self.game.money)
-        self.milestone.set_value(self.game.milestone)
-        self.reputation.set_value(self.game.reputation)
-
     def do_reset(self):
         self.reset()
         self.develop.reset()