diff nagslang/level.py @ 164:06c681ff53aa

Round-tripping through load/save shouldn't discard objects
author Neil Muller <drnlmuller@gmail.com>
date Tue, 03 Sep 2013 10:47:27 +0200
parents 0c49627920eb
children ce8d4fc3baf4
line wrap: on
line diff
--- a/nagslang/level.py	Tue Sep 03 01:21:24 2013 +0200
+++ b/nagslang/level.py	Tue Sep 03 10:47:27 2013 +0200
@@ -29,12 +29,22 @@
         self._exterior = False
         self._glue = go.PuzzleGlue()
         self._drawables = []
+        self._game_objects = []
 
     def _get_data(self):
         # For overriding in tests.
         with resources.get_file('levels', self.name) as f:
             return load(f)
 
+    def _dump_data(self, f):
+        # For manipulation in tests.
+        dump({
+            'size': [self.x, self.y],
+            'base_tile': self.basetile,
+            'polygons': self.polygons,
+            'game_objects': self._game_objects,
+        }, f)
+
     def load(self, space):
         data = self._get_data()
         self.x, self.y = data['size']
@@ -43,7 +53,8 @@
             self.polygons[i] = []
             for point in points:
                 self.polygons[i].append(tuple(point))
-        for game_object_dict in data.get('game_objects', []):
+        self._game_objects = data.get('game_objects', [])
+        for game_object_dict in self._game_objects:
             self._create_game_object(space, **game_object_dict)
 
     def _create_game_object(self, space, classname, args, name=None):
@@ -83,11 +94,7 @@
         if not closed:
             return False
         with resources.get_file('levels', self.name, mode='w') as f:
-            dump({
-                'size': [self.x, self.y],
-                'base_tile': self.basetile,
-                'polygons': self.polygons,
-            }, f)
+            self._dump_data(f)
         return True
 
     def get_size(self):