Changeset 8371 for code/branches/tutoriallevel2/data/gui
- Timestamp:
- May 1, 2011, 2:43:33 PM (14 years ago)
- Location:
- code/branches/tutoriallevel2
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/tutoriallevel2
- Property svn:mergeinfo changed
/code/branches/tutoriallevel (added) merged: 7828-7831,7894,8370
- Property svn:mergeinfo changed
-
code/branches/tutoriallevel2/data/gui/layouts/QuestGUI.layout
r6746 r8371 1 1 <?xml version="1.0" ?> 2 2 <GUILayout> 3 <Window Type="MenuWidgets/StaticImage" Name="orxonox/QuestGUI/Background"> 4 <Property Name="UnifiedSize" Value="{{1.0,0},{1.0,0}}"/> 5 <Property Name="Image" Value="set:MainMenuBackground image:Background"/> 6 <Property Name="FrameEnabled" Value="set:true"/> 7 <Property Name="BackgroundEnabled" Value="set:false"/> 8 <Property Name="InheritsAlpha" Value="False" /> 3 <Window Type="DefaultWindow" Name="orxonox/QuestGUI/Background"> 4 <Property Name="InheritsAlpha" Value="False" /> 5 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" /> 9 6 10 <Window Type="MenuWidgets/Titlebar" Name="orxonox/QuestGUI/Title"> 11 <Property Name="UnifiedPosition" Value="{{0.05,0},{0.05,0}}"/> 12 <Property Name="UnifiedSize" Value="{{0.9,0},{0.05,0}}"/> 13 <Property Name="Text" Value="Your Quests"/> 7 <Window Type="DefaultWindow" Name="orxonox/QuestGUI/MainWindow"> 8 <Property Name="UnifiedAreaRect" Value="{{0.1,0},{0.1,0},{0.9,0},{0.9,0}}" /> 9 10 <Window Type="MenuWidgets/Titlebar" Name="orxonox/QuestGUI/Title"> 11 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,30}}" /> 12 <Property Name="Text" Value="Your Quests"/> 13 </Window> 14 15 <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/MainWindow/LeftPanel"> 16 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,30},{0.5,0},{1,0}}" /> 17 18 <Window Type="MenuWidgets/TabButton" Name="orxonox/QuestGUI/ActiveQuestsButton"> 19 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{0.5,0},{0,30}}" /> 20 <Property Name="Text" Value="active quests"/> 21 <Event Name="Clicked" Function="QuestGUI.showActiveQuestsButton_clicked"/> 22 </Window> 23 <Window Type="MenuWidgets/TabButton" Name="orxonox/QuestGUI/FinishedQuestsButton"> 24 <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0,0},{1,0},{0,30}}" /> 25 <Property Name="Text" Value="finished quests"/> 26 <Event Name="Clicked" Function="QuestGUI.showFinishedQuestsButton_clicked"/> 27 </Window> 28 29 <Window Type="MenuWidgets/Listbox" Name="orxonox/QuestGUI/QuestsList"> 30 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,30},{1,0},{1,0}}" /> 31 <Event Name="ItemSelectionChanged" Function="QuestGUI.changeQuest_clicked"/> 32 </Window> 33 </Window> 34 35 <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/MainWindow/RightPanel"> 36 <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0,30},{1,0},{1,0}}" /> 37 38 <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Title"> 39 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,30}}" /> 40 <Property Name="Text" Value="Quest Title"/> 41 </Window> 42 43 <Window Type="MenuWidgets/ScrollablePane" Name="orxonox/QuestGUI/Quest/ScrollWrapper"> 44 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,30},{1,-4},{1,-4}}" /> 45 46 <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Wrapper"> 47 <Property Name="UnifiedAreaRect" Value="{{0,5},{0,5},{1,-5},{0,0}}" /> 48 <Property Name="FrameEnabled" Value="false" /> 49 <Property Name="Alpha" Value="0" /> 50 51 <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Description"> 52 <Property Name="UnifiedAreaRect" Value="{{0,5},{0,0},{1,-5},{0,0}}" /> 53 <Property Name="InheritsAlpha" Value="False" /> 54 <Property Name="HorzFormatting" Value="WordWrapLeftAligned" /> 55 <Property Name="VertFormatting" Value="TopAligned" /> 56 <Property Name="FrameEnabled" Value="false" /> 57 <Property Name="Text" Value="Quest Description"/> 58 </Window> 59 60 <Window Type="MenuWidgets/Listbox" Name="orxonox/QuestGUI/Quest/SubquestsList"> 61 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" /> 62 <Property Name="InheritsAlpha" Value="False" /> 63 <Event Name="ItemSelectionChanged" Function="QuestGUI.changeToSubquest_clicked"/> 64 </Window> 65 66 <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Hints"> 67 <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,0}}" /> 68 <Property Name="InheritsAlpha" Value="False" /> 69 <Property Name="VertFormatting" Value="TopAligned" /> 70 <Property Name="FrameEnabled" Value="false" /> 71 <Property Name="Text" Value="Hints:" /> 72 </Window> 73 </Window> 74 </Window> 75 </Window> 14 76 </Window> 15 16 <Window Type="MenuWidgets/Listbox" Name="orxonox/QuestGUI/QuestsList">17 <Property Name="UnifiedPosition" Value="{{0.07,0},{0.18,0}}" />18 <Property Name="UnifiedSize" Value="{{0.86,0},{0.8,0}}" />19 <Property Name="Alpha" Value="0.8" />20 </Window>21 22 77 </Window> 23 78 </GUILayout> -
code/branches/tutoriallevel2/data/gui/scripts/NotificationLayer.lua
r8351 r8371 17 17 function P.createQueue(name, size) 18 18 local root = winMgr:getWindow("orxonox/NotificationLayer/Root") 19 local queue = winMgr:createWindow("MenuWidgets/Listbox", "orxonox/NotificationLayer/Root/Queue/" .. name) 20 queue:setProperty("BackgroundColor", "00FFFFFF") -- Set background to be fully transparent. 19 --local queue = winMgr:createWindow("MenuWidgets/Listbox", "orxonox/NotificationLayer/Root/Queue/" .. name) 20 --queue:setProperty("BackgroundColor", "00FFFFFF") -- Set background to be fully transparent. 21 local queue = winMgr:createWindow("MenuWidgets/ScrollablePane", "orxonox/NotificationLayer/Root/Queue/" .. name) 22 queue:setProperty("Alpha", 0.0) 23 --queue:setProperty("FrameEnabled", "false") 21 24 root:addChildWindow(queue) 22 23 queue:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0)))24 queue:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, 0), CEGUI.UDim(0, P.queueHeightHelper(queue, size))))25 25 26 26 local queueTuple = 27 27 { 28 ["window"] = queue, 29 ["name"] = name, 30 ["edit"] = nil, 31 ["visible"] = false 28 ["window"] = queue, 29 ["name"] = name, 30 ["edit"] = nil, 31 ["visible"] = false, 32 ["fontSize"] = 12, 33 ["fontColor"] = "#FFFFFFFF", 34 ["items"] = {}, 35 ["first"] = 1, 36 ["last"] = 1 32 37 } 38 39 queue:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0))) 40 queue:setSize(CEGUI.UVector2(CEGUI.UDim(1.0, 0), CEGUI.UDim(0, P.queueHeightHelper(queueTuple, size)))) 33 41 34 42 P.queueList[name] = queueTuple -- name access … … 52 60 return 53 61 end 54 item = CEGUI.createListboxTextItem(notification) 55 local listbox = CEGUI.toListbox(queue.window) 56 -- Add the item to the top of the listbox. 57 if listbox:getItemCount() == 0 then 58 listbox:addItem(item) 59 else 60 listbox:insertItem(item, listbox:getListboxItemFromIndex(0)) 61 end 62 63 local item = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/NotificationLayer/Root/Queue/" .. queueName .. "/" .. queue.last) 64 item:setText(notification) 65 P.setItemFontHelper(item, queue, true) 66 -- Add the item to the top of the queue. 67 local itemHeight = P.itemHeightHelper(queue) 68 if queue.last-queue.first > 0 then -- If the queue is not empty move all items down 69 for i=queue.first,queue.last-1 do 70 local item = queue.items[i] 71 item:setYPosition(CEGUI.UDim(0, itemHeight*(queue.last-i))) 72 end 73 end 74 queue.window:addChildWindow(item) 75 item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(0, itemHeight))) 76 item:setPosition(CEGUI.UVector2(CEGUI.UDim(0, 0), CEGUI.UDim(0, 0))) 77 item:setProperty("Alpha", 1.0) 78 item:setProperty("InheritsAlpha", "false") 79 item:setProperty("BackgroundEnabled", "false") 80 item:setProperty("FrameEnabled", "false") 81 queue.items[queue.last] = item 82 queue.last = queue.last+1 62 83 63 84 -- If the queue has been invisible, set it to visible. … … 73 94 return 74 95 end 75 local listbox = CEGUI.toListbox(queue.window) 76 -- Removes the item from the bottom of the listbox. 77 listbox:removeItem(listbox:getListboxItemFromIndex(listbox:getItemCount()-1)) 96 local item = queue.items[queue.first] 97 -- Removes the item from the bottom of the queue. 98 queue.window:removeChildWindow(item) 99 winMgr:destroyWindow(item) 100 queue.first = queue.first+1 78 101 79 102 -- Sets the queue to invisible if there are no more notifications in it. 80 if listbox:getItemCount()== 0 then103 if queue.last-queue.first == 0 then 81 104 P.setVisible(queue, false) 82 105 end 83 106 end 84 107 85 -- Removes a notification at a given index from the queue. 108 -- Removes a notification at a given index from the queue. Where the 0th item is the newest and the nth the (n+1)th newest. 86 109 function P.removeNotification(queueName, index) 87 110 local queue = P.queueList[queueName] … … 89 112 return 90 113 end 91 local listbox = CEGUI.toListbox(queue.window) 114 115 index = queue.last-tonumber(index)-1 116 --if index == queue.first then -- If we want to remove the oldest notification, we can just use pop. 117 -- P.popNotification(queueName) 118 -- return 119 --end 120 92 121 -- Removes the item. 93 listbox:removeItem(listbox:getListboxItemFromIndex(tonumber(index))) 122 local item = queue.items[index] 123 queue.window:removeChildWindow(item) 124 winMgr:destroyWindow(item) 125 queue.items[index] = nil 126 127 -- Move the items below, up. 128 local itemHeight = P.itemHeightHelper(queue) 129 local moved = false 130 if index > queue.first then -- Move all older notifications up in the list. 131 for i=index-1,-1,queue.first do 132 cout(0, i) 133 item = queue.items[i] 134 item:setYposition(CEGUI.UDim(0, itemHeight*(queue.last-i-1))) 135 queue.items[i+1] = item 136 end 137 end 138 queue.items[queue.first] = nil 139 queue.first = queue.first+1 94 140 95 141 -- Sets the queue to invisible if there are no more notifications in it. 96 if listbox:getItemCount()== 0 then142 if queue.last-queue.first == 0 then 97 143 P.setVisible(queue, false) 98 144 end … … 105 151 return 106 152 end 107 local listbox = CEGUI.toListbox(queue.window) 108 CEGUI.toListbox(queue.window):resetList() 153 for i=queue.first,queue.last-1 do 154 local item = queue.items[i] 155 queue.window:removeChildWindow(item) 156 winMgr:destroyWindow(item) 157 end 158 queue.items = {} 159 queue.first = 1 160 queue.last = 1 109 161 110 162 -- Sets the queue to invisible. … … 119 171 queue.window:setVisible(visible) 120 172 queue.visible = visible 173 end 174 175 -- Change the position of the queue. 176 -- The parameters are (in order) 'name of the queue', 'relative x-position', 'absolute x-position in pixel', 'relative y-position', 'absolute y-position in pixel'. 177 function P.moveQueue(queueName, relativeXPos, absoluteXPos, relativeYpos, absoluteYPos) 178 local queueWindow = P.queueList[queueName].window 179 queueWindow:setPosition(CEGUI.UVector2(CEGUI.UDim(relativeXPos, absoluteXPos), CEGUI.UDim(relativeYpos, absoluteYPos))) 180 end 181 182 -- Change the size of the queue. 183 -- The parameters are (in order) 'name of the queue', 'relative width', 'absolute width in pixel', 'relative height', 'absolute heigth in pixel'. 184 -- Additionally the last parameter can be ommitted and relativeHeight can be set to the size (i.e. the maximal number of notifications displayed) of the queue, which leads to the height being set such that all notifications can be displayed. 185 function P.resizeQueue(queueName, relativeWidth, absoluteWidth, relativeHeight, absoluteHeigth) 186 local queueWindow = P.queueList[queueName].window 187 if queueWindow == nil then 188 return 189 end 190 if absoluteHeigth == nil then 191 absoluteHeigth = P.queueHeightHelper(P.queueList[queueName], relativeHeight) 192 relativeHeight = 0 193 end 194 queueWindow:setSize(CEGUI.UVector2(CEGUI.UDim(relativeWidth, absoluteWidth), CEGUI.UDim(relativeHeight, absoluteHeigth))) 195 end 196 197 -- Change the font size and font color of all notifications in a queueHeightHelper 198 -- The parameters are (in order) 'name of the queue', 'font size', 'RGBA of the font color in hex notation'. 199 function P.changeQueueFont(queueName, size, color) 200 local queue = P.queueList[queueName] 201 local queueWindow = queue.window 202 if queueWindow == nil then 203 return 204 end 205 206 queue.fontSize = size 207 local changeColor = false 208 if color ~= nil then 209 queue.fontColor = color 210 changeColor = true 211 end 212 for i=queue.first,queue.last-1 do 213 P.setItemFontHelper(queue.items[i], queue, changeColor) 214 end 215 end 216 217 -- Helper function to set the font size and color of a item of a queue. 218 -- The parameters are (in order) 'the ListboxItem', 'the queue table', 'whether color should be changed as well' 219 function P.setItemFontHelper(item, queue, changeColor) 220 --local item = tolua.cast(item, "CEGUI::ListboxTextItem") 221 local fontMgr = CEGUI.FontManager:getSingleton() 222 if fontMgr:isFontPresent("BlueHighway-" .. queue.fontSize) then 223 item:setFont("BlueHighway-" .. queue.fontSize) 224 else 225 orxonox.GUIManager:addFontHelper("BlueHighway-" .. queue.fontSize, queue.fontSize, "bluehigh.ttf") 226 item:setFont("BlueHighway-" .. queue.fontSize) 227 end 228 if changeColor then 229 --item:setProperty("TextColours", "tl:[" .. queue.fontColor .. "] tr:[" .. queue.fontColor .. "] bl:[" .. queue.fontColor .. "] br:[" .. queue.fontColor .. "]") 230 end 121 231 end 122 232 … … 333 443 334 444 -- Is called after the sheet has been hidden. 335 function P. onQuit()445 function P.afterHide() 336 446 -- If we leave the edit mode we show the sheet again. 337 447 if P.editMode then … … 342 452 343 453 -- If the button to save the targets of a queue has been clicked. 344 function P. 454 function P.saveTargets_clicked(e) 345 455 local we = CEGUI.toWindowEventArgs(e) 346 456 local name = we.window:getName() … … 369 479 370 480 -- If the button to save the size if a queue has been clicked. 371 function P. 481 function P.saveSize_clicked(e) 372 482 local we = CEGUI.toWindowEventArgs(e) 373 483 local name = we.window:getName() … … 396 506 397 507 -- If the button to save the display time if a queue has been clicked. 398 function P. 508 function P.saveDisplayTime_clicked(e) 399 509 local we = CEGUI.toWindowEventArgs(e) 400 510 local name = we.window:getName() … … 478 588 -- Helper function. Returns height a queue needs to have to display 'size' items. 479 589 function P.queueHeightHelper(queue, size) 480 local listbox = CEGUI.toListbox(queue) 481 local item = CEGUI.createListboxTextItem("Text") 482 listbox:addItem(item) 483 local singleItemHeight = listbox:getTotalItemsHeight() 484 local lookAndFeel = CEGUI.WidgetLookManager:getSingleton():getWidgetLook(queue:getLookNFeel()) 485 local formattedArea = lookAndFeel:getNamedArea("ItemRenderingArea"):getArea():getPixelRect(queue) 486 local frameHeight = queue:getUnclippedOuterRect():getHeight() - formattedArea:getHeight() 487 listbox:removeItem(item) 488 return frameHeight + singleItemHeight*size 590 --local listbox = CEGUI.toListbox(queue.window) 591 --local item = CEGUI.createListboxTextItem("Text") 592 --P.setItemFontHelper(item, queue, false) 593 --listbox:addItem(item) 594 --local singleItemHeight = listbox:getTotalItemsHeight() 595 local singleItemHeight = P.itemHeightHelper(queue) 596 --local lookAndFeel = CEGUI.WidgetLookManager:getSingleton():getWidgetLook(queue.window:getLookNFeel()) 597 --local formattedArea = lookAndFeel:getNamedArea("ItemRenderingArea"):getArea():getPixelRect(queue.window) 598 --local frameHeight = queue.window:getUnclippedOuterRect():getHeight() - formattedArea:getHeight() 599 --listbox:removeItem(item) 600 --return frameHeight + singleItemHeight*size 601 return singleItemHeight*size + 1 602 end 603 604 function P.itemHeightHelper(queue) 605 local item = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/NotificationLayer/Root/Test/") 606 item:setText("text") 607 P.setItemFontHelper(item, queue, true) 608 queue.window:addChildWindow(item) 609 item:setSize(CEGUI.UVector2(CEGUI.UDim(1, 0), CEGUI.UDim(1, 0))) 610 item:setProperty("FrameEnabled", "false") 611 local height = getStaticTextWindowHeight(item) 612 queue.window:removeChildWindow(item) 613 winMgr:destroyWindow(item) 614 return height 489 615 end 490 616 -
code/branches/tutoriallevel2/data/gui/scripts/QuestGUI.lua
r7732 r8371 3 3 local P = createMenuSheet("QuestGUI") 4 4 5 P.rootWindow = nil 6 P.detailsWindows = {} 5 P.questManager = nil -- The QuestManager. 6 P.showActive = true -- Whether the active or finished quest list is displayed. 7 P.currentQuest = nil -- The quest that is currently displayed. 8 P.player = nil -- The player the quests are displayed for. 7 9 P.quests = {} 8 P.hints = {} 9 P.player = nil 10 P.subquests = {} 10 11 11 12 -- design parameters 12 P.indentWidth = 2013 13 P.scrollbarWidth = 13 14 P.buttonHeight = 30 14 P.frameHeigth = 18 15 P.borderSize = 5 15 16 P.titleHeight = 26 16 P.borderWidth = 5 17 18 --TODO: 19 -- Highlight whether we are currently looking at active or finished quests 20 -- Distinguish completed from failed quests 21 22 function P.onLoad() 23 P.questManager = orxonox.QuestManager:getInstance() -- Store the pointer to the QuestManager as an internal variable to allow for faster access, 24 end 17 25 18 26 function P.onShow() 19 20 local questsList = winMgr:getWindow("orxonox/QuestGUI/QuestsList") 21 27 -- Get the player. 22 28 P.player = orxonox.GUIManager:getInstance():getPlayer(P.name) 23 P.rootWindow = P.createQuestGUI() 24 25 questsList:addChildWindow(P.rootWindow) 26 end 27 28 function P.onHide() 29 P.cleanup() 30 end 31 29 30 -- Load the list of quests to be displayed. 31 P.loadQuestsList(P.currentQuest) 32 end 33 34 -- Loads the list of quests, depending on P.showActive, either the active (P.showActive == true) or the finished, i.e. inactive quests are loaded. 35 -- selectQuest is a pointer to a quest that should be selected, if it is nil the first quest is selected. 36 function P.loadQuestsList(selectQuest) 37 local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList")) 38 P.clearQuestList() 39 40 local selectQuestId = nil 41 if selectQuest ~= nil then 42 selectQuestId = P.questManager:getId(selectQuest) 43 end 44 45 -- Iterate through all root-quests. 46 local numRootQuests = P.questManager:getNumRootQuests(P.player) 47 if numRootQuests > 0 then 48 local i = 0 49 while i <= numRootQuests-1 do 50 local quest = P.questManager:getRootQuest(P.player, i) 51 -- Insert the current quest into the list. 52 local item = P.insertQuest(list, quest) 53 -- If the quest was inserted in the list and is has the same id as the selectQuest (thus it is the same quest) it is selected. 54 if selectQuestId ~= nil and item ~= nil and selectQuestId == P.questManager:getId(quest) then 55 list:setItemSelectState(item, true) 56 end 57 -- Insert all subquests of this rootquest. 58 P.insertSubQuests(list, quest, selectQuestId) 59 i = i+1 60 end 61 -- If there were quests added to the list but there was no selectQuest specified (i.e. selectQuest was nil), the first item is selected. 62 if list:getItemCount() > 0 then 63 if selectQuestId == nil then 64 list:setItemSelectState(list:getListboxItemFromIndex(0), true) -- Select first quest. 65 end 66 -- If there werent any quests added the standard "no quests" message is loaded. 67 else 68 P.loadQuest() 69 end 70 end 71 end 72 73 -- Helper function, recursively inserts all the (active or inactive, depending on P.showActive) subquests of the input quest. 74 -- list is the list into which the subquests should be insterted. 75 -- quest is the quest, whose subquests should be inserted. 76 -- selectQuestId is the id of the quest that should be selected. 77 function P.insertSubQuests(list, quest, selectQuestId) 78 -- Iterate through all sub-quests. 79 local numQuests = P.questManager:getNumSubQuests(quest, P.player) 80 if numQuests > 0 then 81 local i = 0 82 while i <= numQuests-1 do 83 local subquest = P.questManager:getSubQuest(quest, P.player, i) 84 -- Insert the current quest into the list. 85 local item = P.insertQuest(list, subquest) 86 -- If the quest was inserted in the list and is has the same id as the selectQuest (thus it is the same quest) it is selected. 87 if selectQuestId ~= nil and item ~= nil and selectQuestId == P.questManager:getId(subquest) then 88 list:setItemSelectState(item, true) 89 end 90 i = i+1 91 end 92 end 93 end 94 95 -- Helper function, inserts a quest into the list (depending whether active or inactive quests are being shown). Returns nil if the quest was not inserted. 96 -- list is the list into which the quets should be inserted. 97 -- quest is the quest to be inserted. 98 function P.insertQuest(list, quest) 99 if P.showActive == quest:isActive(P.player) then 100 local item = CEGUI.createListboxTextItem(P.questManager:getDescription(quest):getTitle()) 101 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 102 list:addItem(item) 103 table.insert(P.quests, quest) 104 return item 105 end 106 return nil 107 end 108 109 -- Loads the input quest. 110 -- quest the quest to be loaded. 111 function P.loadQuest(quest) 112 113 P.clearQuest() -- Clear the old quest. 114 if quest == nil then -- If quets is nil there is nothing to display. 115 return 116 else 117 local offset = 0 118 119 -- Load title and description 120 local description = P.questManager:getDescription(quest) 121 local titleWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Title") 122 titleWindow:setText(description:getTitle()) 123 local descriptionWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Description") 124 descriptionWindow:setText(description:getDescription()) 125 descriptionWindow:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.borderSize), CEGUI.UDim(1, 0))) 126 descriptionWindow:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, P.borderSize))) 127 local height = getStaticTextWindowHeight(descriptionWindow) 128 descriptionWindow:setHeight(CEGUI.UDim(0, height)) 129 offset = offset + height 130 131 -- Load subquests 132 local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/Quest/SubquestsList")) 133 local numQuests = P.questManager:getNumSubQuests(quest, P.player) 134 local i = 0 135 while i <= numQuests-1 do 136 local quest = P.questManager:getSubQuest(quest, P.player, i) 137 local item = CEGUI.createListboxTextItem(P.questManager:getDescription(quest):getTitle()) 138 item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush") 139 list:addItem(item) 140 table.insert(P.subquests, quest) 141 i = i+1 142 end 143 height = list:getTotalItemsHeight() 144 if height > 0 then 145 height = height+P.frameHeigth 146 end 147 list:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.borderSize), CEGUI.UDim(0, height))) 148 list:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, offset))) 149 offset = offset + height + P.borderSize 150 151 -- Load hints 152 local hintsWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Hints") 153 hintsWindow:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, offset))) 154 hintsWindow:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.borderSize), CEGUI.UDim(0, 0))) 155 height = P.titleHeight 156 local numHints = P.questManager:getNumHints(quest, P.player) 157 local i = 0 158 while i <= numHints-1 do 159 local hint = P.questManager:getHints(quest, P.player, i) 160 height = height + P.insertHint(hintsWindow, hint, i, height) 161 i = i+1 162 end 163 if numHints == 0 then 164 height = 0 165 end 166 hintsWindow:setHeight(CEGUI.UDim(0, height)) 167 offset = offset + height 168 169 -- Set the size of the wrapper 170 local window = winMgr:getWindow("orxonox/QuestGUI/Quest/Wrapper") 171 window:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.borderSize-P.scrollbarWidth), CEGUI.UDim(0,offset+P.borderSize))) 172 end 173 174 P.currentQuest = quest 175 end 176 177 -- Clear the currently displayed quest. 178 function P.clearQuest() 179 -- clear title 180 local titleWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Title") 181 titleWindow:setText("no Quests") 182 183 -- clear description 184 local descriptionWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Description") 185 descriptionWindow:setText("There is currently no quest that can be displayed.") 186 187 -- clear list fo subquests 188 local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/Quest/SubquestsList")) 189 list:resetList() 190 list:setHeight(CEGUI.UDim(0, 0)) 191 P.subquests = {} 192 193 -- clear hints 194 local hints = winMgr:getWindow("orxonox/QuestGUI/Quest/Hints") 195 local numChildren = hints:getChildCount()-2 -- TODO: HACK 196 local i = 0 197 while i < numChildren do 198 local hint = hints:getChild("orxonox/QuestGUI/Quest/Hints/" .. i) 199 if hint ~= nil then 200 hints:removeChildWindow(hint) 201 winMgr:destroyWindow(hint) 202 end 203 i = i+1 204 end 205 hints:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.scrollbarWidth-P.borderSize), CEGUI.UDim(0, 0))) 206 207 P.currentQuest = nil 208 end 209 210 -- Clear the quests list 211 function P.clearQuestList() 212 local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList")) 213 list:resetList() 214 P.quests = {} 215 end 216 217 -- Select an input quest in the input list. 218 -- list is the list in which the input quest is to be selected. 219 -- quest is the quest to be selected. 220 function P.selectQuest(list, quest) 221 if quest == nil then -- If the input quest is nil, there is nothing to be selected, an error is output and the first quest is selected instead. 222 cout(1, "Error in QuestGUI: selectQuest(), input quest is nil. Selecting first.") 223 list:setItemSelectState(list:getListboxItemFromIndex(0), true) -- Select first 224 return 225 end 226 227 local questId = P.questManager:getId(quest) 228 local found = false 229 local index = 0 230 -- Iterate over all quests currently in the list. 231 for k,v in pairs(P.quests) do 232 -- If the id's are the same we have found the quest. 233 if P.questManager:getId(v) == questId then 234 found = true 235 index = k-1 236 end 237 end 238 239 if found then -- If the quest was found it is selected. 240 list:setItemSelectState(list:getListboxItemFromIndex(index), true) 241 else -- If the quest isn't found an error is output and the first quest is selected instead. 242 cout(1, "Error in QuestGUI: selectQuest(), input quest is not in list. Selecting first.") 243 list:setItemSelectState(list:getListboxItemFromIndex(0), true) -- Select first 244 end 245 end 246 247 -- Helper function, insert the input hint into the input hintsWindow. Returns the height of the newly inserted hint. 248 -- hintsWindow is the window in which the hint is to be inserted. 249 -- hint is the hint to be inserted. 250 -- index is the index of the hint. 251 -- offset is the current offset in the hintsWindow. 252 function P.insertHint(hintsWindow, hint, index, offset) 253 -- Create the window for the hint. 254 local window = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/QuestGUI/Quest/Hints/" .. index) 255 window:setProperty("HorzFormatting", "WordWrapLeftAligned") 256 window:setProperty("VertFormatting", "TopAligned") 257 window:setProperty("FrameEnabled", "false") 258 window:setID(index) 259 hintsWindow:addChildWindow(window) 260 local description = P.questManager:getDescription(hint) 261 window:setText(description:getDescription()) 262 window:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.borderSize), CEGUI.UDim(1, 0))) 263 local height = getStaticTextWindowHeight(window) 264 window:setHeight(CEGUI.UDim(0, height)) 265 window:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, offset))) 266 return height 267 end 268 269 -- Show the currently active quests in the quests list. 270 function P.showActiveQuestsButton_clicked(e) 271 if P.showActive == false then 272 P.showActive = true 273 P.loadQuestsList() 274 end 275 end 276 277 -- Show the finished (i.e. inactive) quests in the quests list. 278 function P.showFinishedQuestsButton_clicked(e) 279 if P.showActive == true then 280 P.showActive = false 281 P.loadQuestsList() 282 end 283 end 284 285 -- Change to a new quest. 286 function P.changeQuest_clicked(e) 287 local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList")) 288 local choice = list:getFirstSelectedItem() 289 if choice ~= nil then 290 local index = list:getItemIndex(choice) 291 local quest = P.quests[index+1] 292 if quest ~= nil then 293 P.loadQuest(quest) 294 end 295 end 296 end 297 298 -- Change to a new subquest. 299 function P.changeToSubquest_clicked(e) 300 local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/Quest/SubquestsList")) 301 local questsList = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList")) 302 local choice = list:getFirstSelectedItem() 303 if choice ~= nil then 304 local index = list:getItemIndex(choice) 305 local quest = P.subquests[index+1] 306 if quest ~= nil then 307 -- If the P.showActive must be changed to display the quest the quests list also has to be regenerated. 308 if quest:isActive(P.player) == P.showActive then 309 P.selectQuest(questsList, quest) 310 else 311 P.showActive = quest:isActive(P.player) 312 P.loadQuestsList(quest) 313 end 314 else 315 cout(1, "Error in QuestGUI: changeToSubquest(), quest was nil. Ignoring...") 316 end 317 end 318 end 319 320 -- old: 321 --[[ 32 322 function P.createQuestGUI() 33 323 local questManager = orxonox.QuestManager:getInstance() … … 283 573 winMgr:destroyWindow(P.detailsWindows[detailsNr]) 284 574 P.detailsWindows[detailsNr] = nil 285 end 575 end --]] 286 576 287 577 return P -
code/branches/tutoriallevel2/data/gui/scripts/SingleplayerMenu.lua
r8079 r8371 54 54 index = index + 1 55 55 end 56 56 57 for k,v in pairs(P.levelList) do 57 58 local item = CEGUI.createListboxTextItem(v:getName())
Note: See TracChangeset
for help on using the changeset viewer.