Mercurial > sypikslang
view gamelib/gamegui.py @ 60:f9d2ba74723d
Hack in turn progression
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 07 May 2012 23:41:00 +0200 |
parents | 977224a5c663 |
children | 38f41d046c6f |
line wrap: on
line source
# -*- coding: utf-8 -*- # vim:fileencoding=utf-8 ai ts=4 sts=4 et sw=4 """Gui for the actual game""" from pygame import image from gamelib.data import filepath from gamelib.gui_base import Window from gamelib.gui import BigButton from gamelib.engine import PopWindow from gamelib.constants import WIDTH from gamelib.gamestate import Game class ExitGameButton(BigButton): def __init__(self): super(ExitGameButton, self).__init__(((WIDTH - 128), 10), 'Exit') def on_click(self): PopWindow.post() class EndTurnButton(BigButton): def __init__(self, parent): super(EndTurnButton, self).__init__(((WIDTH - 256), 10), 'End Turn') self.parent = parent def on_click(self): self.parent.end_turn() class ResetButton(BigButton): def __init__(self, parent): super(ResetButton, self).__init__((10, 10), 'Reset points') self.parent = parent def on_click(self): self.parent.reset() class ScienceWidget(BigButton): WIDTH = 200 BG_IMAGE_NORMAL = image.load(filepath('images/science_normal.png')) BG_IMAGE_DOWN = image.load(filepath('images/science_down.png')) def __init__(self, science, pos, parent): self.science = science self.points = 0 self.parent = parent super(ScienceWidget, self).__init__(pos, '%s: %d' % (science.NAME, science.points)) def on_click(self): if (self.parent.available_points > 0 and self.science.can_spend(self.parent.game.lab, self.points + 1)): self.points += 1 self.text = '%s: %d' % (self.science.NAME, self.science.points + self.points) self.parent.available_points -= 1 self._draw_text() def reset(self): self.parent.available_points += self.points self.points = 0 self.text = '%s: %d' % (self.science.NAME, self.science.points) self._draw_text() def get_spend(self): return [self.science] * self.points class GameWindow(Window): """Main window for the game""" def __init__(self, screen): super(GameWindow, self).__init__(screen) self.game = Game() exit = ExitGameButton() self.add_child(exit) end_turn = EndTurnButton(self) self.add_child(end_turn) reset = ResetButton(self) self.add_child(reset) self.game.start_turn() self.available_points = self.game.points self._sciences = [] self._make_science_widgets() def _make_science_widgets(self): x = 0 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 def end_turn(self): # Generate spend list for widget in self._sciences: self.game.cur_allocation.extend(widget.get_spend()) self.game.end_turn() # FIXME: Horrible hackery for widget in self._sciences: self.remove_child(widget) self._sciences = [] self._make_science_widgets() self.game.start_turn() self.available_points = self.game.points def reset(self): for widget in self._sciences: widget.reset()