Mercurial > sypikslang
view gamelib/gamegui.py @ 74:22b65c943712
prettified main menu - temp background
author | Rizmari Versfeld <rizziepit@gmail.com> |
---|---|
date | Wed, 09 May 2012 00:08:57 +0200 |
parents | 06c8539df478 |
children | 8b06b07a1477 |
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, TextLabel, font_small, font_medium from gamelib.gui import BigButton from gamelib.engine import PopWindow, AddWindow 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.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): 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), font_small) def on_click(self): if (self.parent.game.get_available_points() > 0 and self.science.can_spend(self.parent.game.lab, self.points + 1)): self.points += 1 self.text = '%s: %d + %d' % (self.science.NAME, self.science.points, self.points) self._draw_text() self.parent.game.cur_allocation.append(self.science) self.parent.update_labels() def reset(self): while self.points > 0: self.parent.game.cur_allocation.remove(self.science) self.points -= 1 self.text = '%s: %d' % (self.science.NAME, self.science.points) self._draw_text() self.parent.update_labels() class ValueLabel(TextLabel): def __init__(self, pos, description): self.description = description rect = (pos[0], pos[1], 300, 50) super(ValueLabel, self).__init__(rect, '%s : 0' % description, font_medium, (255, 255, 0)) def set_value(self, value): self.text = '%s : %d' % (self.description, value) 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 = ValueLabel((10, 75), 'Available Human Resources') self.add_child(self.points) self.money = ValueLabel((310, 75), 'Money') self.add_child(self.money) labbut = SwitchWinButton((150, 10), 'Research', lab) self.add_child(labbut) devbut = SwitchWinButton((300, 10), 'Development', develop) self.add_child(devbut) self.update_labels() 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_labels() def update_labels(self): self.points.set_value(self.game.get_available_points()) self.money.set_value(self.game.money) def do_reset(self): self.lab.reset() self.develop.reset() self.reset() def reset(self): self.update_labels() 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 = ValueLabel((10, 75), 'Available Human Resources') self.add_child(self.points) self.money = ValueLabel((310, 75), 'Money') self.add_child(self.money) labbut = SwitchWinButton((150, 10), 'Research', lab) self.add_child(labbut) self.activity = None self.update_labels() 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_labels() def update(self): self.update_labels() def update_labels(self): self.points.set_value(self.game.get_available_points()) self.money.set_value(self.game.money) 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""" def __init__(self, screen): super(LabWindow, 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.points = ValueLabel((10, 75), 'Available Human Resources') self.add_child(self.points) self.money = ValueLabel((310, 75), 'Money') self.add_child(self.money) 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() self.update_labels() self._make_science_widgets() def _make_science_widgets(self): x = 0 y = 150 for science in self.game.lab.science: 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 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_labels() self.update_widgets() self.develop.update_widgets() self.activity.update_widgets() def update(self): self.update_labels() def update_labels(self): self.points.set_value(self.game.get_available_points()) self.money.set_value(self.game.money) def do_reset(self): self.reset() self.develop.reset() self.activity.reset() def reset(self): for widget in self._sciences: widget.reset()