Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/Highscore_HS16/data/gui/scripts/HighscoreMenu.lua @ 11326

Last change on this file since 11326 was 11326, checked in by kappenh, 7 years ago

Finished Project, Maybe switch enumeration of highscores in table

File size: 7.5 KB
Line 
1-- HighscoreMenu.lua
2
3local P = createMenuSheet("HighscoreMenu")
4
5P.scrollbarWidth = 13
6P.nameList = {}
7P.tabList = {}
8P.linesList = {}
9P.levelList = {}
10
11P.sampleWindow = nil
12
13P.lineHeight = 0
14P.playerWidth = 0
15P.editboxWidth = 0
16P.resetWidth = 0
17P.spaceWidth = 0
18P.imageHeight = 50
19P.textHeight = 30
20
21function P.onLoad()
22        P.createLevelList()
23       
24    --P.createFilterTab("Minigames", "minigame")
25    --P.createFilterTab("Showcases", "showcase")
26    --P.createFilterTab("Presentations", "presentation")
27    --P.createFilterTab("Tests", "test")
28    --P.createFilterTab("Show All", nil)
29
30   
31end
32
33function P.onShow()
34       
35        P.nameList = {}
36        P.tabList = {}
37        P.linesList = {}
38        test = orxonox.Highscore:getInstance():getNumberOfHighscores()
39
40        for i=0,orxonox.Highscore:getInstance():getNumberOfHighscores()-1 do
41                table.insert(P.nameList, orxonox.Highscore:getInstance():getHighscore(i))
42       
43        end
44       
45    for k,v in pairs(P.levelList) do
46        -- only add level if it has desired tag
47        if(v:getName() ~= "Hover level" and v:getName() ~= "Pong") then
48            P.createFilterTab(v:getName(), v:getName())
49        end
50       
51        --local highscores = v:getHighscores()
52        --orxonox.CommandExecutor:execute("log test:".. highscores)
53
54    end
55    --local description = winMgr:getWindow("orxonox/HighscoreText")
56
57    --height = getStaticTextWindowHeight(description)
58    --description:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, -P.scrollbarWidth), CEGUI.UDim(0.0, height)))
59end
60function P.onHide()
61        local tabControl = winMgr:getWindow("orxonox/HighscoreTabControl")
62        for k,v in pairs(P.tabList) do
63                local default = winMgr:getWindow(v)
64            tabControl:removeChildWindow(default)
65                winMgr:destroyWindow(default)
66        --local highscores = v:getHighscores()
67        --orxonox.CommandExecutor:execute("log test:".. highscores)
68
69    end
70end
71function P.createLevelList()
72    P.levelList = {}
73    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
74    local index = 0
75    local level = nil
76    while index < size do
77        level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
78        if (level ~= nil and level:getXMLFilename() ~= "_temp.oxw" and level:hasTag("minigame")) then
79            local levelXMLFilename = level:getXMLFilename()
80            -- create an imageset for each screenshot
81            local imageName = level:getScreenshot()
82            if imageName ~= "" then
83                CEGUI.ImagesetManager:getSingleton():createFromImageFile(levelXMLFilename..imageName, imageName)
84            else
85                CEGUI.ImagesetManager:getSingleton():createFromImageFile(levelXMLFilename..imageName, "noscreenshot.png")
86            end
87            table.insert(P.levelList, level)
88        end
89        index = index + 1
90    end
91end
92function P.createFilterTab(name, tag)
93    -- create unique tab window name
94    local tabName = "orxonox/HighscoreLevelTab"
95    if tag ~= nil then
96        tabName = tabName..tag
97    end
98
99    table.insert(P.tabList, tabName)
100    -- create new tab window with desired name
101        local default = (winMgr:createWindow("DefaultWindow", tabName))
102    default:setText(name)
103    default:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}")
104    default:setProperty("UnifiedAreaRect", "{{0,0},{0,0},{1,0},{1,0}}")
105    local pane = winMgr:createWindow("MenuWidgets/ScrollablePane", tabName .. "pane") 
106    pane:setSize(CEGUI.UVector2(CEGUI.UDim(1,0),CEGUI.UDim(1,0)))
107    default:addChildWindow(pane)
108
109   
110    local offset = 2
111    for k,v in pairs(P.nameList) do
112       
113        local splitlist = P.Split(v,"./.")
114        if(splitlist[2] == name)then 
115                local line = P.createPickupEntry(tabName .. k,k,tag)
116                table.insert(P.linesList, line)
117                line:setYPosition(CEGUI.UDim(0,offset))
118                offset = offset + line:getHeight():asAbsolute(1)+2
119                pane:addChildWindow(line)       
120        end
121       
122    end
123
124 
125    local tabControl = winMgr:getWindow("orxonox/HighscoreTabControl")
126    orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".HighscoreSelectionChanged")
127    --if listbox:getItemCount() > 0 then
128        tabControl:addChildWindow(default)
129    --end
130
131   
132end
133function P.createPickupEntry(parent,k,tag)
134   
135    local name = "orxonox/HiscoreEntry" .. parent
136    local splitlist = P.Split(P.nameList[k],"./.")
137    local item = winMgr:createWindow("DefaultWindow", name)
138    item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, P.imageHeight)))
139    item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0)))
140
141    local player = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Player")
142    player:setText(splitlist[1])
143    player:setPosition(CEGUI.UVector2(CEGUI.UDim(0.005,0), CEGUI.UDim(0,0)))
144    player:setSize(CEGUI.UVector2(CEGUI.UDim(0.49, 0), CEGUI.UDim(0, P.imageHeight)))
145   
146    item:addChildWindow(player)
147       
148    local score = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Score")
149    score:setText(splitlist[3])
150    score:setPosition(CEGUI.UVector2(CEGUI.UDim(0.5,0), CEGUI.UDim(0,0)))
151    score:setSize(CEGUI.UVector2(CEGUI.UDim(0.495, 0), CEGUI.UDim(0, P.imageHeight)))
152   
153    item:addChildWindow(score)
154
155    return item
156end
157function P.HighscoreGetSelectedLevel()
158    -- choose the active listbox
159    local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/HighscoreTabControl"))
160    local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
161    local choice = listbox:getFirstSelectedItem()
162    if choice ~= nil then
163        -- get the right tab and the right index
164        local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
165        local index = tabIndexes[listbox:getItemIndex(choice)+1]
166        return P.levelList[index]
167    else
168        return nil
169    end
170end
171function P.Split(str, delim, maxNb)
172    -- Eliminate bad cases...
173    if string.find(str, delim) == nil then
174        return { str }
175    end
176    if maxNb == nil or maxNb < 1 then
177        maxNb = 0    -- No limit
178    end
179    local result = {}
180    local pat = "(.-)" .. delim .. "()"
181    local nb = 0
182    local lastPos
183    for part, pos in string.gfind(str, pat) do
184        nb = nb + 1
185        result[nb] = part
186        lastPos = pos
187        if nb == maxNb then break end
188    end
189    -- Handle the last field
190    if nb ~= maxNb then
191        result[nb + 1] = string.sub(str, lastPos)
192    end
193    return result
194end
195function P.HighscoreSelectionChanged(e)
196        --local pane = tolua.cast(winMgr:getWindow("orxonox/HighscoreMenuPane"), "CEGUI::ScrollablePane")
197        --pane:moveToFront()
198    --[[local levelDescription = winMgr:getWindow("orxonox/SingleplayerLevelDescription")
199    local configButton = winMgr:getWindow("orxonox/SingleplayerConfigButton")
200    local level = P.HighscoreGetSelectedLevel()
201    if level ~= nil then
202        local levelXMLFilename = level:getXMLFilename()
203        local imageName = level:getScreenshot()
204        -- set the screenshot and the description for the selected level
205        levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
206        levelDescription:setText(level:getDescription())
207        -- only enable config button for "gametype" levels
208        if level:hasTag("gametype") then
209            configButton:setProperty("Disabled", "False")
210        else
211            configButton:setProperty("Disabled", "True")
212        end
213    else
214        -- also take care of "no level selected"
215        levelImage:setProperty("Image", "")
216        levelDescription:setText("")
217        configButton:setProperty("Disabled", "True")
218    end --]]
219end
220
221
222function P.HighscoreBackButton_clicked(e)
223    hideMenuSheet(P.name)
224end
225
226return P
227
Note: See TracBrowser for help on using the repository browser.