# HG changeset patch # User Neil Muller # Date 1336763681 -7200 # Node ID abaf6853fe37da90e0e956e9ea16da7b30df8947 # Parent f4601492020b1423f0c8fcf1c1da74da2b2176eb Redo mission screen diff -r f4601492020b -r abaf6853fe37 gamelib/gamegui.py --- a/gamelib/gamegui.py Fri May 11 21:09:01 2012 +0200 +++ b/gamelib/gamegui.py Fri May 11 21:14:41 2012 +0200 @@ -63,9 +63,26 @@ super(NextTurnButton, self).__init__(((WIDTH - 128), 10), 'Next Turn') -class DoneButton(PopWindowButton): - def __init__(self): - super(DoneButton, self).__init__(((WIDTH - 128), 10), 'Done') +class AssignButton(PopWindowButton): + def __init__(self, parent): + super(AssignButton, self).__init__(((WIDTH - 128), 10), + 'Assign Mission') + self.parent = parent + + def on_click(self): + self.parent.accept() + super(AssignButton, self).on_click() + + +class CancelButton(PopWindowButton): + def __init__(self, parent): + super(CancelButton, self).__init__(((WIDTH - 256), 10), + 'Cancel Mission') + self.parent = parent + + def on_click(self): + self.parent.cancel() + super(CancelButton, self).on_click() class ResetButton(BigButton): @@ -168,17 +185,25 @@ self.set_state(self.mode) self.on_click() + def select(self): + if not self.selected(): + self.game.minions -= self.minions + self.mode = 'SELECTED' + self.set_state(self.mode) + self.parent.update_labels() + + def unselect(self): + if self.selected(): + # Unassign the minions from the main game + self.game.minions += self.minions + self.reset() + def on_click(self): - if self.mode == 'SELECTED': - # unselect mission - self.reset() - elif self.mission.can_attempt(self.game): - # select mission and equipment - self.mode = 'SELECTED' - self.set_state('SELECTED') - self.minions = self.mission.MINIONS_REQUIRED - self.game.minions -= self.minions - self.parent.update_labels() + # select mission and equipment + if self.game.minions > 0 or self.selected(): + if not self.selected(): + # Assign the minions automatically + self.minions = self.mission.MINIONS_REQUIRED equip = EquipWindow(self.parent.screen, self.mission, self.game, self) AddWindow.post(equip) @@ -193,7 +218,6 @@ for equip in self.equipment: # Release funds self.game.money += equip.COST - self.game.minions += self.minions self.minions = 0 self.parent.update() self.equipment = [] @@ -239,7 +263,7 @@ def __init__(self, pos, description): self.description = description - rect = (pos[0], pos[1], 300, 50) + rect = (pos[0], pos[1], 300, 20) super(ValueLabel, self).__init__(rect, '%s : 0' % description, font_medium, (255, 255, 0)) @@ -252,30 +276,69 @@ def __init__(self, screen, mission, game, parent): super(EquipWindow, self).__init__(screen) - donebut = DoneButton() - self.add_child(donebut) + assign = AssignButton(self) + self.add_child(assign) + cancel = CancelButton(self) + self.add_child(cancel) reset = ResetButton(self) self.add_child(reset) title = TextLabel((200, 20, 400, 50), "Choose equipment for %s" % mission.NAME, font_medium, (255, 255, 255)) self.add_child(title) - description = TextBox((10, 70, 790, 20), mission.LONG_DESCRIPTION, - font_medium, (255, 255, 255)) - self.add_child(description) + self.description = TextBox((10, 70, 790, 20), + mission.LONG_DESCRIPTION, font_medium, (255, 255, 255)) + self.add_child(self.description) self.parent = parent self.game = game - self.money = ValueLabel((10, description.rect.height + 75), 'Money') + self.money = ValueLabel((10, self.description.rect.height + 75), + 'Money') self.money.set_value(self.game.money) + self.minions = ValueLabel((310, self.description.rect.height + 75), + 'Minions Assigned') + self.minions.set_value(self.parent.minions) self.add_child(self.money) + self.add_child(self.minions) + inventory = TextLabel((10, self.description.rect.height + 90, 400, 20), + 'Current Inventory', font_medium, (255, 255, 255)) + self.add_child(inventory) self._equip = [] + self._inventory = [] + self._update_widgets() + + def cancel(self): + self.do_reset() + self.parent.unselect() + + def accept(self): + self.parent.select() + + def _update_widgets(self): + self._make_inventory() self._make_equip_widgets() + def _make_inventory(self): + for widget in self._inventory: + self.remove_child(widget) + self._inventory = [] + x = 10 + y = 110 + self.description.rect.height + # collections.Counter is python 2.7. This is a bother + equipment = sorted(set(self.parent.equipment), key=lambda x: x.NAME) + for equip in equipment: + count = self.parent.equipment.count(equip) + widget = TextLabel((x, y, 700, 15), '%s x %s' + % (equip.NAME, count), font_small, (255, 255, 255)) + y += 15 + self._inventory.append(widget) + self.add_child(widget) + def _make_equip_widgets(self): for widget in self._equip: self.remove_child(widget) self._equip = [] x = 0 - y = 150 + y = max(250, 130 + self.description.rect.height + + 20 * len(self._inventory)) available = self.game.get_available_equipment() for equip in self.game.get_all_equipment(): copies = self.parent.equipment.count(equip) @@ -286,14 +349,14 @@ x += 200 if x >= WIDTH: x = 0 - y += 100 + y += 50 def buy(self, equip): self.game.money -= equip.COST self.money.set_value(self.game.money) self.parent.equipment.append(equip) self.parent.parent.update() - self._make_equip_widgets() + self._update_widgets() def do_reset(self): for equip in self.parent.equipment: @@ -302,7 +365,7 @@ self.money.set_value(self.game.money) self.parent.equipment = [] self.parent.parent.update() - self._make_equip_widgets() + self._update_widgets() class ResultsWindow(Window):