annotate gamemodel.py @ 119:2399a8c3da0c

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