Mercurial > parpg-source
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 | 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 | 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 | 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 | 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 | 155 if self.agents["All"].has_key(object_id): |
156 del self.agents["All"][object_id] | |
157 else: | |
158 del self.items[object_id] | |
101 | 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 | 172 |
0
7a89ea5404b1
Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff
changeset
|
173 save_state = {} |
101 | 174 save_state["Agents"] = self.agents |
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 | 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 | 204 self.items = save_state["Items"] |
0
7a89ea5404b1
Initial commit of parpg-core.
M. George Hansen <technopolitica@gmail.com>
parents:
diff
changeset
|
205 |
101 | 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 | 302 if agent_values["Entity"].has_key("graphics") \ |
303 and agent_values["Entity"]["graphics"].has_key("gfx"): | |
304 object_model = agent_values["Entity"]["graphics"]["gfx"] | |
116 | 305 elif agent_values.has_key("Template"): |
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 | 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 | 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 | 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 | 372 entity_data = deepcopy(agent["Entity"]) |
92 | 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 | 376 object_id = (entity_data["graphics"]["gfx"] |
377 if entity_data.has_key("graphics") and | |
378 entity_data["graphics"].has_key("gfx") | |
379 else self.GENERIC_ITEM_GFX | |
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 | 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 | 413 if entity_data.has_key("behaviour"): |
414 entity_data["fifeagent"]["behaviour"] = \ | |
415 getattr(behaviours, | |
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 | 485 if not item_data["description"].has_key("view_name"): |
486 item_data["description"]["view_name"] = ( | |
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 | 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 | 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 | 670 def updateObjectDB(self, world): |
671 """Updates the values in the object database with the worlds values""" | |
672 | |
673 for entity in world.entities: | |
674 identifier = entity.general.identifier | |
675 agent_data = {} | |
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 | 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 | 686 entity_data = {} |
687 entity_data["general"] = {"identifier": identifier} | |
688 for name, component in components.components.iteritems(): | |
90 | 689 if getattr(entity, name): |
88 | 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 | 702 if name == "fifeagent": |
703 if entity.fifeagent.layer: | |
704 layer = entity.fifeagent.layer | |
705 inst = layer.getInstance(identifier) | |
706 loc = inst.getLocation().getExactLayerCoordinates() | |
707 agent_data["Position"] = (loc.x, loc.y, loc.z) | |
708 agent_data["Map"] = map_id | |
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 | 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 | 735 agent_data["Entity"] = entity_data |
736 | |
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 |