+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):
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' %
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]))
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 = {}