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

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

Fixed error: ImportError?: No module named application

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