Mercurial > skaapsteker
view skaapsteker/gamestate.py @ 275:bcdfd2be2eb4
Merged changes, I hope.
author | Adrianna Pińska <adrianna.pinska@gmail.com> |
---|---|
date | Fri, 08 Apr 2011 19:18:48 +0200 |
parents | 129afb4417cf |
children | 4bec05fed6c7 |
line wrap: on
line source
import json from . import data from .sprites.base import find_sprite class StateProxy(object): def __init__(self, data): self.__dict__['_data'] = data # should be a dict def __getattr__(self, key): try: value = self._data[key] except KeyError: raise AttributeError if isinstance(value, dict): return StateProxy(value) else: return value def __setattr__(self, key, value): self._data[key] = value def __iter__(self): return self._data.iterkeys() def __contains__(self, key): return key in self._data def copy(self): return self._data.copy() class GameState(object): def __init__(self, game_file, saved=False): if saved: raw_data = open(game_file, "rb").read() else: raw_data = data.load(game_file).read() self.data = json.loads(raw_data) self.world = StateProxy(self.data) def save(self, save_game_file): json.dumps(self.data, open(save_game_file, "wb")) def create_sprites(self, level): sprites = [] for stype, key in [ ('items', 'items'), ('npcs', 'npcs')]: for sprite_name, sprite_dict in self.data[key].items(): sprite_dict = sprite_dict.copy() sprite_dict['name'] = sprite_name sprite_dict['world'] = self.world if sprite_dict.pop('level') == level: sprites.append(find_sprite(sprite_dict, stype)) return sprites