Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/data/gui/scripts/SingleplayerMenu.lua @ 7887

Last change on this file since 7887 was 7876, checked in by dafrick, 13 years ago

Extending startGame and similar console commands, now also the level to be started (or in case of startClient, the destination) can be specified (but doesn't have to).
Additionally startMainMenu is now in GSLevel and can only be executed in a Level, as opposed to only in the MainMenu as it was before.
Added changeGame console command which works in a level in standalone mode to change to a different level.

  • Property svn:eol-style set to native
File size: 3.1 KB
Line 
1-- SingleplayerMenu.lua
2
3local P = createMenuSheet("SingleplayerMenu")
4
5P.buttonList = {}
6P.levelList = {}
7P.itemList = {}
8P.showAll = false
9
10function P.onLoad()
11    local window = winMgr:getWindow("orxonox/SingleplayerShowAllCheckbox")
12    local button = tolua.cast(window,"CEGUI::Checkbox")
13    button:setSelected(false)
14    P.createLevelList()
15
16    --buttons are arranged in a 1x2 matrix
17    local item = {
18            ["button"] = winMgr:getWindow("orxonox/SingleplayerStartButton"),
19            ["function"]  = P.SingleplayerStartButton_clicked
20    }
21    P.buttonList[1] = item
22
23    local item = {
24            ["button"] = winMgr:getWindow("orxonox/SingleplayerBackButton"),
25            ["function"]  = P.SingleplayerBackButton_clicked
26    }
27    P.buttonList[2] = item
28end
29
30function P.createLevelList()
31    P.levelList = {}
32    P.itemList = {}
33    local listbox = CEGUI.toListbox(winMgr:getWindow("orxonox/SingleplayerLevelListbox"))
34    listbox:resetList()
35    orxonox.GUIManager:setItemTooltipsEnabledHelper(listbox, true)
36    local preselect = orxonox.LevelManager:getInstance():getDefaultLevel()
37    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
38    local index = 0
39    local level = nil
40    while index < size do
41        level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
42        if level ~= nil then
43            if P.showAll or not level:hasTag("test") then
44                table.insert(P.levelList, level)
45            end
46        end
47        index = index + 1
48    end
49    --TODO: Reintroduce sorting, if needed. At the moment it's sorted by filename.
50    --table.sort(levelList)
51    for k,v in pairs(P.levelList) do
52        local item = CEGUI.createListboxTextItem(v:getName())
53        item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
54        listbox:addItem(item)
55        if v:getXMLFilename() == preselect then
56            listbox:setItemSelectState(item, true)
57        end
58        P.itemList[k] = listbox:getListboxItemFromIndex(k-1)
59        orxonox.GUIManager:setTooltipTextHelper(P.itemList[k], v:getDescription())
60    end
61end
62
63function P.onShow()
64    --indices to iterate through buttonlist
65    P.oldindex = -2
66    P.index = -1
67end
68
69function P.SingleplayerStartButton_clicked(e)
70    local listbox = CEGUI.toListbox(winMgr:getWindow("orxonox/SingleplayerLevelListbox"))
71    local choice = listbox:getFirstSelectedItem()
72    if choice ~= nil then
73        local index = listbox:getItemIndex(choice)
74        local level = P.levelList[index+1]
75        if level ~= nil then
76            orxonox.execute("startGame " .. level:getXMLFilename())
77            hideAllMenuSheets()
78        end
79    end
80end
81
82function P.SingleplayerShowAll_clicked(e)
83    local checkbox = tolua.cast(winMgr:getWindow("orxonox/SingleplayerShowAllCheckbox"), "CEGUI::Checkbox")
84    local show = checkbox:isSelected()
85    if show ~= P.showAll then
86        P.showAll = show
87        P.createLevelList()
88   end
89end
90
91function P.SingleplayerBackButton_clicked(e)
92    hideMenuSheet(P.name)
93end
94
95function P.onKeyPressed() 
96    buttonIteratorHelper(P.buttonList, code, P, 1, 2)
97end
98
99return P
100
Note: See TracBrowser for help on using the repository browser.