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

Revision 63, 6.2 KB checked in by bretzel_parpg, 11 years ago (diff)

Integrated the inventory into the PARPG demo.
Press I to show/hide the inventory.

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