Changeset 596


Ignore:
Timestamp:
07/24/10 14:09:19 (9 years ago)
Author:
beliar
Message:

Patch by Beliar.

  • Items can now be dropped and picked up again
  • Added generic image for items (Made by Q_x, he did the other items too).
Location:
trunk/game
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/maps/all_agents.yaml

    r594 r596  
    2323    Rotation: 0 
    2424    Inventory: 
    25     - {ID: "Small pocket knife", object_type: "Small pocket knife", slot: "right_hand"} 
    26     - {ID: "Beer", object_type: "Beer"} 
    27     - {ID: "Pamphlet", object_type: "Pamphlet"} 
     25    - {ID: "Small pocket knife", type: "Small pocket knife", slot: "right_hand"} 
     26    - {ID: "Beer", type: "Beer"} 
     27    - {ID: "Pamphlet", type: "Pamphlet"} 
    2828---             
    2929Janie: 
     
    3737    Rotation: 0 
    3838    Inventory: 
    39     - {ID: "Box", object_type: "Box"} 
     39    - {ID: "Box", type: "Box"} 
    4040--- 
    4141Bart The Drunkard: 
     
    5959    Rotation: 0 
    6060    Inventory: 
    61     - {ID: "yeast", object_type: "Yeast"} 
     61    - {ID: "yeast", type: "Yeast"} 
    6262--- 
    6363Matti: 
     
    171171    Rotation: 0 
    172172    Inventory: 
    173         - {ID: bushel_of_grain, object_type: Grain} 
     173        - {ID: bushel_of_grain, type: Grain} 
    174174---             
    175175Sami: 
     
    200200    Position: [-5.0, -11.0] 
    201201    Rotation: 0 
     202--- 
     203Potato: 
     204    ViewName: Wild potato 
     205    ObjectType: "MapItem" 
     206    ItemType: "Wild potato" 
     207    Map: "Farm" 
     208    Position: [-9.0, -3.0] 
     209    Rotation: 0 
     210--- 
     211Wood: 
     212    ViewName: Wood 
     213    ObjectType: "MapItem" 
     214    ItemType: "Wood" 
     215    Map: "Mall" 
     216    Position: [10.0, 8.0] 
     217    Rotation: 0 
  • trunk/game/objects/items/rotten_yam.xml

    r592 r596  
    11<?fife type="object"?> 
    2 <object id="wood" namespace="PARPG" blocking="0" static="0"> 
    3         <image source="wood.png" direction="0" /> 
     2<object id="rotten_yam" namespace="PARPG" blocking="0" static="0"> 
     3        <image source="rotten_yam.png" direction="0" /> 
    44</object> 
  • trunk/game/objects/items/wood.xml

    r592 r596  
    11<?fife type="object"?> 
    2 <object id="rotten_yam" namespace="PARPG" blocking="0" static="0"> 
    3         <image source="rotten_yam.png" direction="0" /> 
     2<object id="wood" namespace="PARPG" blocking="0" static="0"> 
     3        <image source="wood.png" direction="0" /> 
    44</object> 
  • trunk/game/objects/object_database.yaml

    r592 r596  
    6868  name: Grain 
    6969  image: /gui/inv_images/inv_grain.png 
     70  gfx: grain 
    7071  actions: 
    7172    Look: 
     
    8182Wild potato: 
    8283  name: Wild potato 
    83   image: /gui/inv_images/inv_potato.png     
     84  image: /gui/inv_images/inv_potato.png    
     85  gfx: potatoes  
    8486  actions: 
    8587    Look: 
     
    8991  name: Rotten yam 
    9092  image: /gui/inv_images/inv_yam.png 
     93  gfx: rotten_yam 
    9194  actions: 
    9295    Look: 
     
    118121  name: Beer 
    119122  image: /gui/inv_images/inv_beer_full.png 
     123  gfx: bottle 
    120124  actions: 
    121125    Look: 
     
    136140  name: Wood 
    137141  image: /gui/inv_images/inv_wood.png 
     142  gfx: wood 
    138143  actions: 
    139144    Look: 
  • trunk/game/scripts/gamemodel.py

    r595 r596  
    8484        @type attributes: Dictionary 
    8585        @return: The modified attributes"""  
    86         from copy import deepcopy        
    8786        if attributes.has_key("object_type"): 
    8887            class_name = attributes.pop("object_type") 
    8988        else: 
    9089            class_name = attributes["type"] 
     90        if not attributes.has_key("type"): 
     91            attributes["type"] = class_name 
    9192        if self.object_db.has_key(class_name): 
    9293            db_attributes = deepcopy(self.object_db[class_name]) 
     
    336337            object_model =  agent_values["ObjectModel"] 
    337338        elif agent_values["ObjectType"] == "MapItem": 
    338             object_model = self.object_db[agent_values["ItemType"]]["gfx"] 
     339            object_data = self.object_db[agent_values["ItemType"]] 
     340            object_model = object_data["gfx"] if object_data.has_key("gfx") \ 
     341                        else "generic_item" 
    339342        else: 
    340343            object_model = self.object_db[agent_values["ObjectType"]]["gfx"] 
     
    405408        if object_id == None: 
    406409            if object_type == "MapItem": 
    407                 object_id = self.object_db[agent["ItemType"]]["gfx"] 
     410                object_data = self.object_db[agent["ItemType"]] 
     411                object_id = object_data["gfx"] if object_data.has_key("gfx") \ 
     412                            else "generic_item" 
    408413            else: 
    409414                object_id = self.object_db[object_type]["gfx"] 
     
    491496             
    492497        if agent.has_key("ItemType"): 
    493             item_data = {} 
    494             item_data["object_type"] = agent["ItemType"] 
    495             item_data["ID"] = inst_id  
     498            if not agent.has_key("item"): 
     499                item_data = {} 
     500                item_data["type"] = agent["ItemType"] 
     501                item_data["ID"] = inst_id  
     502            else: 
     503                item_data = agent["item"] 
    496504            inst_dict["item"] = item_data 
    497505            inst_dict["item_id"] = agent["ItemType"] 
  • trunk/game/scripts/gui/containergui.py

    r584 r596  
    3434        self.container = container 
    3535        self.events_to_map = {}         
    36         self.resetMouseCursor()             
    37        
     36        self.resetMouseCursor()    
     37        self.buttons = ("Slot1", "Slot2", "Slot3", 
     38                        "Slot4", "Slot5", "Slot6", 
     39                        "Slot7", "Slot8", "Slot9")          
     40     
     41    def updateImages(self): 
     42        for index, button in enumerate(self.buttons): 
     43            widget = self.gui.findChild(name=button) 
     44            widget.item = self.container.getItemAt(index) 
     45            self.updateImage(widget)  
     46                
    3847    def updateImage(self, button): 
    3948        if (button.item == None): 
  • trunk/game/scripts/gui/containergui_base.py

    r588 r596  
    128128                                            self.executeMenuItem, 
    129129                                            ACTIONS[action_name](**param_dict)]) 
     130                param_dict = {}  
     131                param_dict["controller"] = self.controller 
     132                param_dict["commands"] = {} 
     133                param_dict["item"] = item 
     134                param_dict["container_gui"] = self 
     135                menu_actions.append(["Drop", "Drop", 
     136                                            self.executeMenuItem, 
     137                                            ACTIONS["Drop"](**param_dict)]) 
    130138                self.controller.view.hud.showContextMenu(menu_actions, 
    131139                                                 (x_pos,  
     
    139147        """ 
    140148        action.execute() 
     149     
     150    def updateImages(self): 
     151        pass 
  • trunk/game/scripts/gui/inventorygui.py

    r584 r596  
    8888        # self.resetMouseCursor() 
    8989 
     90    def updateImages(self): 
     91        self.updateInventoryButtons() 
     92     
    9093    def updateInventoryButtons (self): 
    9194        for slot in self.slot_buttons: 
  • trunk/game/scripts/objects/action.py

    r595 r596  
    289289    def __init__(self, controller, map_item, commands = None): 
    290290        super(PickUpAction, self).__init__(controller, commands) 
    291         self.view = controller.view 
    292291        self.map_item = map_item 
    293292 
     
    299298        super(PickUpAction, self).execute() 
    300299         
     300class DropItemAction(Action): 
     301    """Action for dropping an items on a map""" 
     302 
     303    def __init__(self, controller, item, container_gui, commands = None): 
     304        super(DropItemAction, self).__init__(controller, commands) 
     305        self.item = item 
     306        self.container_gui = container_gui 
     307 
     308    def execute(self): 
     309        item_data = self.item.getStateForSaving() 
     310        item_data["type"] = self.item.item_type 
     311        map_name = self.model.game_state.current_map_name 
     312        map_item_values = {} 
     313        map_item_values["ViewName"] = self.item.name 
     314        map_item_values["ObjectType"] = "MapItem" 
     315        map_item_values["ItemType"] = self.item.item_type 
     316        map_item_values["Map"] = map_name 
     317        coords = self.model.game_state.player_character.\ 
     318                                        getLocation().getExactLayerCoordinates() 
     319        map_item_values["Position"] = (coords.x - 1.0, coords.y + 1.0) 
     320        map_item_values["Rotation"] = 0 
     321        map_item_values["item"] = item_data 
     322        agent = {} 
     323        agent[self.item.ID] = map_item_values 
     324        self.model.addAgent("All", agent) 
     325        self.model.placeAgents() 
     326        self.item.in_container.takeItem(self.item)         
     327        self.container_gui.updateImages() 
     328        super(DropItemAction, self).execute() 
     329 
    301330ACTIONS = {"ChangeMap":ChangeMapAction,  
    302331           "OpenBox":OpenBoxAction,  
     
    308337           "Talk":TalkAction, 
    309338           "Use":UseAction, 
    310            "PickUp":PickUpAction} 
     339           "PickUp":PickUpAction, 
     340           "Drop":DropItemAction} 
  • trunk/game/scripts/objects/base.py

    r592 r596  
    376376        return sum((item.bulk for item in self.items.values())) 
    377377 
     378    def getItemAt(self, index): 
     379        return self.items[index] 
     380     
    378381    def indexOf(self, ID): 
    379382        """Returns the index of the item with the passed ID""" 
     
    414417                continue 
    415418            return self.items[index] 
    416         return None 
     419        return None     
    417420     
    418421    def serializeItems(self): 
  • trunk/game/scripts/objects/composed.py

    r592 r596  
    6363 
    6464    bulk = property(getBulk, setBulk, "Total bulk of container") 
    65  
     65     
    6666    def __repr__(self): 
    6767        return "[%s" % self.name + str(reduce((lambda a, b: a + ', ' + \ 
     
    8181class CarryableItem (GameObject, Carryable, Usable): 
    8282    """Composite class that will be used for all carryable items""" 
    83     def __init__(self, item_id, **kwargs): 
     83    def __init__(self, item_id, type = "CarryableItem", **kwargs): 
    8484        GameObject.__init__(self, **kwargs) 
    8585        Carryable.__init__(self, **kwargs) 
    8686        Usable.__init__(self, **kwargs) 
    8787        self.item_id = item_id 
     88        self.item_type = type 
    8889 
    8990    def prepareStateForSaving(self, state): 
Note: See TracChangeset for help on using the changeset viewer.