# HG changeset patch # User Neil Muller # Date 1336507451 -7200 # Node ID 43b34b01346263c3a409184323a38e062a891ebb # Parent 5c4c676731125e82c43688826c1fefea2f58cf37 Add development and activity screens diff -r 5c4c67673112 -r 43b34b013462 gamelib/gamegui.py --- 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()