Mercurial > sypikslang
changeset 82:b0d97d51df51
Hook up simplistic equipment screen
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Wed, 09 May 2012 16:51:26 +0200 |
parents | 59afe9f92383 |
children | 2e566813a071 |
files | data/images/equip_grey.png gamelib/gamegui.py gamelib/gamestate.py |
diffstat | 3 files changed, 113 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/gamelib/gamegui.py Wed May 09 13:03:39 2012 +0200 +++ b/gamelib/gamegui.py Wed May 09 16:51:26 2012 +0200 @@ -118,12 +118,14 @@ def on_click(self): if self.mode == 'SELECTED': # unselect mission - self.mode = 'NORMAL' - self.set_state('NORMAL') + self.reset() else: # select mission and equipment self.mode = 'SELECTED' self.set_state('SELECTED') + equip = EquipWindow(self.parent.screen, self.mission, + self.parent.game, self) + AddWindow.post(equip) def selected(self): return self.mode == 'SELECTED' @@ -132,11 +134,49 @@ return self.equipment def reset(self): + for equip in self.equipment: + # Release funds + self.parent.game.money += equip.COST + self.parent.update() self.equipment = [] self.mode = 'NORMAL' self.set_state('NORMAL') +class EquipWidget(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_UNAVAILABLE = image.load(filepath('images/equip_grey.png')) + + def __init__(self, equip, pos, parent, copies, available): + self.equip = equip + self.parent = parent + self.available = available + super(EquipWidget, self).__init__(pos, '[%s : %d] - %d (x %d)' + % (equip.NAME, equip.points, equip.COST, copies), font_small) + if not self.available: + unavailable = ImageDrawable((0, 0, self.WIDTH, self.HEIGHT), + self.BG_IMAGE_UNAVAILABLE) + # Override the default + self.add_state('NORMAL', unavailable) + self.set_state('NORMAL') + self.equipment = [] + + def on_mouse_down(self, pos): + if self.available: + super(EquipWidget, self).on_mouse_down(pos) + + def on_mouse_up(self, pos): + if self.available: + super(EquipWidget, self).on_mouse_up(pos) + + def on_click(self): + self.parent.buy(self.equip) + + class ValueLabel(TextLabel): def __init__(self, pos, description): @@ -150,6 +190,60 @@ self._draw_text() +class EquipWindow(Window): + + def __init__(self, screen, mission, game, parent): + super(EquipWindow, self).__init__(screen) + exitbut = ExitGameButton() + self.add_child(exitbut) + 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) + self.parent = parent + self.game = game + self.money = ValueLabel((10, 75), 'Money') + self.money.set_value(self.game.money) + self.add_child(self.money) + self._equip = [] + self._make_equip_widgets() + + def _make_equip_widgets(self): + for widget in self._equip: + self.remove_child(widget) + self._equip = [] + x = 0 + y = 150 + available = self.game.get_available_equipment() + for equip in self.game.get_all_equipment(): + copies = self.parent.equipment.count(equip) + widget = EquipWidget(equip, (x, y), self, copies, + equip in available) + self._equip.append(widget) + self.add_child(widget) + x += 200 + if x >= WIDTH: + x = 0 + y += 100 + + 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() + + def do_reset(self): + for equip in self.parent.equipment: + # Release funds + self.game.money += equip.COST + self.money.set_value(self.game.money) + self.parent.equipment = [] + self.parent.parent.update() + self._make_equip_widgets() + + class ResultsWindow(Window): def __init__(self, screen, messages, turn): @@ -191,6 +285,7 @@ self.lab = lab self.develop = develop self.game = lab.game + self.screen = screen exitbut = ExitGameButton() self.add_child(exitbut) end_turn = EndTurnButton(self) @@ -214,6 +309,9 @@ self._make_widgets() def _make_widgets(self): + for widget in self._missions: + self.remove_child(widget) + self._missions = [] x = 0 y = 150 for mission in self.game.get_available_missions(): @@ -233,9 +331,6 @@ self.lab.end_turn() def update_widgets(self): - for widget in self._missions: - self.remove_child(widget) - self._missions = [] self._make_widgets() def update(self): @@ -300,9 +395,11 @@ self.add_child(actbut) def _make_science_widgets(self): + for widget in self._sciences: + self.remove_child(widget) + self._sciences = [] x = 0 y = 150 - for science in self.game.lab.science: if science.SCIENCE_TYPE == 'schematic': widget = ScienceWidget(science, (x, y), self) @@ -321,9 +418,6 @@ 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_labels() @@ -379,9 +473,12 @@ self._make_science_widgets() def _make_science_widgets(self): + # FIXME: Horrible hackery + for widget in self._sciences: + self.remove_child(widget) + self._sciences = [] x = 0 y = 150 - for science in self.game.lab.science: if science.SCIENCE_TYPE == 'research': widget = ScienceWidget(science, (x, y), self) @@ -393,10 +490,6 @@ y += 100 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):
--- a/gamelib/gamestate.py Wed May 09 13:03:39 2012 +0200 +++ b/gamelib/gamestate.py Wed May 09 16:51:26 2012 +0200 @@ -43,6 +43,12 @@ if x.SCIENCE_TYPE == 'schematic' and x.COST <= self.money] return available + def get_all_equipment(self): + """Return a list of equipment we could produce, regardless of cost""" + equipment = [x for x in self.lab.science + if x.SCIENCE_TYPE == 'schematic'] + return equipment + def get_available_missions(self): """Return a list of missions we can feasibly attempt""" available = [x for x in self.missions if x.can_attempt(self)]