changeset 505:80c452f348dc

Rearrange progress saving, to happen on room entrance
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 07 Sep 2013 18:38:40 +0200
parents 45df0f5eac53
children 67de3c1da0f1
files nagslang/engine.py nagslang/screens/area.py nagslang/world.py nagslang/yamlish.py
diffstat 4 files changed, 13 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/engine.py	Sat Sep 07 18:29:14 2013 +0200
+++ b/nagslang/engine.py	Sat Sep 07 18:38:40 2013 +0200
@@ -25,7 +25,6 @@
             self._screens[area_name] = AreaScreen
         starting_area = Level.game_starting_point()[0]
 
-        self._world.load()
         if options.point:
             x, y = options.point.split(',')
             point = (int(x), int(y))
--- a/nagslang/screens/area.py	Sat Sep 07 18:29:14 2013 +0200
+++ b/nagslang/screens/area.py	Sat Sep 07 18:38:40 2013 +0200
@@ -85,12 +85,12 @@
         self.keys = ControlKeys()
         self._level = Level(self.name, self.world)
         self._level.load(self.space)
-        self.game_starting_point = Level.game_starting_point()
         self._drawables = Drawables()
         self.add_walls()
         self._add_collision_handlers()
         self.add_protagonist()
         self.add_game_objects()
+        self.save_progress()
         sound.play_music("POL-cyber-factory-short.ogg")
 
     def teardown(self):
@@ -158,8 +158,16 @@
     def add_protagonist(self):
         self.protagonist = self.world.protagonist
         self.protagonist.change_space(self.space)
+        self.world.rooms += 1
         self._drawables.add(self.protagonist)
 
+    def save_progress(self):
+        if self.name == Level.game_starting_point()[0]:
+            return
+        self.world.level = (self.name, (self.protagonist.physicser.position.x,
+                                        self.protagonist.physicser.position.y))
+        self.world.save()
+
     def handle_event(self, ev):
         if ev.type == pygame.locals.KEYDOWN:
             if ev.key == pygame.locals.K_ESCAPE:
@@ -180,9 +188,6 @@
             if ev.destination is not None and ev.destination != self.name:
                 # Go to anther screen
                 self._disable_render = True
-                self.world.rooms += 1
-                self.world.level = (ev.destination, ev.dest_pos)
-                self.world.save()
                 ScreenChange.post(ev.destination)
                 return
             # else we're teleporting within the screen, and just the
--- a/nagslang/world.py	Sat Sep 07 18:29:14 2013 +0200
+++ b/nagslang/world.py	Sat Sep 07 18:38:40 2013 +0200
@@ -15,6 +15,8 @@
 class World(object):
 
     def __init__(self):
+        self.__dict__['protagonist'] = Protagonist(
+            pymunk.Space(), self, Level.game_starting_point()[1])
         self.reset()
 
     def reset(self):
@@ -28,8 +30,7 @@
             'level_state': {},
             'inventory': set(),
         }
-        self.__dict__['protagonist'] = Protagonist(
-            pymunk.Space(), self, self.level[1])
+        self.save()
 
     def __getattr__(self, name):
         try:
--- a/nagslang/yamlish.py	Sat Sep 07 18:29:14 2013 +0200
+++ b/nagslang/yamlish.py	Sat Sep 07 18:38:40 2013 +0200
@@ -47,7 +47,7 @@
             if isinstance(data, type_):
                 f = getattr(self, '_dump_%s' % type_.__name__)
                 return f(data)
-        raise NotImplementedError()
+        raise NotImplementedError('Type: %s' % type(data))
 
     def _dump_list_block(self, data, indent):
         output = []