Ignore:
Timestamp:
07/01/09 19:56:01 (10 years ago)
Author:
tZee_parpg
Message:

Re-added the gamestate class.
Added the saves folder so the saving of the game wont fail if you try to save in the default directory.

File:
1 edited

Legend:

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

    r168 r177  
    2222from objLoader import LocalXMLParser 
    2323from saver import Saver 
     24from gamestate import GameState 
    2425from gamedata import * 
    25 from gamedata import BaseObjectData 
    2626 
    2727# design note: 
     
    5454        self.PC = None 
    5555        self.mapchange = False 
    56         # below this needs to be pickled 
    57         self.PC_old = None 
    58         self.objects = {} 
    59         self.currentMap = None 
     56        self.gameState = GameState() 
    6057 
    6158    def reset(self): 
     
    7774            f = open(fname, 'w') 
    7875        except(IOError): 
    79             sys.stderr.write("Error: Can't find save game\n") 
     76            sys.stderr.write("Error: Can't find save game: " + fname + "\n") 
    8077            return 
    81         pickle.dump(self.PC_old, f) 
    82         pickle.dump(self.objects, f) 
    83         pickle.dump(self.currentMap, f) 
     78        pickle.dump(self.gameState, f) 
    8479        f.close() 
    8580 
     
    9590            sys.stderr.write("Error: Can't find save game file\n") 
    9691            return 
    97         self.PC_old = pickle.load(f) 
    98         self.objects = pickle.load(f) 
    99         self.currentMap = pickle.load(f) 
     92        self.gameState = pickle.load(f) 
    10093        f.close() 
    101         if self.currentMap: 
    102             self.loadMap(self.currentMap) 
     94        if self.gameState.currentMap: 
     95            self.loadMap(self.gameState.currentMap) 
    10396             
    10497    def updateGameState(self): 
    10598        """Stores the current pc and npcs positons in the game state.""" 
    10699        # save the PC position 
    107         self.PC_old.posx = self.PC.getX() 
    108         self.PC_old.posy = self.PC.getY() 
     100        self.gameState.PC.posx = self.PC.getX() 
     101        self.gameState.PC.posy = self.PC.getY() 
    109102        #save npc positions 
    110103        for i in self.npcs: 
    111             if str(i.id) in self.objects: 
    112                 self.getObjectById(str(i.id)).posx = i.getX() 
    113                 self.getObjectById(str(i.id)).posy = i.getY() 
     104            if str(i.id) in self.gameState.objects: 
     105                self.gameState.getObjectById(str(i.id)).posx = i.getX() 
     106                self.gameState.getObjectById(str(i.id)).posy = i.getY() 
    114107 
    115108    def loadObjects(self, filename): 
     
    148141           @return: None""" 
    149142        # sync with game data 
    150         if self.PC_old: 
     143        if self.gameState.PC: 
    151144            # use existing position 
    152             posx = self.PC_old.posx 
    153             posy = self.PC_old.posy 
     145            posx = self.gameState.PC.posx 
     146            posy = self.gameState.PC.posy 
    154147        else: 
    155148            posx = pc[0] 
    156149            posy = pc[1] 
    157150            # save the new PC to the game data 
    158             self.PC_old = HeroData("PC", posx, posy, "PC", self.currentMap) 
     151            self.gameState.PC = HeroData("PC", posx, posy, "PC", self.gameState.currentMap) 
    159152        # add to game data     
    160153        self.view.addObject(float(posx), float(posy),"PC","PC") 
     
    172165        for i in objects: 
    173166            # already in game data? 
    174             ref = self.getObjectById(i.id) 
     167            ref = self.gameState.getObjectById(i.id) 
    175168            if ref is None: 
    176169                # no, add it to the game state 
    177                 i.map = self.currentMap 
    178                 self.objects[i.id] = i 
     170                i.map_id = self.gameState.currentMap 
     171                self.gameState.objects[i.id] = i 
    179172            else: 
    180173                # yes, use the current game state data 
     
    183176                i.gfx = ref.gfx         
    184177            # is it visible? 
    185             if(i.display == True): 
     178            if i.display: 
    186179                self.view.addObject(i.posx, i.posy, i.gfx, i.id) 
    187180 
     
    193186        for i in npcs: 
    194187            # already in the game data? 
    195             ref = self.getObjectById(i.id)  
     188            ref = self.gameState.getObjectById(i.id)  
    196189            if ref is None: 
    197190                # no, add it to the game state 
    198                 i.map = self.currentMap 
    199                 self.objects[i.id] = i 
     191                i.map_id = self.gameState.currentMap 
     192                self.gameState.objects[i.id] = i 
    200193            else: 
    201194                # yes, use the current game state data 
     
    225218           @rtype: boolean 
    226219           @return: Status of result (True/False)""" 
    227         for i in self.getObjectsFromMap(self.currentMap): 
     220        for i in self.gameState.getObjectsFromMap(self.gameState.currentMap): 
    228221            if i.display and (i.id == ident): 
    229222                # we found a match 
     
    240233        actions=[] 
    241234        # note: ALWAYS check NPC's first! 
    242         for i in self.getObjectsFromMap(self.currentMap): 
     235        for i in self.gameState.getObjectsFromMap(self.gameState.currentMap): 
    243236            if(obj_id == i.id): 
    244237                if isinstance(i, NpcData): 
     
    268261        # TODO: work more on this when we get NPCData and HeroData straightened 
    269262        # out 
    270         for npc in self.npcs: 
     263        for npc in self.gameState.npcs: 
    271264            if str(npcInfo.id) == npc.id: 
    272265                npc.talk() 
     
    283276        # then we update FIFE with the PC, NPC and object details 
    284277        self.reset() 
    285         self.currentMap = map_file 
     278        self.gameState.currentMap = map_file 
    286279        self.loadObjects(map_file[:-4] + "_objects.xml") 
    287280 
     
    303296        self.updateGameState() 
    304297        # set the PC position 
    305         self.PC_old.posx = targetPosition[0] 
    306         self.PC_old.posy = targetPosition[1] 
     298        self.gameState.PC.posx = targetPosition[0] 
     299        self.gameState.PC.posy = targetPosition[1] 
    307300        # set the parameters for the mapchange 
    308301        self.targetMap = map 
     
    310303        self.mapchange = True 
    311304 
    312     def getObjectsFromMap(self, cmap): 
    313         """Gets all objects that are currently on the given map. 
    314            @type cmap: String 
    315            @param cmap: The map name. 
    316            @returns: The list of objects on this map.""" 
    317         return [i for i in self.objects.values() if i.map == cmap] 
    318      
    319     def getObjectById(self, ident): 
    320         """Gets an object by it's id 
    321            @type ident: String 
    322            @param ident: The id of the object. 
    323            @returns: The object or None.""" 
    324         if ident in self.objects: 
    325             return self.objects[ident] 
    326  
    327305    def handleCommands(self): 
    328306        if self.mapchange: 
Note: See TracChangeset for help on using the changeset viewer.