Mercurial > skaapsteker
view skaapsteker/gamestate.py @ 189:9d08f99b5ddf
Add npcs to gamestate. Update gamestate. Pass world around a bit. Some other stuff.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Wed, 06 Apr 2011 21:14:26 +0200 |
parents | e1dd3b785269 |
children | 897eec397cbb |
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: print self, key 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.keys() 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, needs_world in [ ('items', 'items', False), ('npcs', 'npcs', True)]: for sprite_dict in self.data[key].values(): sprite_dict = sprite_dict.copy() if needs_world: sprite_dict['world'] = self.world if sprite_dict.pop('level') == level: sprites.append(find_sprite(sprite_dict, stype)) return sprites