Ignore:
Timestamp:
08/28/09 15:05:39 (10 years ago)
Author:
Kaydeth_parpg
Message:

Ticket #72: Patch by Kaydeth. The separate objects file was merged back into the main map file that FIFE parses to load each Map. The Map, Engine, and World classes were all updated to allow game object creation to happen as the map file is loaded. loaders.py and xmlmap.py were copied from the FIFE code base and made local so that we can now customize how we pass the parsed map and object information to FIFE.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/scripts/engine.py

    r253 r264  
    102102            self.loadMap(self.gameState.currentMap)  
    103103 
    104     def loadObjects(self, filename): 
    105         """Load objects from the XML file 
    106            Returns True if it worked, False otherwise. 
    107            @type filename: string 
    108            @param filename: The XML file to read. 
    109            @rtype: boolean 
    110            @return: Status of result (True/False)""" 
    111         try: 
    112             objects_file = open(filename, 'rt') 
    113         except(IOError): 
    114             sys.stderr.write("Error: Can't find objects file\n") 
    115             return False 
    116         # now open and read the XML file 
    117         other_handler = ObjectXMLParser() 
    118         other_handler.getObjects(objects_file) 
    119         objects_file.close() 
    120              
    121         # now add to the map and the engine 
    122         self.createGameObjects(other_handler.local_info) 
    123         return True 
    124  
    125     def createGameObjects(self, objList): 
    126         """Add all found game objects to the world 
    127            @type objList: list 
    128            @param objList: a list of the objects found in the xml file 
    129            @return: None""" 
    130          
     104    def createObject (self, layer, attributes, instance): 
     105        """Create an object and add it to the current map. 
     106            Inputs: 
     107                layer = FIFE layer object exists in 
     108                attributes = dictionary of all object attributes 
     109                instance = FIFE instance corresponding to the object 
     110            Return: 
     111                Nothing 
     112        """ 
    131113        # create the extra data 
    132114        extra = {} 
    133         extra['agent_layer'] = self.view.activeMap.agent_layer 
     115        extra['agent_layer'] = layer 
    134116        extra['engine'] = self 
    135117         
    136         # create the objects 
    137         for info in objList: 
    138             obj = createObject(info, extra) 
    139             if obj.trueAttr("PC"): 
    140                 self.addPC(obj) 
    141             else: 
    142                 self.addObject(obj) 
    143  
    144     def addPC(self,pc): 
    145         """Add the PC to the world 
    146            @type pc: list 
    147            @param pc: List of data for PC attributes 
    148            @return: None""" 
    149         # add to view data     
    150         self.view.activeMap.addObject(pc.X, pc.X, pc.gfx, pc.ID) 
     118        obj = createObject(attributes, extra) 
     119         
     120        if obj.trueAttr("PC"): 
     121            self.addPC( layer, obj, instance) 
     122        else: 
     123            self.addObject( layer, obj, instance) 
     124 
     125         
     126 
     127    def addPC(self, layer, pc, instance): 
     128        """Add the PC to the map 
     129            Inputs: 
     130                layer = FIFE layer object exists in 
     131                pc = PlayerCharacter object 
     132                instance = FIFE instance of PC 
     133            Returns: 
     134                Nothing 
     135        """ 
     136        # add to view data  
     137        self.view.activeMap.addObject(pc.ID, instance)           
    151138         
    152139        # sync with game data 
     
    155142             
    156143        self.gameState.PC.setup() 
    157         self.view.activeMap.addPC(self.gameState.PC.behaviour.agent) 
    158              
    159         # create the PC agent 
    160         self.gameState.PC.start() 
    161  
    162     def addObject(self,obj): 
    163         """Adds an object to the game state. 
    164            @type npcs: list 
    165            @param npcs: List of NPC's to add 
    166            @return: None""" 
     144 
     145 
     146    def addObject(self, layer, obj, instance): 
     147        """Adds an object to the map. 
     148            Inputs: 
     149                layer = FIFE layer object exists in 
     150                obj = corresponding object class 
     151                instance = FIFE instance of object 
     152            Returns: 
     153                Nothing 
     154        """ 
    167155         
    168156        ref = self.gameState.getObjectById(obj.ID)  
     
    178166             
    179167        # add it to the view 
    180         self.view.activeMap.addObject(obj.X, obj.Y, obj.gfx, obj.ID)           
    181          
     168        self.view.activeMap.addObject(obj.ID, instance)           
     169        
    182170        if obj.trueAttr("NPC"): 
    183171            # create the agent 
     
    260248           @param map_file: Name of map file to load 
    261249           @return: None""" 
    262         # then we let FIFE load the rest of the map 
     250        self.gameState.currentMap = map_file 
    263251        self.view.loadMap(map_name, str(map_file)) 
    264252        self.view.setActiveMap(map_name) 
    265         # then we update FIFE with the PC, NPC and object details 
    266         self.reset() 
    267         self.gameState.currentMap = map_file 
    268         self.loadObjects(map_file[:-4] + "_objects.xml") 
     253 
     254        self.reset()         
     255         
     256        # create the PC agent 
     257        self.view.activeMap.addPC(self.gameState.PC.behaviour.agent) 
     258        self.gameState.PC.start() 
    269259 
    270260    def handleMouseClick(self,position): 
Note: See TracChangeset for help on using the changeset viewer.