Changeset 595


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.
Location:
trunk/game
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/pylintrc

    r579 r595  
    5454 
    5555# Disable the message(s) with the given id(s). 
    56 disable-msg=W0704,W0105,W0142,R0901,R0913,W0221,W0613,R0903,R0902,R0201,R0904,R0914,R0912 
     56disable-msg=W0704,W0105,W0142,R0901,R0913,W0221,W0613,R0903,R0902,R0201,R0904,R0914,R0912,W0511 
    5757 
    5858 
  • 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     
  • trunk/game/scripts/gamescenecontroller.py

    r584 r595  
    2424import os 
    2525from objects.action import ChangeMapAction, ExamineAction, OpenBoxAction, \ 
    26                            UnlockBoxAction, LockBoxAction, TalkAction 
     26                           UnlockBoxAction, LockBoxAction, TalkAction, \ 
     27                           PickUpAction 
    2728 
    2829class GameSceneController(ControllerBase): 
     
    261262                # can you pick it up? 
    262263                if obj.trueAttr("carryable"): 
    263                     actions.append(["Pick Up", "Pick Up", self.nullFunc, obj]) 
     264                    actions.append(["Pick Up", "Pick Up",  
     265                                    self.model.game_state.\ 
     266                                        player_character.approach, 
     267                                    [obj.X, obj.Y], 
     268                                    PickUpAction(self, obj)]) 
    264269 
    265270        return actions 
  • trunk/game/scripts/objects/action.py

    r584 r595  
    284284        super(UseAction, self).execute() 
    285285 
     286class PickUpAction(Action): 
     287    """Action for picking up items from a map""" 
     288 
     289    def __init__(self, controller, map_item, commands = None): 
     290        super(PickUpAction, self).__init__(controller, commands) 
     291        self.view = controller.view 
     292        self.map_item = map_item 
     293 
     294    def execute(self): 
     295        real_item = self.model.createContainerObject(self.map_item.item) 
     296        self.model.deleteObject(self.map_item.ID) 
     297        self.model.game_state.player_character.\ 
     298                                inventory.placeItem(real_item) 
     299        super(PickUpAction, self).execute() 
     300         
    286301ACTIONS = {"ChangeMap":ChangeMapAction,  
    287302           "OpenBox":OpenBoxAction,  
     
    292307           "Read":ReadAction, 
    293308           "Talk":TalkAction, 
    294            "Use":UseAction} 
     309           "Use":UseAction, 
     310           "PickUp":PickUpAction} 
Note: See TracChangeset for help on using the changeset viewer.