view nagslang/world.py @ 252:73d6abf5ba22

Save game state
author Stefano Rivera <stefano@rivera.za.net>
date Wed, 04 Sep 2013 23:53:34 +0200
parents 28d906fc2ab1
children db7c8e74efb4
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

from nagslang.yamlish import dump, load


class World(object):

    def __init__(self):
        self.reset()

    def reset(self):
        self.transformations = 0
        self.kills = 0
        self.rooms = 0

    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
            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
        ])