annotate gamestate.py @ 183:7b6aba7839ea

getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary. This WILL break old saves.
author Beliar <KarstenBock@gmx.net>
date Thu, 15 Mar 2012 16:24:05 +0100
parents 0d0422243490
children 9e7f494cc850
rev   line source
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
1 # This file is part of PARPG.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
2
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
3 # PARPG is free software: you can redistribute it and/or modify
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
4 # it under the terms of the GNU General Public License as published by
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
5 # the Free Software Foundation, either version 3 of the License, or
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
6 # (at your option) any later version.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
7
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
8 # PARPG is distributed in the hope that it will be useful,
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
11 # GNU General Public License for more details.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
12
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
13 # You should have received a copy of the GNU General Public License
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
14 # along with PARPG. If not, see <http://www.gnu.org/licenses/>.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
15
174
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
16 import math
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
17
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
18 from parpg.quest_engine import QuestEngine
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
19
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
20 class GameState(object):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
21 """This class holds the current state of the game."""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
22 def __init__(self, quests_dir = None):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
23 self.player_character = None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
24 self.quest_engine = QuestEngine(quests_dir)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
25 self.quest_engine.readQuests()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
26 self.objects = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
27 self.object_ids = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
28 self.current_map_name = None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
29 self.maps = {}
58
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
30 self.npcs_met = set()
160
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
31 self.funcs = {
180
0d0422243490 The getGameEnvironment method of GameState will now return a globals dictionary where __builtins__ is disabled.
Beliar
parents: 174
diff changeset
32 "__builtins__":None,
160
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
33 "meet":self.meet,
174
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
34 "met":self.met,
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
35 "sqrt":math.sqrt,
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
36 "log":math.log,
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
37 }
183
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
38 self.locals = {}
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
39
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
40
73
5c751b9a3d8b The addObject method of the GameState class now accepts an object_id parameter, instead of it getting that value from the object.
KarstenBock@gmx.net
parents: 58
diff changeset
41 def addObject(self, object_id, map_id, game_object):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
42 """Adds an object to the objects and object_ids
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
43 dictionaries.
73
5c751b9a3d8b The addObject method of the GameState class now accepts an object_id parameter, instead of it getting that value from the object.
KarstenBock@gmx.net
parents: 58
diff changeset
44 @param object_id: ID of the object
5c751b9a3d8b The addObject method of the GameState class now accepts an object_id parameter, instead of it getting that value from the object.
KarstenBock@gmx.net
parents: 58
diff changeset
45 @type object_id: str
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
46 @param map_id: ID of the map the object is on.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
47 If the object is in a container this has to be None
73
5c751b9a3d8b The addObject method of the GameState class now accepts an object_id parameter, instead of it getting that value from the object.
KarstenBock@gmx.net
parents: 58
diff changeset
48 @type map_id: str or None
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
49 @param object: object to be added
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
50 @type object: GameObject
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
51 """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
52 if not self.object_ids.has_key(object_id):
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
53 if not self.objects.has_key(map_id):
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
54 self.objects[map_id] = {}
74
c9818290bbe7 Objects that are not on an actual map are now stored under the value None in the gamestates object dictionary.
KarstenBock@gmx.net
parents: 73
diff changeset
55 self.objects[map_id][object_id] = game_object
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
56 self.object_ids[object_id] = map_id
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
57
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
58 def deleteObject(self, object_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
59 """Removes an object from the dictionaries
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
60 @param object_id: ID of the object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
61 @type object_id: str
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
62 @returns The deleted object
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
63 """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
64 if self.hasObject(object_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
65 map_id = self.getMapOfObject(object_id)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
66 if map_id:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
67 inst = self.maps[map_id].agent_layer.getInstance(object_id)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
68 self.maps[map_id].agent_layer.deleteInstance(inst)
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
69 obj = self.objects[map_id][object_id]
74
c9818290bbe7 Objects that are not on an actual map are now stored under the value None in the gamestates object dictionary.
KarstenBock@gmx.net
parents: 73
diff changeset
70 del self.objects[map_id][object_id]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
71 del self.object_ids[object_id]
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
72 return obj
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
73 return None
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
74
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
75
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
76 def getObjectsFromMap(self, map_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
77 """Gets all objects that are currently on the given map.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
78 @type map: String
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
79 @param map: The map name.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
80 @returns: The list of objects on this map. Or an empty list"""
160
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
81 return [i for i in self.getObjectDictOfMap(map_id).values()
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
82 if map_id in self.objects]
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
83
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
84
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
85 def getObjectDictOfMap(self, map_id):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
86 if map_id in self.objects:
160
75c0b728ccf3 Further work on the scripting system.
KarstenBock@gmx.net
parents: 101
diff changeset
87 return self.objects[map_id]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
88 return {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
89
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
90 def deleteObjectsFromMap(self, map_id):
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
91 """Deletes all objects of the given map.
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
92 @type map: String
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
93 @param map: The map name.
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
94 @returns: None"""
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
95 deleted_objs = []
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
96 if map_id in self.objects:
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
97 for obj in self.objects[map_id].copy():
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
98 deleted_objs.append(self.deleteObject(obj))
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
99 return deleted_objs
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 75
diff changeset
100
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
101 def hasObject(self, object_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
102 """Check if an object with the given id is present
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
103 @param object_id: ID of the object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
104 @type object_id: str
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
105 @return: True if there is an object False if not
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
106 """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
107 return self.object_ids.has_key(object_id)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
108
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
109 def getMapOfObject(self, object_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
110 """Returns the map the object is on.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
111 @param object_id: ID of the object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
112 @type object_id: str
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
113 @return: Name of the map the object is on.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
114 If there is no such object or the object is in a container None is returned
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
115 """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
116 if self.object_ids.has_key(object_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
117 return self.object_ids[object_id]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
118 return None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
119
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
120 def getObjectById(self, obj_id, map_id = None):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
121 """Gets an object by its object id and map id
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
122 @type obj_id: String
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
123 @param obj_id: The id of the object.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
124 @type map_id: String
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
125 @param map_id: It id of the map containing the object.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
126 @returns: The object or None."""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
127 if not map_id:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
128 map_id = self.getMapOfObject(obj_id)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
129 if not map_id in self.objects:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
130 self.objects[map_id] = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
131 if obj_id in self.objects[map_id]:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
132 return self.objects[map_id][obj_id]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
133
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
134 def clearObjects(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
135 """Delete all objects from the state
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
136 """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
137 self.objects = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
138 self.object_ids = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
139
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
140 def getStateForSaving(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
141 """Prepares state for saving
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
142 @type state: dictionary
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
143 @param state: State of the object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
144 """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
145 ret_dict = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
146 ret_dict["CurrentMap"] = self.current_map_name
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
147 ret_dict["Quests"] = self.quest_engine.getStateForSaving()
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
148 ret_dict["NPCsMet"] = self.npcs_met
183
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
149 ret_dict["locals"] = self.locals
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
150 return ret_dict
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
151
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
152 def restoreFromState(self, state):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
153 """Restores the state"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
154 self.current_map_name = state["CurrentMap"]
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 88
diff changeset
155 self.npcs_met = state["NPCsMet"]
183
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
156 self.locals = state["locals"]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
157 self.quest_engine.readQuests()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
158 self.quest_engine.restoreFromState(state["Quests"])
58
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
159
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
160 def meet(self, npc):
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
161 """Record that the PC has met a certain NPC
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
162 @type npc: str
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
163 @param npc: The NPC's name or id"""
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
164 if npc in self.npcs_met:
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
165 # we could raise an error here, but should probably be a warn
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
166 # raise RuntimeError("I already know %s" % npc)
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
167 return
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
168 self.npcs_met.add(npc)
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
169
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
170 def met(self, npc):
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
171 """Indicate whether the PC has met this npc before
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
172 @type npc: str
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
173 @param npc: The NPC's name or id
d4f213b99d41 Added meet and met methods from the old player object to the gamestate.
KarstenBock@gmx.net
parents: 44
diff changeset
174 @return: None"""
174
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
175 return npc in self.npcs_met
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
176
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
177 def getGameEnvironment(self):
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
178 """Returns a 2 item list containing the entities and functions that
230d316cc43b Moved the getEnvironment method from the ScriptingSystem to the GameState and renamed it to getGameEnvironment.
Beliar
parents: 160
diff changeset
179 can work with it. This can be used in functions like eval or exec"""
183
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
180 globals = {}
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
181 globals.update(self.funcs)
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
182 globals.update(self.getObjectDictOfMap(self.current_map_name))
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
183
7b6aba7839ea getGameEnvironment of GameState now returns a locals dictionary that is empty at the beginning of the game and will be saved in save games. The vals and funcs are now both in the globals dictionary.
Beliar <KarstenBock@gmx.net>
parents: 180
diff changeset
184 return globals, self.locals