Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 12, 2010, 9:10:16 PM (15 years ago)
Author:
dafrick
Message:

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

File:
1 edited

Legend:

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

    r6679 r6700  
    1414
    1515P.carrierList = {}
     16P.wrapper = nil
     17P.detailsWindows = {}
    1618
    1719function P.init()
     
    2123function P.show()
    2224    P.window:show() -- TODO: Do this through parent...
    23     P.visible = true
    24    
     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()
    2543    local pickupManager = orxonox.PickupManager:getInstance()
    2644    local carrier = pickupManager:getPawn()
    2745   
    2846    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)
    2950   
    3051    P.carrierList = {}
    3152   
    32     P.getCarrierList(carrier)   
     53    --Design parameters:
     54    local space = 15
     55   
     56    P.getCarrierList(carrier)
     57    local offset = 0
    3358    for k,v in pairs(P.carrierList) do
    3459        local window = P.createCarrierBox(v,k)
    35         root:addChildWindow(window);
    36     end
    37 
     60        window:setYPosition(CEGUI.UDim(0,offset))
     61        offset = offset + window:getHeight():asAbsolute(1) + space
     62        P.wrapper:addChildWindow(window)
     63    end
    3864end
    3965
     
    6389
    6490    local name = "orxonox/PickupInventory/Carrier" .. index
    65     local window = winMgr:createWindow("TaharezLook/StaticText", name .. "/Title")
    66     --TODO: Align text to the top
    67     window:setText(carrier:getCarrierName())
    68    
     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
    69100    local box = winMgr:createWindow("TaharezLook/ScrollablePane", name .. "/Box")
    70     box:setPosition(CEGUI.UVector2(CEGUI.UDim(0.05, 0), CEGUI.UDim(0, 35)))
    71     box:setSize(CEGUI.UVector2(CEGUI.UDim(0.9, 0), CEGUI.UDim(1, 0)))
    72     window:addChildWindow(box)
    73    
    74     --Design parameters:
    75     imageHeight = 50
    76     textHeight = 30
     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)
    77110   
    78111    local numPickups = orxonox.PickupManager:getInstance():getNumPickups(carrier)
     
    81114       
    82115        local item = winMgr:createWindow("TaharezLook/StaticText", name .. "/Box/Pickup" .. i)
    83         item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, imageHeight)))
    84         item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, (imageHeight+5)*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)))
    85118        box:addChildWindow(item)
     119        offset = offset + imageHeight+5
    86120       
    87121        local image = winMgr:createWindow("TaharezLook/StaticImage", name .. "/Box/Pickup" .. i .. "/Image")
     
    96130        title:setSize(CEGUI.UVector2(CEGUI.UDim(0.4, 0), CEGUI.UDim(0, textHeight)))
    97131        title:setText(pickup:getPickupName())
     132        title:setProperty("FrameEnabled", "set:False")
    98133        item:addChildWindow(title)
    99134       
    100135        local useButton = winMgr:createWindow("TaharezLook/Button", name .. "/Box/Pickup" .. i .. "/UseButton")
    101136        useButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.4, imageHeight+10),CEGUI.UDim(0, (imageHeight-textHeight)/2)))
    102         useButton:setSize(CEGUI.UVector2(CEGUI.UDim(0.2, 0), CEGUI.UDim(0, textHeight)))
     137        useButton:setSize(CEGUI.UVector2(CEGUI.UDim(0, buttonWidth), CEGUI.UDim(0, textHeight)))
    103138        useButton:setText("use")
    104139        orxonox.GUIManager:subscribeEventHelper(useButton, "Clicked", P.filename .. ".InventoryUseButton_clicked")
     
    106141       
    107142        local dropButton = winMgr:createWindow("TaharezLook/Button", name .. "/Box/Pickup" .. i .. "/DropButton")
    108         dropButton:setPosition(CEGUI.UVector2(CEGUI.UDim(0.6, imageHeight+15),CEGUI.UDim(0, (imageHeight-textHeight)/2)))
    109         dropButton:setSize(CEGUI.UVector2(CEGUI.UDim(0.2, 0), CEGUI.UDim(0, textHeight)))
     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)))
    110145        dropButton:setText("drop")
    111146        orxonox.GUIManager:subscribeEventHelper(dropButton, "Clicked", P.filename .. ".InventoryDropButton_clicked")
    112147        item:addChildWindow(dropButton)
    113     end
    114    
    115     return window
     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
    116173end
    117174
     
    119176    local we = CEGUI.toWindowEventArgs(e)
    120177    local name = we.window:getName()
    121     debug(0, "Name: " .. name)
    122178
    123179    local match = string.gmatch(name, "%d+")
     
    131187end
    132188
     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
    133266function P.InventoryUseButton_clicked(e)
    134267    local arguments = P.windowToCarrierHelper(e)
     
    141274end
    142275
    143 function P.InventoryShowDetails_clicked(e)
    144 
     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
    145293end
    146294
Note: See TracChangeset for help on using the changeset viewer.