changeset 66:43b34b013462

Add development and activity screens
author Neil Muller <drnlmuller@gmail.com>
date Tue, 08 May 2012 22:04:11 +0200
parents 5c4c67673112
children 06c8539df478
files gamelib/gamegui.py
diffstat 1 files changed, 177 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/gamegui.py	Tue May 08 21:06:08 2012 +0200
+++ b/gamelib/gamegui.py	Tue May 08 22:04:11 2012 +0200
@@ -8,7 +8,7 @@
 from gamelib.data import filepath
 from gamelib.gui_base import Window, TextLabel, font_small, font_medium
 from gamelib.gui import BigButton
-from gamelib.engine import PopWindow
+from gamelib.engine import PopWindow, AddWindow
 from gamelib.constants import WIDTH
 from gamelib.gamestate import Game
 
@@ -39,7 +39,20 @@
         self.parent = parent
 
     def on_click(self):
-        self.parent.reset()
+        self.parent.do_reset()
+
+
+class SwitchWinButton(BigButton):
+
+    def __init__(self, pos, text, new_window):
+        super(SwitchWinButton, self).__init__(pos, text)
+        self.new_window = new_window
+
+    def on_click(self):
+        PopWindow.post()
+        # Refresh state
+        self.new_window.update()
+        AddWindow.post(self.new_window)
 
 
 class ScienceWidget(BigButton):
@@ -86,6 +99,136 @@
         self._draw_text()
 
 
+class ActivityWindow(Window):
+
+    def __init__(self, screen, lab, develop):
+        super(ActivityWindow, self).__init__(screen)
+        self.lab = lab
+        self.develop = develop
+        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 = PointsLabel()
+        self.add_child(self.points)
+
+        labbut = SwitchWinButton((150, 10), 'Research', lab)
+        self.add_child(labbut)
+
+        devbut = SwitchWinButton((300, 10), 'Development', develop)
+        self.add_child(devbut)
+
+        self.update_points()
+        self._make_widgets()
+
+    def _make_widgets(self):
+        pass
+
+    def end_turn(self):
+        # Drop back to the research screen
+        PopWindow.post()
+        self.lab.update()
+        AddWindow.post(self.lab)
+        self.lab.end_turn()
+
+    def update_widgets(self):
+        pass
+
+    def update(self):
+        self.update_points()
+
+    def update_points(self):
+        self.points.set_value(self.game.get_available_points())
+
+    def do_reset(self):
+        self.lab.reset()
+        self.develop.reset()
+        self.reset()
+
+    def reset(self):
+        self.update_points()
+
+
+class DevelopmentWindow(Window):
+    """Window for handling schematics research"""
+
+    def __init__(self, screen, lab):
+        super(DevelopmentWindow, self).__init__(screen)
+        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 = PointsLabel()
+        self.add_child(self.points)
+
+        labbut = SwitchWinButton((150, 10), 'Research', lab)
+        self.add_child(labbut)
+        self.activity = None
+
+        self.update_points()
+        self._sciences = []
+        self._make_science_widgets()
+
+    def set_activity_window(self, activity):
+        # Oh, what tangled webs we weave
+        if not self.activity:
+            self.activity = activity
+            actbut = SwitchWinButton((300, 10), 'Activities', activity)
+            self.add_child(actbut)
+
+    def _make_science_widgets(self):
+        x = 0
+        y = 150
+
+        for science in self.game.lab.science:
+            if science.SCIENCE_TYPE == 'schematic':
+                widget = ScienceWidget(science, (x, y), self)
+                self.add_child(widget)
+                self._sciences.append(widget)
+                x += 200
+                if x >= WIDTH:
+                    x = 0
+                    y += 100
+
+    def end_turn(self):
+        # Drop back to the research screen
+        PopWindow.post()
+        self.lab.update()
+        AddWindow.post(self.lab)
+        self.lab.end_turn()
+
+    def update_widgets(self):
+        for widget in self._sciences:
+            self.remove_child(widget)
+        self._sciences = []
+        self._make_science_widgets()
+        self.update_points()
+
+    def update(self):
+        self.update_points()
+
+    def update_points(self):
+        self.points.set_value(self.game.get_available_points())
+
+    def do_reset(self):
+        self.reset()
+        self.lab.reset()
+        self.activity.reset()
+
+    def reset(self):
+        for widget in self._sciences:
+            widget.reset()
+
+
 class LabWindow(Window):
     """Window for the research lab"""
 
@@ -102,6 +245,15 @@
         self.points = PointsLabel()
         self.add_child(self.points)
 
+        self.develop = DevelopmentWindow(screen, self)
+        self.activity = ActivityWindow(screen, self, self.develop)
+        self.develop.set_activity_window(self.activity)
+
+        devbut = SwitchWinButton((150, 10), 'Development', self.develop)
+        self.add_child(devbut)
+        actbut = SwitchWinButton((300, 10), 'Activities', self.activity)
+        self.add_child(actbut)
+
         self._sciences = []
         # Setup for the first turn
         self.game.start_turn()
@@ -113,27 +265,41 @@
         y = 150
 
         for science in self.game.lab.science:
-            widget = ScienceWidget(science, (x, y), self)
-            self.add_child(widget)
-            self._sciences.append(widget)
-            x += 200
-            if x >= WIDTH:
-                x = 0
-                y += 100
+            if science.SCIENCE_TYPE == 'research':
+                widget = ScienceWidget(science, (x, y), self)
+                self.add_child(widget)
+                self._sciences.append(widget)
+                x += 200
+                if x >= WIDTH:
+                    x = 0
+                    y += 100
 
-    def end_turn(self):
-        self.game.end_turn()
+    def update_widgets(self):
         # FIXME: Horrible hackery
         for widget in self._sciences:
             self.remove_child(widget)
         self._sciences = []
         self._make_science_widgets()
+
+    def end_turn(self):
+        self.game.end_turn()
         self.game.start_turn()
         self.update_points()
+        self.update_widgets()
+        self.develop.update_widgets()
+        self.activity.update_widgets()
+
+    def update(self):
+        self.update_points()
 
     def update_points(self):
         self.points.set_value(self.game.get_available_points())
 
+    def do_reset(self):
+        self.reset()
+        self.develop.reset()
+        self.activity.reset()
+
     def reset(self):
         for widget in self._sciences:
             widget.reset()