# HG changeset patch # User Rizmari Versfeld # Date 1336597425 -7200 # Node ID 0cdd136223550f32a5b1e2a16cda493980cca85e # Parent 93ba0f1b4e06d0d715d84bfdf040d8928aac4304# Parent f741bedf66708d186363657515b5a7d5a5495353 merge diff -r 93ba0f1b4e06 -r 0cdd13622355 LICENSE.txt --- 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 diff -r 93ba0f1b4e06 -r 0cdd13622355 README.txt --- 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 Team: sypikslang -Members: drlm, jerith, Rizziepit +Members: drlm, jerith, Rizziepit, hodgestar DEPENDENCIES: diff -r 93ba0f1b4e06 -r 0cdd13622355 gamelib/gamegui.py --- 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() diff -r 93ba0f1b4e06 -r 0cdd13622355 gamelib/gamestate.py --- 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__ diff -r 93ba0f1b4e06 -r 0cdd13622355 gamelib/gui.py --- 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) diff -r 93ba0f1b4e06 -r 0cdd13622355 gamelib/gui_base.py --- 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))