changeset 114:0cdd13622355

merge
author Rizmari Versfeld <rizziepit@gmail.com>
date Wed, 09 May 2012 23:03:45 +0200
parents 93ba0f1b4e06 (current diff) f741bedf6670 (diff)
children ef63532cac13 94258a86f773
files gamelib/gui_base.py
diffstat 6 files changed, 56 insertions(+), 68 deletions(-) [+]
line wrap: on
line diff
--- a/LICENSE.txt	Wed May 09 23:01:16 2012 +0200
+++ b/LICENSE.txt	Wed May 09 23:03:45 2012 +0200
@@ -1,4 +1,5 @@
-Copyright (c) 2012 Jeremy Thurgood, Neil Muller, Rizmaria Versfeld
+Copyright (c) 2012 Jeremy Thurgood, Neil Muller, Rizmaria Versfeld,
+                   Simon Cross
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
--- a/README.txt	Wed May 09 23:01:16 2012 +0200
+++ b/README.txt	Wed May 09 23:03:45 2012 +0200
@@ -3,7 +3,7 @@
 
 Entry in PyWeek #14  <http://www.pyweek.org/14/>
 Team: sypikslang
-Members: drlm, jerith, Rizziepit
+Members: drlm, jerith, Rizziepit, hodgestar
 
 
 DEPENDENCIES:
--- a/gamelib/gamegui.py	Wed May 09 23:01:16 2012 +0200
+++ b/gamelib/gamegui.py	Wed May 09 23:03:45 2012 +0200
@@ -22,6 +22,18 @@
 from gamelib.gamestate import Game
 
 
+def _lookup_reputation(rep):
+    """Turn reputation in a nice string"""
+
+    if rep < 0:
+        return 'Mindless Thug'
+    if rep < 10:
+        return 'Fringe Lunatic'
+    if rep < 100:
+        return 'Mad Scientist'
+    return 'Major Threat to World Peace'
+
+
 class ExitGameButton(BigButton):
 
     def __init__(self):
@@ -310,13 +322,12 @@
         self.add_child(won)
 
 
-class ActivityWindow(Window):
+class GameStateWindow(Window):
+    """Base class for windows that show a lot of game state info"""
 
-    def __init__(self, screen, lab, develop):
-        super(ActivityWindow, self).__init__(screen)
-        self.lab = lab
-        self.develop = develop
-        self.game = lab.game
+    def __init__(self, screen, game):
+        super(GameStateWindow, self).__init__(screen)
+        self.game = game
         self.screen = screen
         exitbut = ExitGameButton()
         self.add_child(exitbut)
@@ -335,9 +346,22 @@
         self.reputation = ValueLabel((310, 95), 'Reputation')
         self.add_child(self.reputation)
 
+    def update_labels(self):
+        self.points.set_value(self.game.get_available_points())
+        self.money.set_value(self.game.money)
+        self.milestone.set_value(self.game.milestone)
+        self.reputation.set_value(_lookup_reputation(self.game.reputation))
+
+
+class ActivityWindow(GameStateWindow):
+
+    def __init__(self, screen, lab, develop):
+        super(ActivityWindow, self).__init__(screen, lab.game)
+        self.lab = lab
+        self.develop = develop
+
         labbut = SwitchWinButton((150, 10), 'Research', lab)
         self.add_child(labbut)
-
         devbut = SwitchWinButton((300, 10), 'Development', develop)
         self.add_child(devbut)
 
@@ -373,12 +397,6 @@
     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)
-        self.milestone.set_value(self.game.milestone)
-        self.reputation.set_value(self.game.reputation)
-
     def do_reset(self):
         self.lab.reset()
         self.develop.reset()
@@ -399,29 +417,12 @@
         self.update_labels()
 
 
-class DevelopmentWindow(Window):
+class DevelopmentWindow(GameStateWindow):
     """Window for handling schematics research"""
 
     def __init__(self, screen, lab):
-        super(DevelopmentWindow, self).__init__(screen)
+        super(DevelopmentWindow, self).__init__(screen, lab.game)
         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)
-
-        self.milestone = ValueLabel((10, 95), 'Currently taken over')
-        self.add_child(self.milestone)
-        self.reputation = ValueLabel((310, 95), 'Reputation')
-        self.add_child(self.reputation)
 
         labbut = SwitchWinButton((150, 10), 'Research', lab)
         self.add_child(labbut)
@@ -468,12 +469,6 @@
     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)
-        self.milestone.set_value(self.game.milestone)
-        self.reputation.set_value(self.game.reputation)
-
     def do_reset(self):
         self.reset()
         self.lab.reset()
@@ -484,31 +479,14 @@
             widget.reset()
 
 
-class LabWindow(Window):
+class LabWindow(GameStateWindow):
     """Window for the research lab"""
 
     def __init__(self, screen, game_dict):
-        super(LabWindow, self).__init__(screen)
-        self.screen = screen
         self.game = Game(game_dict)
-        exit = ExitGameButton()
-        self.add_child(exit)
-        end_turn = EndTurnButton(self)
-        self.add_child(end_turn)
-        reset = ResetButton(self)
-        self.add_child(reset)
+        super(LabWindow, self).__init__(screen, self.game)
         self.autosave = get_save_filename()
 
-        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.milestone = ValueLabel((10, 95), 'Currently taken over')
-        self.add_child(self.milestone)
-        self.reputation = ValueLabel((310, 95), 'Reputation')
-        self.add_child(self.reputation)
-
         self.develop = DevelopmentWindow(screen, self)
         self.activity = ActivityWindow(screen, self, self.develop)
         self.develop.set_activity_window(self.activity)
@@ -552,11 +530,15 @@
             PopWindow.post()
             GameOver.post(results)
             return
+        self.save_game()
         self.game.start_turn()
         self.update_labels()
         self.update_widgets()
         self.develop.update_widgets()
         self.activity.update_widgets()
+        AddWindow.post(results)
+
+    def save_game(self):
         game_data = self.game.save_data()
         if self.autosave:
             # Don't corrupt the savefile if json crashes
@@ -564,17 +546,10 @@
             savefile = open(self.autosave, 'w')
             savefile.write(data)
             savefile.close()
-        AddWindow.post(results)
 
     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)
-        self.milestone.set_value(self.game.milestone)
-        self.reputation.set_value(self.game.reputation)
-
     def do_reset(self):
         self.reset()
         self.develop.reset()
--- a/gamelib/gamestate.py	Wed May 09 23:01:16 2012 +0200
+++ b/gamelib/gamestate.py	Wed May 09 23:03:45 2012 +0200
@@ -93,6 +93,7 @@
         data['milestone'] = self.milestone
         data['points'] = self.points
         data['lab'] = self.lab.save_data()
+        data['turn'] = self.turn
         # Save mission state
         data['missions'] = {}
         for mission in self.missions:
@@ -105,6 +106,7 @@
         self.money = data['money']
         self.reputation = data['reputation']
         self.points = data['points']
+        self.turn = data['turn']
         self.lab = lab.Lab(data['lab'])
         for mis_class in missions.Mission.__subclasses__():
             miss_name = mis_class.__name__
--- a/gamelib/gui.py	Wed May 09 23:01:16 2012 +0200
+++ b/gamelib/gui.py	Wed May 09 23:03:45 2012 +0200
@@ -1,7 +1,7 @@
 from pygame import image
 
 from gamelib import data
-from gamelib.gui_base import Drawable, TextButton, font_large
+from gamelib.gui_base import Drawable, TextButton, font_auto
 
 
 class ImageDrawable(Drawable):
@@ -20,7 +20,7 @@
     BG_IMAGE_NORMAL = image.load(data.filepath('images/button_normal.png'))
     BG_IMAGE_DOWN = image.load(data.filepath('images/button_down.png'))
 
-    def __init__(self, pos, text, font=font_large, shadow=True):
+    def __init__(self, pos, text, font=font_auto, shadow=True):
         rect1 = (0, 0, self.WIDTH, self.HEIGHT)
         n = ImageDrawable(rect1, self.BG_IMAGE_NORMAL)
         d = ImageDrawable(rect1, self.BG_IMAGE_DOWN)
--- a/gamelib/gui_base.py	Wed May 09 23:01:16 2012 +0200
+++ b/gamelib/gui_base.py	Wed May 09 23:03:45 2012 +0200
@@ -11,6 +11,7 @@
 font_small = Font(data.filepath('fonts/DejaVuSans.ttf'), 10)
 font_medium = Font(data.filepath('fonts/DejaVuSans.ttf'), 14)
 font_large = Font(data.filepath('fonts/DejaVuSans.ttf'), 18)
+font_auto = None
 
 
 class Drawable(object):
@@ -160,10 +161,19 @@
         super(TextButton, self).__init__(rect, normal_drawable, down_drawable)
         self.surface = Surface((rect[2], rect[3]), SRCALPHA)
         self.text = text
+        if font is font_auto:
+            font = self._auto_font()
         self.font = font
         self.shadow = shadow
         self._draw_text()
 
+    def _auto_font(self):
+        for font in (font_large, font_medium):
+            h, w = font.size(self.text)
+            if w < self.rect.width and h < self.rect.height:
+                return font
+        return font_small
+
     def _draw_text(self):
         self.font.set_bold(True)
         self.text_surface = self.font.render(self.text, True, (0, 0, 0))