Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/pickup4/data/gui/scripts/PickupInventory.lua @ 6735

Last change on this file since 6735 was 6700, checked in by dafrick, 15 years ago

Rudimentary version of PickupInventory appears to be working now, still some testing to be done though.

  • 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.