-- HighscoreMenu.lua local P = createMenuSheet("HighscoreMenu") P.scrollbarWidth = 13 P.nameList = {} P.scoreList = {} P.linesList = {} P.levelList = {} P.sampleWindow = nil P.lineHeight = 0 P.playerWidth = 0 P.editboxWidth = 0 P.resetWidth = 0 P.spaceWidth = 0 P.imageHeight = 50 P.textHeight = 30 function P.onLoad() P.createLevelList() P.nameList = {} P.scoreList = {} test = orxonox.Highscore:getInstance():getNumberOfHighscores() for i=0,orxonox.Highscore:getInstance():getNumberOfHighscores()-1 do table.insert(P.nameList, orxonox.Highscore:getInstance():getHighscore(i)) table.insert(P.scoreList, i) end P.linesList = {} -- create tabs with desired tab as argument (nil for all) for k,v in pairs(P.levelList) do -- only add level if it has desired tag if tag == nil or v:hasTag(tag) then P.createFilterTab(v:getName(), v:getName()) end --local highscores = v:getHighscores() --orxonox.CommandExecutor:execute("log test:".. highscores) end --P.createFilterTab("Minigames", "minigame") --P.createFilterTab("Showcases", "showcase") --P.createFilterTab("Presentations", "presentation") --P.createFilterTab("Tests", "test") --P.createFilterTab("Show All", nil) end function P.onShow() P.scoreList = {} test = orxonox.Highscore:getInstance():getNumberOfHighscores() for i=0,orxonox.Highscore:getInstance():getNumberOfHighscores()-1 do table.insert(P.scoreList, orxonox.Highscore:getInstance():getHighscore(i)) end --local description = winMgr:getWindow("orxonox/HighscoreText") --height = getStaticTextWindowHeight(description) --description:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, -P.scrollbarWidth), CEGUI.UDim(0.0, height))) end function P.createLevelList() P.levelList = {} local size = orxonox.LevelManager:getInstance():getNumberOfLevels() local index = 0 local level = nil while index < size do level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index) if (level ~= nil and level:getXMLFilename() ~= "_temp.oxw" and level:hasTag("minigame")) then local levelXMLFilename = level:getXMLFilename() -- create an imageset for each screenshot local imageName = level:getScreenshot() if imageName ~= "" then CEGUI.ImagesetManager:getSingleton():createFromImageFile(levelXMLFilename..imageName, imageName) else CEGUI.ImagesetManager:getSingleton():createFromImageFile(levelXMLFilename..imageName, "noscreenshot.png") end table.insert(P.levelList, level) end index = index + 1 end end function P.createFilterTab(name, tag) -- create unique tab window name local tabName = "orxonox/HighscoreLevelTab" if tag ~= nil then tabName = tabName..tag end -- create new tab window with desired name local default = (winMgr:createWindow("DefaultWindow", tabName)) default:setText(name) default:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}") default:setProperty("UnifiedAreaRect", "{{0,0},{0,0},{1,0},{1,0}}") local pane = winMgr:createWindow("MenuWidgets/ScrollablePane", tabName .. "pane") pane:setSize(CEGUI.UVector2(CEGUI.UDim(1,0),CEGUI.UDim(1,0))) default:addChildWindow(pane) local offset = 2 for k,v in pairs(P.scoreList) do local splitlist = P.Split(v,"./.") if(splitlist[1] ~= name)then --TODO!!!!!!! local line = P.createPickupEntry(tabName .. k,k,tag) table.insert(P.linesList, line) line:setYPosition(CEGUI.UDim(0,offset)) offset = offset + line:getHeight():asAbsolute(1)+2 pane:addChildWindow(line) end end local tabControl = winMgr:getWindow("orxonox/HighscoreTabControl") orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".HighscoreSelectionChanged") --if listbox:getItemCount() > 0 then tabControl:addChildWindow(default) --end end function P.createPickupEntry(parent,k,tag) local name = "orxonox/HiscoreEntry" .. parent local item = winMgr:createWindow("DefaultWindow", name) item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, P.imageHeight))) item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0))) local player = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Player") player:setText(P.nameList[k].. tag) player:setPosition(CEGUI.UVector2(CEGUI.UDim(0.005,0), CEGUI.UDim(0,0))) player:setSize(CEGUI.UVector2(CEGUI.UDim(0.49, 0), CEGUI.UDim(0, P.imageHeight))) item:addChildWindow(player) local score = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Score") score:setText(P.scoreList[k]) score:setPosition(CEGUI.UVector2(CEGUI.UDim(0.5,0), CEGUI.UDim(0,0))) score:setSize(CEGUI.UVector2(CEGUI.UDim(0.495, 0), CEGUI.UDim(0, P.imageHeight))) item:addChildWindow(score) return item end function P.HighscoreGetSelectedLevel() -- choose the active listbox local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/HighscoreTabControl")) local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex())) local choice = listbox:getFirstSelectedItem() if choice ~= nil then -- get the right tab and the right index local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1] local index = tabIndexes[listbox:getItemIndex(choice)+1] return P.levelList[index] else return nil end end function P.Split(str, delim, maxNb) -- Eliminate bad cases... if string.find(str, delim) == nil then return { str } end if maxNb == nil or maxNb < 1 then maxNb = 0 -- No limit end local result = {} local pat = "(.-)" .. delim .. "()" local nb = 0 local lastPos for part, pos in string.gfind(str, pat) do nb = nb + 1 result[nb] = part lastPos = pos if nb == maxNb then break end end -- Handle the last field if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end return result end function P.HighscoreSelectionChanged(e) --local pane = tolua.cast(winMgr:getWindow("orxonox/HighscoreMenuPane"), "CEGUI::ScrollablePane") --pane:moveToFront() --[[local levelDescription = winMgr:getWindow("orxonox/SingleplayerLevelDescription") local configButton = winMgr:getWindow("orxonox/SingleplayerConfigButton") local level = P.HighscoreGetSelectedLevel() if level ~= nil then local levelXMLFilename = level:getXMLFilename() local imageName = level:getScreenshot() -- set the screenshot and the description for the selected level levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image") levelDescription:setText(level:getDescription()) -- only enable config button for "gametype" levels if level:hasTag("gametype") then configButton:setProperty("Disabled", "False") else configButton:setProperty("Disabled", "True") end else -- also take care of "no level selected" levelImage:setProperty("Image", "") levelDescription:setText("") configButton:setProperty("Disabled", "True") end --]] end function P.HighscoreBackButton_clicked(e) hideMenuSheet(P.name) end return P