Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

erste einbindung des Highscores in der levelinfo

File size: 6.3 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        table.insert(P.nameList, "firsttestPlayer")
25        table.insert(P.nameList, "secondtestPlayer")
26        P.scoreList = {}
27        table.insert(P.scoreList, 120)
28        table.insert(P.scoreList, 20)
29       
30        P.linesList = {}
31
32
33    -- create tabs with desired tab as argument (nil for all)
34   
35    for k,v in pairs(P.levelList) do
36        -- only add level if it has desired tag
37        if tag == nil or v:hasTag(tag) then
38            P.createFilterTab(v:getName(), v:getName())
39        end
40        local highscores = v:getHighscores()
41        orxonox.CommandExecutor:execute("log test:".. highscores)
42
43    end
44    --P.createFilterTab("Minigames", "minigame")
45    --P.createFilterTab("Showcases", "showcase")
46    --P.createFilterTab("Presentations", "presentation")
47    --P.createFilterTab("Tests", "test")
48    --P.createFilterTab("Show All", nil)
49
50   
51end
52
53function P.onShow()
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.createLevelList()
60    P.levelList = {}
61    local size = orxonox.LevelManager:getInstance():getNumberOfLevels()
62    local index = 0
63    local level = nil
64    while index < size do
65        level = orxonox.LevelManager:getInstance():getAvailableLevelListItem(index)
66        if (level ~= nil and level:getXMLFilename() ~= "_temp.oxw" and level:hasTag("minigame")) then
67            local levelXMLFilename = level:getXMLFilename()
68            -- create an imageset for each screenshot
69            local imageName = level:getScreenshot()
70            if imageName ~= "" then
71                CEGUI.ImagesetManager:getSingleton():createFromImageFile(levelXMLFilename..imageName, imageName)
72            else
73                CEGUI.ImagesetManager:getSingleton():createFromImageFile(levelXMLFilename..imageName, "noscreenshot.png")
74            end
75            table.insert(P.levelList, level)
76        end
77        index = index + 1
78    end
79end
80function P.createFilterTab(name, tag)
81    -- create unique tab window name
82    local tabName = "orxonox/HighscoreLevelTab"
83    if tag ~= nil then
84        tabName = tabName..tag
85    end
86
87   
88    -- create new tab window with desired name
89        local default = (winMgr:createWindow("DefaultWindow", tabName))
90    default:setText(name)
91    default:setProperty("UnifiedMaxSize", "{{1,0},{1,0}}")
92    default:setProperty("UnifiedAreaRect", "{{0,0},{0,0},{1,0},{1,0}}")
93    local pane = winMgr:createWindow("MenuWidgets/ScrollablePane", tabName .. "pane") 
94    pane:setSize(CEGUI.UVector2(CEGUI.UDim(1,0),CEGUI.UDim(1,0)))
95    default:addChildWindow(pane)
96
97   
98    local offset = 2
99    for k,v in pairs(P.scoreList) do
100        local line = P.createPickupEntry(tabName .. k,k,tag)
101        table.insert(P.linesList, line)
102        line:setYPosition(CEGUI.UDim(0,offset))
103        offset = offset + line:getHeight():asAbsolute(1)+2
104        pane:addChildWindow(line)
105    end
106
107 
108    local tabControl = winMgr:getWindow("orxonox/HighscoreTabControl")
109    orxonox.GUIManager:subscribeEventHelper(tabControl, "TabSelectionChanged", P.name..".HighscoreSelectionChanged")
110    --if listbox:getItemCount() > 0 then
111        tabControl:addChildWindow(default)
112    --end
113
114   
115end
116function P.createPickupEntry(parent,k,tag)
117   
118    local name = "orxonox/HiscoreEntry" .. parent
119
120    local item = winMgr:createWindow("DefaultWindow", name)
121    item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, P.imageHeight)))
122    item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0)))
123
124    local player = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Player")
125    player:setText(P.nameList[k].. tag)
126    player:setPosition(CEGUI.UVector2(CEGUI.UDim(0.005,0), CEGUI.UDim(0,0)))
127    player:setSize(CEGUI.UVector2(CEGUI.UDim(0.49, 0), CEGUI.UDim(0, P.imageHeight)))
128   
129    item:addChildWindow(player)
130       
131    local score = winMgr:createWindow("MenuWidgets/StaticText", name .. "/Score")
132    score:setText(P.scoreList[k])
133    score:setPosition(CEGUI.UVector2(CEGUI.UDim(0.5,0), CEGUI.UDim(0,0)))
134    score:setSize(CEGUI.UVector2(CEGUI.UDim(0.495, 0), CEGUI.UDim(0, P.imageHeight)))
135   
136    item:addChildWindow(score)
137
138    return item
139end
140function P.HighscoreGetSelectedLevel()
141    -- choose the active listbox
142    local tabControl = CEGUI.toTabControl(winMgr:getWindow("orxonox/HighscoreTabControl"))
143    local listbox = CEGUI.toListbox(tabControl:getTabContentsAtIndex(tabControl:getSelectedTabIndex()))
144    local choice = listbox:getFirstSelectedItem()
145    if choice ~= nil then
146        -- get the right tab and the right index
147        local tabIndexes = P.activeTabIndexes[tabControl:getSelectedTabIndex()+1]
148        local index = tabIndexes[listbox:getItemIndex(choice)+1]
149        return P.levelList[index]
150    else
151        return nil
152    end
153end
154
155function P.HighscoreSelectionChanged(e)
156        --local pane = tolua.cast(winMgr:getWindow("orxonox/HighscoreMenuPane"), "CEGUI::ScrollablePane")
157        --pane:moveToFront()
158    --[[local levelDescription = winMgr:getWindow("orxonox/SingleplayerLevelDescription")
159    local configButton = winMgr:getWindow("orxonox/SingleplayerConfigButton")
160    local level = P.HighscoreGetSelectedLevel()
161    if level ~= nil then
162        local levelXMLFilename = level:getXMLFilename()
163        local imageName = level:getScreenshot()
164        -- set the screenshot and the description for the selected level
165        levelImage:setProperty("Image", "set:"..levelXMLFilename..imageName.." image:full_image")
166        levelDescription:setText(level:getDescription())
167        -- only enable config button for "gametype" levels
168        if level:hasTag("gametype") then
169            configButton:setProperty("Disabled", "False")
170        else
171            configButton:setProperty("Disabled", "True")
172        end
173    else
174        -- also take care of "no level selected"
175        levelImage:setProperty("Image", "")
176        levelDescription:setText("")
177        configButton:setProperty("Disabled", "True")
178    end --]]
179end
180
181
182function P.HighscoreBackButton_clicked(e)
183    hideMenuSheet(P.name)
184end
185
186return P
187
Note: See TracBrowser for help on using the repository browser.