Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 6952 was 6906, checked in by dafrick, 15 years ago

Added DistanceTriggerBeacon, which is a device which can be attached to objects to trigger a DistanceTrigger (both the (single) DistanceTrigger and DistanceMultiTrigger) based on the name of the DistanceTri$
Also some minor adjustements in QuestEffectBeacon: Removed some output and adjusted the outputlevel of some other output.
And started working on PickupInventory again (though no significant changes yet).

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