Mercurial > skaapsteker
view skaapsteker/gamestate.py @ 225:84b6afff51fe
Fix __iter__ for StateProxy.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Thu, 07 Apr 2011 01:34:47 +0200 |
parents | 2b4de243e9f2 |
children | 129afb4417cf |
line wrap: on
line source
import json from skaapsteker import data from skaapsteker.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