From: Christian Heller <c.heller@plomlompom.de>
Date: Wed, 18 Nov 2020 02:53:56 +0000 (+0100)
Subject: Only save maps that have been modified from default.
X-Git-Url: https://plomlompom.com/repos/%7B%7Bprefix%7D%7D/%7B%7Bdb.prefix%7D%7D/%7B%7B%20web_path%20%7D%7D/static/todo?a=commitdiff_plain;h=f36e981a4b9e123bbab8b0ec288e426b8a5f3316;p=plomrogue2

Only save maps that have been modified from default.
---

diff --git a/plomrogue/game.py b/plomrogue/game.py
index 3a33660..ccd51dc 100755
--- a/plomrogue/game.py
+++ b/plomrogue/game.py
@@ -34,6 +34,19 @@ class GameBase:
 
 
 
+class SaveableMap(Map):
+    modified = False
+
+    def __setitem__(self, *args, **kwargs):
+        super().__setitem__(*args, **kwargs)
+        self.modified = True
+
+    def set_line(self, *args, **kwargs):
+        super().set_line(*args, **kwargs)
+        self.modified = True
+
+
+
 import os
 class Game(GameBase):
 
@@ -219,13 +232,12 @@ class Game(GameBase):
           f.write(msg + '\n')
 
       with open(self.io.save_file, 'w') as f:
-          # TODO: save tasks
           write(f, 'TURN %s' % self.turn)
           map_geometry_shape = self.get_map_geometry_shape()
           write(f, 'MAP %s %s' % (map_geometry_shape, self.map_geometry.size,))
-          for yx in self.maps:
-              for y, line in self.maps[yx].lines():
-                  write(f, 'MAP_LINE %s %5s %s' % (yx, y, quote(line)))
+          for big_yx in [yx for yx in self.maps if self.maps[yx].modified]:
+              for y, line in self.maps[big_yx].lines():
+                  write(f, 'MAP_LINE %s %5s %s' % (big_yx, y, quote(line)))
           for big_yx in self.annotations:
               for little_yx in self.annotations[big_yx]:
                   write(f, 'GOD_ANNOTATE %s %s %s' %
@@ -234,9 +246,10 @@ class Game(GameBase):
               for little_yx in self.portals[big_yx]:
                   write(f, 'GOD_PORTAL %s %s %s' % (big_yx, little_yx,
                                                     quote(self.portals[big_yx][little_yx])))
-          for yx in self.map_controls:
-              for y, line in self.map_controls[yx].lines():
-                  write(f, 'MAP_CONTROL_LINE %s %5s %s' % (yx, y, quote(line)))
+          for big_yx in [yx for yx in self.map_controls
+                         if self.map_controls[yx].modified]:
+              for y, line in self.map_controls[big_yx].lines():
+                  write(f, 'MAP_CONTROL_LINE %s %5s %s' % (big_yx, y, quote(line)))
           for tile_class in self.map_control_passwords:
               write(f, 'MAP_CONTROL_PW %s %s' % (tile_class,
                                                  self.map_control_passwords[tile_class]))
@@ -252,11 +265,11 @@ class Game(GameBase):
         elif type_ == 'control':
             maps = self.map_controls
         if not big_yx in maps:
-            maps[big_yx] = Map(self.map_geometry)
+            maps[big_yx] = SaveableMap(self.map_geometry)
         return maps[big_yx]
 
     def new_world(self, map_geometry):
         self.map_geometry = map_geometry
-        self.maps[YX(0,0)] = Map(self.map_geometry)
-        self.map_controls[YX(0,0)] = Map(self.map_geometry)
+        self.maps[YX(0,0)] = SaveableMap(self.map_geometry)
+        self.map_controls[YX(0,0)] = SaveableMap(self.map_geometry)
         self.annotations = {}
diff --git a/plomrogue/mapping.py b/plomrogue/mapping.py
index 99924bc..09845fa 100644
--- a/plomrogue/mapping.py
+++ b/plomrogue/mapping.py
@@ -206,6 +206,7 @@ class Map():
             yield (y, self.terrain[y * width:(y + 1) * width])
 
 
+
 class SourcedMap(Map):
 
     def __init__(self, source_maps, source_center, radius, get_map):