Ignore:
Timestamp:
07/23/10 14:12:29 (9 years ago)
Author:
beliar
Message:

Patch by Beliar.

  • Items lying on the map can now be picked up. (Items can't be dropped on the map yet though)
  • Every Agent is now given a unique ID if the original is already used. This is needed for the items to be correctly removed from the map in savegames. Note: Savegames have NOT become incompatible in this revision.
File:
1 edited

Legend:

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

    r594 r595  
    2727from common.utils import parseBool 
    2828from inventory import Inventory 
     29from copy import deepcopy 
    2930 
    3031try: 
     
    9798        return attributes 
    9899     
     100    def isIDUsed(self, ID): 
     101        if self.game_state.hasObject(ID): 
     102            return True 
     103        for namespace in self.agents: 
     104            if ID in self.agents[namespace]: 
     105                return True 
     106        return False 
     107     
     108    def createUniqueID(self, ID): 
     109        if self.isIDUsed(ID): 
     110            id_number = 1 
     111            while self.isIDUsed(ID + "_" + str(id_number)): 
     112                id_number += 1 
     113                if id_number > self.MAX_ID_NUMBER: 
     114                    raise ValueError( 
     115                        "Number exceeds MAX_ID_NUMBER:" + str(self.MAX_ID_NUMBER)) 
     116             
     117            ID = ID + "_" + str(id_number) 
     118        return ID 
     119 
    99120    def createContainerObject(self, attributes): 
    100121        """Create an object that can be stored in  
     
    114135        if not info.has_key("item_id"): 
    115136            info['item_id'] = ID 
    116         if self.game_state.hasObject(ID): 
    117             id_number = 1 
    118             while self.game_state.hasObject(ID + "_" + str(id_number)): 
    119                 id_number += 1 
    120                 if id_number > self.MAX_ID_NUMBER: 
    121                     raise ValueError("Number exceeds MAX_ID_NUMBER:" +  
    122                                      str(self.MAX_ID_NUMBER)) 
    123             ID = ID + "_" + str(id_number) 
     137        ID = self.createUniqueID(ID) 
    124138        new_item = CarryableItem(ID = ID, **info)  
    125139        self.game_state.addObject(None, new_item) 
     
    146160        @param object_id: ID of the object 
    147161        @type object_id: str """ 
     162        del self.agents["All"][object_id] 
    148163        self.game_state.deleteObject(object_id) 
    149164         
     
    312327            self.agents[namespace] = {} 
    313328             
     329        agent_values = agent.values()[0] 
     330        unique_agent_id = self.createUniqueID(agent.keys()[0]) 
     331        del agent[agent.keys()[0]] 
     332        agent[unique_agent_id] = agent_values 
    314333        self.agents[namespace].update(agent) 
    315334        object_model = "" 
    316         agent_values = agent.values()[0] 
    317335        if agent_values.has_key("ObjectModel"):  
    318336            object_model =  agent_values["ObjectModel"] 
    319337        elif agent_values["ObjectType"] == "MapItem": 
    320             object_model = self.object_db[agent_values["ItemType"]]["gfx"]             
     338            object_model = self.object_db[agent_values["ItemType"]]["gfx"] 
    321339        else: 
    322340            object_model = self.object_db[agent_values["ObjectType"]]["gfx"] 
     
    410428                                                                 z_pos), 
    411429                                       inst_id) 
    412  
    413430        inst.setId(inst_id) 
     431 
    414432        rotation = agent["Rotation"] 
    415433        inst.setRotation(rotation) 
     
    424442             
    425443        inst_dict = {} 
     444        inst_dict["id"] = inst_id 
    426445        inst_dict["type"] = object_type 
    427         inst_dict["id"] = inst_id 
    428446        inst_dict["xpos"] = x_pos 
    429447        inst_dict["ypos"] = y_pos 
     
    473491             
    474492        if agent.has_key("ItemType"): 
    475             inst_dict["item"] = None #TODO: Create item 
     493            item_data = {} 
     494            item_data["object_type"] = agent["ItemType"] 
     495            item_data["ID"] = inst_id  
     496            inst_dict["item"] = item_data 
    476497            inst_dict["item_id"] = agent["ItemType"] 
    477          
     498 
    478499        self.createMapObject(self.active_map.agent_layer, inst_dict, inst) 
    479500     
Note: See TracChangeset for help on using the changeset viewer.