source: trunk/PARPG/scripts/inventory.py @ 76

Revision 74, 8.2 KB checked in by bretzel_parpg, 11 years ago (diff)

Added the first version of the HUD. Also updated the inventory so that when there is a different image then the normal one is dragged around, the imagebutton it was dragged from is restored to it's original "empty" image

Line 
1#!/usr/bin/python
2
3import sys,os
4
5import fife
6import fifelog
7import pychan
8from pychan.tools import callbackWithArguments as cbwa
9
10class Inventory():
11    """Main inventory class"""
12    def __init__(self, engine):
13        pychan.init(engine, debug = True)
14        self.engine = engine
15        self.dragging = False
16        self.dragged_image = None
17        self.dragged_type = None
18        self.dragged_item = None
19        self.dropped_type = None
20        self.original_cursor_id = self.engine.getCursor().getId()
21
22        self.inventory = pychan.loadXML("gui/inventory.xml")
23        events_to_map = {'close_button':self.inventory.hide,
24                         'reset_button':self.resetImages}
25
26        # the images that should be used for the buttons when they are "empty"
27        self.empty_images = {'A1':'gui/inv_images/inv_backpack.png',
28                             'A2':'gui/inv_images/inv_backpack.png',
29                             'A3':'gui/inv_images/inv_backpack.png',
30                             'A4':'gui/inv_images/inv_backpack.png',
31                             'A5':'gui/inv_images/inv_backpack.png',
32                             'B1':'gui/inv_images/inv_backpack.png',
33                             'B2':'gui/inv_images/inv_backpack.png',
34                             'B3':'gui/inv_images/inv_backpack.png',
35                             'B4':'gui/inv_images/inv_backpack.png',
36                             'B5':'gui/inv_images/inv_backpack.png',
37                             'C1':'gui/inv_images/inv_backpack.png',
38                             'C2':'gui/inv_images/inv_backpack.png',
39                             'C3':'gui/inv_images/inv_backpack.png',
40                             'C4':'gui/inv_images/inv_backpack.png',
41                             'C5':'gui/inv_images/inv_backpack.png',
42                             'D1':'gui/inv_images/inv_backpack.png',
43                             'D2':'gui/inv_images/inv_backpack.png',
44                             'D3':'gui/inv_images/inv_backpack.png',
45                             'D4':'gui/inv_images/inv_backpack.png',
46                             'D5':'gui/inv_images/inv_backpack.png',
47                             'Head':'gui/inv_images/inv_head.png',
48                             'LeftHeld':'gui/inv_images/inv_litem.png',
49                             'RightHeld':'gui/inv_images/inv_ritem.png',
50                             'LeftHand':'gui/inv_images/inv_lhand.png',
51                             'RightHand':'gui/inv_images/inv_rhand.png',
52                             'Body':'gui/inv_images/inv_torso.png',
53                             'Belt':'gui/inv_images/inv_belt.png',
54                             'Ready1':'gui/inv_images/inv_belt_pouches.png',
55                             'Ready2':'gui/inv_images/inv_belt_pouches.png',
56                             'Ready3':'gui/inv_images/inv_belt_pouches.png',
57                             'Ready4':'gui/inv_images/inv_belt_pouches.png',
58                             'LeftFoot':'gui/inv_images/inv_lfoot.png',
59                             'RightFoot':'gui/inv_images/inv_rfoot.png'}
60
61        # every button on the inventory and its category
62        self.buttons = {'A1':'main_inv', 'A2':'main_inv', 'A3':'main_inv',
63                        'A4':'main_inv', 'A5':'main_inv', 'B1':'main_inv',
64                        'B2':'main_inv', 'B3':'main_inv', 'B4':'main_inv',
65                        'B5':'main_inv', 'C1':'main_inv', 'C2':'main_inv',
66                        'C3':'main_inv', 'C4':'main_inv', 'C5':'main_inv',
67                        'D1':'main_inv', 'D2':'main_inv', 'D3':'main_inv',
68                        'D4':'main_inv', 'D5':'main_inv',
69                        'LeftFoot':'foot', 'RightFoot':'foot',
70                        'LeftHand':'hand', 'RightHand':'hand',
71                        'Head':'head', 'Ready1':'ready', 
72                        'Ready2':'ready', 'Ready3':'ready', 
73                        'Ready4':'ready', 'Belt':'belt', 'LeftHeld':'held',
74                        'RightHeld':'held', 'Body':'body'}
75        # all possible categories
76        self.locations = ['ready', 'head', 'foot', 'hand',
77                          'belt', 'held', 'body']
78        for button in self.buttons:
79            # make every button's callback be self.dragDrop
80            events_to_map[button] = cbwa(self.dragDrop, button)
81            ch = self.inventory.findChild(name = button)
82            # make every slot's item be empty
83            ch.item = ""
84
85        self.inventory.mapEvents(events_to_map)   
86        self.resetMouseCursor()
87        self.inventory.show()
88
89    def closeInventory(self):
90        """Close the inventory"""
91        self.inventory.hide()
92
93    def showInventory(self):
94        """Show the inventory"""
95        self.inventory.show()
96
97    def resetImages(self):
98        """Reset all images in the program to the way they were when the
99           program was first launched
100           TODO: should be taken out on release (WHY?)"""
101        for image in self.empty_images:
102            child = self.inventory.findChild(name = image)
103            original_image = self.empty_images[image]
104            child._setUpImage(original_image)
105            child._setDownImage(original_image)
106            child._setHoverImage(original_image)
107
108    def setMouseCursor(self, image, dummy_image, type = "native"): 
109        """Set the mouse cursor to an image"""
110        cursor = self.engine.getCursor()
111        cursor_type = fife.CURSOR_IMAGE
112        img_pool = self.engine.getImagePool()
113        if(type == "target"):
114            target_cursor_id = img_pool.addResourceFromFile(image) 
115            dummy_cursor_id = img_pool.addResourceFromFile(dummy_image)
116            cursor.set(cursor_type,target_dummy_cursor_id)
117            cursor.setDrag(cursor_type,target_cursor_id,-16,-16)
118        else:
119            cursor_type = fife.CURSOR_IMAGE
120            zero_cursor_id = img_pool.addResourceFromFile(image)
121            cursor.set(cursor_type,zero_cursor_id)
122            cursor.setDrag(cursor_type,zero_cursor_id)
123           
124    def resetMouseCursor(self):
125        """Reset cursor to default image"""
126        c = self.engine.getCursor()
127        img_pool = self.engine.getImagePool()
128        cursor_type = fife.CURSOR_NATIVE
129        # this is the path to the default image
130        cursor_id = self.original_cursor_id
131        c.setDrag(cursor_type, cursor_id)
132        c.set(cursor_type, cursor_id)
133       
134    # decide whether to drag or drop the image
135    def dragDrop(self, obj):
136        if(self.dragging == True):
137            self.dropObject(obj)
138        elif(self.dragging == False):
139            self.dragObject(obj)
140               
141    # drag the selected object
142    def dragObject(self, obj):
143        drag_widget = self.inventory.findChild(name = obj)
144        self.dragged_type = self.buttons[obj]
145        self.dragged_item = drag_widget.item
146        up_image = drag_widget._getUpImage()
147        down_image = drag_widget._getDownImage()
148        self.setMouseCursor(up_image,down_image)
149        self.dragged_image = up_image
150        self.dragging = True
151
152        drag_widget._setUpImage(self.empty_images[obj])
153        drag_widget._setDownImage(self.empty_images[obj])
154        drag_widget._setHoverImage(self.empty_images[obj])
155       
156    def dropObject(self, obj):
157        """Drops the object being dropped"""
158        self.dropped_type  =  self.buttons[obj]
159        if((self.dragged_type == 'main_inv') or
160           (self.dropped_type == 'main_inv')):
161            drag_widget = self.inventory.findChild(name = obj)
162            drag_widget._setUpImage(self.dragged_image)
163            drag_widget._setHoverImage(self.dragged_image)
164            drag_widget._setDownImage(self.dragged_image)
165            drag_widget.item = self.dragged_item
166            self.dragging = False
167            self.resetMouseCursor()
168        elif((self.dragged_type == self.dropped_type) and
169             (self.dragged_type in self.locations)):
170            drag_widget = self.inventory.findChild(name = obj)
171            drag_widget._setUpImage(self.dragged_image)
172            drag_widget._setHoverImage(self.dragged_image)
173            drag_widget._setDownImage(self.dragged_image)
174            drag_widget.item = self.dragged_item
175            self.dragging = False
176            self.resetMouseCursor()
177        else:
178            self.resetMouseCursor()
179            self.dragging = False
Note: See TracBrowser for help on using the repository browser.