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

Revision 80, 7.6 KB checked in by bretzel_parpg, 11 years ago (diff)

Added lots of stuff:

-> Changed some code in the HUD so it will be easier to skin
-> Added options to change the resolution and render backend in the options menu
-> Removed the reset images button in the inventory
-> Made the close button in the inventory toggle the inventory button on the HUD

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        self.events_to_map = {}
24
25        # the images that should be used for the buttons when they are "empty"
26        self.empty_images = {'A1':'gui/inv_images/inv_backpack.png',
27                             'A2':'gui/inv_images/inv_backpack.png',
28                             'A3':'gui/inv_images/inv_backpack.png',
29                             'A4':'gui/inv_images/inv_backpack.png',
30                             'A5':'gui/inv_images/inv_backpack.png',
31                             'B1':'gui/inv_images/inv_backpack.png',
32                             'B2':'gui/inv_images/inv_backpack.png',
33                             'B3':'gui/inv_images/inv_backpack.png',
34                             'B4':'gui/inv_images/inv_backpack.png',
35                             'B5':'gui/inv_images/inv_backpack.png',
36                             'C1':'gui/inv_images/inv_backpack.png',
37                             'C2':'gui/inv_images/inv_backpack.png',
38                             'C3':'gui/inv_images/inv_backpack.png',
39                             'C4':'gui/inv_images/inv_backpack.png',
40                             'C5':'gui/inv_images/inv_backpack.png',
41                             'D1':'gui/inv_images/inv_backpack.png',
42                             'D2':'gui/inv_images/inv_backpack.png',
43                             'D3':'gui/inv_images/inv_backpack.png',
44                             'D4':'gui/inv_images/inv_backpack.png',
45                             'D5':'gui/inv_images/inv_backpack.png',
46                             'Head':'gui/inv_images/inv_head.png',
47                             'LeftHeld':'gui/inv_images/inv_litem.png',
48                             'RightHeld':'gui/inv_images/inv_ritem.png',
49                             'LeftHand':'gui/inv_images/inv_lhand.png',
50                             'RightHand':'gui/inv_images/inv_rhand.png',
51                             'Body':'gui/inv_images/inv_torso.png',
52                             'Belt':'gui/inv_images/inv_belt.png',
53                             'Ready1':'gui/inv_images/inv_belt_pouches.png',
54                             'Ready2':'gui/inv_images/inv_belt_pouches.png',
55                             'Ready3':'gui/inv_images/inv_belt_pouches.png',
56                             'Ready4':'gui/inv_images/inv_belt_pouches.png',
57                             'LeftFoot':'gui/inv_images/inv_lfoot.png',
58                             'RightFoot':'gui/inv_images/inv_rfoot.png'}
59
60        # every button on the inventory and its category
61        self.buttons = {'A1':'main_inv', 'A2':'main_inv', 'A3':'main_inv',
62                        'A4':'main_inv', 'A5':'main_inv', 'B1':'main_inv',
63                        'B2':'main_inv', 'B3':'main_inv', 'B4':'main_inv',
64                        'B5':'main_inv', 'C1':'main_inv', 'C2':'main_inv',
65                        'C3':'main_inv', 'C4':'main_inv', 'C5':'main_inv',
66                        'D1':'main_inv', 'D2':'main_inv', 'D3':'main_inv',
67                        'D4':'main_inv', 'D5':'main_inv',
68                        'LeftFoot':'foot', 'RightFoot':'foot',
69                        'LeftHand':'hand', 'RightHand':'hand',
70                        'Head':'head', 'Ready1':'ready', 
71                        'Ready2':'ready', 'Ready3':'ready', 
72                        'Ready4':'ready', 'Belt':'belt', 'LeftHeld':'held',
73                        'RightHeld':'held', 'Body':'body'}
74        # all possible categories
75        self.locations = ['ready', 'head', 'foot', 'hand',
76                          'belt', 'held', 'body']
77        for button in self.buttons:
78            # make every button's callback be self.dragDrop
79            self.events_to_map[button] = cbwa(self.dragDrop, button)
80            ch = self.inventory.findChild(name = button)
81            # make every slot's item be empty
82            ch.item = ""
83
84        self.inventory.mapEvents(self.events_to_map)   
85        self.resetMouseCursor()
86        self.inventory.show()
87
88    def closeInventory(self):
89        """Close the inventory"""
90        self.inventory.hide()
91
92    def showInventory(self):
93        """Show the inventory"""
94        self.inventory.show()
95
96    def setMouseCursor(self, image, dummy_image, type = "native"): 
97        """Set the mouse cursor to an image"""
98        cursor = self.engine.getCursor()
99        cursor_type = fife.CURSOR_IMAGE
100        img_pool = self.engine.getImagePool()
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        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    def resetMouseCursor(self):
113        """Reset cursor to default image"""
114        c = self.engine.getCursor()
115        img_pool = self.engine.getImagePool()
116        cursor_type = fife.CURSOR_NATIVE
117        # this is the path to the default image
118        cursor_id = self.original_cursor_id
119        c.setDrag(cursor_type, cursor_id)
120        c.set(cursor_type, cursor_id)
121       
122    # decide whether to drag or drop the image
123    def dragDrop(self, obj):
124        if(self.dragging == True):
125            self.dropObject(obj)
126        elif(self.dragging == False):
127            self.dragObject(obj)
128               
129    # drag the selected object
130    def dragObject(self, obj):
131        drag_widget = self.inventory.findChild(name = obj)
132        self.dragged_type = self.buttons[obj]
133        self.dragged_item = drag_widget.item
134        up_image = drag_widget._getUpImage()
135        down_image = drag_widget._getDownImage()
136        self.setMouseCursor(up_image,down_image)
137        self.dragged_image = up_image
138        self.dragging = True
139
140        drag_widget._setUpImage(self.empty_images[obj])
141        drag_widget._setDownImage(self.empty_images[obj])
142        drag_widget._setHoverImage(self.empty_images[obj])
143       
144    def dropObject(self, obj):
145        """Drops the object being dropped"""
146        self.dropped_type  =  self.buttons[obj]
147        if((self.dragged_type == 'main_inv') or
148           (self.dropped_type == 'main_inv')):
149            drag_widget = self.inventory.findChild(name = obj)
150            drag_widget._setUpImage(self.dragged_image)
151            drag_widget._setHoverImage(self.dragged_image)
152            drag_widget._setDownImage(self.dragged_image)
153            drag_widget.item = self.dragged_item
154            self.dragging = False
155            self.resetMouseCursor()
156        elif((self.dragged_type == self.dropped_type) and
157             (self.dragged_type in self.locations)):
158            drag_widget = self.inventory.findChild(name = obj)
159            drag_widget._setUpImage(self.dragged_image)
160            drag_widget._setHoverImage(self.dragged_image)
161            drag_widget._setDownImage(self.dragged_image)
162            drag_widget.item = self.dragged_item
163            self.dragging = False
164            self.resetMouseCursor()
165        else:
166            self.resetMouseCursor()
167            self.dragging = False
Note: See TracBrowser for help on using the repository browser.