Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/data/gui/scripts/PickupInventory.lua @ 6715

Last change on this file since 6715 was 6711, checked in by dafrick, 15 years ago

Merged pickup4 branch back to trunk.

  • Property svn:eol-style set to native
File size: 11.2 KB
Line 
1-- PickupInventory.lua
2
3BasicGUI = require("BasicGUI")
4local P = BasicGUI:new() --inherit everything from the gui package
5
6if _REQUIREDNAME == nil then
7    PickupInventory = P
8else
9    _G[_REQUIREDNAME] = P
10end
11
12P.filename = "PickupInventory"
13P.layoutString = "PickupInventory.layout"
14
15P.carrierList = {}
16P.wrapper = nil
17P.detailsWindows = {}
18
19function P.init()
20    carrierList = {}
21end
22
23function P.show()
24    P.window:show() -- TODO: Do this through parent...
25    P.visible = true 
26   
27    P.createInventory()
28
29end
30
31function P.hide()
32    P.cleanup()
33   
34end
35
36function P.update()
37    P.cleanup()
38   
39    P.createInventory()
40end
41
42function P.createInventory()
43    local pickupManager = orxonox.PickupManager:getInstance()
44    local carrier = pickupManager:getPawn()
45   
46    local root = winMgr:getWindow("orxonox/PickupInventory/Inventory")
47    P.wrapper = winMgr:createWindow("TaharezLook/ScrollablePane", "orxonox/PickupInventory/Inventory/Wrapper")
48    P.wrapper:setSize(CEGUI.UVector2(CEGUI.UDim(1,0),CEGUI.UDim(1,0)))
49    root:addChildWindow(P.wrapper)
50   
51    P.carrierList = {}
52   
53    --Design parameters:
54    local space = 15
55   
56    P.getCarrierList(carrier)
57    local offset = 0
58    for k,v in pairs(P.carrierList) do
59        local window = P.createCarrierBox(v,k)
60        window:setYPosition(CEGUI.UDim(0,offset))
61        offset = offset + window:getHeight():asAbsolute(1) + space
62        P.wrapper:addChildWindow(window)
63    end
64end
65
66function P.getCarrierList(carrier)
67
68    -- TODO: Test for nil or 0?
69    if carrier == nil then
70        return
71    end
72   
73    table.insert(P.carrierList, carrier)
74   
75    local numCarriers = orxonox.PickupManager:getInstance():getNumCarrierChildren(carrier)
76    if numCarriers == 0 then
77        return
78    end
79   
80    for i=0,numCarriers-1,1 do
81        local child = orxonox.PickupManager:getInstance():getCarrierChild(i, carrier)
82        if child ~= nil then
83            P.getCarrierList(child)
84        end
85    end
86end
87
88function P.createCarrierBox(carrier, index)
89
90    local name = "orxonox/PickupInventory/Carrier" .. index
91       
92    --Design parameters:
93    local imageHeight = 50
94    local textHeight = 30
95    local horizontalOffset = 20
96    local buttonWidth = 85
97   
98    local offset = 0
99
100    local box = winMgr:createWindow("TaharezLook/ScrollablePane", name .. "/Box")
101    box:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horizontalOffset), CEGUI.UDim(0, 0)))
102    box:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, -horizontalOffset), CEGUI.UDim(1, 0)))
103   
104    offset = offset+textHeight
105    local title = winMgr:createWindow("TaharezLook/StaticText", name .. "/Title")
106    title:setText(carrier:getCarrierName())
107    title:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, offset)))
108    title:setProperty("FrameEnabled", "set:False")
109    box:addChildWindow(title)
110   
111    local numPickups = orxonox.PickupManager:getInstance():getNumPickups(carrier)
112    for i=0,numPickups-1,1 do
113        local pickup = orxonox.PickupManager:getInstance():getPickupRepresentation(i, carrier)
114       
115        local item = winMgr:createWindow("TaharezLook/StaticText", name .. "/Box/Pickup" .. i)
116        item:setSize(CEGUI.UVector2(CEGUI.UDim(1, -horizontalOffset), CEGUI.UDim(0, imageHeight)))
117        item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, horizontalOffset), CEGUI.UDim(0, offset)))
118        box:addChildWindow(item)
119        offset = offset + imageHeight+5
120       
121        local image = winMgr:createWindow("TaharezLook/StaticImage", name .. "/Box/Pickup" .. i .. "/Image")
122        image:setProperty("Image", "set:PickupInventory image:" .. pickup:getInventoryRepresentation())
123        image:setProperty("BackgroundEnabled", "set:False")
124        image:setProperty("FrameEnabled", "set:True")
125        image:setSize(CEGUI.UVector2(CEGUI.UDim(0, imageHeight), CEGUI.UDim(0, imageHeight)))
126        item:addChildWindow(image)
127       
128        local title = winMgr:createWindow("TaharezLook/StaticText", name .. "/Box/Pickup" .. i .. "/Title")
129        title:setPosition(CEGUI.UVector2(CEGUI.UDim(0, imageHeight+5), CEGUI.UDim(0, (imageHeight-textHeight)/2)))
130        title:setSize(CEGUI.UVector2(CEGUI.UDim(0.4, 0), CEGUI.UDim(0, textHeight)))
131        title:setText(pickup:getPickupName())
132        title:setProperty("FrameEnabled", "set:False")
133        item:addChildWindow(title)
134       
135        local useButton = winMgr:createWindow("TaharezLook/Button", name .. "/Box/Pickup" .. i .. "/UseButton")
136        useButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, imageHeight+10),CEGUI.UDim(0, (imageHeight-textHeight)/2)))
137        useButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, buttonWidth), CEGUI.UDim(0, textHeight)))
138        useButton:setText("use")
139        orxonox.GUIManager:subscribeEventHelper(useButton, "Clicked", P.filename .. ".InventoryUseButton_clicked")
140        item:addChildWindow(useButton)
141       
142        local dropButton = winMgr:createWindow("TaharezLook/Button", name .. "/Box/Pickup" .. i .. "/DropButton")
143        dropButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, imageHeight+15+buttonWidth),CEGUI.UDim(0, (imageHeight-textHeight)/2)))
144        dropButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, buttonWidth), CEGUI.UDim(0, textHeight)))
145        dropButton:setText("drop")
146        orxonox.GUIManager:subscribeEventHelper(dropButton, "Clicked", P.filename .. ".InventoryDropButton_clicked")
147        item:addChildWindow(dropButton)
148       
149        local detailsButton = winMgr:createWindow("TaharezLook/Button", name .. "/Box/Pickup" .. i .. "/DetailsButton")
150        detailsButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, imageHeight+20+2*buttonWidth),CEGUI.UDim(0, (imageHeight-textHeight)/2)))
151        detailsButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, buttonWidth), CEGUI.UDim(0, textHeight)))
152        detailsButton:setText("details")
153        orxonox.GUIManager:subscribeEventHelper(detailsButton, "Clicked", P.filename .. ".InventoryDetailsButton_clicked")
154        item:addChildWindow(detailsButton)
155    end
156   
157    box:setHeight(CEGUI.UDim(0,offset))
158   
159    return box
160end
161
162function P.cleanup()
163    if P.wrapper ~= nil then
164        winMgr:destroyWindow(P.wrapper)
165    end
166   
167    --Destroy details windows.
168    for k,v in pairs(P.detailsWindows) do
169        if v ~= nil then
170            winMgr:destroyWindow(v)
171        end
172    end
173end
174
175function P.windowToCarrierHelper(e)
176    local we = CEGUI.toWindowEventArgs(e)
177    local name = we.window:getName()
178
179    local match = string.gmatch(name, "%d+")
180    local carrierNr = tonumber(match())
181    local pickupNr = tonumber(match())
182
183    local arguments = {}
184    arguments[1] = carrierNr
185    arguments[2] = pickupNr
186    return arguments
187end
188
189function P.createDetailsWindow(pickupIndex, carrierIndex)
190    local carrier = P.carrierList[carrierIndex]
191    local pickup = orxonox.PickupManager:getInstance():getPickupRepresentation(pickupIndex, carrier)
192   
193    local headerOffset = 35
194    --Design parameters
195    local titleHeight = 30
196    local imageSize = 100
197    local buttonWidth = 85
198   
199    local name = "orxonox/PickupInventory/Carrier" .. carrierIndex .. "/Pickup" .. pickupIndex .. "/Details" .. P.getNewDetailNumber()
200   
201    local window = winMgr:createWindow("TaharezLook/FrameWindow", name)
202    window:setSize(CEGUI.UVector2(CEGUI.UDim(0.5,0),CEGUI.UDim(0.4,0)))
203    orxonox.GUIManager:subscribeEventHelper(window, "CloseClicked", P.filename .. ".closeDetailWindow")
204   
205    local root = winMgr:getWindow("orxonox/PickupInventory/Background")
206    root:addChildWindow(window)
207   
208    local wrapper = winMgr:createWindow("DefaultWindow", name .. "/Wrapper")
209    wrapper:setSize(CEGUI.UVector2(CEGUI.UDim(1, -20),CEGUI.UDim(1, -50)))
210    wrapper:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 10),CEGUI.UDim(0, 40)))
211    window:addChildWindow(wrapper)
212   
213    local title = winMgr:createWindow("TaharezLook/StaticText", name .. "/Title")
214    title:setText(pickup:getPickupName())
215    title:setHeight(CEGUI.UDim(0, titleHeight))
216    title:setProperty("FrameEnabled", "set:False")
217    title:setProperty("BackgroundEnabled", "set:False")
218    wrapper:addChildWindow(title)
219   
220    local image = winMgr:createWindow("TaharezLook/StaticImage", name .. "/Image")
221    image:setProperty("Image", "set:PickupInventory image:" .. pickup:getInventoryRepresentation())
222    image:setProperty("BackgroundEnabled", "set:False")
223    image:setProperty("FrameEnabled", "set:True")
224    image:setSize(CEGUI.UVector2(CEGUI.UDim(0, imageSize), CEGUI.UDim(0, imageSize)))
225    image:setYPosition(CEGUI.UDim(0, titleHeight + 5))
226    wrapper:addChildWindow(image)
227   
228    local box = winMgr:createWindow("TaharezLook/ScrollablePane", name .. "/Description")
229    box:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, -1*(imageSize + 10)),CEGUI.UDim(1, -(titleHeight + 5 + titleHeight + 20))))
230    box:setPosition(CEGUI.UVector2(CEGUI.UDim(0, imageSize + 10),CEGUI.UDim(0, titleHeight + 5)))
231    local description = winMgr:createWindow("TaharezLook/StaticText", name .. "/Description/Text")
232    description:setText(pickup:getPickupDescription())
233    description:setProperty("HorzFormatting", "WordWrapLeftAligned")
234    description:setProperty("VertFormatting", "TopAligned")
235    box:addChildWindow(description)
236    wrapper:addChildWindow(box)
237   
238    local useButton = winMgr:createWindow("TaharezLook/Button", name .. "/UseButton")
239    useButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0, imageSize+10),CEGUI.UDim(1, -40)))
240    useButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, buttonWidth), CEGUI.UDim(0, titleHeight)))
241    useButton:setText("use")
242    orxonox.GUIManager:subscribeEventHelper(useButton, "Clicked", P.filename .. ".InventoryUseButton_clicked")
243    wrapper:addChildWindow(useButton)
244   
245    local dropButton = winMgr:createWindow("TaharezLook/Button", name .. "/DropButton")
246    dropButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0, imageSize+10+buttonWidth+10),CEGUI.UDim(1, -40)))
247    dropButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, buttonWidth), CEGUI.UDim(0, titleHeight)))
248    dropButton:setText("drop")
249    orxonox.GUIManager:subscribeEventHelper(dropButton, "Clicked", P.filename .. ".InventoryDropButton_clicked")
250    wrapper:addChildWindow(dropButton)
251   
252    table.insert(P.detailsWindows, window)
253   
254end
255
256function P.getNewDetailNumber()
257    local number = table.getn(P.detailsWindows)
258    for k,v in pairs(P.detailsWindows) do
259        if v == nil then
260            number = k-1
261        end
262    end
263    return number
264end
265
266function P.InventoryUseButton_clicked(e)
267    local arguments = P.windowToCarrierHelper(e)
268    orxonox.PickupManager:getInstance():usePickup(arguments[2], P.carrierList[arguments[1]], true)
269end
270
271function P.InventoryDropButton_clicked(e)
272    local arguments = P.windowToCarrierHelper(e)
273    orxonox.PickupManager:getInstance():dropPickup(arguments[2], P.carrierList[arguments[1]])
274end
275
276function P.InventoryDetailsButton_clicked(e)
277    local arguments = P.windowToCarrierHelper(e)
278    P.createDetailsWindow(arguments[2], arguments[1])
279end
280
281function P.closeDetailWindow(e)
282    --Get some numbers from the window
283    local we = CEGUI.toWindowEventArgs(e)
284    local name = we.window:getName()
285    local match = string.gmatch(name, "%d+")
286    local carrierNr = tonumber(match())
287    local pickupNr = tonumber(match())
288    local detailNr = tonumber(match())
289   
290    local window = P.detailsWindows[detailNr+1]
291    winMgr:destroyWindow(window)
292    P.detailsWindows[detailNr+1] = nil
293end
294
295function P.InventoryBackButton_clicked(e)
296    hideGUI("PickupInventory")
297end
298
299return P
Note: See TracBrowser for help on using the repository browser.