Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

test

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