Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

Menu working: TODO add more minigames

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