annotate gamemodel.py @ 154:4dc7951c3bfc

Moved code from CharacterCreationController to GameModel
author KarstenBock@gmx.net
date Sat, 05 Nov 2011 14:53:12 +0100
parents 80672955ab70
children f017f8cac2c2
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
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
16 # there should be NO references to FIFE here!
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
17 import sys
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
18 import os.path
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
19 import logging
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
20 from copy import deepcopy
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
21
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
22 from fife import fife
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
23 from fife.extensions.serializers.xmlobject import XMLObjectLoader
65
e856b604b650 Changed "import bGrease" to "import parpg.bGrease".
KarstenBock@gmx.net
parents: 61
diff changeset
24 from parpg.bGrease.geometry import Vec2d
154
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
25 from serializers import XmlSerializer
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
26
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
27 from parpg import vfs
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
28 from gamestate import GameState
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
29 from gamemap import GameMap
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
30 from common.utils import locateFiles
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
31 from common.utils import parseBool
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
32 from parpg.dialogueparsers import YamlDialogueParser, DialogueFormatError
39
3011bc71ab20 Added funcionality to load Entities from file
KarstenBock@gmx.net
parents: 2
diff changeset
33 from parpg.entities import createEntity
3011bc71ab20 Added funcionality to load Entities from file
KarstenBock@gmx.net
parents: 2
diff changeset
34 from parpg import behaviours
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
35 from parpg import components
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
36 from parpg.components import fifeagent, container, equip
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
37
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
38 try:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
39 import xml.etree.cElementTree as ElementTree
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
40 except ImportError:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
41 import xml.etree.ElementTree as ElementTree
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
42
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
43 import yaml
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
44
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
45 logger = logging.getLogger('gamemodel')
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
46
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
47 class GameModel(object):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
48 """GameModel holds the logic for the game.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
49 Since some data (object position and so forth) is held in the
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
50 fife, and would be pointless to replicate, we hold a instance of
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
51 the fife view here. This also prevents us from just having a
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
52 function heavy controller."""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
53 ALL_AGENTS_KEY = "All"
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
54 MAX_ID_NUMBER = 1000
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
55 GENERIC_ITEM_GFX = "generic_item"
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
56
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
57 def __init__(self, engine, settings):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
58 """Initialize the instance.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
59 @param engine: A fife.Engine object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
60 @type emgome: fife.Engine
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
61 @param setting: The applications settigns
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
62 @type setting: parpg.settings.Settings object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
63 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
64 self.settings = settings
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
65
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
66 self.map_change = False
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
67 self.load_saver = False
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
68 self.savegame = None
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
69 quests_directory = settings.parpg.QuestsPath
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
70 self.game_state = GameState(quests_dir=quests_directory)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
71 #self.game_state.quest_engine =
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
72 #self.game_state.quest_engine.readQuests()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
73 self.pc_run = 1
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
74 self.target_position = None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
75 self.target_map_name = None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
76 self.object_db = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
77 self.active_map = None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
78 self.map_files = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
79 self.agents = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
80 self.agents[self.ALL_AGENTS_KEY] = {}
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
81 self.items = {}
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
82 self.engine = engine
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
83 self.fife_model = engine.getModel()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
84
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
85 # set values from settings
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
86 maps_directory = settings.parpg.MapsPath
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
87 self.game_state.maps_file = '/'.join([maps_directory,
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
88 settings.parpg.MapsFile])
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
89 self.all_agents_file = '/'.join([maps_directory,
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
90 settings.parpg.AllAgentsFile])
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
91 objects_directory = self.settings.parpg.ObjectsPath
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
92 self.objects_directory = objects_directory
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
93 self.object_db_file = '/'.join([objects_directory,
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
94 settings.parpg.ObjectDatabaseFile])
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
95 self.dialogue_directory = settings.parpg.DialoguesPath
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
96 self.dialogues = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
97 self.agent_import_files = {}
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
98 self.obj_loader = XMLObjectLoader(self.engine)
154
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
99 # FIXME M. George Hansen 2011-06-06: character stats scripts aren't
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
100 # finished, unfortunately.
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
101 #primary_stats_file = \
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
102 # vfs.VFS.open('character_scripts/primary_stats.xml')
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
103 #self.primary_stats = XmlSerializer.deserialize(primary_stats_file)
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
104 #secondary_stats_file = \
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
105 # vfs.VFS.open('character_scripts/secondary_stats.xml')
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
106 #self.secondary_stats = XmlSerializer.deserialize(secondary_stats_file)
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
107 self.primary_stats = []
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
108 self.secondary_stats = []
4dc7951c3bfc Moved code from CharacterCreationController to GameModel
KarstenBock@gmx.net
parents: 150
diff changeset
109
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
110 def checkAttributes(self, attributes, template):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
111 """Checks for attributes that where not given in the map file
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
112 and fills them with values from the object database
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
113 @param attributes: attributes to check
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
114 @type attributes: Dictionary
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
115 @param template: Template from which the values will be used
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
116 @return: The modified attributes"""
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
117 if self.object_db.has_key(template):
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
118 db_attributes = deepcopy(self.object_db[template])
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
119 for key in db_attributes.keys():
83
43e7a8d94446 Fixed bug in checkAttributes that caused that values where not correctly set from the Template.
KarstenBock@gmx.net
parents: 78
diff changeset
120 if attributes.has_key(key):
43e7a8d94446 Fixed bug in checkAttributes that caused that values where not correctly set from the Template.
KarstenBock@gmx.net
parents: 78
diff changeset
121 tmp_attributes = db_attributes[key]
43e7a8d94446 Fixed bug in checkAttributes that caused that values where not correctly set from the Template.
KarstenBock@gmx.net
parents: 78
diff changeset
122 tmp_attributes.update(attributes[key])
43e7a8d94446 Fixed bug in checkAttributes that caused that values where not correctly set from the Template.
KarstenBock@gmx.net
parents: 78
diff changeset
123 attributes[key] = tmp_attributes
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
124 else:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
125 attributes[key] = db_attributes[key]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
126 return attributes
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
127
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
128 def isIDUsed(self, ID):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
129 if self.game_state.hasObject(ID):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
130 return True
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
131 for namespace in self.agents:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
132 if ID in self.agents[namespace]:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
133 return True
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
134 return False
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
135
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
136 def createUniqueID(self, ID):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
137 if self.isIDUsed(ID):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
138 id_number = 1
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
139 while self.isIDUsed(ID + "_" + str(id_number)):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
140 id_number += 1
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
141 if id_number > self.MAX_ID_NUMBER:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
142 raise ValueError(
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
143 "Number exceeds MAX_ID_NUMBER:" +
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
144 str(self.MAX_ID_NUMBER)
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
145 )
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
146
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
147 ID = ID + "_" + str(id_number)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
148 return ID
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
149
84
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
150 def moveObject(self, object_id, new_map):
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
151 """Moves the object to a new map, or in a container
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
152 @param object_id: ID of the object
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
153 @type object_id: str
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
154 @param new_map: ID of the new map, or None
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
155 @type object_id: str """
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
156 game_object = self.deleteObject(object_id)
84
bb9e2f2548c6 Added moveObject method to the GameModel class.
KarstenBock@gmx.net
parents: 83
diff changeset
157 self.game_state.addObject(object_id, new_map, game_object)
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
158
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
159 def deleteObject(self, object_id):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
160 """Removes an object from the game
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
161 @param object_id: ID of the object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
162 @type object_id: str """
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
163 if self.agents["All"].has_key(object_id):
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
164 del self.agents["All"][object_id]
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
165 else:
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
166 del self.items[object_id]
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
167 return self.game_state.deleteObject(object_id)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
168
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
169 def save(self, path, filename):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
170 """Writes the saver to a file.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
171 @type filename: string
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
172 @param filename: the name of the file to write to
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
173 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
174 fname = '/'.join([path, filename])
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
175 try:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
176 save_file = open(fname, 'w')
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
177 except(IOError):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
178 sys.stderr.write("Error: Can't create save game: " + fname + "\n")
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
179 return
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
180
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
181 save_state = {}
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
182 save_state["Agents"] = self.agents
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
183 save_state["Items"] = self.items
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
184 save_state["GameState"] = self.game_state.getStateForSaving()
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
185
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
186 yaml.dump(save_state, save_file)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
187
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
188 save_file.close()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
189
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
190 def load(self, path, filename):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
191 """Loads a saver from a file.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
192 @type filename: string
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
193 @param filename: the name of the file (including path) to load from
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
194 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
195 fname = '/'.join([path, filename])
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
196
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
197 try:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
198 load_file = open(fname, 'r')
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
199 except(IOError):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
200 sys.stderr.write("Error: Can't find save game file\n")
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
201 return
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
202 self.deleteMaps()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
203 self.clearAgents()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
204
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
205 save_state = yaml.load(load_file)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
206 self.game_state.restoreFromState(save_state["GameState"])
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
207 maps = save_state["Agents"]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
208 for map_name in maps:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
209 for agent_name in maps[map_name]:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
210 agent = {agent_name:maps[map_name][agent_name]}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
211 self.addAgent(map_name, agent)
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
212 self.items = save_state["Items"]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
213
101
824f3068ef2a Fixed Saving and Loading.
KarstenBock@gmx.net
parents: 100
diff changeset
214 load_file.close()
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
215
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
216 def teleport(self, agent, position):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
217 """Called when a an agent is moved instantly to a new position.
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
218 The setting of position may wan to be created as its own method down
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
219 the road.
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
220 @type position: String Tuple
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
221 @param position: X,Y coordinates passed from engine.changeMap
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
222 @return: fife.Location"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
223 logging.debug(position)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
224 coord = fife.DoublePoint3D(float(position[0]), float(position[1]), 0)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
225 location = fife.Location(self.active_map.agent_layer)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
226 location.setMapCoordinates(coord)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
227 agent.teleport(location)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
228
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
229 def getObjectAtCoords(self, coords):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
230 """Get the object which is at the given coords
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
231 @type coords: fife.Screenpoint
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
232 @param coords: Coordinates where to check for an object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
233 @rtype: fife.Object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
234 @return: An object or None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
235 instances = self.active_map.cameras[
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
236 self.active_map.my_cam_id].\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
237 getMatchingInstances(coords, self.active_map.agent_layer)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
238 # no object returns an empty tuple
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
239 if(instances != ()):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
240 front_y = 0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
241
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
242
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
243 for obj in instances:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
244 # check to see if this in our list at all
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
245 if(self.objectActive(obj.getId())):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
246 # check if the object is on the foreground
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
247 obj_map_coords = \
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
248 obj.getLocation().getMapCoordinates()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
249 obj_screen_coords = self.active_map.\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
250 cameras[self.active_map.my_cam_id]\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
251 .toScreenCoordinates(obj_map_coords)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
252
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
253 if obj_screen_coords.y > front_y:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
254 #Object on the foreground
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
255 front_y = obj_screen_coords.y
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
256 return obj
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
257 else:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
258 return None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
259 else:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
260 return None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
261
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
262 def getCoords(self, click):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
263 """Get the map location x, y coordinates from the screen coordinates
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
264 @type click: fife.ScreenPoint
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
265 @param click: Screen coordinates
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
266 @rtype: fife.Location
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
267 @return: The map coordinates"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
268 coord = self.active_map.cameras[self.active_map.my_cam_id].\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
269 toMapCoordinates(click, False)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
270 coord.z = 0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
271 location = fife.Location(self.active_map.agent_layer)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
272 location.setMapCoordinates(coord)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
273 return location
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
274
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
275 def pause(self, paused):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
276 """ Pause/Unpause the game
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
277 @return: nothing"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
278 if self.active_map:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
279 self.active_map.pause(paused)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
280
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
281 def togglePause(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
282 """ Toggle paused state.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
283 @return: nothing"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
284 self.active_map.togglePause()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
285
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
286 def isPaused(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
287 """Returns wheter the game is paused or not"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
288 return self.active_map.isPaused()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
289
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
290 def readMapFiles(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
291 """Read all a available map-files and store them"""
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
292 maps_file = vfs.VFS.open(self.game_state.maps_file)
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
293 self.map_files = yaml.load(maps_file)["Maps"]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
294
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
295 def addAgent(self, namespace, agent):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
296 """Adds an agent to the agents dictionary
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
297 @param namespace: the namespace where the agent is to be added to
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
298 @type namespace: str
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
299 @param agent: The agent to be added
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
300 @type agent: dict """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
301 from fife.extensions.serializers.xml_loader_tools import loadImportFile
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
302 if not self.agents.has_key(namespace):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
303 self.agents[namespace] = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
304
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
305 agent_values = agent.values()[0]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
306 unique_agent_id = self.createUniqueID(agent.keys()[0])
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
307 del agent[agent.keys()[0]]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
308 agent[unique_agent_id] = agent_values
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
309 self.agents[namespace].update(agent)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
310 object_model = ""
92
84b5808d995c Added Graphics component.
KarstenBock@gmx.net
parents: 90
diff changeset
311 if agent_values["Entity"].has_key("graphics") \
84b5808d995c Added Graphics component.
KarstenBock@gmx.net
parents: 90
diff changeset
312 and agent_values["Entity"]["graphics"].has_key("gfx"):
84b5808d995c Added Graphics component.
KarstenBock@gmx.net
parents: 90
diff changeset
313 object_model = agent_values["Entity"]["graphics"]["gfx"]
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
314 elif agent_values.has_key("Template"):
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
315 template = self.object_db[agent_values["Template"]]
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
316 object_model = template["graphics"]["gfx"]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
317 else:
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
318 object_model = self.GENERIC_ITEM_GFX
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
319 import_file = self.agent_import_files[object_model]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
320 loadImportFile(self.obj_loader, import_file, self.engine)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
321
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
322 def readAgentsOfMap(self, map_name):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
323 """Read the agents of the map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
324 @param map_name: Name of the map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
325 @type map_name: str """
107
100a39fa64a2 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 106
diff changeset
326 #Get the agents of the map
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
327 map_agents_file = self.map_files[map_name].\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
328 replace(".xml", "_agents.yaml")
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
329 agents_data = vfs.VFS.open(map_agents_file)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
330 agents = yaml.load_all(agents_data)
107
100a39fa64a2 Added ExamineContentsAction.
KarstenBock@gmx.net
parents: 106
diff changeset
331 self.agents[map_name] = {}
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
332 for agent in agents:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
333 if not agent == None:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
334 self.addAgent(map_name, agent)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
335
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
336 def readAllAgents(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
337 """Read the agents of the all_agents_file and store them"""
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
338 agents_file = vfs.VFS.open(self.all_agents_file)
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
339 agents = yaml.load_all(agents_file)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
340 for agent in agents:
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
341 if agent is not None:
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
342 self.addAgent(self.ALL_AGENTS_KEY, agent)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
343
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
344 def getAgentsOfMap(self, map_name):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
345 """Returns the agents that are on the given map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
346 @param map_name: Name of the map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
347 @type map_name: str
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
348 @return: A dictionary with the agents of the map"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
349 if not self.agents.has_key(map_name):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
350 return {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
351 ret_dict = self.agents[map_name].copy()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
352 for agent_name, agent_value in self.agents[self.ALL_AGENTS_KEY]\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
353 .iteritems():
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
354 if agent_value["Map"] == map_name:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
355 ret_dict[agent_name] = agent_value
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
356 return ret_dict
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
357
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
358 def getAgentsOfActiveMap(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
359 """Returns the agents that are on active map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
360 @return: A dictionary with the agents of the map """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
361 return self.getAgentsOfMap(self.active_map.map.getId())
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
362
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
363 def clearAgents(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
364 """Resets the agents dictionary"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
365 self.agents = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
366 self.agents[self.ALL_AGENTS_KEY] = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
367
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
368 def loadMap(self, map_name):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
369 """Load a new map.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
370 @type map_name: string
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
371 @param map_name: Name of the map to load
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
372 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
373 if not map_name in self.game_state.maps:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
374 map_file = self.map_files[map_name]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
375 new_map = GameMap(self.engine, self)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
376 self.game_state.maps[map_name] = new_map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
377 new_map.load(map_file)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
378
39
3011bc71ab20 Added funcionality to load Entities from file
KarstenBock@gmx.net
parents: 2
diff changeset
379 def createAgent(self, agent, inst_id, world):
99
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
380 if self.game_state.hasObject(inst_id):
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
381 return None
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
382 entity_data = deepcopy(agent["Entity"])
92
84b5808d995c Added Graphics component.
KarstenBock@gmx.net
parents: 90
diff changeset
383 entity_data["fifeagent"] = {}
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
384 template = None
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
385 if agent.has_key("Template"):
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
386 template = agent["Template"]
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
387 entity_data = self.checkAttributes(entity_data, template)
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
388 object_id = (entity_data["graphics"]["gfx"]
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
389 if entity_data.has_key("graphics") and
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
390 entity_data["graphics"].has_key("gfx")
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
391 else self.GENERIC_ITEM_GFX
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
392 )
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
393 map_obj = self.fife_model.getObject(str(object_id), "PARPG")
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
394 if not map_obj:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
395 logging.warning("Object with inst_id={0}, ns=PARPG, "
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
396 "could not be found. "
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
397 "Omitting...".format(str(object_id)))
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
398
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
399 x_pos = agent["Position"][0]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
400 y_pos = agent["Position"][1]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
401 z_pos = agent["Position"][2] if len(agent["Position"]) == 3 \
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
402 else 0.0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
403 stack_pos = agent["Stackposition"] if \
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
404 agent.has_key("StackPosition") \
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
405 else None
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
406 inst = self.active_map.agent_layer.\
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
407 createInstance(map_obj,
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
408 fife.ExactModelCoordinate(x_pos,
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
409 y_pos,
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
410 z_pos),
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
411 inst_id)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
412 inst.setId(inst_id)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
413
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
414 rotation = agent["Rotation"]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
415 inst.setRotation(rotation)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
416
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
417 fife.InstanceVisual.create(inst)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
418 if (stack_pos):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
419 inst.get2dGfxVisual().setStackPosition(int(stack_pos))
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
420
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
421 if (map_obj.getAction('default')):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
422 target = fife.Location(self.active_map.agent_layer)
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
423 inst.act('default', target, True)
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
424
90
4a8a0cd7f79a Added Behaviour component.
KarstenBock@gmx.net
parents: 89
diff changeset
425 if entity_data.has_key("behaviour"):
4a8a0cd7f79a Added Behaviour component.
KarstenBock@gmx.net
parents: 89
diff changeset
426 entity_data["fifeagent"]["behaviour"] = \
4a8a0cd7f79a Added Behaviour component.
KarstenBock@gmx.net
parents: 89
diff changeset
427 getattr(behaviours,
4a8a0cd7f79a Added Behaviour component.
KarstenBock@gmx.net
parents: 89
diff changeset
428 entity_data["behaviour"]["behaviour_type"])()
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
429 else:
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
430 entity_data["fifeagent"]["behaviour"] = behaviours.Base()
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
431 if self.dialogues.has_key(inst_id):
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
432 entity_data["dialogue"] = {}
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
433 entity_data["dialogue"]["dialogue"] = self.dialogues[inst_id]
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
434 if (entity_data.has_key("containable") and not
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
435 entity_data["containable"].has_key("item_type")
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
436 ):
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
437 entity_data["containable"]["item_type"] = template
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
438
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
439
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
440 obj = self.createMapObject(self.active_map.agent_layer,
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
441 entity_data, inst_id, world)
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
442
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
443 if agent.has_key("Inventory"):
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
444 inv = agent["Inventory"]
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
445 self.createInventoryItems(inv, obj, world)
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
446
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
447 if agent.has_key("Equipment"):
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
448 for slot, data in agent["Equipment"].iteritems():
99
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
449 item = None
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
450 if data.has_key("type"):
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
451 item_type = data["type"]
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
452 item_data = {}
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
453 item_data = self.checkAttributes(item_data, item_type)
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
454 if (item_data.has_key("containable") and
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
455 item_data.has_key("equipable")):
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
456 item = self.createItem(
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
457 self.createUniqueID(data["ID"]),
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
458 item_data, world, item_type)
99
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
459 else:
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
460 raise Exception(
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
461 "Item %s is not containable or equipable." %
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
462 item_type
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
463 )
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
464 else:
99
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
465 identifier = data["ID"]
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
466 if self.game_state.hasObject(identifier):
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
467 item = self.game_state.getObjectById(identifier)
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
468 else:
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
469 item_data = self.items[identifier]["Entity"]
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
470 item_type = item_data["containable"]["item_type"]
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
471 item = self.createItem(identifier, item_data,
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
472 world, item_type)
99
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
473 equip.equip(obj.equip, item.equipable, slot)
105
dc573ac08355 Fixed graphical representation of lockables, that are open, when creating the agent.
KarstenBock@gmx.net
parents: 101
diff changeset
474 if (obj.fifeagent and (obj.lockable and not obj.lockable.closed)):
dc573ac08355 Fixed graphical representation of lockables, that are open, when creating the agent.
KarstenBock@gmx.net
parents: 101
diff changeset
475 obj.fifeagent.behaviour.animate("opened", repeating=True)
99
6e4daff93e7d If Items in containers or being equipped have no type the game will now try to get the object using the ID.
KarstenBock@gmx.net
parents: 98
diff changeset
476 return obj
78
a57ec730e753 Fixed item_type not being set when creating items.
KarstenBock@gmx.net
parents: 76
diff changeset
477
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
478 def createInventoryItems(self, inv, obj, world):
131
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
479 slots = inv["Slots"]
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
480 obj.container.children = list()
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
481 for x in xrange(slots):
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
482 obj.container.children.append(None)
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
483 items = inv["Items"] if inv.has_key("Items") else list()
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
484 for data in items:
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
485 item = None
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
486 slot = data["Slot"] if data.has_key("Slot") else -1
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
487 if data.has_key("type"):
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
488 item_type = data["type"]
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
489 item = self.createItemByType(item_type, data["ID"], world)
131
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
490 else:
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
491 identifier = data["ID"]
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
492 item = self.createItemByID(world, identifier)
131
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
493
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
494 container.put_item(obj.container, item.containable, slot)
d1c2d316cc25 Fixed contents of containers, that are contained in other containers, not correctly restoring.
KarstenBock@gmx.net
parents: 127
diff changeset
495
132
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
496 def createItemByID(self, world, identifier):
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
497 if self.game_state.hasObject(identifier):
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
498 item = self.game_state.getObjectById(identifier)
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
499 else:
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
500 agent_data = self.items[identifier]
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
501 item_data = agent_data["Entity"]
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
502 item_type = item_data["containable"]["item_type"]
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
503 item = self.createItem(identifier, item_data,
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
504 world, item_type)
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
505 if item.container and agent_data.has_key("Inventory"):
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
506 self.createInventoryItems(agent_data["Inventory"],
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
507 item, world)
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
508 return item
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
509
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
510 def createItemByType(self, item_type, identifier, world):
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
511 item_data = {}
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
512 item_data = self.checkAttributes(item_data, item_type)
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
513 if item_data.has_key("containable"):
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
514 return self.createItem( self.createUniqueID(identifier),
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
515 item_data, world, item_type)
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
516 else:
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
517 raise Exception("Item %s is not containable." % item_type)
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
518
e2ccd64f3a86 Split code off from createInventoryItems to createItemByID and createItemByType.
KarstenBock@gmx.net
parents: 131
diff changeset
519 def createItem(self, identifier, item_data, world, item_type):
116
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
520 if not item_data["description"].has_key("view_name"):
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
521 item_data["description"]["view_name"] = (
7f7f54c4077b Fixed dropping items on the map.
KarstenBock@gmx.net
parents: 108
diff changeset
522 item_data["description"]["real_name"])
86
a9cc5559ec2a Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 84
diff changeset
523 item = createEntity(item_data, identifier, world, None)
78
a57ec730e753 Fixed item_type not being set when creating items.
KarstenBock@gmx.net
parents: 76
diff changeset
524 item.containable.item_type = item_type
86
a9cc5559ec2a Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 84
diff changeset
525 self.game_state.addObject(identifier, None, item)
137
53faff63037f createItem now calls UpdateObjectDB after it created the item.
KarstenBock@gmx.net
parents: 132
diff changeset
526 self.updateObjectDB(world)
78
a57ec730e753 Fixed item_type not being set when creating items.
KarstenBock@gmx.net
parents: 76
diff changeset
527 return item
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
528
39
3011bc71ab20 Added funcionality to load Entities from file
KarstenBock@gmx.net
parents: 2
diff changeset
529 def placeAgents(self, world):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
530 """Places the current maps agents """
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
531 if not self.active_map:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
532 return
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
533 agents = self.getAgentsOfMap(self.game_state.current_map_name)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
534 for agent in agents:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
535 if agent == "PlayerCharacter":
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
536 continue
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
537 if self.active_map.agent_layer.getInstances(agent):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
538 continue
39
3011bc71ab20 Added funcionality to load Entities from file
KarstenBock@gmx.net
parents: 2
diff changeset
539 self.createAgent(agents[agent], agent, world)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
540
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
541 def placePC(self, world):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
542 """Places the PlayerCharacter on the map"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
543 agent = self.agents[self.ALL_AGENTS_KEY]["PlayerCharacter"]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
544 inst_id = "PlayerCharacter"
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
545 self.createAgent(agent, inst_id, world)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
546
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
547 # create the PlayerCharacter agent
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
548 self.active_map.addPC()
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
549 #self.game_state.getObjectById("PlayerCharacter").fifeagent.start()
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
550 if agent.has_key("PeopleKnown"):
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
551 player = self.game_state.getObjectById("PlayerCharacter")
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
552 player.fifeagent.people_i_know = agent["PeopleKnown"]
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
553
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
554 def changeMap(self, map_name, target_position = None):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
555 """Registers for a map change on the next pump().
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
556 @type map_name: String
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
557 @param map_name: Id of the map to teleport to
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
558 @type map_file: String
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
559 @param map_file: Filename of the map to teleport to
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
560 @type target_position: Tuple
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
561 @param target_position: Position of PlayerCharacter on target map.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
562 @return None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
563 # set the parameters for the map change if moving to a new map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
564 if map_name != self.game_state.current_map_name:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
565 self.target_map_name = map_name
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
566 self.target_position = target_position
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
567 # issue the map change
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
568 self.map_change = True
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
569
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
570 def deleteMaps(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
571 """Clear all currently loaded maps from FIFE as well as clear our
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
572 local map cache
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
573 @return: nothing"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
574 self.engine.getModel().deleteMaps()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
575 self.engine.getModel().deleteObjects()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
576 self.game_state.clearObjects()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
577 self.game_state.maps = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
578
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
579 def setActiveMap(self, map_name):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
580 """Sets the active map that is to be rendered.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
581 @type map_name: String
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
582 @param map_name: The name of the map to load
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
583 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
584 # Turn off the camera on the old map before we turn on the camera
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
585 # on the new map.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
586 self.active_map.cameras[self.active_map.my_cam_id].setEnabled(False)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
587 # Make the new map active.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
588 self.active_map = self.game_state.maps[map_name]
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
589 self.active_map.makeActive()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
590 self.game_state.current_map_name = map_name
108
81b51b9d861e Fixed bug where the objects of a map where not correctly restored when changing between maps.
KarstenBock@gmx.net
parents: 107
diff changeset
591 if not self.agents.has_key(map_name):
81b51b9d861e Fixed bug where the objects of a map where not correctly restored when changing between maps.
KarstenBock@gmx.net
parents: 107
diff changeset
592 self.readAgentsOfMap(map_name)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
593
86
a9cc5559ec2a Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 84
diff changeset
594 def createMapObject (self, layer, attributes, inst_id, world):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
595 """Create an object and add it to the current map.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
596 @type layer: fife.Layer
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
597 @param layer: FIFE layer object exists in
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
598 @type attributes: Dictionary
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
599 @param attributes: Dictionary of all object attributes
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
600 @type instance: fife.Instance
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
601 @param instance: FIFE instance corresponding to the object
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
602 @return: The created object"""
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
603 # create the extra data
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
604 extra = {}
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
605 if layer is not None:
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
606 extra['fifeagent'] = {}
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
607 extra['fifeagent']['layer'] = layer
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
608
86
a9cc5559ec2a Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 84
diff changeset
609 obj = createEntity(attributes, inst_id, world, extra)
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
610 if obj:
75
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
611 self.addObject(layer, obj)
9e03f7816061 (Re)added setting of inventory and equipment in the object files.
KarstenBock@gmx.net
parents: 65
diff changeset
612 return obj
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
613
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
614 def addPC(self, layer, player_char):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
615 """Add the PlayerCharacter to the map
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
616 @type layer: fife.Layer
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
617 @param layer: FIFE layer object exists in
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
618 @type player_char: PlayerCharacter
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
619 @param player_char: PlayerCharacter object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
620 @type instance: fife.Instance
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
621 @param instance: FIFE instance of PlayerCharacter
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
622 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
623 # For now we copy the PlayerCharacter,
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
624 # in the future we will need to copy
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
625 # PlayerCharacter specifics between the different PlayerCharacter's
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
626 player = self.game_state.getObjectById("PlayerCharacter")
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
627 player.fifeagent = player_char
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
628 player.fifeagent.setup()
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
629 player.fifeagent.behaviour.speed = self.settings.parpg.PCSpeed
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
630
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
631
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
632 def addObject(self, layer, obj):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
633 """Adds an object to the map.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
634 @type layer: fife.Layer
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
635 @param layer: FIFE layer object exists in
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
636 @type obj: GameObject
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
637 @param obj: corresponding object class
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
638 @type instance: fife.Instance
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
639 @param instance: FIFE instance of object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
640 @return: None"""
86
a9cc5559ec2a Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 84
diff changeset
641 ref = self.game_state.getObjectById(obj.general.identifier,
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
642 self.game_state.current_map_name)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
643 if ref is None:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
644 # no, add it to the game state
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
645 self.game_state.addObject(obj.general.identifier,
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
646 self.game_state.current_map_name, obj)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
647 else:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
648 # yes, use the current game state data
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
649 obj.fifeagent.pos.X = ref.X
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
650 obj.fifeagent.pos.Y = ref.Y
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
651 obj.fifeagent.gfx = ref.gfx
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
652
61
2727d6b78978 Implemented creation of dynamic entities.
KarstenBock@gmx.net
parents: 57
diff changeset
653 if obj.fifeagent.behaviour:
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
654 obj.fifeagent.behaviour.parent = obj
46
bf506f739322 Removed layer as attribute of BaseBehaviour and added it as a parameter to the attachToLayer method.
KarstenBock@gmx.net
parents: 44
diff changeset
655 fifeagent.setup_behaviour(obj.fifeagent)
bf506f739322 Removed layer as attribute of BaseBehaviour and added it as a parameter to the attachToLayer method.
KarstenBock@gmx.net
parents: 44
diff changeset
656 obj.fifeagent.behaviour.speed = self.settings.parpg.PCSpeed
bf506f739322 Removed layer as attribute of BaseBehaviour and added it as a parameter to the attachToLayer method.
KarstenBock@gmx.net
parents: 44
diff changeset
657 #Start the behaviour
bf506f739322 Removed layer as attribute of BaseBehaviour and added it as a parameter to the attachToLayer method.
KarstenBock@gmx.net
parents: 44
diff changeset
658 obj.fifeagent.behaviour.idle()
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
659 # create the agent
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
660 #obj.setup()
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
661 #obj.behaviour.speed = self.settings.parpg.PCSpeed
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
662 # create the PlayerCharacter agent
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
663 #obj.start()
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
664 #if obj.trueAttr("AnimatedContainer"):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
665 # create the agent
44
98f26f7636d8 Changes to make PARPG "runable" with grease. (With the correct modified assets)
KarstenBock@gmx.net
parents: 41
diff changeset
666 #obj.setup()
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
667
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
668 def objectActive(self, ident):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
669 """Given the objects ID, pass back the object if it is active,
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
670 False if it doesn't exist or not displayed
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
671 @type ident: string
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
672 @param ident: ID of object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
673 @rtype: boolean
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
674 @return: Status of result (True/False)"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
675 for game_object in \
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
676 self.game_state.getObjectsFromMap(self.game_state.current_map_name):
86
a9cc5559ec2a Move the identifier field from the FifeAgent component to the new General component.
KarstenBock@gmx.net
parents: 84
diff changeset
677 if (game_object.general.identifier == ident):
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
678 # we found a match
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
679 return game_object
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
680 # no match
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
681 return False
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
682
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
683 def movePlayer(self, position):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
684 """Code called when the player should move to another location
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
685 @type position: fife.ScreenPoint
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
686 @param position: Screen position to move to
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
687 @return: None"""
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
688 player = self.game_state.getObjectById("PlayerCharacter")
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
689 if(self.pc_run == 1):
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
690 player.fifeagent.behaviour.run(position)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
691 else:
150
80672955ab70 PARPG now works with, and needs Fife 0.3.3.
KarstenBock@gmx.net
parents: 137
diff changeset
692 player.fifeagent.behaviour.walk(position)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
693
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
694 def teleportAgent(self, agent, position):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
695 """Code called when an agent should teleport to another location
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
696 @type position: fife.ScreenPoint
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
697 @param position: Screen position to teleport to
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
698 @return: None"""
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
699 agent.teleport(position)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
700 self.agents[agent.ID]["Position"] = position
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
701
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
702 def readObjectDB(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
703 """Reads the Object Information Database from a file. """
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
704 database_file = vfs.VFS.open(self.object_db_file)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
705 database = yaml.load_all(database_file)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
706 for object_info in database:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
707 self.object_db.update(object_info)
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
708
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
709 def updateObjectDB(self, world):
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
710 """Updates the values in the object database with the worlds values"""
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
711
127
18623b5c2b45 Fixed that dropped items cannot be picked up.
KarstenBock@gmx.net
parents: 125
diff changeset
712 all_agents = self.agents[self.ALL_AGENTS_KEY]
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
713 for entity in world.entities:
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
714 identifier = entity.general.identifier
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
715 agent_data = {}
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
716 map_id = self.game_state.getMapOfObject(identifier)
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
717 if map_id:
127
18623b5c2b45 Fixed that dropped items cannot be picked up.
KarstenBock@gmx.net
parents: 125
diff changeset
718 if all_agents.has_key(identifier):
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
719 agent_data = self.agents[self.ALL_AGENTS_KEY][identifier]
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
720 else:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
721 agent_data = self.agents[map_id][identifier]
127
18623b5c2b45 Fixed that dropped items cannot be picked up.
KarstenBock@gmx.net
parents: 125
diff changeset
722
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
723 else:
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
724 if not self.items.has_key(identifier):
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
725 self.items[identifier] = {}
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
726 agent_data = self.items[identifier]
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
727 entity_data = {}
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
728 entity_data["general"] = {"identifier": identifier}
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
729 for name, component in components.components.iteritems():
90
4a8a0cd7f79a Added Behaviour component.
KarstenBock@gmx.net
parents: 89
diff changeset
730 if getattr(entity, name):
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
731 comp_data = {}
98
c0db5f521695 updateObjectDB of GameModel now uses saveable_fields.
KarstenBock@gmx.net
parents: 92
diff changeset
732 comp_vals = getattr(entity, name)
c0db5f521695 updateObjectDB of GameModel now uses saveable_fields.
KarstenBock@gmx.net
parents: 92
diff changeset
733 #Items that are in containers will be saved with them.
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
734 for field in component.saveable_fields:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
735 try:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
736 comp_data[field] = getattr(comp_vals, field)
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
737 except AttributeError:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
738 #The entity doesn't have this specific value,
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
739 #ignore it
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
740 pass
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
741 if comp_data:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
742 entity_data[name] = comp_data
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
743 if name == "fifeagent":
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
744 if entity.fifeagent.layer:
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
745 layer = entity.fifeagent.layer
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
746 inst = layer.getInstance(identifier)
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
747 loc = inst.getLocation().getExactLayerCoordinates()
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
748 agent_data["Position"] = (loc.x, loc.y, loc.z)
127
18623b5c2b45 Fixed that dropped items cannot be picked up.
KarstenBock@gmx.net
parents: 125
diff changeset
749 if all_agents.has_key(identifier):
18623b5c2b45 Fixed that dropped items cannot be picked up.
KarstenBock@gmx.net
parents: 125
diff changeset
750 agent_data["Map"] = map_id
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
751 agent_data["Rotation"] = inst.getRotation()
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
752 elif name == "container" and hasattr(comp_vals,
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
753 "children"):
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
754 inventory_data = {}
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
755 inventory_data["Slots"] = len(comp_vals.children)
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
756 items = []
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
757 for child in comp_vals.children:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
758 if not child:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
759 continue
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
760 items.append(
106
edadf3ff8a9a Added optional Slot value to the "Items" list in the agents file.
KarstenBock@gmx.net
parents: 105
diff changeset
761 {"ID": child.entity.general.identifier,
edadf3ff8a9a Added optional Slot value to the "Items" list in the agents file.
KarstenBock@gmx.net
parents: 105
diff changeset
762 "Slot": child.slot}
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
763 )
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
764 inventory_data["Items"] = items
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
765 agent_data["Inventory"] = inventory_data
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
766 elif name == "equip":
100
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
767 equip_data = {}
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
768 for field in component.fields:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
769 if(hasattr(comp_vals, field)):
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
770 equipable = getattr(comp_vals, field)
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
771 if equipable:
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
772 equip_data[field] = {
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
773 "ID":
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
774 equipable.entity.general.identifier
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
775 }
485d866a847f updateObjectDB now saves equipment and inventory too.
KarstenBock@gmx.net
parents: 99
diff changeset
776 agent_data["Equipment"] = equip_data
88
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
777 agent_data["Entity"] = entity_data
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
778
0411a4bcceee Fixed moving between maps.
KarstenBock@gmx.net
parents: 86
diff changeset
779
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
780 def getAgentImportFiles(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
781 """Searches the agents directory for import files """
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
782 filepaths = locateFiles("*.xml", self.objects_directory)
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
783 for filepath in filepaths:
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
784 try:
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
785 xml_file = vfs.VFS.open(filepath)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
786 root = ElementTree.parse(xml_file).getroot()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
787 if root.tag == "object":
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
788 self.agent_import_files[root.attrib["id"]] = filepath
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
789 except SyntaxError as error:
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
790 logging.error("Error parsing file {0}: {1}".format(filepath,
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
791 error))
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
792
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
793 def getDialogues(self):
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
794 """Searches the dialogue directory for dialogues """
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
795 files = locateFiles("*.yaml", self.dialogue_directory)
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
796 dialogue_parser = YamlDialogueParser()
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
797 for dialogue_filepath in files:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
798 # Note Technomage 2010-11-13: the new DialogueEngine uses its own
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
799 # parser now, YamlDialogueParser.
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
800 # dialogues = yaml.load_all(file(dialogue_file, "r"))
2
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
801 dialogue_file = vfs.VFS.open(dialogue_filepath)
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
802 try:
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
803 dialogue = dialogue_parser.load(dialogue_file)
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
804 except DialogueFormatError as error:
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
805 logging.error('unable to load dialogue file {0}: {1}'
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
806 .format(dialogue_filepath, error))
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
807 else:
06145a6ee387 Fixed resource path dependencies issue that caused PARPG to crash on start.
M. George Hansen <technopolitica@gmail.com>
parents: 0
diff changeset
808 self.dialogues[dialogue.npc_name] = dialogue
0
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
809 # Note Technomage 2010-11-13: the below code is used to load
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
810 # multiple dialogues from a single file. Is this functionality
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
811 # used/necessary?
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
812 # for dialogue in dialogues:
7a89ea5404b1 Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff changeset
813 # self.dialogues[dialogue["NPC"]] = dialogue