From f36e981a4b9e123bbab8b0ec288e426b8a5f3316 Mon Sep 17 00:00:00 2001 From: Christian Heller Date: Wed, 18 Nov 2020 03:53:56 +0100 Subject: [PATCH] Only save maps that have been modified from default. --- plomrogue/game.py | 33 +++++++++++++++++++++++---------- plomrogue/mapping.py | 1 + 2 files changed, 24 insertions(+), 10 deletions(-) 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): -- 2.30.2