changeset 72:8b06b07a1477

Very basic mission support
author Neil Muller <drnlmuller@gmail.com>
date Wed, 09 May 2012 00:11:51 +0200
parents 20b01d100ff5
children b503ccb0a86e
files data/images/mission_selected.png gamelib/gamegui.py
diffstat 2 files changed, 76 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
Binary file data/images/mission_selected.png has changed
--- a/gamelib/gamegui.py	Tue May 08 23:11:03 2012 +0200
+++ b/gamelib/gamegui.py	Wed May 09 00:11:51 2012 +0200
@@ -7,7 +7,7 @@
 
 from gamelib.data import filepath
 from gamelib.gui_base import Window, TextLabel, font_small, font_medium
-from gamelib.gui import BigButton
+from gamelib.gui import BigButton, ImageDrawable
 from gamelib.engine import PopWindow, AddWindow
 from gamelib.constants import WIDTH
 from gamelib.gamestate import Game
@@ -88,6 +88,54 @@
         self.parent.update_labels()
 
 
+class MissionWidget(BigButton):
+
+    WIDTH = 200
+
+    BG_IMAGE_NORMAL = image.load(filepath('images/science_normal.png'))
+    BG_IMAGE_DOWN = image.load(filepath('images/science_down.png'))
+    BG_IMAGE_SELECTED = image.load(filepath('images/mission_selected.png'))
+
+    def __init__(self, mission, pos, parent):
+        self.mission = mission
+        self.parent = parent
+        super(MissionWidget, self).__init__(pos, '%s' % mission.NAME,
+                font_small)
+        selected = ImageDrawable((0, 0, self.WIDTH, self.HEIGHT),
+                self.BG_IMAGE_SELECTED)
+        self.add_state('SELECTED', selected)
+        self.mode = 'NORMAL'
+        self.equipment = []
+
+    def on_mouse_cancel(self, pos):
+        self.set_state(self.mode)
+
+    def on_mouse_up(self, pos):
+        self.set_state(self.mode)
+        self.on_click()
+
+    def on_click(self):
+        if self.mode == 'SELECTED':
+            # unselect mission
+            self.mode = 'NORMAL'
+            self.set_state('NORMAL')
+        else:
+            # select mission and equipment
+            self.mode = 'SELECTED'
+            self.set_state('SELECTED')
+
+    def selected(self):
+        return self.mode == 'SELECTED'
+
+    def get_equipment(self):
+        return self.equipment
+
+    def reset(self):
+        self.equipment = []
+        self.mode = 'NORMAL'
+        self.set_state('NORMAL')
+
+
 class ValueLabel(TextLabel):
 
     def __init__(self, pos, description):
@@ -127,10 +175,20 @@
         self.add_child(devbut)
 
         self.update_labels()
+        self._missions = []
         self._make_widgets()
 
     def _make_widgets(self):
-        pass
+        x = 0
+        y = 150
+        for mission in self.game.get_available_missions():
+            widget = MissionWidget(mission, (x, y), self)
+            self._missions.append(widget)
+            self.add_child(widget)
+            x += 200
+            if x >= WIDTH:
+                x = 0
+                y += 100
 
     def end_turn(self):
         # Drop back to the research screen
@@ -140,7 +198,10 @@
         self.lab.end_turn()
 
     def update_widgets(self):
-        pass
+        for widget in self._missions:
+            self.remove_child(widget)
+        self._missions = []
+        self._make_widgets()
 
     def update(self):
         self.update_labels()
@@ -154,7 +215,18 @@
         self.develop.reset()
         self.reset()
 
+    def get_mission_list(self):
+        selected_missions = []
+        for widget in self._missions:
+            if widget.selected():
+                equipment = widget.get_equipment()
+                mission = widget.mission
+                selected_missions.append((mission, equipment))
+        return selected_missions
+
     def reset(self):
+        for widget in self._missions:
+            widget.reset()
         self.update_labels()
 
 
@@ -292,6 +364,7 @@
         self._make_science_widgets()
 
     def end_turn(self):
+        self.game.cur_missions = self.activity.get_mission_list()
         self.game.end_turn()
         self.game.start_turn()
         self.update_labels()