Mercurial > nagslang
view nagslang/world.py @ 341:63d0c70a4e15
Enemies can hurt things again. (Oops.)
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 06 Sep 2013 12:55:48 +0200 |
parents | c2bbb1e70d6f |
children | 11febdb72296 |
line wrap: on
line source
# The world object # # This is a global object for tracking state across scenes and all that import os import sys import pymunk from nagslang.yamlish import dump, load from nagslang.protagonist import Protagonist class World(object): def __init__(self): self.reset() def reset(self): self.attacks = 0 self.transformations = 0 self.kills = 0 self.rooms = 0 self.protagonist = Protagonist(pymunk.Space(), self, (350, 300)) def _save_location(self): app = 'nagslang' if sys.platform.startswith('win'): if 'APPDATA' in os.environ: return os.path.join(os.environ['APPDATA'], app) return os.path.join(os.path.expanduser('~'), '.' + app) elif 'XDG_DATA_HOME' in os.environ: return os.path.join(os.environ['XDG_DATA_HOME'], app) return os.path.join(os.path.expanduser('~'), '.local', 'share', app) def save(self): data = {} for attr in dir(self): if attr.startswith('_'): continue value = getattr(self, attr) if hasattr(value, '__name__'): continue # Hack until we save protagonist state if hasattr(value, 'update'): continue data[attr] = value fn = self._save_location() if not os.path.isdir(os.path.dirname(fn)): os.makedirs(os.path.dirname(fn)) with open(fn, 'w') as f: dump(data, f) def load(self): fn = self._save_location() if not os.path.exists(fn): return False with open(fn) as f: data = load(f) for k, v in data.iteritems(): setattr(self, k, v) return True def get_formatted_stats(self): return "\n".join([ "Times transformed: %d" % self.transformations, "Enemies killed: %d" % self.kills, "Rooms entered: %d" % self.rooms ])