Changeset 108


Ignore:
Timestamp:
06/09/09 03:53:33 (10 years ago)
Author:
maximinus_parpg
Message:

Seperated XML logic out from engine.py
Removed redundant code from engine.py

File:
1 edited

Legend:

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

    r104 r108  
    1717 
    1818# there should be NO references to FIFE here! 
    19 from xml.sax import make_parser 
    20 from xml.sax.handler import ContentHandler 
    2119from agents.hero import Hero 
    2220from agents.npc import NPC 
    2321from objects import GameObject 
     22from objLoader import LocalXMLParser 
    2423 
    2524# design note: 
     
    3332# This other file has the name AAA_objects.xml where AAA.xml is the name 
    3433# of the original mapfile. 
    35  
    36 class LocalXMLParser(ContentHandler): 
    37     """Class inherits from ContantHandler, and is used to parse the 
    38        local objects data""" 
    39     def __init__(self): 
    40         self.search = "objects" 
    41         self.pc = None 
    42         self.objects = [] 
    43         self.npcs = [] 
    44      
    45     def startElement(self, name, attrs): 
    46         """Called every time we meet a new element in the XML file""" 
    47         # we are only looking for the 'layer' elements, the rest we ignore 
    48         if(name == "PC"): 
    49             # already have a PC? 
    50             if(self.pc != None): 
    51                 sys.stderr.write("Error: 2 PC characters defined") 
    52                 sys.exit(False) 
    53             # grab the data and store that as well 
    54             try: 
    55                 xpos = attrs.getValue("xpos") 
    56                 ypos = attrs.getValue("ypos") 
    57             except(KeyError): 
    58                 sys.stderr.write("Error: Data missing in PC definition") 
    59                 sys.exit(False) 
    60             # store for later 
    61             self.pc=[xpos,ypos] 
    62         elif(name == "NPC"): 
    63             # let's parse and add the data 
    64             try: 
    65                 xpos=attrs.getValue("xpos") 
    66                 ypos = attrs.getValue("ypos") 
    67                 gfx = attrs.getValue("gfx") 
    68                 ident = attrs.getValue("id") 
    69                 text = attrs.getValue("text") 
    70             except(KeyError): 
    71                 sys.stderr.write("Error: Data missing in NPC definition\n") 
    72                 sys.exit(False) 
    73             # now we have the data, save it for later 
    74             self.npcs.append([xpos, ypos, gfx, ident, text]) 
    75         elif(name == "object"): 
    76             # same old same old 
    77             try: 
    78                 display = attrs.getValue("display") 
    79                 if(display == "True"): 
    80                     xpos = attrs.getValue("xpos") 
    81                     ypos = attrs.getValue("ypos") 
    82                 else: 
    83                     owner = attrs.getValue("owner") 
    84                 gfx = attrs.getValue("gfx") 
    85                 ident = attrs.getValue("id") 
    86                 text = attrs.getValue("text") 
    87             except(KeyError): 
    88                 sys.stderr.write("Error: Data missing in object definition\n") 
    89                 sys.exit(False) 
    90             # now we have the data, save it for later 
    91             if(display == "True"): 
    92                 self.objects.append([True, xpos, ypos, gfx, ident, text]) 
    93             else: 
    94                 self.objects.append([False, gfx, ident, text]) 
    9534 
    9635class Engine: 
     
    11554            return False 
    11655        # now open and read the XML file 
    117         parser = make_parser() 
    11856        cur_handler = LocalXMLParser() 
     57        parser = cur_handler.getParser() 
    11958        parser.setContentHandler(cur_handler) 
    12059        parser.parse(objects_file) 
     
    172111        return False 
    173112 
    174     def getObjectText(self, xpos, ypos): 
    175         """Get the objects id and description of itself""" 
    176         # cycle through all of the objects; do we have something there? 
    177         for i in self.objects: 
    178             if((xpos == i.xpos)and(ypos == i.ypos)): 
    179                 # yes, we have a match, so return the text 
    180                 return i.id, i.text 
    181         for i in self.npcs: 
    182             if((xpos == i.xpos)and(ypos == i.ypos)): 
    183                 # yes, we have a match, so return the text 
    184                 return i.id, i.text 
    185         # nothing, but return the empty string in case we print it 
    186         return "","" 
    187  
    188113    def loadMap(self,map_file): 
    189114        """Load a new map 
Note: See TracChangeset for help on using the changeset viewer.