Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/shipSelection/data/gui/scripts/ShipSelectionMenu.lua @ 9045

Last change on this file since 9045 was 9045, checked in by huttemat, 12 years ago

added wip ship selection menu

File size: 6.3 KB
Line 
1-- ShipSelectionMenu.lua
2
3local P = createMenuSheet("ShipSelectionMenu")
4P.levelList = {}
5P.activeTabIndexes = {}
6P.scrollbarWidth = 13
7
8function P.onLoad()
9--[[    P.createLevelList()
10   
11    -- create tabs with desired tab as argument (nil for all)
12    P.createFilterTab("Gametypes", "gametype")
13    P.createFilterTab("Missions", "mission")
14    P.createFilterTab("Minigames", "minigame")
15    P.createFilterTab("Showcases", "showcase")
16    P.createFilterTab("Presentations", "presentation")
17    P.createFilterTab("Tests", "test")
18    P.createFilterTab("Show All", nil)
19   
20    -- update description and screenshot boxes
21    P.ShipSelectionSelectionChanged()
22   
23    --buttons are arranged in a 1x3 matrix
24    P:setButton(1, 1, {
25            ["button"] = winMgr:getWindow("orxonox/ShipSelectionStartButton"),
26            ["callback"]  = P.ShipSelectionStartButton_clicked
27    })
28
29    P:setButton(1, 2, {
30            ["button"] = winMgr:getWindow("orxonox/ShipSelectionConfigButton"),
31            ["callback"]  = P.ShipSelectionConfigButton_clicked
32    })
33
34    P:setButton(1, 3, {
35            ["button"] = winMgr:getWindow("orxonox/ShipSelectionBackButton"),
36            ["callback"]  = P.ShipSelectionBackButton_clicked
37    })--]]
38end
39--[[
40function P.createLevelList()
41    P.levelList = {}
42    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
43    local index = 0
44    local level = nil
45    while index < size do
46        level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
47        if level ~= nil then
48            local levelXMLFilename = level:getXMLFilename()
49            -- create an imageset for each screenshot
50            local imageName = level:getScreenshot()
51            if imageName ~= "" then
52                CEGUI.ImagesetManager:getSingleton():createImagesetFromImageFile(levelXMLFilename..imageName, imageName)
53            else
54                CEGUI.ImagesetManager:getSingleton():createImagesetFromImageFile(levelXMLFilename..imageName, "noscreenshot.png")
55            end
56            table.insert(P.levelList, level)
57        end
58        index = index + 1
59    end
60end
61
62function P.createFilterTab(name, tag)
63    -- create unique tab window name
64    local tabName = "orxonox/ShipSelectionLevelTab"
65    if tag ~= nil then
66        tabName = tabName..tag
67    end
68    -- create new tab window with desired name
69    local listbox = CEGUI.toListbox(winMgr:createWindow("MenuWidgets/Listbox", tabName))
70    listbox:setText(name)
71    listbox:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}")
72    listbox:setProperty("UnifiedAreaRect", "{{0.05,0},{0.1,0},{0.5,0},{0.675,0}}")
73    -- fill listbox with items
74    listbox:resetList()
75    orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
76    local preselect = orxonox.LevelManager:getInstance():getDefaultLevel()
77    local tabIndexes = {}
78    for k,v in pairs(P.levelList) do
79        -- only add level if it has desired tag
80        if tag == nil or v:hasTag(tag) then
81            local item = CEGUI.createListboxTextItem(v:getName())
82            item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
83            listbox:addItem(item)
84            table.insert(tabIndexes, k)
85            if v:getXMLFilename() == preselect then
86                listbox:setItemSelectState(item, true)
87            end
88            orxonox.GUIManager:setTooltipTextHelper(item, v:getDescription())
89        end
90    end
91    table.insert(P.activeTabIndexes, tabIndexes)
92    -- listen to selection changes
93    orxonox.GUIManager:subscribeEventHelper(listbox, "ItemSelectionChanged", P.name..".ShipSelectionSelectionChanged")
94    local tabControl = winMgr:getWindow("orxonox/ShipSelectionTabControl")
95    orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".ShipSelectionSelectionChanged")
96    if listbox:getItemCount() > 0 then
97        tabControl:addChildWindow(tabName)
98    end
99end
100
101function P.ShipSelectionGetSelectedLevel()
102    -- choose the active listbox
103    local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/ShipSelectionTabControl"))
104    local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
105    local choice = listbox:getFirstSelectedItem()
106    if choice ~= nil then
107        -- get the right tab and the right index
108        local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
109        local index = tabIndexes[listbox:getItemIndex(choice)+1]
110        return P.levelList[index]
111    else
112        return nil
113    end
114end
115
116function P.ShipSelectionSelectionChanged(e)
117    local levelImage = winMgr:getWindow("orxonox/ShipSelectionLevelImage")
118    local levelDescription = winMgr:getWindow("orxonox/ShipSelectionLevelDescription")
119    local configButton = winMgr:getWindow("orxonox/ShipSelectionConfigButton")
120    local level = P.ShipSelectionGetSelectedLevel()
121    if level ~= nil then
122        local levelXMLFilename = level:getXMLFilename()
123        local imageName = level:getScreenshot()
124        -- set the screenshot and the description for the selected level
125        levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
126        levelDescription:setText(level:getDescription())
127        -- only enable config button for "gametype" levels
128        if level:hasTag("gametype") then
129            configButton:setProperty("Disabled", "False")
130        else
131            configButton:setProperty("Disabled", "True")
132        end
133    else
134        -- also take care of "no level selected"
135        levelImage:setProperty("Image", nil)
136        levelDescription:setText("")
137        configButton:setProperty("Disabled", "True")
138    end
139end
140--]]
141function P.ShipSelectionStartButton_clicked(e)
142--[[
143    local level = P.ShipSelectionGetSelectedLevel()
144    if level ~= nil then
145
146        if level:hasTag("shipselection") then
147            orxout("working!")
148            showMenuSheet("ShipSelectionMenu", true)
149        else
150            orxonox.execute("startGame " .. level:getXMLFilename())
151            hideAllMenuSheets()
152        end
153    end
154--]]
155end
156
157function P.ShipSelectionConfigButton_clicked(e)
158--[[
159    local level = P.ShipSelectionGetSelectedLevel()
160    if level ~= nil then
161        local configMenu = showMenuSheet("ShipSelectionConfigMenu")
162        configMenu:loadConfig(level)
163    end
164--]]
165end
166
167function P.ShipSelectionBackButton_clicked(e)
168    --hideMenuSheet(P.name)
169end 
170
171return P
Note: See TracBrowser for help on using the repository browser.