Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/menue/data/gui/scripts/SingleplayerMenu.lua @ 8931

Last change on this file since 8931 was 8931, checked in by jo, 14 years ago

Adding new tags: 'gametype' and 'minigame'.

  • Property svn:eol-style set to native
File size: 5.2 KB
RevLine 
[6363]1-- SingleplayerMenu.lua
2
[6746]3local P = createMenuSheet("SingleplayerMenu")
[6363]4
[7648]5P.levelList = {}
[8912]6P.activeTabIndexes = {}
7P.scrollbarWidth = 13
[7648]8
[6746]9function P.onLoad()
[8894]10    P.createLevelList()
11   
12    -- create tabs with desired tab as argument (nil for all)
[8931]13    P.createFilterTab("Gametypes", "gametype")
[8927]14    P.createFilterTab("Missions", "mission")
[8931]15    P.createFilterTab("Minigames", "minigame")
[8894]16    P.createFilterTab("Showcases", "showcase")
17    P.createFilterTab("Presentations", "presentation")
[8927]18    P.createFilterTab("Tests", "test")
[8912]19    P.createFilterTab("Show All", nil)
[8927]20   
21    SingleplayerSelectionChanged()
22   
[8912]23    --buttons are arranged in a 1x3 matrix
[8079]24    P:setButton(1, 1, {
[7689]25            ["button"] = winMgr:getWindow("orxonox/SingleplayerStartButton"),
[8079]26            ["callback"]  = P.SingleplayerStartButton_clicked
27    })
[7689]28
[8079]29    P:setButton(1, 2, {
[8912]30            ["button"] = winMgr:getWindow("orxonox/SingleplayerConfigButton"),
31            ["callback"]  = P.SingleplayerConfigButton_clicked
32    })
33
34    P:setButton(1, 3, {
[7689]35            ["button"] = winMgr:getWindow("orxonox/SingleplayerBackButton"),
[8079]36            ["callback"]  = P.SingleplayerBackButton_clicked
37    })
[7648]38end
39
[8894]40function P.createLevelList()
[7648]41    P.levelList = {}
42    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
[6363]43    local index = 0
[7648]44    local level = nil
45    while index < size do
46        level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
47        if level ~= nil then
[8912]48            local levelXMLFilename = level:getXMLFilename()
49            local imageName = level:getScreenshot()
50            if imageName ~= "" then
51                CEGUI.ImagesetManager:getSingleton():createImagesetFromImageFile(levelXMLFilename..imageName, imageName)
52            else
[8914]53                CEGUI.ImagesetManager:getSingleton():createImagesetFromImageFile(levelXMLFilename..imageName, "noscreenshot.png")
[8912]54            end
[8894]55            table.insert(P.levelList, level)
[7648]56        end
57        index = index + 1
[6363]58    end
[8894]59end
[8706]60
[8894]61function P.createFilterTab(name, tag)
62    -- create unique tab window name
[8912]63    local tabName = "orxonox/SingleplayerLevelTab"
[8894]64    if tag ~= nil then
65        tabName = tabName..tag
66    end
[8927]67    -- create new tab window with desired name
[8912]68    local listbox = CEGUI.toListbox(winMgr:createWindow("MenuWidgets/Listbox", tabName))
69    listbox:setText(name)
70    listbox:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}")
[8927]71    listbox:setProperty("UnifiedAreaRect", "{{0.05,0},{0.1,0},{0.5,0},{0.675,0}}")
[8894]72    -- fill listbox with items
73    listbox:resetList()
74    orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
75    local preselect = orxonox.LevelManager:getInstance():getDefaultLevel()
[8912]76    local tabIndexes = {}
[7648]77    for k,v in pairs(P.levelList) do
[8894]78        -- only add level if it has desired tag
79        if tag == nil or v:hasTag(tag) then
80            local item = CEGUI.createListboxTextItem(v:getName())
81            item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
82            listbox:addItem(item)
[8912]83            table.insert(tabIndexes, k)
[8894]84            if v:getXMLFilename() == preselect then
85                listbox:setItemSelectState(item, true)
86            end
87            orxonox.GUIManager:setTooltipTextHelper(item, v:getDescription())
[6363]88        end
89    end
[8912]90    table.insert(P.activeTabIndexes, tabIndexes)
91    listbox:subscribeEvent("ItemSelectionChanged", "SingleplayerSelectionChanged")
[8927]92    local tabControl = winMgr:getWindow("orxonox/SingleplayerTabControl")
[8912]93    tabControl:subscribeEvent("TabSelectionChanged", "SingleplayerSelectionChanged")
[8927]94    if listbox:getItemCount() > 0 then
95        tabControl:addChildWindow(tabName)
96    end
[6363]97end
98
[8912]99function P.SingleplayerGetSelectedLevel()
[8894]100    -- choose the active listbox
101    local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/SingleplayerTabControl"))
102    local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
[7648]103    local choice = listbox:getFirstSelectedItem()
104    if choice ~= nil then
[8912]105        local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
106        local index = tabIndexes[listbox:getItemIndex(choice)+1]
107        return P.levelList[index]
108    else
109        return nil
[6363]110    end
111end
112
[8912]113function SingleplayerSelectionChanged(e)
[8927]114    local levelImage = winMgr:getWindow("orxonox/SingleplayerLevelImage")
115    local levelDescription = winMgr:getWindow("orxonox/SingleplayerLevelDescription")
[8912]116    local level = P.SingleplayerGetSelectedLevel()
117    if level ~= nil then
118        local levelXMLFilename = level:getXMLFilename()
119        local imageName = level:getScreenshot()
120        levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
121        levelDescription:setText(level:getDescription())
[8927]122    else
123        levelImage:setProperty("Image", nil)
124        levelDescription:setText("")
[8912]125    end
126end
127
128function P.SingleplayerStartButton_clicked(e)
129    local level = P.SingleplayerGetSelectedLevel()
130    if level ~= nil then
131        orxonox.execute("startGame " .. level:getXMLFilename())
132        hideAllMenuSheets()
133    end
134end
135
136function P.SingleplayerConfigButton_clicked(e)
[8927]137    showMenuSheet("SingleplayerConfigMenu", true)
[8912]138end
139
[6363]140function P.SingleplayerBackButton_clicked(e)
[6746]141    hideMenuSheet(P.name)
[6363]142end
143
144return P
Note: See TracBrowser for help on using the repository browser.