Ignore:
Timestamp:
09/04/13 21:53:34 (8 years ago)
Author:
Stefano Rivera <stefano@…>
Branch:
default
Phase:
public
Rebase:
36383961343138333732653933646262636662333834643332386632666339643938636561623063
Message:

Save game state

File:
1 edited

Legend:

Unmodified
Added
Removed
  • nagslang/world.py

    r238 r252  
    22#
    33# This is a global object for tracking state across scenes and all that
     4
     5import os
     6import sys
     7
     8from nagslang.yamlish import dump, load
    49
    510
     
    712
    813    def __init__(self):
     14        self.reset()
     15
     16    def reset(self):
    917        self.transformations = 0
    1018        self.kills = 0
    1119        self.rooms = 0
    1220
     21    def _save_location(self):
     22        app = 'nagslang'
     23        if sys.platform.startswith('win'):
     24            if 'APPDATA' in os.environ:
     25                return os.path.join(os.environ['APPDATA'], app)
     26            return os.path.join(os.path.expanduser('~'), '.' + app)
     27        elif 'XDG_DATA_HOME' in os.environ:
     28            return os.path.join(os.environ['XDG_DATA_HOME'], app)
     29        return os.path.join(os.path.expanduser('~'), '.local', 'share', app)
     30
    1331    def save(self):
    14         # TODO: Do this
    15         pass
     32        data = {}
     33        for attr in dir(self):
     34            if attr.startswith('_'):
     35                continue
     36            value = getattr(self, attr)
     37            if hasattr(value, '__name__'):
     38                continue
     39            data[attr] = value
     40
     41        fn = self._save_location()
     42        if not os.path.isdir(os.path.dirname(fn)):
     43            os.makedirs(os.path.dirname(fn))
     44        with open(fn, 'w') as f:
     45            dump(data, f)
    1646
    1747    def load(self):
    18         # TODO: Do this
    19         pass
     48        fn = self._save_location()
     49        if not os.path.exists(fn):
     50            return False
     51        with open(fn) as f:
     52            data = load(f)
     53        for k, v in data.iteritems():
     54            setattr(self, k, v)
     55        return True
    2056
    2157    def get_formatted_stats(self):
     
    2460            "Enemies killed: %d" % self.kills,
    2561            "Rooms entered: %d" % self.rooms
    26             ])
     62        ])
Note: See TracChangeset for help on using the changeset viewer.