Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 6746 was 6746, checked in by rgrieder, 14 years ago

Merged gamestates2 branch back to trunk.
This brings in some heavy changes in the GUI framework.
It should also fix problems with triggered asserts in the InputManager.

Note: PickupInventory does not seem to work —> Segfault when showing because before, the owner in GUIOverlay::setGUIName is already NULL.
I haven't tested it before, so I can't tell whether it's my changes.

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