- Timestamp:
- May 1, 2011, 2:43:33 PM (14 years ago)
- Location:
- code/branches/tutoriallevel2
- Files:
-
- 16 edited
- 1 copied
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()) -
code/branches/tutoriallevel2/src/libraries/core/GUIManager.cc
r8351 r8371 37 37 #include <CEGUIDefaultLogger.h> 38 38 #include <CEGUIExceptions.h> 39 #include <CEGUIFontManager.h> 39 40 #include <CEGUIInputEvent.h> 40 41 #include <CEGUIMouseCursor.h> … … 43 44 #include <CEGUIWindow.h> 44 45 #include <CEGUIWindowManager.h> 46 #include <CEGUIXMLAttributes.h> 45 47 #include <elements/CEGUIListbox.h> 46 48 #include <elements/CEGUIListboxItem.h> … … 649 651 } 650 652 653 /** 654 @brief 655 Adds a new freetype font to the CEGUI system. 656 @param name 657 The name of the new font. 658 @param size 659 The font size of the new font in pixels. 660 @param fontName 661 The filename of the font. 662 */ 663 /*static*/ void GUIManager::addFontHelper(const std::string& name, int size, const std::string& fontName) 664 { 665 if(CEGUI::FontManager::getSingleton().isFontPresent(name)) // If a font with that name already exists. 666 return; 667 668 CEGUI::Font* font = NULL; 669 CEGUI::XMLAttributes xmlAttributes; 670 671 // Attributes specified within CEGUIFont 672 xmlAttributes.add("Name", name); 673 xmlAttributes.add("Filename", fontName); 674 xmlAttributes.add("ResourceGroup", ""); 675 xmlAttributes.add("AutoScaled", "true"); 676 xmlAttributes.add("NativeHorzRes", "800"); 677 xmlAttributes.add("NativeVertRes", "600"); 678 679 // Attributes specified within CEGUIXMLAttributes 680 xmlAttributes.add("Size", multi_cast<std::string>(size)); 681 xmlAttributes.add("AntiAlias", "true"); 682 683 font = CEGUI::FontManager::getSingleton().createFont("FreeType", xmlAttributes); 684 if(font != NULL) 685 font->load(); 686 } 687 651 688 } -
code/branches/tutoriallevel2/src/libraries/core/GUIManager.h
r8351 r8371 125 125 126 126 // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work 127 static void subscribeEventHelper(CEGUI::Window* window, const std::string& event, const std::string& function); //tolua_export 128 static void setTooltipTextHelper(CEGUI::ListboxItem* item, const std::string& toooltip); //tolua_export 129 static void setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled); //tolua_export 127 static void subscribeEventHelper(CEGUI::Window* window, const std::string& event, const std::string& function); // tolua_export 128 static void setTooltipTextHelper(CEGUI::ListboxItem* item, const std::string& toooltip); // tolua_export 129 static void setItemTooltipsEnabledHelper(CEGUI::Listbox* listbox, bool enabled); // tolua_export 130 static void addFontHelper(const std::string& name, int size, const std::string& fontName); // tolua_export 130 131 131 132 static GUIManager& getInstance() { return Singleton<GUIManager>::getInstance(); } // tolua_export -
code/branches/tutoriallevel2/src/modules/notifications/NotificationManager.cc
r8079 r8371 40 40 #include "network/Host.h" 41 41 #include "network/NetworkFunction.h" 42 #include "util/Convert.h" 42 43 #include "util/ScopedSingletonManager.h" 43 44 … … 342 343 /** 343 344 @brief 345 Fetches the newest Notifications for a specific NotificationListener and stores them in the input map. 346 @param listener 347 The NotificationListener the Notifications are fetched for. 348 @param map 349 A pointer to a multimap, in which the notifications are stored. The map needs to have been allocated. 350 @param numberOfNotifications 351 The number of newest Notifications to be got. 352 @return 353 Returns true if successful. 354 */ 355 void NotificationManager::getNewestNotifications(NotificationListener* listener, std::multimap<std::time_t, Notification*>* map, int numberOfNotifications) 356 { 357 assert(listener); 358 assert(map); 359 360 std::multimap<std::time_t, Notification*>* notifications = this->notificationLists_[this->listenerList_[listener]]; // All the Notifications for the input NotificationListener. 361 362 if(!notifications->empty()) // If the list of Notifications is not empty. 363 { 364 std::multimap<std::time_t,Notification*>::iterator it = notifications->end(); 365 for(int i = 0; i < numberOfNotifications; i++) // Iterate through the Notifications from the newest until we have the specified number of notifications. 366 { 367 it--; 368 map->insert(std::pair<std::time_t, Notification*>(it->first, it->second)); // Add the found Notifications to the map. 369 if(it == notifications->begin()) 370 break; 371 } 372 } 373 } 374 375 /** 376 @brief 344 377 Enters the edit mode of the NotificationLayer. 345 378 */ … … 387 420 void NotificationManager::loadQueues(void) 388 421 { 389 new NotificationQueue("all"); 422 NotificationQueue* allQueue = new NotificationQueue("all"); 423 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.resizeQueue(\"all\", 0.5, 0, " + multi_cast<std::string>(allQueue->getMaxSize()) + ")"); 424 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.moveQueue(\"all\", 0, 10, 0.3, 0)"); 425 426 NotificationQueue* infoQueue = new NotificationQueue("info", NotificationManager::ALL, 1, -1); 427 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.changeQueueFont(\"info\", 24, \"FFFFFF00\")"); 428 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.resizeQueue(\"info\", 0.6, 0, " + multi_cast<std::string>(infoQueue->getMaxSize()) + ")"); 429 GUIManager::getInstance().getLuaState()->doString("NotificationLayer.moveQueue(\"info\", 0.2, 0, 0.8, 0)"); 390 430 } 391 431 -
code/branches/tutoriallevel2/src/modules/notifications/NotificationManager.h
r7552 r8371 98 98 { this->getNotifications(listener, map, std::time(0)-timeDelay, std::time(0)); } 99 99 100 void getNewestNotifications(NotificationListener* listener, std::multimap<std::time_t, Notification*>* map, int numberOfNotifications); //!< Fetches the newest Notifications for a specific NotificationListener and stores them in the input map. 101 100 102 void enterEditMode(void); //!< Enters the edit mode of the NotificationLayer. 101 103 -
code/branches/tutoriallevel2/src/modules/notifications/NotificationQueue.cc
r8079 r8371 161 161 { 162 162 this->tickTime_ += dt; // Add the time interval that has passed to the time counter. 163 if(this-> tickTime_ >= 1.0) // If the time counter is greater than 1s all Notifications that have expired are removed, if it is smaller we wait to the next tick.163 if(this->displayTime_ != INF && this->tickTime_ >= 1.0) // If the time counter is greater than 1s all Notifications that have expired are removed, if it is smaller we wait to the next tick. 164 164 { 165 165 this->timeLimit_.time = std::time(0)-this->displayTime_; // Container containig the current time. … … 188 188 std::multimap<std::time_t, Notification*>* notifications = new std::multimap<std::time_t, Notification*>; 189 189 // Get the Notifications sent in the interval from now to now minus the display time. 190 NotificationManager::getInstance().getNotifications(this, notifications, this->displayTime_); 190 if(this->displayTime_ == INF) 191 NotificationManager::getInstance().getNewestNotifications(this, notifications, this->getMaxSize()); 192 else 193 NotificationManager::getInstance().getNotifications(this, notifications, this->displayTime_); 191 194 192 195 if(!notifications->empty()) … … 364 367 Sets the maximum number of seconds a Notification is displayed. 365 368 @param time 366 The number of seconds the Notifications is displayed. 367 @return 368 Returns true if successful. 369 */ 370 void NotificationQueue::setDisplayTime(unsigned int time) 369 The number of seconds a Notification is displayed. 370 */ 371 void NotificationQueue::setDisplayTime(int time) 371 372 { 372 373 if(this->displayTime_ == time) -
code/branches/tutoriallevel2/src/modules/notifications/NotificationQueue.h
r7552 r8371 121 121 { return this->maxSize_; } 122 122 123 void setDisplayTime( unsignedint time); //!< Sets the maximum number of seconds a Notification is displayed.123 void setDisplayTime(int time); //!< Sets the maximum number of seconds a Notification is displayed. 124 124 /** 125 125 @brief Returns the time interval the Notification is displayed. 126 126 @return Returns the display time. 127 127 */ 128 inline unsignedint getDisplayTime() const128 inline int getDisplayTime() const 129 129 { return this->displayTime_; } 130 130 // tolua_end … … 152 152 static const unsigned int DEFAULT_SIZE = 5; //!< The default maximum number of Notifications displayed. 153 153 static const unsigned int DEFAULT_DISPLAY_TIME = 30; //!< The default display time. 154 static const int INF = -1; //!< Constant denoting infinity. 154 155 155 156 std::string name_; //!< The name of the NotificationQueue. … … 157 158 unsigned int maxSize_; //!< The maximal number of Notifications displayed. 158 159 unsigned int size_; //!< The number of Notifications displayed. 159 unsignedint displayTime_; //!< The time a Notification is displayed.160 int displayTime_; //!< The time a Notification is displayed. 160 161 161 162 bool registered_; //!< Helper variable to remember whether the NotificationQueue is registered already. -
code/branches/tutoriallevel2/src/modules/objects/triggers/MultiTrigger.cc
r8213 r8371 198 198 if(bActive ^ this->isActive(state->originator)) 199 199 { 200 201 200 bool bFire = true; 202 201 -
code/branches/tutoriallevel2/src/modules/objects/triggers/TriggerBase.h
r8213 r8371 133 133 inline int getActivations(void) const 134 134 { return this->remainingActivations_; } 135 /** 136 @brief Check whether the trigger has still at least one remaining activation. 137 @return Returns true if the trigger has remaining activations (i.e. the number of remaining activations is not zero). 138 */ 139 inline bool hasRemainingActivations(void) const 140 { return this->remainingActivations_ > 0 || this->remainingActivations_ == INF_s; } 135 141 136 142 /** -
code/branches/tutoriallevel2/src/modules/questsystem/QuestManager.cc
r8079 r8371 274 274 int QuestManager::getNumSubQuests(Quest* quest, PlayerInfo* player) 275 275 { 276 if(quest == NULL) 277 return this->getNumRootQuests(player); 278 276 279 std::list<Quest*> quests = quest->getSubQuestList(); 277 280 int numQuests = 0; … … 296 299 Quest* QuestManager::getSubQuest(Quest* quest, PlayerInfo* player, int index) 297 300 { 301 if(quest == NULL) 302 return this->getRootQuest(player, index); 303 298 304 std::list<Quest*> quests = quest->getSubQuestList(); 299 305 for(std::list<Quest*>::iterator it = quests.begin(); it != quests.end(); it++) … … 349 355 /** 350 356 @brief 357 Get the parent-quest of the input Quest for the input player. 358 @param quest 359 The Quest to get the parent-quest of. 360 @param player 361 The player. 362 */ 363 Quest* QuestManager::getParentQuest(Quest* quest) 364 { 365 return quest->getParentQuest(); 366 } 367 368 /** 369 @brief 351 370 Get the QuestDescription of the input Quest. 352 371 @param item … … 375 394 /** 376 395 @brief 396 Get the id of the input Quest. 397 @param item 398 The Quest to get the id of. 399 @return 400 Returns the id of the input Quest. 401 */ 402 const std::string QuestManager::getId(Quest* item) const 403 { 404 return item->getId(); 405 } 406 407 /** 408 @brief 409 Get the id of the input QuestHint. 410 @param item 411 The QuestHint to get the id of. 412 @return 413 Returns the id of the input QuestHint. 414 */ 415 const std::string QuestManager::getId(QuestHint* item) const 416 { 417 return item->getId(); 418 } 419 420 /** 421 @brief 377 422 Retrieve the player for a certain GUI. 378 423 @param guiName -
code/branches/tutoriallevel2/src/modules/questsystem/QuestManager.h
r7552 r8371 81 81 QuestHint* getHints(Quest* quest, orxonox::PlayerInfo* player, int index); //!< Get the index-th QuestHint of the input Quest for the input player. 82 82 83 QuestDescription* getDescription(Quest* item); 84 QuestDescription* getDescription(QuestHint* item); 83 Quest* getParentQuest(Quest* quest); //!< Get the parent-quest of the input Quest. 84 85 QuestDescription* getDescription(Quest* item); //!< Get the QuestDescription of the input Quest. 86 QuestDescription* getDescription(QuestHint* item); //!< Get the QuestDescription of the input QuestHint. 87 88 const std::string getId(Quest* item) const; //!< Get the id of the input Quest. 89 const std::string getId(QuestHint* item) const; //!< Get the id of the input QuestHint. 85 90 // tolua_end 86 91 -
code/branches/tutoriallevel2/src/orxonox/LevelManager.cc
r8079 r8371 222 222 this->nextLevel_ = this->availableLevels_.begin(); 223 223 } 224 224 225 while(this->nextIndex_ != index) 225 226 {
Note: See TracChangeset
for help on using the changeset viewer.