Ignore:
Timestamp:
07/03/09 21:52:47 (10 years ago)
Author:
bretzel_parpg
Message:

When you press the open button on a crate, it now will move you to the crate and display a dialog with
9 slots to show the contents of the crate. The dialog will interface with the inventory.

File:
1 edited

Legend:

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

    r168 r181  
    1818import fife 
    1919import pychan 
     20from scripts import drag_drop_data as data_drag 
    2021from pychan.tools import callbackWithArguments as cbwa 
    2122 
     
    3334        @return: None 
    3435        """ 
    35         pychan.init(engine, debug=True) 
     36        self.engine = engine 
     37        pychan.init(self.engine, debug=True) 
    3638         
    3739        self.container_gui = pychan.loadXML("gui/container_base.xml") 
    3840        self.container_gui.findChild(name="topWindow").title = title 
    39  
     41     
     42        data_drag.dragging = False 
     43        self.original_cursor_id = self.engine.getCursor().getId() 
     44 
     45        self.empty_images = {"Slot1":"gui/inv_images/inv_backpack.png", 
     46                             "Slot2":"gui/inv_images/inv_backpack.png", 
     47                             "Slot3":"gui/inv_images/inv_backpack.png", 
     48                             "Slot4":"gui/inv_images/inv_backpack.png", 
     49                             "Slot5":"gui/inv_images/inv_backpack.png", 
     50                             "Slot6":"gui/inv_images/inv_backpack.png", 
     51                             "Slot7":"gui/inv_images/inv_backpack.png", 
     52                             "Slot8":"gui/inv_images/inv_backpack.png", 
     53                             "Slot9":"gui/inv_images/inv_backpack.png"} 
     54        self.buttons = {} 
     55        for key in self.empty_images: 
     56            self.buttons[key] = "main_inv" 
     57 
     58        self.locations = ["main_inv"] 
     59 
     60        self.events_to_map = {} 
     61        for button in self.buttons: 
     62            # make every button's callback be self.dragDrop 
     63            self.events_to_map[button] = cbwa(self.dragDrop, button) 
     64            ch = self.container_gui.findChild(name = button) 
     65            # make every slot's item be empty 
     66            ch.item = "" 
     67        self.container_gui.mapEvents(self.events_to_map)    
     68        self.resetMouseCursor() 
    4069     
    4170        if type(data) == list: 
     
    4978            self.setContainerImage("Slot8", data[8]) 
    5079            self.setContainerImage("Slot9", data[9]) 
    51             print "Setting slots to list: " + data 
    5280 
    5381        else: 
     
    6189            self.setContainerImage("Slot8", data) 
    6290            self.setContainerImage("Slot9", data) 
    63             print "Setting slots to string: " + data 
    64              
    65         container_events = {'takeAllButton':self.nullFunc, 
    66                             'closeButton':self.hideContainer} 
    67  
    68         self.container_gui.mapEvents(container_events) 
    69  
    70     def nullFunc(self): 
    71         pass 
     91     
    7292 
    7393    def setContainerImage(self, widget_name, image): 
     
    88108         
    89109    def showContainer(self): 
     110        """ 
     111        Show the container 
     112        @return: None 
     113        """ 
    90114        self.container_gui.show() 
    91115 
    92116    def hideContainer(self): 
     117        """ 
     118        Hide the container 
     119        @return: None 
     120        """ 
    93121        self.container_gui.hide() 
    94122         
     123    def setMouseCursor(self, image, dummy_image, type = "native"):  
     124        """Set the mouse cursor to an image. 
     125           @type image: string 
     126           @param image: The image you want to set the cursor to 
     127           @type dummy_image: string 
     128           @param dummy_image: ??? 
     129           @type type: string 
     130           @param type: ??? 
     131           @return: None""" 
     132        cursor = self.engine.getCursor() 
     133        cursor_type = fife.CURSOR_IMAGE 
     134        img_pool = self.engine.getImagePool() 
     135        if(type == "target"): 
     136            target_cursor_id = img_pool.addResourceFromFile(image)   
     137            dummy_cursor_id = img_pool.addResourceFromFile(dummy_image) 
     138            cursor.set(cursor_type,target_dummy_cursor_id) 
     139            cursor.setDrag(cursor_type,target_cursor_id,-16,-16) 
     140        else: 
     141            cursor_type = fife.CURSOR_IMAGE 
     142            zero_cursor_id = img_pool.addResourceFromFile(image) 
     143            cursor.set(cursor_type,zero_cursor_id) 
     144            cursor.setDrag(cursor_type,zero_cursor_id) 
     145             
     146    def resetMouseCursor(self): 
     147        """Reset cursor to default image. 
     148           @return: None""" 
     149        c = self.engine.getCursor() 
     150        img_pool = self.engine.getImagePool() 
     151        cursor_type = fife.CURSOR_NATIVE 
     152        # this is the path to the default image 
     153        cursor_id = self.original_cursor_id 
     154        c.setDrag(cursor_type, cursor_id) 
     155        c.set(cursor_type, cursor_id) 
     156         
     157    def dragDrop(self, obj): 
     158        """Decide whether to drag or drop the image. 
     159           @type obj: string 
     160           @param obj: The name of the object within  
     161                       the dictionary 'self.buttons' 
     162           @return: None""" 
     163        if(data_drag.dragging == True): 
     164            self.dropObject(obj) 
     165        elif(data_drag.dragging == False): 
     166            self.dragObject(obj) 
     167                 
     168    def dragObject(self, obj): 
     169        """Drag the selected object. 
     170           @type obj: string 
     171           @param obj: The name of the object within 
     172                       the dictionary 'self.buttons' 
     173           @return: None""" 
     174        # get the widget from the container_gui with the name obj 
     175        drag_widget = self.container_gui.findChild(name = obj) 
     176        # get it's type (e.g. main_inv) 
     177        data_drag.dragged_type = self.buttons[obj] 
     178        # get the item that the widget is 'storing' 
     179        data_drag.dragged_item = drag_widget.item 
     180        # get the up and down images of the widget 
     181        up_image = drag_widget._getUpImage() 
     182        down_image = drag_widget._getDownImage() 
     183        # set the mouse cursor to be the widget's image 
     184        self.setMouseCursor(up_image,down_image) 
     185        data_drag.dragged_image = up_image 
     186        data_drag.dragging = True 
     187        # after dragging the 'item', set the widgets' images 
     188        # so that it has it's default 'empty' images 
     189        drag_widget._setUpImage(self.empty_images[obj]) 
     190        drag_widget._setDownImage(self.empty_images[obj]) 
     191        drag_widget._setHoverImage(self.empty_images[obj]) 
     192         
     193    def dropObject(self, obj): 
     194        """Drops the object being dropped 
     195           @type obj: string 
     196           @param obj: The name of the object within 
     197                       the dictionary 'self.buttons'  
     198           @return: None""" 
     199        # find the type of the place that the object 
     200        # is being dropped onto 
     201        data_drag.dropped_type  =  self.buttons[obj] 
     202        # if the dragged obj or the place it is being dropped is 
     203        # in the main container_gui, drop the object 
     204        if((data_drag.dragged_type == 'main_inv') or 
     205           (data_drag.dropped_type == 'main_inv')): 
     206            drag_widget = self.container_gui.findChild(name = obj) 
     207            drag_widget._setUpImage(data_drag.dragged_image) 
     208            drag_widget._setHoverImage(data_drag.dragged_image) 
     209            drag_widget._setDownImage(data_drag.dragged_image) 
     210            drag_widget.item = data_drag.dragged_item 
     211            data_drag.dragging = False 
     212            #reset the mouse cursor to the normal cursor 
     213            self.resetMouseCursor() 
     214            # if the object was dropped onto a ready slot, then 
     215            # update the hud 
     216            if (data_drag.dropped_type == 'ready'): 
     217                self.readyCallback() 
     218         
     219        # if the dragged object's type is the same as the location to 
     220        # to drop it at's, and the dragged object's type is in 
     221        # self.locations, then drop the object 
     222        elif((data_drag.dragged_type == data_drag.dropped_type) and 
     223             (data_drag.dragged_type in self.locations)): 
     224            drag_widget = self.container_gui.findChild(name = obj) 
     225            drag_widget._setUpImage(data_drag.dragged_image) 
     226            drag_widget._setHoverImage(data_drag.dragged_image) 
     227            drag_widget._setDownImage(data_drag.dragged_image) 
     228            drag_widget.item = data_drag.dragged_item 
     229            data_drag.dragging = False 
     230            # reset the mouse cursor 
     231            self.resetMouseCursor() 
     232            # if the object was dropped onto a ready slot, then 
     233            # update the hud 
     234            if(data_drag.dropped_type == 'ready'): 
     235                self.readyCallback() 
     236        # otherwise, we assume that the player is trying to 
     237        # drop an object onto an incompatible slot 
     238        else: 
     239            # reset the mouse cursor 
     240            self.resetMouseCursor() 
     241            data_drag.dragging = False 
Note: See TracChangeset for help on using the changeset viewer.