comparison src/parpg/gamemodel.py @ 64:32faacaf6f28

Added funcionality to load Entities from file
author KarstenBock@gmx.net
date Mon, 05 Sep 2011 14:47:21 +0200
parents d60f1dab8469
children 96af64cf3b81
comparison
equal deleted inserted replaced
63:b15cf999216a 64:32faacaf6f28
19 import logging 19 import logging
20 from copy import deepcopy 20 from copy import deepcopy
21 21
22 from fife import fife 22 from fife import fife
23 from fife.extensions.serializers.xmlobject import XMLObjectLoader 23 from fife.extensions.serializers.xmlobject import XMLObjectLoader
24 from parpg.grease.geometry import Vec2d
24 25
25 from parpg import vfs 26 from parpg import vfs
26 from gamestate import GameState 27 from gamestate import GameState
27 from objects import createObject
28 from objects.composed import CarryableItem, CarryableContainer
29 from gamemap import GameMap 28 from gamemap import GameMap
30 from common.utils import locateFiles 29 from common.utils import locateFiles
31 from common.utils import parseBool 30 from common.utils import parseBool
32 from inventory import Inventory
33 from parpg.dialogueparsers import YamlDialogueParser, DialogueFormatError 31 from parpg.dialogueparsers import YamlDialogueParser, DialogueFormatError
32 from parpg.entities import createEntity
33 from parpg import behaviours
34 34
35 try: 35 try:
36 import xml.etree.cElementTree as ElementTree 36 import xml.etree.cElementTree as ElementTree
37 except ImportError: 37 except ImportError:
38 import xml.etree.ElementTree as ElementTree 38 import xml.etree.ElementTree as ElementTree
450 map_file = self.map_files[map_name] 450 map_file = self.map_files[map_name]
451 new_map = GameMap(self.engine, self) 451 new_map = GameMap(self.engine, self)
452 self.game_state.maps[map_name] = new_map 452 self.game_state.maps[map_name] = new_map
453 new_map.load(map_file) 453 new_map.load(map_file)
454 454
455 def createAgent(self, agent, inst_id): 455 def createAgent(self, agent, inst_id, world):
456 object_type = agent["ObjectType"] 456 object_type = agent["ObjectType"]
457 object_id = agent["ObjectModel"] \ 457 object_id = agent["ObjectModel"] \
458 if agent.has_key("ObjectModel") \ 458 if agent.has_key("ObjectModel") \
459 else None 459 else None
460 if object_id == None: 460 if object_id == None:
496 if (map_obj.getAction('default')): 496 if (map_obj.getAction('default')):
497 target = fife.Location(self.active_map.agent_layer) 497 target = fife.Location(self.active_map.agent_layer)
498 inst.act('default', target, True) 498 inst.act('default', target, True)
499 499
500 inst_dict = {} 500 inst_dict = {}
501 inst_dict["id"] = inst_id 501 inst_dict["identifier"] = inst_id
502 inst_dict["world"]= world
502 inst_dict["type"] = object_type 503 inst_dict["type"] = object_type
503 inst_dict["xpos"] = x_pos 504 inst_dict["pos"] = Vec2d(x_pos, y_pos)
504 inst_dict["ypos"] = y_pos
505 inst_dict["gfx"] = object_id 505 inst_dict["gfx"] = object_id
506 inst_dict["is_open"] = parseBool(agent["Open"]) \ 506 if agent.has_key("Open"):
507 if agent.has_key("Open") \ 507 inst_dict["is_open"] = parseBool(agent["Open"])
508 else False 508 if agent.has_key("Locked"):
509 inst_dict["locked"] = parseBool(agent["Locked"]) \ 509 inst_dict["locked"] = parseBool(agent["Locked"])
510 if agent.has_key("Locked") \ 510 if agent.has_key("ViewName"):
511 else False 511 inst_dict["view_name"] = agent["ViewName"]
512 inst_dict["name"] = agent["ViewName"] 512 inst_dict["real_name"] = agent["RealName"] \
513 inst_dict["real_name"] = agent["RealName"] \ 513 if agent.has_key("RealName") else agent["ViewName"]
514 if agent.has_key("RealName") \ 514 if agent.has_key("Text"):
515 else agent["ViewName"] 515 inst_dict["desc"] = agent["Text"]
516 inst_dict["text"] = agent["Text"] \
517 if agent.has_key("Text") \
518 else None
519 if self.dialogues.has_key(inst_id): 516 if self.dialogues.has_key(inst_id):
520 inst_dict["dialogue"] = self.dialogues[inst_id] 517 inst_dict["dialogue"] = self.dialogues[inst_id]
521 inst_dict["target_map_name"] = agent["TargetMap"] \ 518 if agent.has_key("TargetMap"):
522 if agent.\ 519 inst_dict["target_map_name"] = agent["TargetMap"]
523 has_key("TargetMap") \ 520 if agent.has_key("TargetPosition"):
524 else None 521 inst_dict["target_x"] = agent["TargetPosition"][0]
525 inst_dict["target_x"] = agent["TargetPosition"][0] \ 522 inst_dict["target_y"] = agent["TargetPosition"][1]
526 if agent.\
527 has_key("TargetPosition") \
528 else None
529 inst_dict["target_y"] = agent["TargetPosition"][1] \
530 if agent.\
531 has_key("TargetPosition") \
532 else None
533 if agent.has_key("Inventory"): 523 if agent.has_key("Inventory"):
534 inventory = Inventory() 524 inventory = Inventory()
535 inventory_objs = agent["Inventory"] 525 inventory_objs = agent["Inventory"]
536 for inventory_obj in inventory_objs: 526 for inventory_obj in inventory_objs:
537 self.createInventoryObject(inventory, 527 self.createInventoryObject(inventory,
552 item_data = self.createContainerObject(item_data) 542 item_data = self.createContainerObject(item_data)
553 else: 543 else:
554 item_data = agent["item"] 544 item_data = agent["item"]
555 inst_dict["item"] = item_data 545 inst_dict["item"] = item_data
556 inst_dict["item_type"] = agent["ItemType"] 546 inst_dict["item_type"] = agent["ItemType"]
547 if agent.has_key("Behaviour"):
548 inst_dict["behaviour"] = getattr(behaviours, agent["Behaviour"])()
549 #TODO: Add real statistics and bulk
550 if object_type == "Character":
551 inst_dict["statistics"] = {}
552 inst_dict["max_bulk"] = 100
557 553
558 self.createMapObject(self.active_map.agent_layer, inst_dict) 554 self.createMapObject(self.active_map.agent_layer, inst_dict)
559 555
560 def placeAgents(self): 556 def placeAgents(self, world):
561 """Places the current maps agents """ 557 """Places the current maps agents """
562 if not self.active_map: 558 if not self.active_map:
563 return 559 return
564 agents = self.getAgentsOfMap(self.game_state.current_map_name) 560 agents = self.getAgentsOfMap(self.game_state.current_map_name)
565 for agent in agents: 561 for agent in agents:
566 if agent == "PlayerCharacter": 562 if agent == "PlayerCharacter":
567 continue 563 continue
568 if self.active_map.agent_layer.getInstances(agent): 564 if self.active_map.agent_layer.getInstances(agent):
569 continue 565 continue
570 self.createAgent(agents[agent], agent) 566 self.createAgent(agents[agent], agent, world)
571 567
572 def placePC(self): 568 def placePC(self):
573 """Places the PlayerCharacter on the map""" 569 """Places the PlayerCharacter on the map"""
574 agent = self.agents[self.ALL_AGENTS_KEY]["PlayerCharacter"] 570 agent = self.agents[self.ALL_AGENTS_KEY]["PlayerCharacter"]
575 inst_id = "PlayerCharacter" 571 inst_id = "PlayerCharacter"
629 @param instance: FIFE instance corresponding to the object 625 @param instance: FIFE instance corresponding to the object
630 @return: None""" 626 @return: None"""
631 # create the extra data 627 # create the extra data
632 extra = {} 628 extra = {}
633 if layer is not None: 629 if layer is not None:
634 extra['agent_layer'] = layer 630 extra['layer'] = layer
635 attributes = self.checkAttributes(attributes) 631 attributes = self.checkAttributes(attributes)
636 632
637 obj = createObject(attributes, extra) 633 obj = createEntity(attributes, extra)
638 634
639 if obj.trueAttr("PC"): 635 if obj.trueAttr("PC"):
640 self.addPC(layer, obj) 636 self.addPC(layer, obj)
641 else: 637 else:
642 self.addObject(layer, obj) 638 self.addObject(layer, obj)