Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

updated Highscore interface and Jump save routine TODO Menu!

File size: 7.4 KB
Line 
1-- HighscoreMenu.lua
2
3local P = createMenuSheet("HighscoreMenu")
4
5P.scrollbarWidth = 13
6P.nameList = {}
7P.scoreList = {}
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        P.nameList = {}
24       
25        P.scoreList = {}
26        test = orxonox.Highscore:getInstance():getNumberOfHighscores()
27
28        for i=0,orxonox.Highscore:getInstance():getNumberOfHighscores()-1 do
29                table.insert(P.nameList, orxonox.Highscore:getInstance():getHighscore(i))
30                table.insert(P.scoreList, i)
31       
32        end
33
34        P.linesList = {}
35
36
37    -- create tabs with desired tab as argument (nil for all)
38   
39    for k,v in pairs(P.levelList) do
40        -- only add level if it has desired tag
41        if tag == nil or v:hasTag(tag) then
42            P.createFilterTab(v:getName(), v:getName())
43        end
44        --local highscores = v:getHighscores()
45        --orxonox.CommandExecutor:execute("log test:".. highscores)
46
47    end
48    --P.createFilterTab("Minigames", "minigame")
49    --P.createFilterTab("Showcases", "showcase")
50    --P.createFilterTab("Presentations", "presentation")
51    --P.createFilterTab("Tests", "test")
52    --P.createFilterTab("Show All", nil)
53
54   
55end
56
57function P.onShow()
58       
59        P.scoreList = {}
60        test = orxonox.Highscore:getInstance():getNumberOfHighscores()
61
62        for i=0,orxonox.Highscore:getInstance():getNumberOfHighscores()-1 do
63                table.insert(P.scoreList, orxonox.Highscore:getInstance():getHighscore(i))
64       
65        end
66    --local description = winMgr:getWindow("orxonox/HighscoreText")
67
68    --height = getStaticTextWindowHeight(description)
69    --description:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, -P.scrollbarWidth), CEGUI.UDim(0.0, height)))
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   
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.scoreList) do
112       
113        local splitlist = P.Split(v,"./.")
114
115        if(splitlist[1] ~= name)then  --TODO!!!!!!!
116                local line = P.createPickupEntry(tabName .. k,k,tag)
117                table.insert(P.linesList, line)
118                line:setYPosition(CEGUI.UDim(0,offset))
119                offset = offset + line:getHeight():asAbsolute(1)+2
120                pane:addChildWindow(line)       
121        end
122       
123    end
124
125 
126    local tabControl = winMgr:getWindow("orxonox/HighscoreTabControl")
127    orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".HighscoreSelectionChanged")
128    --if listbox:getItemCount() > 0 then
129        tabControl:addChildWindow(default)
130    --end
131
132   
133end
134function P.createPickupEntry(parent,k,tag)
135   
136    local name = "orxonox/HiscoreEntry" .. parent
137
138    local item = winMgr:createWindow("DefaultWindow", name)
139    item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, P.imageHeight)))
140    item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0)))
141
142    local player = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Player")
143    player:setText(P.nameList[k].. tag)
144    player:setPosition(CEGUI.UVector2(CEGUI.UDim(0.005,0), CEGUI.UDim(0,0)))
145    player:setSize(CEGUI.UVector2(CEGUI.UDim(0.49, 0), CEGUI.UDim(0, P.imageHeight)))
146   
147    item:addChildWindow(player)
148       
149    local score = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Score")
150    score:setText(P.scoreList[k])
151    score:setPosition(CEGUI.UVector2(CEGUI.UDim(0.5,0), CEGUI.UDim(0,0)))
152    score:setSize(CEGUI.UVector2(CEGUI.UDim(0.495, 0), CEGUI.UDim(0, P.imageHeight)))
153   
154    item:addChildWindow(score)
155
156    return item
157end
158function P.HighscoreGetSelectedLevel()
159    -- choose the active listbox
160    local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/HighscoreTabControl"))
161    local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
162    local choice = listbox:getFirstSelectedItem()
163    if choice ~= nil then
164        -- get the right tab and the right index
165        local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
166        local index = tabIndexes[listbox:getItemIndex(choice)+1]
167        return P.levelList[index]
168    else
169        return nil
170    end
171end
172function P.Split(str, delim, maxNb)
173    -- Eliminate bad cases...
174    if string.find(str, delim) == nil then
175        return { str }
176    end
177    if maxNb == nil or maxNb < 1 then
178        maxNb = 0    -- No limit
179    end
180    local result = {}
181    local pat = "(.-)" .. delim .. "()"
182    local nb = 0
183    local lastPos
184    for part, pos in string.gfind(str, pat) do
185        nb = nb + 1
186        result[nb] = part
187        lastPos = pos
188        if nb == maxNb then break end
189    end
190    -- Handle the last field
191    if nb ~= maxNb then
192        result[nb + 1] = string.sub(str, lastPos)
193    end
194    return result
195end
196function P.HighscoreSelectionChanged(e)
197        --local pane = tolua.cast(winMgr:getWindow("orxonox/HighscoreMenuPane"), "CEGUI::ScrollablePane")
198        --pane:moveToFront()
199    --[[local levelDescription = winMgr:getWindow("orxonox/SingleplayerLevelDescription")
200    local configButton = winMgr:getWindow("orxonox/SingleplayerConfigButton")
201    local level = P.HighscoreGetSelectedLevel()
202    if level ~= nil then
203        local levelXMLFilename = level:getXMLFilename()
204        local imageName = level:getScreenshot()
205        -- set the screenshot and the description for the selected level
206        levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
207        levelDescription:setText(level:getDescription())
208        -- only enable config button for "gametype" levels
209        if level:hasTag("gametype") then
210            configButton:setProperty("Disabled", "False")
211        else
212            configButton:setProperty("Disabled", "True")
213        end
214    else
215        -- also take care of "no level selected"
216        levelImage:setProperty("Image", "")
217        levelDescription:setText("")
218        configButton:setProperty("Disabled", "True")
219    end --]]
220end
221
222
223function P.HighscoreBackButton_clicked(e)
224    hideMenuSheet(P.name)
225end
226
227return P
228
Note: See TracBrowser for help on using the repository browser.