comparison gamemodel.py @ 116:7f7f54c4077b

Fixed dropping items on the map.
author KarstenBock@gmx.net
date Mon, 03 Oct 2011 18:25:31 +0200
parents 81b51b9d861e
children 452bbc3d915d
comparison
equal deleted inserted replaced
115:26e65f27dbd7 116:7f7f54c4077b
49 fife, and would be pointless to replicate, we hold a instance of 49 fife, and would be pointless to replicate, we hold a instance of
50 the fife view here. This also prevents us from just having a 50 the fife view here. This also prevents us from just having a
51 function heavy controller.""" 51 function heavy controller."""
52 ALL_AGENTS_KEY = "All" 52 ALL_AGENTS_KEY = "All"
53 MAX_ID_NUMBER = 1000 53 MAX_ID_NUMBER = 1000
54 GENERIC_ITEM_GFX = "generic_item"
54 55
55 def __init__(self, engine, settings): 56 def __init__(self, engine, settings):
56 """Initialize the instance. 57 """Initialize the instance.
57 @param engine: A fife.Engine object 58 @param engine: A fife.Engine object
58 @type emgome: fife.Engine 59 @type emgome: fife.Engine
144 @type object_id: str 145 @type object_id: str
145 @param new_map: ID of the new map, or None 146 @param new_map: ID of the new map, or None
146 @type object_id: str """ 147 @type object_id: str """
147 game_object = self.deleteObject(object_id) 148 game_object = self.deleteObject(object_id)
148 self.game_state.addObject(object_id, new_map, game_object) 149 self.game_state.addObject(object_id, new_map, game_object)
149 150
150 def deleteObject(self, object_id): 151 def deleteObject(self, object_id):
151 """Removes an object from the game 152 """Removes an object from the game
152 @param object_id: ID of the object 153 @param object_id: ID of the object
153 @type object_id: str """ 154 @type object_id: str """
154 del self.agents["All"][object_id] 155 if self.agents["All"].has_key(object_id):
156 del self.agents["All"][object_id]
157 else:
158 del self.items[object_id]
155 return self.game_state.deleteObject(object_id) 159 return self.game_state.deleteObject(object_id)
156 160
157 def save(self, path, filename): 161 def save(self, path, filename):
158 """Writes the saver to a file. 162 """Writes the saver to a file.
159 @type filename: string 163 @type filename: string
296 self.agents[namespace].update(agent) 300 self.agents[namespace].update(agent)
297 object_model = "" 301 object_model = ""
298 if agent_values["Entity"].has_key("graphics") \ 302 if agent_values["Entity"].has_key("graphics") \
299 and agent_values["Entity"]["graphics"].has_key("gfx"): 303 and agent_values["Entity"]["graphics"].has_key("gfx"):
300 object_model = agent_values["Entity"]["graphics"]["gfx"] 304 object_model = agent_values["Entity"]["graphics"]["gfx"]
305 elif agent_values.has_key("Template"):
306 object_model = self.object_db[agent_values["Template"]]["graphics"]["gfx"]
301 else: 307 else:
302 object_model = self.object_db[agent_values["Template"]]["graphics"]["gfx"] 308 object_model = self.GENERIC_ITEM_GFX
303 import_file = self.agent_import_files[object_model] 309 import_file = self.agent_import_files[object_model]
304 loadImportFile(self.obj_loader, import_file, self.engine) 310 loadImportFile(self.obj_loader, import_file, self.engine)
305 311
306 def readAgentsOfMap(self, map_name): 312 def readAgentsOfMap(self, map_name):
307 """Read the agents of the map 313 """Read the agents of the map
365 return None 371 return None
366 entity_data = deepcopy(agent["Entity"]) 372 entity_data = deepcopy(agent["Entity"])
367 entity_data["fifeagent"] = {} 373 entity_data["fifeagent"] = {}
368 if agent.has_key("Template"): 374 if agent.has_key("Template"):
369 entity_data = self.checkAttributes(entity_data, agent["Template"]) 375 entity_data = self.checkAttributes(entity_data, agent["Template"])
370 object_id = entity_data["graphics"]["gfx"] \ 376 object_id = (entity_data["graphics"]["gfx"]
371 if entity_data["graphics"].has_key("gfx") \ 377 if entity_data.has_key("graphics") and
372 else "generic_item" 378 entity_data["graphics"].has_key("gfx")
379 else self.GENERIC_ITEM_GFX
380 )
373 map_obj = self.fife_model.getObject(str(object_id), "PARPG") 381 map_obj = self.fife_model.getObject(str(object_id), "PARPG")
374 if not map_obj: 382 if not map_obj:
375 logging.warning("Object with inst_id={0}, ns=PARPG, " 383 logging.warning("Object with inst_id={0}, ns=PARPG, "
376 "could not be found. " 384 "could not be found. "
377 "Omitting...".format(str(object_id))) 385 "Omitting...".format(str(object_id)))
472 if (obj.fifeagent and (obj.lockable and not obj.lockable.closed)): 480 if (obj.fifeagent and (obj.lockable and not obj.lockable.closed)):
473 obj.fifeagent.behaviour.animate("opened", repeating=True) 481 obj.fifeagent.behaviour.animate("opened", repeating=True)
474 return obj 482 return obj
475 483
476 def create_item(self, identifier, item_data, world, item_type): 484 def create_item(self, identifier, item_data, world, item_type):
485 if not item_data["description"].has_key("view_name"):
486 item_data["description"]["view_name"] = (
487 item_data["description"]["real_name"])
477 item = createEntity(item_data, identifier, world, None) 488 item = createEntity(item_data, identifier, world, None)
478 item.containable.item_type = item_type 489 item.containable.item_type = item_type
479 self.game_state.addObject(identifier, None, item) 490 self.game_state.addObject(identifier, None, item)
480 return item 491 return item
481 492
488 if agent == "PlayerCharacter": 499 if agent == "PlayerCharacter":
489 continue 500 continue
490 if self.active_map.agent_layer.getInstances(agent): 501 if self.active_map.agent_layer.getInstances(agent):
491 continue 502 continue
492 self.createAgent(agents[agent], agent, world) 503 self.createAgent(agents[agent], agent, world)
504 self.updateObjectDB(world)
493 505
494 def placePC(self, world): 506 def placePC(self, world):
495 """Places the PlayerCharacter on the map""" 507 """Places the PlayerCharacter on the map"""
496 agent = self.agents[self.ALL_AGENTS_KEY]["PlayerCharacter"] 508 agent = self.agents[self.ALL_AGENTS_KEY]["PlayerCharacter"]
497 inst_id = "PlayerCharacter" 509 inst_id = "PlayerCharacter"