Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/gamestates2/data/gui/scripts/InitialiseGUI.lua @ 6722

Last change on this file since 6722 was 6722, checked in by rgrieder, 14 years ago

Renamed showGUI and hideGUI to showMenuSheet and hideMenuSheet.

  • Property svn:eol-style set to native
File size: 7.2 KB
Line 
1winMgr   = CEGUI.WindowManager:getSingleton()
2guiMgr   = orxonox.GUIManager:getInstance()
3inputMgr = orxonox.InputManager:getInstance()
4
5local schemeMgr = CEGUI.SchemeManager:getSingleton()
6local system    = CEGUI.System:getSingleton()
7local cursor    = CEGUI.MouseCursor:getSingleton()
8
9-- Load all required skins
10schemeMgr:loadScheme("TaharezGreenLook.scheme")
11--schemeMgr:loadScheme("TaharezLook.scheme")
12--schemeMgr:loadScheme("WindowsLook.scheme")
13--schemeMgr:loadScheme("VanillaLook.scheme")
14--schemeMgr:loadScheme("SleekSpaceLook.scheme")
15
16-- Connect skin specific window types with our own window types
17-- By loading a different file (if there is) you can change the skin
18-- of the menus or the HUD independently
19schemeMgr:loadScheme("TaharezGreenMenuWidgets.scheme")
20menuImageSet = "TaharezGreenLook"
21schemeMgr:loadScheme("TaharezGreenHUDWidgets.scheme")
22hudImageSet = "TaharezGreenLook"
23
24-- Just a remaining test hack
25schemeMgr:loadScheme("OrxonoxGUIScheme.scheme")
26
27system:setDefaultMouseCursor(menuImageSet, "MouseArrow")
28system:setDefaultFont("BlueHighway-12")
29system:setDefaultTooltip("MenuWidgets/Tooltip")
30
31local loadedSheets = {}
32local activeMenuSheets = {size = 0, topSheetTuple = nil}
33--activeHUDSheets  = {size = 0, topSheetTuple = nil}
34local root = nil
35
36-- Require all tools
37require("GUITools")
38
39
40-----------------------
41--- Local functions ---
42-----------------------
43
44-- Loads the GUI with the specified name
45-- The name corresponds to the filename of the *.lua and *.layout files
46-- but without the extension
47local function loadSheet(name)
48    -- Check if it has already been loaded
49    local sheet = loadedSheets[name]
50    if sheet == nil then
51        -- Load the sheet
52        sheet = require(name)
53        sheet:load()
54        loadedSheets[name] = sheet
55    end
56    return sheet
57end
58
59local function hideCursor()
60    if cursor:isVisible() then
61        cursor:hide()
62    end
63end
64
65local function showCursor()
66    if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then
67        cursor:show()
68    end
69end
70
71
72------------------------
73--- Global functions ---
74------------------------
75
76-- ?
77function showMenuSheet(name, bHidePrevious, ptr)
78    local sheet = showMenuSheet(name, bHidePrevious)
79    sheet.overlay = ptr
80    return sheet
81end
82
83-- Shows the specified menu sheet and loads it if neccessary
84function showMenuSheet(name, bHidePrevious)
85    -- Get sheet (or load it)
86    local menuSheet = loadSheet(name)
87    if not menuSheet then
88        return nil
89    end
90
91    -- Use sheet's value if nil was provided
92    if bHidePrevious == nil then
93        bHidePrevious = menuSheet.bHidePrevious
94        assert(bHidePrevious ~= nil)
95    end
96
97    -- Pause game control if this is the first menu to be displayed
98    -- HUGE HACK?
99    if activeMenuSheets.size == 0 then
100        orxonox.HumanController:pauseControl()
101    end
102
103    -- Hide if already displayed (to make sure it is up front in the end)
104    if activeMenuSheets[name] ~= nil then
105        hideMenuSheet(name)
106    end
107
108    -- Add the sheet in a tuple of additional information
109    local sheetTuple =
110    {
111        ["sheet"]          = menuSheet,
112        ["bHidePrevious"]  = bHidePrevious
113    }
114    table.insert(activeMenuSheets, sheetTuple) -- indexed array access
115    activeMenuSheets[name] = sheetTuple -- name access
116    activeMenuSheets.size = activeMenuSheets.size + 1
117    activeMenuSheets.topSheetTuple = sheetTuple
118
119    if not root then
120        setBackground("")
121    end
122
123    -- Add sheet to the root window
124    root:addChildWindow(menuSheet.window)
125
126    -- Handle input distribution
127    orxonox.InputManager:getInstance():enterState(menuSheet.inputState)
128
129    -- Only change cursor situation if menuSheet.tShowCursor ~= TriBool.Dontcare
130    if menuSheet.tShowCursor == TriBool.True then
131        showCursor()
132    elseif menuSheet.tShowCursor == TriBool.False then
133        hideCursor()
134    end
135
136    -- Hide all previous sheets if necessary
137    if bHidePrevious then
138        for i = 1, activeMenuSheets.size - 1 do
139            activeMenuSheets[i].sheet:hide()
140        end
141    end
142
143    menuSheet:show()
144
145    return menuSheet
146end
147
148function hideMenuSheet(name)
149    local sheetTuple = activeMenuSheets[name]
150    if sheetTuple == nil then
151        return
152    end
153
154    -- Hide the sheet
155    sheetTuple.sheet:hide()
156
157    -- Show sheets that were hidden by the sheet to be removed
158    local i = activeMenuSheets.size
159    -- Only do something if all sheets on top of sheetTuple
160    -- have bHidePrevious == true and sheetTuple.bHidePrevious == true
161    while i > 0 do
162        if activeMenuSheets[i].bHidePrevious then
163            if activeMenuSheets[i] == sheetTuple then
164                i = i - 1
165                while i > 0 do
166                    activeMenuSheets[i].sheet:show()
167                    if activeMenuSheets[i].bHidePrevious then
168                        break
169                    end
170                    i = i - 1
171                end
172            end
173            break
174        end
175        i = i - 1
176    end
177
178    -- Remove sheet with its tuple from the table
179    root:removeChildWindow(sheetTuple.sheet.window)
180    table.remove(activeMenuSheets, table.findIndex(activeMenuSheets, sheetTuple))
181    activeMenuSheets[name] = nil
182    activeMenuSheets.size = activeMenuSheets.size - 1
183    activeMenuSheets.topSheetTuple = activeMenuSheets[activeMenuSheets.size]
184
185    -- Leave the input state
186    orxonox.InputManager:getInstance():leaveState(sheetTuple.sheet.inputState)
187   
188    -- CURSOR SHOWING
189    local i = activeMenuSheets.size
190    -- Find top most sheet that doesn't have tShowCusor == TriBool.Dontcare
191    while i > 0 and activeMenuSheets[i].sheet.tShowCursor == TriBool.Dontcare do
192        i = i - 1
193    end
194    if i > 0 and activeMenuSheets[i].sheet.tShowCursor == TriBool.True then
195        showCursor()
196    else
197        hideCursor()
198    end
199
200    -- Resume control if the last menu is hidden
201    if activeMenuSheets.size == 0 then
202        orxonox.HumanController:resumeControl()
203        hideCursor()
204    end
205end
206
207-- Hides all menu GUI sheets
208function hideAllMenuSheets()
209    while activeMenuSheets.size ~= 0 do
210        hideMenuSheet(activeMenuSheets.topSheetTuple.sheet.name)
211    end
212end
213
214function keyESC()
215    -- HUGE, very HUGE hacks!
216    if activeMenuSheets.size == 1 and activeMenuSheets[1].sheet.name == "MainMenu" then
217        orxonox.execute("exit")
218    elseif activeMenuSheets.size > 0 then
219        orxonox.execute("hideMenuSheet "..activeMenuSheets.topSheetTuple.sheet.name)
220    else
221        showMenuSheet("InGameMenu")
222    end
223end
224
225function setBackground(name)
226    local newroot
227    if root ~= nil then
228        root:rename("oldRootWindow")
229    end
230    if name ~= "" then
231        newroot = winMgr:loadWindowLayout(name .. ".layout")
232        newroot:rename("AbsoluteRootWindow")
233        system:setGUISheet(newroot)
234    else
235        newroot = winMgr:createWindow("DefaultWindow", "AbsoluteRootWindow")
236        newroot:setProperty("Alpha", "0.0")
237        newroot:setSize(CEGUI.UVector2(CEGUI.UDim(1.0,0),CEGUI.UDim(1.0,0)))
238        system:setGUISheet(newroot)
239    end
240    if root ~= nil then
241        local child
242        while root:getChildCount()~=0 do
243            child = root:getChildAtIdx(0)
244            root:removeChildWindow(child)
245            newroot:addChildWindow(child)
246        end
247        winMgr:destroyWindow(root)
248    end
249    newroot:show()
250    root = newroot
251end
Note: See TracBrowser for help on using the repository browser.