Changeset 6737 for code/branches/gamestates2
- Timestamp:
- Apr 16, 2010, 12:22:12 PM (15 years ago)
- Location:
- code/branches/gamestates2
- Files:
-
- 5 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/gamestates2/data/gui/scripts/InitialiseGUI.lua
r6722 r6737 1 winMgr = CEGUI.WindowManager:getSingleton() 2 guiMgr = orxonox.GUIManager:getInstance() 3 inputMgr = orxonox.InputManager:getInstance() 4 5 local schemeMgr = CEGUI.SchemeManager:getSingleton() 6 local system = CEGUI.System:getSingleton() 7 local cursor = CEGUI.MouseCursor:getSingleton() 1 -- Define some global shortcuts for common Managers 2 guiMgr = orxonox.GUIManager:getInstance() 3 inputMgr = orxonox.InputManager:getInstance() 4 schemeMgr = CEGUI.SchemeManager:getSingleton() 5 winMgr = CEGUI.WindowManager:getSingleton() 8 6 9 7 -- Load all required skins … … 25 23 schemeMgr:loadScheme("OrxonoxGUIScheme.scheme") 26 24 25 local system = CEGUI.System:getSingleton() 27 26 system:setDefaultMouseCursor(menuImageSet, "MouseArrow") 28 27 system:setDefaultFont("BlueHighway-12") 29 28 system:setDefaultTooltip("MenuWidgets/Tooltip") 30 29 31 local loadedSheets = {} 32 local activeMenuSheets = {size = 0, topSheetTuple = nil} 33 --activeHUDSheets = {size = 0, topSheetTuple = nil} 34 local root = nil 35 36 -- Require all tools 30 -- Convenience function and additional tools 37 31 require("GUITools") 38 39 40 -----------------------41 --- Local functions ---42 -----------------------43 44 -- Loads the GUI with the specified name45 -- The name corresponds to the filename of the *.lua and *.layout files46 -- but without the extension47 local function loadSheet(name)48 -- Check if it has already been loaded49 local sheet = loadedSheets[name]50 if sheet == nil then51 -- Load the sheet52 sheet = require(name)53 sheet:load()54 loadedSheets[name] = sheet55 end56 return sheet57 end58 59 local function hideCursor()60 if cursor:isVisible() then61 cursor:hide()62 end63 end64 65 local function showCursor()66 if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then67 cursor:show()68 end69 end70 71 72 ------------------------73 --- Global functions ---74 ------------------------75 76 -- ?77 function showMenuSheet(name, bHidePrevious, ptr)78 local sheet = showMenuSheet(name, bHidePrevious)79 sheet.overlay = ptr80 return sheet81 end82 83 -- Shows the specified menu sheet and loads it if neccessary84 function showMenuSheet(name, bHidePrevious)85 -- Get sheet (or load it)86 local menuSheet = loadSheet(name)87 if not menuSheet then88 return nil89 end90 91 -- Use sheet's value if nil was provided92 if bHidePrevious == nil then93 bHidePrevious = menuSheet.bHidePrevious94 assert(bHidePrevious ~= nil)95 end96 97 -- Pause game control if this is the first menu to be displayed98 -- HUGE HACK?99 if activeMenuSheets.size == 0 then100 orxonox.HumanController:pauseControl()101 end102 103 -- Hide if already displayed (to make sure it is up front in the end)104 if activeMenuSheets[name] ~= nil then105 hideMenuSheet(name)106 end107 108 -- Add the sheet in a tuple of additional information109 local sheetTuple =110 {111 ["sheet"] = menuSheet,112 ["bHidePrevious"] = bHidePrevious113 }114 table.insert(activeMenuSheets, sheetTuple) -- indexed array access115 activeMenuSheets[name] = sheetTuple -- name access116 activeMenuSheets.size = activeMenuSheets.size + 1117 activeMenuSheets.topSheetTuple = sheetTuple118 119 if not root then120 setBackground("")121 end122 123 -- Add sheet to the root window124 root:addChildWindow(menuSheet.window)125 126 -- Handle input distribution127 orxonox.InputManager:getInstance():enterState(menuSheet.inputState)128 129 -- Only change cursor situation if menuSheet.tShowCursor ~= TriBool.Dontcare130 if menuSheet.tShowCursor == TriBool.True then131 showCursor()132 elseif menuSheet.tShowCursor == TriBool.False then133 hideCursor()134 end135 136 -- Hide all previous sheets if necessary137 if bHidePrevious then138 for i = 1, activeMenuSheets.size - 1 do139 activeMenuSheets[i].sheet:hide()140 end141 end142 143 menuSheet:show()144 145 return menuSheet146 end147 148 function hideMenuSheet(name)149 local sheetTuple = activeMenuSheets[name]150 if sheetTuple == nil then151 return152 end153 154 -- Hide the sheet155 sheetTuple.sheet:hide()156 157 -- Show sheets that were hidden by the sheet to be removed158 local i = activeMenuSheets.size159 -- Only do something if all sheets on top of sheetTuple160 -- have bHidePrevious == true and sheetTuple.bHidePrevious == true161 while i > 0 do162 if activeMenuSheets[i].bHidePrevious then163 if activeMenuSheets[i] == sheetTuple then164 i = i - 1165 while i > 0 do166 activeMenuSheets[i].sheet:show()167 if activeMenuSheets[i].bHidePrevious then168 break169 end170 i = i - 1171 end172 end173 break174 end175 i = i - 1176 end177 178 -- Remove sheet with its tuple from the table179 root:removeChildWindow(sheetTuple.sheet.window)180 table.remove(activeMenuSheets, table.findIndex(activeMenuSheets, sheetTuple))181 activeMenuSheets[name] = nil182 activeMenuSheets.size = activeMenuSheets.size - 1183 activeMenuSheets.topSheetTuple = activeMenuSheets[activeMenuSheets.size]184 185 -- Leave the input state186 orxonox.InputManager:getInstance():leaveState(sheetTuple.sheet.inputState)187 188 -- CURSOR SHOWING189 local i = activeMenuSheets.size190 -- Find top most sheet that doesn't have tShowCusor == TriBool.Dontcare191 while i > 0 and activeMenuSheets[i].sheet.tShowCursor == TriBool.Dontcare do192 i = i - 1193 end194 if i > 0 and activeMenuSheets[i].sheet.tShowCursor == TriBool.True then195 showCursor()196 else197 hideCursor()198 end199 200 -- Resume control if the last menu is hidden201 if activeMenuSheets.size == 0 then202 orxonox.HumanController:resumeControl()203 hideCursor()204 end205 end206 207 -- Hides all menu GUI sheets208 function hideAllMenuSheets()209 while activeMenuSheets.size ~= 0 do210 hideMenuSheet(activeMenuSheets.topSheetTuple.sheet.name)211 end212 end213 214 function keyESC()215 -- HUGE, very HUGE hacks!216 if activeMenuSheets.size == 1 and activeMenuSheets[1].sheet.name == "MainMenu" then217 orxonox.execute("exit")218 elseif activeMenuSheets.size > 0 then219 orxonox.execute("hideMenuSheet "..activeMenuSheets.topSheetTuple.sheet.name)220 else221 showMenuSheet("InGameMenu")222 end223 end224 225 function setBackground(name)226 local newroot227 if root ~= nil then228 root:rename("oldRootWindow")229 end230 if name ~= "" then231 newroot = winMgr:loadWindowLayout(name .. ".layout")232 newroot:rename("AbsoluteRootWindow")233 system:setGUISheet(newroot)234 else235 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 end240 if root ~= nil then241 local child242 while root:getChildCount()~=0 do243 child = root:getChildAtIdx(0)244 root:removeChildWindow(child)245 newroot:addChildWindow(child)246 end247 winMgr:destroyWindow(root)248 end249 newroot:show()250 root = newroot251 end -
code/branches/gamestates2/data/gui/scripts/SheetManager.lua
r6722 r6737 1 winMgr = CEGUI.WindowManager:getSingleton() 2 guiMgr = orxonox.GUIManager:getInstance() 3 inputMgr = orxonox.InputManager:getInstance() 1 -- SheetManager.lua 4 2 5 local schemeMgr = CEGUI.SchemeManager:getSingleton() 6 local system = CEGUI.System:getSingleton() 7 local cursor = CEGUI.MouseCursor:getSingleton() 8 9 -- Load all required skins 10 schemeMgr: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 19 schemeMgr:loadScheme("TaharezGreenMenuWidgets.scheme") 20 menuImageSet = "TaharezGreenLook" 21 schemeMgr:loadScheme("TaharezGreenHUDWidgets.scheme") 22 hudImageSet = "TaharezGreenLook" 23 24 -- Just a remaining test hack 25 schemeMgr:loadScheme("OrxonoxGUIScheme.scheme") 26 27 system:setDefaultMouseCursor(menuImageSet, "MouseArrow") 28 system:setDefaultFont("BlueHighway-12") 29 system:setDefaultTooltip("MenuWidgets/Tooltip") 30 3 local cursor = CEGUI.MouseCursor:getSingleton() 31 4 local loadedSheets = {} 32 5 local activeMenuSheets = {size = 0, topSheetTuple = nil} 33 --activeHUDSheets = {size = 0, topSheetTuple = nil} 34 local root = nil 35 36 -- Require all tools 37 require("GUITools") 38 6 local menuSheetsRoot = guiMgr:getMenuRootWindow() 39 7 40 8 ----------------------- … … 42 10 ----------------------- 43 11 12 local function hideCursor() 13 if cursor:isVisible() then 14 cursor:hide() 15 end 16 end 17 18 local function showCursor() 19 if not cursor:isVisible() and inputMgr:isMouseExclusive() then 20 cursor:show() 21 end 22 end 23 24 25 ------------------------ 26 --- Global functions --- 27 ------------------------ 28 44 29 -- Loads the GUI with the specified name 45 30 -- The name corresponds to the filename of the *.lua and *.layout files 46 31 -- but without the extension 47 localfunction loadSheet(name)32 function loadSheet(name) 48 33 -- Check if it has already been loaded 49 34 local sheet = loadedSheets[name] … … 57 42 end 58 43 59 local function hideCursor()60 if cursor:isVisible() then61 cursor:hide()62 end63 end64 65 local function showCursor()66 if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then67 cursor:show()68 end69 end70 71 72 ------------------------73 --- Global functions ---74 ------------------------75 76 44 -- ? 77 45 function showMenuSheet(name, bHidePrevious, ptr) … … 83 51 -- Shows the specified menu sheet and loads it if neccessary 84 52 function showMenuSheet(name, bHidePrevious) 53 if name == "" then 54 return nil 55 end 85 56 -- Get sheet (or load it) 86 57 local menuSheet = loadSheet(name) 87 if not menuSheet then88 return nil89 end90 58 91 59 -- Use sheet's value if nil was provided … … 117 85 activeMenuSheets.topSheetTuple = sheetTuple 118 86 119 if not root then120 setBackground("")121 end122 123 87 -- Add sheet to the root window 124 root:addChildWindow(menuSheet.window)88 menuSheetsRoot:addChildWindow(menuSheet.window) 125 89 126 90 -- Handle input distribution 127 orxonox.InputManager:getInstance():enterState(menuSheet.inputState)91 inputMgr:enterState(menuSheet.inputState) 128 92 129 93 -- Only change cursor situation if menuSheet.tShowCursor ~= TriBool.Dontcare … … 177 141 178 142 -- Remove sheet with its tuple from the table 179 root:removeChildWindow(sheetTuple.sheet.window)143 menuSheetsRoot:removeChildWindow(sheetTuple.sheet.window) 180 144 table.remove(activeMenuSheets, table.findIndex(activeMenuSheets, sheetTuple)) 181 145 activeMenuSheets[name] = nil … … 184 148 185 149 -- Leave the input state 186 orxonox.InputManager:getInstance():leaveState(sheetTuple.sheet.inputState)150 inputMgr:leaveState(sheetTuple.sheet.inputState) 187 151 188 152 -- CURSOR SHOWING … … 223 187 end 224 188 225 function 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 189 function setBackgroundImage(imageSet, imageName) 190 guiMgr:setBackgroundImage(imageSet, imageName) 251 191 end 192 193 ---------------------- 194 --- Initialisation --- 195 ---------------------- 196 197 hideCursor() -
code/branches/gamestates2/src/libraries/core/GUIManager.cc
r6736 r6737 42 42 #include <CEGUISystem.h> 43 43 #include <CEGUIWindow.h> 44 #include <CEGUIWindowManager.h> 44 45 #include <ogreceguirenderer/OgreCEGUIRenderer.h> 45 46 … … 147 148 guiSystem_->injectMousePosition((float)mousePosition.first, (float)mousePosition.second); 148 149 149 // Hide the mouse cursor unless playing in full screen mode 150 if (!GraphicsManager::getInstance().isFullScreen()) 151 CEGUI::MouseCursor::getSingleton().hide(); 152 153 // Initialise the basic Lua code 150 // Initialise the Lua framework and load the schemes 154 151 this->luaState_->doFile("InitialiseGUI.lua"); 152 153 // Create the root nodes 154 this->rootWindow_ = CEGUI::WindowManager::getSingleton().createWindow("MenuWidgets/StaticImage", "AbsoluteRootWindow"); 155 this->rootWindow_->setProperty("FrameEnabled", "False"); 156 this->hudRootWindow_ = CEGUI::WindowManager::getSingleton().createWindow("DefaultWindow", "HUDRootWindow"); 157 this->menuRootWindow_ = CEGUI::WindowManager::getSingleton().createWindow("DefaultWindow", "MenuRootWindow"); 158 // And connect them 159 CEGUI::System::getSingleton().setGUISheet(this->rootWindow_); 160 this->rootWindow_->addChildWindow(this->hudRootWindow_); 161 this->rootWindow_->addChildWindow(this->menuRootWindow_); 162 163 // Set up the sheet manager in the Lua framework 164 this->luaState_->doFile("SheetManager.lua"); 155 165 } 156 166 … … 203 213 @param str 204 214 reference to string object holding the Lua code which is to be executed 205 206 This function gives total access to the GUI. You can execute ANY Lua code here.207 215 */ 208 216 void GUIManager::executeCode(const std::string& str) … … 217 225 void GUIManager::loadGUI(const std::string& name) 218 226 { 219 this->executeCode("load GUI(\"" + name + "\")");227 this->executeCode("loadSheet(\"" + name + "\")"); 220 228 } 221 229 … … 292 300 } 293 301 294 void GUIManager::setBackground(const std::string& name) 295 { 296 this->executeCode("setBackground(\"" + name + "\")"); 302 void GUIManager::setBackgroundImage(const std::string& imageSet, const std::string imageName) 303 { 304 if (imageSet.empty() || imageName.empty()) 305 this->setBackgroundImage("set: " + imageSet + " image: " + imageName); 306 else 307 this->setBackgroundImage(""); 308 } 309 310 void GUIManager::setBackgroundImage(const std::string& image) 311 { 312 if (image.empty()) 313 this->rootWindow_->setProperty("Alpha", "0.0"); 314 else 315 this->rootWindow_->setProperty("Alpha", "1.0"); 316 this->rootWindow_->setProperty("Image", image); 297 317 } 298 318 -
code/branches/gamestates2/src/libraries/core/GUIManager.h
r6736 r6737 79 79 static void hideGUI(const std::string& name); 80 80 void keyESC(); 81 void setBackground(const std::string& name); 81 void setBackgroundImage(const std::string& imageSet, const std::string imageName); // tolua_export 82 void setBackgroundImage(const std::string& image); 82 83 84 //! Creates a new InputState to be used with a GUI Sheet 83 85 const std::string& createInputState(const std::string& name, TriBool::Value showCursor = TriBool::True, TriBool::Value useKeyboard = TriBool::True, bool bBlockJoyStick = false); // tolua_export 86 87 //! Returns the root window for all menu sheets 88 CEGUI::Window* getMenuRootWindow() { return this->menuRootWindow_; } // tolua_export 89 //! Returns the root window for all HUD sheets 90 CEGUI::Window* getHUDRootWindow() { return this->hudRootWindow_; } // tolua_export 84 91 85 92 void setCamera(Ogre::Camera* camera); … … 120 127 CEGUI::ResourceProvider* resourceProvider_; //!< CEGUI's resource provider 121 128 CEGUI::Logger* ceguiLogger_; //!< CEGUI's logger to be able to log CEGUI errors in our log 129 CEGUI::Window* rootWindow_; //!< Root node for all windows 130 CEGUI::Window* hudRootWindow_; //!< Root node for the HUD sheets 131 CEGUI::Window* menuRootWindow_; //!< Root node for the menu sheets (used by Lua) 122 132 std::map<std::string, PlayerInfo*> players_; //!< Stores the player (owner) for each GUI 123 133 Ogre::Camera* camera_; //!< Camera used to render the scene with the GUI -
code/branches/gamestates2/src/orxonox/overlays/GUISheet.cc
r6722 r6737 40 40 : BaseObject(creator) 41 41 , bShowOnLoad_(false) 42 , bShowCursor_(true)43 42 , bHidePrevious_(false) 43 , bHidePreviousSet_(false) 44 44 { 45 45 RegisterObject(GUISheet); … … 57 57 SUPER(GUISheet, XMLPort, xmlElement, mode); 58 58 59 XMLPortParam(GUISheet, "showOnLoad", setShowOnLoad, getShowOnLoad, xmlElement, mode); 60 XMLPortParam(GUISheet, "showCursor", setCursorVisibility, getCursorVisibility, xmlElement, mode); 61 XMLPortParam(GUISheet, "hidePrevious", setPreviousHiding, getPreviousHiding, xmlElement, mode); 62 XMLPortParam(GUISheet, "script", setScript, getScript, xmlElement, mode); 59 XMLPortParam(GUISheet, "showOnLoad", setShowOnLoad, getShowOnLoad, xmlElement, mode); 60 XMLPortParam(GUISheet, "hidePrevious", setPreviousHiding, getPreviousHiding, xmlElement, mode); 61 XMLPortParam(GUISheet, "sheetName", setSheetName, getSheetName, xmlElement, mode); 62 XMLPortParam(GUISheet, "backgroundImage", setBackgroundImage, getBackgroundImage, xmlElement, mode); 63 64 if (this->bShowOnLoad_) 65 this->show(); 63 66 } 64 67 65 68 void GUISheet::show() 66 69 { 67 GUIManager::showGUI(this->script_, this->bHidePrevious_); 70 GUIManager::getInstance().setBackgroundImage(this->backgroundImage_); 71 if (this->bHidePreviousSet_) 72 GUIManager::getInstance().showGUI(this->sheetName_, this->bHidePrevious_); 73 else 74 GUIManager::getInstance().showGUI(this->sheetName_); 68 75 } 69 76 70 77 void GUISheet::hide() 71 78 { 72 GUIManager::hideGUI(this->script_); 79 GUIManager::getInstance().hideGUI(this->sheetName_); 80 if (!this->backgroundImage_.empty()) 81 GUIManager::getInstance().setBackgroundImage(""); 73 82 } 74 83 75 void GUISheet::setS cript(const std::string& filename)84 void GUISheet::setSheetName(const std::string& name) 76 85 { 77 this->script_ = filename; 78 GUIManager::getInstance().loadGUI(this->script_); 79 if (this->bShowOnLoad_) 80 this->show(); 81 } 82 83 void GUISheet::setCursorVisibility(bool bShow) 84 { 85 this->bShowCursor_ = bShow; 86 // TODO: This call has no effect when already showing! 86 this->sheetName_ = name; 87 GUIManager::getInstance().loadGUI(this->sheetName_); 87 88 } 88 89 … … 90 91 { 91 92 this->bHidePrevious_ = bHide; 92 // TODO: This call has no effect when already showing! 93 this->bHidePreviousSet_ = true; 94 // Note: This call has no effect when already showing! 93 95 } 94 96 } -
code/branches/gamestates2/src/orxonox/overlays/GUISheet.h
r6595 r6737 49 49 void hide(); 50 50 51 void setS cript(const std::string& filename);52 inline const std::string& getS cript() const53 { return this->s cript_; }51 void setSheetName(const std::string& name); 52 inline const std::string& getSheetName() const 53 { return this->sheetName_; } 54 54 55 55 inline void setShowOnLoad(bool bShow) … … 58 58 { return this->bShowOnLoad_; } 59 59 60 void setCursorVisibility(bool bShow);61 inline bool getCursorVisibility() const62 { return this->bShowCursor_; }63 64 60 void setPreviousHiding(bool bHide); 65 61 inline bool getPreviousHiding() const 66 62 { return this->bHidePrevious_; } 67 63 64 void setBackgroundImage(const std::string& image) 65 { this->backgroundImage_ = image; } 66 inline const std::string& getBackgroundImage() const 67 { return this->backgroundImage_; } 68 68 69 private: 69 std::string s cript_;70 std::string sheetName_; 70 71 bool bShowOnLoad_; 71 bool bShowCursor_;72 72 bool bHidePrevious_; 73 bool bHidePreviousSet_; 74 std::string backgroundImage_; 73 75 }; 74 76 }
Note: See TracChangeset
for help on using the changeset viewer.