diff src/parpg/gamemodel.py @ 131:0ffebdca7ba3

Fixed Saving and Loading.
author KarstenBock@gmx.net
date Thu, 29 Sep 2011 18:09:56 +0200
parents 9fcff924eb6f
children e28c13a4802a
line wrap: on
line diff
--- a/src/parpg/gamemodel.py	Wed Sep 28 15:01:04 2011 +0200
+++ b/src/parpg/gamemodel.py	Thu Sep 29 18:09:56 2011 +0200
@@ -144,8 +144,7 @@
         @type object_id: str 
         @param new_map: ID of the new map, or None
         @type object_id: str """
-        game_object = self.game_state.getObjectById(object_id)
-        self.deleteObject(object_id)
+        game_object = self.deleteObject(object_id)
         self.game_state.addObject(object_id, new_map, game_object)
     
     def deleteObject(self, object_id):
@@ -153,7 +152,7 @@
         @param object_id: ID of the object
         @type object_id: str """
         del self.agents["All"][object_id]
-        self.game_state.deleteObject(object_id)
+        return self.game_state.deleteObject(object_id)
         
     def save(self, path, filename):
         """Writes the saver to a file.
@@ -166,39 +165,12 @@
         except(IOError):
             sys.stderr.write("Error: Can't create save game: " + fname + "\n")
             return
+
         save_state = {}
-        save_state["Agents"] = {}
-        for map_name in self.agents:
-            if map_name == self.ALL_AGENTS_KEY:
-                continue
-            agents_dict = {}
-            for agent in self.agents[map_name]:
-                agent_obj = self.game_state.getObjectById(agent, map_name)
-                agent_inst = self.game_state.maps[map_name].\
-                                    agent_layer.getInstance(agent)
-                agent_dict = self.agents[map_name][agent]
-                agent_dict.update(agent_obj.getStateForSaving())
-                agent_dict["Rotation"] = agent_inst.getRotation()
-                agents_dict[agent] = agent_dict
-            save_state["Agents"][map_name] = agents_dict
-        agents_dict = {}
-        for agent in self.agents["All"]:
-            map_name = self.agents["All"][agent]["Map"]
-            agent_dict = self.agents["All"][agent]
-            agent_obj = None
-            if agent == "PlayerCharacter":
-                agent_obj = self.game_state.getObjectById("PlayerCharacter").fifeagent
-            else:
-                agent_obj = self.game_state.getObjectById(agent, map_name)
-            if agent_obj:
-                agent_inst = self.game_state.maps[map_name].\
-                                    agent_layer.getInstance(agent)
-                agent_dict.update(agent_obj.getStateForSaving())
-                agent_dict["Rotation"] = agent_inst.getRotation()
-                agent_dict["MapName"] = map_name
-            agents_dict[agent] = agent_dict
-        save_state["Agents"]["All"] = agents_dict
+        save_state["Agents"] = self.agents
+        save_state["Items"] = self.items
         save_state["GameState"] = self.game_state.getStateForSaving()
+        
         yaml.dump(save_state, save_file)
         
         save_file.close()       
@@ -225,21 +197,9 @@
             for agent_name in maps[map_name]:
                 agent = {agent_name:maps[map_name][agent_name]}
                 self.addAgent(map_name, agent)
-                
-        # Load the current map
-        if self.game_state.current_map_name:
-            self.loadMap(self.game_state.current_map_name)         
-        load_file.close()
-        
-
-        # Recreate all the behaviours. These can't be saved because FIFE
-        # objects cannot be pickled
-        
-        self.placeAgents()
-        self.placePC()
+        self.items = save_state["Items"]               
       
-        # In most maps we'll create the PlayerCharacter Instance internally. 
-        # In these cases we need a target position
+        load_file.close()             
          
     def teleport(self, agent, position):
         """Called when a an agent is moved instantly to a new position.