Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 16, 2010, 12:22:12 PM (15 years ago)
Author:
rgrieder
Message:

Background image of the GUI is now managed by GUIManager and kept in a very simple manner: Tell it about the image set and the image name and the it will display it in the root node.
Also split SheetManager.lua from InitialiseGUI.lua to have a separate initialisation, required by GUIManager now.
And modified GUISheet.cc/h accordingly.

Location:
code/branches/gamestates2/data/gui/scripts
Files:
1 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
     2guiMgr    = orxonox.GUIManager:getInstance()
     3inputMgr  = orxonox.InputManager:getInstance()
     4schemeMgr = CEGUI.SchemeManager:getSingleton()
     5winMgr    = CEGUI.WindowManager:getSingleton()
    86
    97-- Load all required skins
     
    2523schemeMgr:loadScheme("OrxonoxGUIScheme.scheme")
    2624
     25local system = CEGUI.System:getSingleton()
    2726system:setDefaultMouseCursor(menuImageSet, "MouseArrow")
    2827system:setDefaultFont("BlueHighway-12")
    2928system:setDefaultTooltip("MenuWidgets/Tooltip")
    3029
    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
    3731require("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
    47 local 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
    57 end
    58 
    59 local function hideCursor()
    60     if cursor:isVisible() then
    61         cursor:hide()
    62     end
    63 end
    64 
    65 local function showCursor()
    66     if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then
    67         cursor:show()
    68     end
    69 end
    70 
    71 
    72 ------------------------
    73 --- Global functions ---
    74 ------------------------
    75 
    76 -- ?
    77 function showMenuSheet(name, bHidePrevious, ptr)
    78     local sheet = showMenuSheet(name, bHidePrevious)
    79     sheet.overlay = ptr
    80     return sheet
    81 end
    82 
    83 -- Shows the specified menu sheet and loads it if neccessary
    84 function 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
    146 end
    147 
    148 function 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
    205 end
    206 
    207 -- Hides all menu GUI sheets
    208 function hideAllMenuSheets()
    209     while activeMenuSheets.size ~= 0 do
    210         hideMenuSheet(activeMenuSheets.topSheetTuple.sheet.name)
    211     end
    212 end
    213 
    214 function 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
    223 end
    224 
    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
    251 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
    42
    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 
     3local cursor = CEGUI.MouseCursor:getSingleton()
    314local loadedSheets = {}
    325local activeMenuSheets = {size = 0, topSheetTuple = nil}
    33 --activeHUDSheets  = {size = 0, topSheetTuple = nil}
    34 local root = nil
    35 
    36 -- Require all tools
    37 require("GUITools")
    38 
     6local menuSheetsRoot = guiMgr:getMenuRootWindow()
    397
    408-----------------------
     
    4210-----------------------
    4311
     12local function hideCursor()
     13    if cursor:isVisible() then
     14        cursor:hide()
     15    end
     16end
     17
     18local function showCursor()
     19    if not cursor:isVisible() and inputMgr:isMouseExclusive() then
     20        cursor:show()
     21    end
     22end
     23
     24
     25------------------------
     26--- Global functions ---
     27------------------------
     28
    4429-- Loads the GUI with the specified name
    4530-- The name corresponds to the filename of the *.lua and *.layout files
    4631-- but without the extension
    47 local function loadSheet(name)
     32function loadSheet(name)
    4833    -- Check if it has already been loaded
    4934    local sheet = loadedSheets[name]
     
    5742end
    5843
    59 local function hideCursor()
    60     if cursor:isVisible() then
    61         cursor:hide()
    62     end
    63 end
    64 
    65 local function showCursor()
    66     if not cursor:isVisible() and orxonox.InputManager:getInstance():isMouseExclusive() then
    67         cursor:show()
    68     end
    69 end
    70 
    71 
    72 ------------------------
    73 --- Global functions ---
    74 ------------------------
    75 
    7644-- ?
    7745function showMenuSheet(name, bHidePrevious, ptr)
     
    8351-- Shows the specified menu sheet and loads it if neccessary
    8452function showMenuSheet(name, bHidePrevious)
     53    if name == "" then
     54        return nil
     55    end
    8556    -- Get sheet (or load it)
    8657    local menuSheet = loadSheet(name)
    87     if not menuSheet then
    88         return nil
    89     end
    9058
    9159    -- Use sheet's value if nil was provided
     
    11785    activeMenuSheets.topSheetTuple = sheetTuple
    11886
    119     if not root then
    120         setBackground("")
    121     end
    122 
    12387    -- Add sheet to the root window
    124     root:addChildWindow(menuSheet.window)
     88    menuSheetsRoot:addChildWindow(menuSheet.window)
    12589
    12690    -- Handle input distribution
    127     orxonox.InputManager:getInstance():enterState(menuSheet.inputState)
     91    inputMgr:enterState(menuSheet.inputState)
    12892
    12993    -- Only change cursor situation if menuSheet.tShowCursor ~= TriBool.Dontcare
     
    177141
    178142    -- Remove sheet with its tuple from the table
    179     root:removeChildWindow(sheetTuple.sheet.window)
     143    menuSheetsRoot:removeChildWindow(sheetTuple.sheet.window)
    180144    table.remove(activeMenuSheets, table.findIndex(activeMenuSheets, sheetTuple))
    181145    activeMenuSheets[name] = nil
     
    184148
    185149    -- Leave the input state
    186     orxonox.InputManager:getInstance():leaveState(sheetTuple.sheet.inputState)
     150    inputMgr:leaveState(sheetTuple.sheet.inputState)
    187151   
    188152    -- CURSOR SHOWING
     
    223187end
    224188
    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
     189function setBackgroundImage(imageSet, imageName)
     190    guiMgr:setBackgroundImage(imageSet, imageName)
    251191end
     192
     193----------------------
     194--- Initialisation ---
     195----------------------
     196
     197hideCursor()
Note: See TracChangeset for help on using the changeset viewer.