Mercurial > nagslang
view nagslang/world.py @ 359:d42752ab3231
Refactor doors and add horrible temporoary image for someone to fix later.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 06 Sep 2013 19:42:01 +0200 |
parents | 282113d86d75 |
children | 8c7c5db5f0d3 |
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.level import Level from nagslang.protagonist import Protagonist from nagslang.yamlish import dump, load class World(object): def __init__(self): self.reset() def reset(self): self.attacks = 0 self.transformations = 0 self.kills = 0 self.rooms = 0 first_level = Level.list_levels()[0] starting_position = (350, 300) self.protagonist = Protagonist(pymunk.Space(), self, starting_position) self.level = (first_level, starting_position) self.level_state = {} 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') and not isinstance(value, dict): 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 ])