Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation2/data/gui/scripts/InitialiseGUI.lua @ 6235

Last change on this file since 6235 was 6215, checked in by scheusso, 15 years ago

fix in GUI system

  • Property svn:eol-style set to native
File size: 6.1 KB
Line 
1local schemeMgr = CEGUI.SchemeManager:getSingleton()
2winMgr = CEGUI.WindowManager:getSingleton()
3local logger = CEGUI.Logger:getSingleton()
4local system = CEGUI.System:getSingleton()
5local cursor = CEGUI.MouseCursor:getSingleton()
6
7schemeMgr:loadScheme("TaharezLookSkin.scheme")
8-- load scheme with our own images
9schemeMgr:loadScheme("OrxonoxGUIScheme.scheme")
10
11system:setDefaultMouseCursor("TaharezLook", "MouseArrow")
12system:setDefaultFont("BlueHighway-12")
13system:setDefaultTooltip("TaharezLook/Tooltip")
14
15loadedGUIs = {}
16cursorVisibility = {}
17activeSheets = {}
18nrOfActiveSheets = 0
19root = nil
20bShowsCursor = false
21bHidePrevious = {}
22
23-- Require all tools
24require("GUITools")
25
26-- loads the GUI with the specified filename
27-- be sure to set the global variable "filename" before calling this function
28function loadGUI(filename)
29    -- check if it already exists
30    loadedGui = loadedGUIs[filename]
31    if loadedGui == nil then
32        loadedGuiNS = require(filename)
33        if loadedGuiNS == nil then
34            return
35        end
36        loadedGui = loadedGuiNS:load()
37        loadedGUIs[filename] = loadedGui
38        -- if there has no GUI been loaded yet, set new GUI as current
39        if table.getn(loadedGUIs) == 1 then
40            current = loadedGUIs[1]
41        end
42        -- hide new GUI as we do not want to show it accidentially
43        loadedGui:hide()
44    end
45    return loadedGui
46end
47
48function showGUI(filename, hidePrevious, bCursorVisible, ptr)
49    gui = showGUI(filename, hidePrevious, bCursorVisible)
50    gui.overlay = ptr
51end
52
53-- shows the specified and loads it if not loaded already
54-- be sure to set the global variable "filename" before calling this function
55function showGUI(filename, hidePrevious, bCursorVisible)
56    if bCursorVisible == nil then
57        if nrOfActiveSheets > 0 then
58            bCursorVisible = cursorVisibility[activeSheets[nrOfActiveSheets]]
59        else
60            bCursorVisible = true
61        end
62    end
63
64    if root == nil then
65        setBackground("")
66    end
67
68    local currentGUI = loadedGUIs[filename]
69    if(currentGUI == nil) then
70        currentGUI = loadGUI(filename)
71    end
72
73    if(root:isChild(currentGUI.window)) then
74        root:removeChildWindow(currentGUI.window)
75    end
76    root:addChildWindow(currentGUI.window)
77
78    if bCursorVisible then
79        showCursor()
80    else
81        hideCursor()
82    end
83   
84    if find( activeSheets, filename ) ~= nil then
85        table.remove( activeSheets, find( activeSheets, filename ) )
86        nrOfActiveSheets = nrOfActiveSheets - 1
87    else
88        if nrOfActiveSheets == 0 then
89            orxonox.InputManager:getInstance():enterState("guiMouseOnly")
90            orxonox.HumanController:pauseControl()
91        end
92    end
93    nrOfActiveSheets = nrOfActiveSheets + 1
94    table.insert(activeSheets, filename)
95    activeSheets[nrOfActiveSheets] = filename
96    bHidePrevious[filename]=hidePrevious
97    cursorVisibility[filename] = bCursorVisible
98   
99    if hidePrevious == true then
100        for i=1,nrOfActiveSheets-1 do
101            loadedGUIs[ activeSheets[i] ]:hide()
102        end
103    end
104    currentGUI:show()
105    return currentGUI
106end
107
108function hideCursor()
109    if bShowsCursor==true then
110        bShowsCursor=false
111        cursor:hide()
112    end
113end
114
115function showCursor()
116    if bShowsCursor==false then
117        bShowsCursor=true
118        cursor:show()
119    end
120end
121
122function hideGUI(filename)
123    local currentGUI = loadedGUIs[filename]
124    if currentGUI == nil then
125        return
126    end
127    currentGUI:hide()
128    if bHidePrevious[filename] == true then
129        local i = nrOfActiveSheets-1
130        while i>0 do
131            loadedGUIs[ activeSheets[i] ]:show()
132            if bHidePrevious[filename]==true then
133                break
134            else
135                i=i-1
136            end
137        end
138    end
139    root:removeChildWindow(currentGUI.window)
140    local i=1
141    while activeSheets[i] do
142        if activeSheets[i+1] == nil then
143            if activeSheets[i-1] ~= nil then
144                if cursorVisibility[ activeSheets[i-1] ] == true then
145                    showCursor()
146                else
147                    hideCursor()
148                end
149            else
150                hideCursor()
151            end
152        end
153        if activeSheets[i] == filename then
154            table.remove( activeSheets, i )
155            nrOfActiveSheets = nrOfActiveSheets-1
156        else
157            i = i+1
158        end
159    end
160    cursorVisibility[filename] = nil -- remove the cursor visibility of the current gui from the table
161    bHidePrevious[filename] = nil
162    if nrOfActiveSheets == 0 then
163        orxonox.InputManager:getInstance():leaveState("guiMouseOnly")
164        orxonox.HumanController:resumeControl()
165        hideCursor()
166    end
167end
168
169function hideAllGUIs()
170    while nrOfActiveSheets ~= 0 do
171        hideGUI(activeSheets[nrOfActiveSheets])
172    end
173end
174
175function keyESC()
176    if nrOfActiveSheets == 1 and activeSheets[1] == "MainMenu" then
177        orxonox.CommandExecutor:execute("exit")
178    elseif nrOfActiveSheets > 0 then
179        orxonox.CommandExecutor:execute("hideGUI "..activeSheets[nrOfActiveSheets])
180    else
181        showGUI("InGameMenu")
182    end
183end
184
185function setBackground(filename)
186    local newroot
187    if root ~= nil then
188        root:rename("oldRootWindow")
189    end
190    if filename ~= "" then
191        newroot = winMgr:loadWindowLayout(filename .. ".layout")
192        newroot:rename("AbsoluteRootWindow")
193        system:setGUISheet(newroot)
194    else
195        newroot = winMgr:createWindow("DefaultWindow", "AbsoluteRootWindow")
196        newroot:setProperty("Alpha", "0.0")
197        newroot:setSize(CEGUI.UVector2(CEGUI.UDim(1.0,0),CEGUI.UDim(1.0,0)))
198        system:setGUISheet(newroot)
199    end
200    if root ~= nil then
201        local child
202        while root:getChildCount()~=0 do
203            child = root:getChildAtIdx(0)
204            root:removeChildWindow(child)
205            newroot:addChildWindow(child)
206        end
207        winMgr:destroyWindow(root)
208    end
209    newroot:show()
210    root = newroot
211end
212
213function find(table, value)
214    local i=0
215    while table[i] ~= nil do
216        if table[i]==value then
217            return i
218        else
219            i=i+1
220        end
221    end
222    return nil
223end
Note: See TracBrowser for help on using the repository browser.