Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 24, 2010, 4:59:23 PM (14 years ago)
Author:
dafrick
Message:

Cleaned up in PickupInventory, to be able to improve it at a later stage.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation3/data/gui/scripts/PickupInventory.lua

    r6906 r6965  
    66P.wrapper = nil
    77P.detailsWindows = {}
     8P.pickupsList = {}
     9
     10P.showing = false
     11
     12-- Design parameters
     13P.imageHeight = 50
     14P.detailImageSize = 100
     15P.textHeight = 30
     16P.buttonWidth = 85
    817
    918function P.onLoad()
     
    1322function P.onShow()
    1423    P.createInventory()
     24    P.showing = true
    1525end
    1626
    1727function P.onHide()
     28    P.showing = false
    1829    P.cleanup()
    1930end
    2031
    2132function P.update()
     33    if P.showing == false then
     34        return
     35    end
     36   
    2237    P.cleanup()
    2338   
     
    2742function P.createInventory()
    2843    local pickupManager = orxonox.PickupManager:getInstance()
    29     local carrier = pickupManager:getPawn()
    3044   
    3145    local root = winMgr:getWindow("orxonox/PickupInventory/Inventory")
     
    3448    root:addChildWindow(P.wrapper)
    3549   
    36     P.carrierList = {}
    37    
    38     --Design parameters:
    39     local space = 15
    40    
    41     P.getCarrierList(carrier)
     50    P.pickupsList = {}
     51
     52    local numPickups = pickupManager:getNumPickups()
     53    local counter = 1
    4254    local offset = 0
    43     for k,v in pairs(P.carrierList) do
    44         local window = P.createCarrierBox(v,k)
     55    while counter <= numPickups do
     56        local pickup = pickupManager:popPickup()
     57        table.insert(P.pickupsList, pickup)
     58        local window = P.createPickupEntry(counter, pickup)
    4559        window:setYPosition(CEGUI.UDim(0,offset))
    46         offset = offset + window:getHeight():asAbsolute(1) + space
     60        offset = offset + window:getHeight():asAbsolute(1)
    4761        P.wrapper:addChildWindow(window)
    48     end
    49 end
    50 
    51 function 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
    71 end
    72 
    73 function 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)))
     62        counter = counter + 1
     63    end
     64
     65end
     66
     67function P.createPickupEntry(index, pickup)
     68    local representation = orxonox.PickupManager:getInstance():getPickupRepresentation(pickup)
     69
     70    local name = "orxonox/PickupInventory/Box/Pickup" .. index
     71
     72    local item = winMgr:createWindow("MenuWidgets/StaticText", name)
     73    item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, P.imageHeight)))
     74    item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0)))
     75
     76    local image = winMgr:createWindow("MenuWidgets/StaticImage", name .. "/Image")
     77    image:setProperty("Image", "set:PickupInventory image:" .. representation:getInventoryRepresentation())
     78    image:setProperty("BackgroundEnabled", "set:False")
     79    image:setProperty("FrameEnabled", "set:True")
     80    image:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.imageHeight), CEGUI.UDim(0, P.imageHeight)))
     81    item:addChildWindow(image)
     82
     83    local title = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Title")
     84    title:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.imageHeight+5), CEGUI.UDim(0, (P.imageHeight-P.textHeight)/2)))
     85    title:setSize(CEGUI.UVector2(CEGUI.UDim(0.4, 0), CEGUI.UDim(0, P.textHeight)))
     86    title:setText(representation:getPickupName())
     87    title:setProperty("FrameEnabled", "set:False")
     88    item:addChildWindow(title)
     89
     90    local useButton = winMgr:createWindow("MenuWidgets/Button", name .. "/UseButton")
     91    useButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, P.imageHeight+10),CEGUI.UDim(0, (P.imageHeight-P.textHeight)/2)))
     92    useButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.buttonWidth), CEGUI.UDim(0, P.textHeight)))
     93    if pickup:isUsed() == false then
    11694        useButton:setText("use")
    11795        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
     96    else
     97        useButton:setText("unuse")
     98        orxonox.GUIManager:subscribeEventHelper(useButton, "Clicked", P.name .. ".InventoryUnuseButton_clicked")
     99    end
     100    item:addChildWindow(useButton)
     101
     102    local dropButton = winMgr:createWindow("MenuWidgets/Button", name .. "/DropButton")
     103    dropButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, P.imageHeight+15+P.buttonWidth),CEGUI.UDim(0, (P.imageHeight-P.textHeight)/2)))
     104    dropButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.buttonWidth), CEGUI.UDim(0, P.textHeight)))
     105    dropButton:setText("drop")
     106    orxonox.GUIManager:subscribeEventHelper(dropButton, "Clicked", P.name .. ".InventoryDropButton_clicked")
     107    item:addChildWindow(dropButton)
     108
     109    local detailsButton = winMgr:createWindow("MenuWidgets/Button", name .. "/DetailsButton")
     110    detailsButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, P.imageHeight+20+2*P.buttonWidth),CEGUI.UDim(0, (P.imageHeight-P.textHeight)/2)))
     111    detailsButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.buttonWidth), CEGUI.UDim(0, P.textHeight)))
     112    detailsButton:setText("details")
     113    orxonox.GUIManager:subscribeEventHelper(detailsButton, "Clicked", P.name .. ".InventoryDetailsButton_clicked")
     114    item:addChildWindow(detailsButton)
     115
     116    return item
    138117end
    139118
     
    151130end
    152131
    153 function P.windowToCarrierHelper(e)
     132function P.windowToPickupHelper(e)
    154133    local we = CEGUI.toWindowEventArgs(e)
    155134    local name = we.window:getName()
    156135
    157136    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
    165 end
    166 
    167 function P.createDetailsWindow(pickupIndex, carrierIndex)
    168     local carrier = P.carrierList[carrierIndex]
    169     local pickup = orxonox.PickupManager:getInstance():getPickupRepresentation(pickupIndex, carrier)
     137    local pickupIndex = tonumber(match())
     138
     139    return pickupIndex
     140end
     141
     142function P.createDetailsWindow(pickupIndex)
     143    local pickup = P.pickupsList[pickupIndex]
     144    local representation = orxonox.PickupManager:getInstance():getPickupRepresentation(pickup)
    170145   
    171146    local headerOffset = 35
    172147    --Design parameters
    173     local titleHeight = 30
    174148    local imageSize = 100
    175     local buttonWidth = 85
    176    
    177     local name = "orxonox/PickupInventory/Carrier" .. carrierIndex .. "/Pickup" .. pickupIndex .. "/Details" .. P.getNewDetailNumber()
     149   
     150    local name = "orxonox/PickupInventory/Pickup" .. pickupIndex .. "/Details" .. P.getNewDetailNumber()
    178151   
    179152    local window = winMgr:createWindow("MenuWidgets/FrameWindow", name)
     
    190163   
    191164    local title = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Title")
    192     title:setText(pickup:getPickupName())
    193     title:setHeight(CEGUI.UDim(0, titleHeight))
     165    title:setText(representation:getPickupName())
     166    title:setHeight(CEGUI.UDim(0, P.textHeight))
    194167    title:setProperty("FrameEnabled", "set:False")
    195168    title:setProperty("BackgroundEnabled", "set:False")
     
    197170   
    198171    local image = winMgr:createWindow("MenuWidgets/StaticImage", name .. "/Image")
    199     image:setProperty("Image", "set:PickupInventory image:" .. pickup:getInventoryRepresentation())
     172    image:setProperty("Image", "set:PickupInventory image:" .. representation:getInventoryRepresentation())
    200173    image:setProperty("BackgroundEnabled", "set:False")
    201174    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))
     175    image:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.detailImageSize), CEGUI.UDim(0, P.detailImageSize)))
     176    image:setYPosition(CEGUI.UDim(0, P.textHeight + 5))
    204177    wrapper:addChildWindow(image)
    205178   
    206179    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())
     180    box:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, -1*(P.detailImageSize + 10)),CEGUI.UDim(1, -(P.textHeight + 5 + P.textHeight + 20))))
     181    box:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.detailImageSize + 10),CEGUI.UDim(0, P.textHeight + 5)))
     182    local description = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Description/Text")
     183    description:setText(representation:getPickupDescription())
    211184    description:setProperty("HorzFormatting", "WordWrapLeftAligned")
    212185    description:setProperty("VertFormatting", "TopAligned")
    213186    box:addChildWindow(description)
    214187    wrapper:addChildWindow(box)
    215    
     188
    216189    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")
     190    useButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.detailImageSize+10),CEGUI.UDim(1, -40)))
     191    useButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.buttonWidth), CEGUI.UDim(0, P.textHeight)))
     192    if pickup:isUsed() == false then
     193        useButton:setText("use")
     194        orxonox.GUIManager:subscribeEventHelper(useButton, "Clicked", P.name .. ".InventoryUseButton_clicked")
     195    else
     196        useButton:setText("unuse")
     197        orxonox.GUIManager:subscribeEventHelper(useButton, "Clicked", P.name .. ".InventoryUnuseButton_clicked")
     198    end
    221199    wrapper:addChildWindow(useButton)
    222200   
    223201    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)))
     202    dropButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.detailImageSize+10+P.buttonWidth+10),CEGUI.UDim(1, -40)))
     203    dropButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, P.buttonWidth), CEGUI.UDim(0, P.textHeight)))
    226204    dropButton:setText("drop")
    227205    orxonox.GUIManager:subscribeEventHelper(dropButton, "Clicked", P.name .. ".InventoryDropButton_clicked")
     
    243221
    244222function P.InventoryUseButton_clicked(e)
    245     local arguments = P.windowToCarrierHelper(e)
    246     orxonox.PickupManager:getInstance():usePickup(arguments[2], P.carrierList[arguments[1]], true)
     223    local pickupIndex = P.windowToPickupHelper(e)
     224    orxonox.PickupManager:getInstance():usePickup(P.pickupsList[pickupIndex], true)
     225end
     226
     227function P.InventoryUnuseButton_clicked(e)
     228    local pickupIndex = P.windowToPickupHelper(e)
     229    orxonox.PickupManager:getInstance():usePickup(P.pickupsList[pickupIndex], false)
    247230end
    248231
    249232function P.InventoryDropButton_clicked(e)
    250     local arguments = P.windowToCarrierHelper(e)
    251     orxonox.PickupManager:getInstance():dropPickup(arguments[2], P.carrierList[arguments[1]])
     233    local pickupIndex = P.windowToPickupHelper(e)
     234    orxonox.PickupManager:getInstance():dropPickup(P.pickupsList[pickupIndex])
    252235end
    253236
    254237function P.InventoryDetailsButton_clicked(e)
    255     local arguments = P.windowToCarrierHelper(e)
    256     P.createDetailsWindow(arguments[2], arguments[1])
     238    local pickupIndex = P.windowToPickupHelper(e)
     239    P.createDetailsWindow(pickupIndex)
    257240end
    258241
     
    262245    local name = we.window:getName()
    263246    local match = string.gmatch(name, "%d+")
    264     local carrierNr = tonumber(match())
    265247    local pickupNr = tonumber(match())
    266248    local detailNr = tonumber(match())
Note: See TracChangeset for help on using the changeset viewer.