[Orxonox-commit 3137] r7830 - in code/branches/tutoriallevel: data/gui/layouts data/gui/scripts data/levels src/modules/questsystem
dafrick at orxonox.net
dafrick at orxonox.net
Sun Jan 16 14:15:40 CET 2011
Author: dafrick
Date: 2011-01-16 14:15:39 +0100 (Sun, 16 Jan 2011)
New Revision: 7830
Added:
code/branches/tutoriallevel/data/levels/quests.oxw
Modified:
code/branches/tutoriallevel/data/gui/layouts/QuestGUI.layout
code/branches/tutoriallevel/data/gui/scripts/QuestGUI.lua
code/branches/tutoriallevel/data/gui/scripts/SingleplayerMenu.lua
code/branches/tutoriallevel/src/modules/questsystem/QuestManager.cc
code/branches/tutoriallevel/src/modules/questsystem/QuestManager.h
Log:
New implementation of QuestGUI. Should be much more usable now, however there still remain some adjustments to be made.
Modified: code/branches/tutoriallevel/data/gui/layouts/QuestGUI.layout
===================================================================
--- code/branches/tutoriallevel/data/gui/layouts/QuestGUI.layout 2011-01-13 22:43:20 UTC (rev 7829)
+++ code/branches/tutoriallevel/data/gui/layouts/QuestGUI.layout 2011-01-16 13:15:39 UTC (rev 7830)
@@ -1,23 +1,69 @@
<?xml version="1.0" ?>
<GUILayout>
- <Window Type="MenuWidgets/StaticImage" Name="orxonox/QuestGUI/Background">
- <Property Name="UnifiedSize" Value="{{1.0,0},{1.0,0}}"/>
- <Property Name="Image" Value="set:MainMenuBackground image:Background"/>
- <Property Name="FrameEnabled" Value="set:true"/>
- <Property Name="BackgroundEnabled" Value="set:false"/>
- <Property Name="InheritsAlpha" Value="False" />
+ <Window Type="DefaultWindow" Name="orxonox/QuestGUI/Background">
+ <Property Name="InheritsAlpha" Value="False" />
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" />
- <Window Type="MenuWidgets/Titlebar" Name="orxonox/QuestGUI/Title">
- <Property Name="UnifiedPosition" Value="{{0.05,0},{0.05,0}}"/>
- <Property Name="UnifiedSize" Value="{{0.9,0},{0.05,0}}"/>
- <Property Name="Text" Value="Your Quests"/>
- </Window>
+ <Window Type="DefaultWindow" Name="orxonox/QuestGUI/MainWindow">
+ <Property Name="UnifiedAreaRect" Value="{{0.1,0},{0.1,0},{0.9,0},{0.9,0}}" />
- <Window Type="MenuWidgets/Listbox" Name="orxonox/QuestGUI/QuestsList">
- <Property Name="UnifiedPosition" Value="{{0.07,0},{0.18,0}}" />
- <Property Name="UnifiedSize" Value="{{0.86,0},{0.8,0}}" />
- <Property Name="Alpha" Value="0.8" />
+ <Window Type="MenuWidgets/Titlebar" Name="orxonox/QuestGUI/Title">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,30}}" />
+ <Property Name="Text" Value="Your Quests"/>
+ </Window>
+
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/MainWindow/LeftPanel">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,30},{0.5,0},{1,0}}" />
+
+ <Window Type="MenuWidgets/TabButton" Name="orxonox/QuestGUI/ActiveQuestsButton">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{0.5,0},{0,30}}" />
+ <Property Name="Text" Value="active quests"/>
+ <Event Name="Clicked" Function="QuestGUI.showActiveQuestsButton_clicked"/>
+ </Window>
+ <Window Type="MenuWidgets/TabButton" Name="orxonox/QuestGUI/FinishedQuestsButton">
+ <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0,0},{1,0},{0,30}}" />
+ <Property Name="Text" Value="finished quests"/>
+ <Event Name="Clicked" Function="QuestGUI.showFinishedQuestsButton_clicked"/>
+ </Window>
+
+ <Window Type="MenuWidgets/Listbox" Name="orxonox/QuestGUI/QuestsList">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,30},{1,0},{1,0}}" />
+ <Event Name="ItemSelectionChanged" Function="QuestGUI.changeQuest_clicked"/>
+ </Window>
+ </Window>
+
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/MainWindow/RightPanel">
+ <Property Name="UnifiedAreaRect" Value="{{0.5,0},{0,30},{1,0},{1,0}}" />
+
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Title">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,30}}" />
+ <Property Name="Text" Value="Quest Title"/>
+ </Window>
+
+ <Window Type="MenuWidgets/ScrollablePane" Name="orxonox/QuestGUI/Quest/Wrapper">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,30},{1,0},{1,0}}" />
+
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Description">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,0}}" />
+ <Property Name="HorzFormatting" Value="WordWrapLeftAligned" />
+ <Property Name="VertFormatting" Value="TopAligned" />
+ <Property Name="FrameEnabled" Value="false" />
+ <Property Name="Text" Value="Quest Description"/>
+ </Window>
+
+ <Window Type="MenuWidgets/Listbox" Name="orxonox/QuestGUI/Quest/SubquestsList">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{1,0}}" />
+ <Event Name="ItemSelectionChanged" Function="QuestGUI.changeToSubquest_clicked"/>
+ </Window>
+
+ <Window Type="MenuWidgets/StaticText" Name="orxonox/QuestGUI/Quest/Hints">
+ <Property Name="UnifiedAreaRect" Value="{{0,0},{0,0},{1,0},{0,0}}" />
+ <Property Name="VertFormatting" Value="TopAligned" />
+ <Property Name="FrameEnabled" Value="false" />
+ <Property Name="Text" Value="Hints:" />
+ </Window>
+ </Window>
+ </Window>
</Window>
-
</Window>
</GUILayout>
Modified: code/branches/tutoriallevel/data/gui/scripts/QuestGUI.lua
===================================================================
--- code/branches/tutoriallevel/data/gui/scripts/QuestGUI.lua 2011-01-13 22:43:20 UTC (rev 7829)
+++ code/branches/tutoriallevel/data/gui/scripts/QuestGUI.lua 2011-01-16 13:15:39 UTC (rev 7830)
@@ -2,6 +2,20 @@
local P = createMenuSheet("QuestGUI")
+P.questManager = nil -- The QuestManager.
+P.showActive = true -- Whether the active or finished quest list is displayed.
+P.currentQuest = nil -- The quest that is currently displayed.
+P.player = nil -- The player the quests are displayed for.
+P.quests = {}
+P.subquests = {}
+
+-- design parameters
+P.scrollbarWidth = 13
+P.frameHeigth = 18
+P.borderSize = 5
+P.titleHeight = 26
+
+-- old:
P.rootWindow = nil
P.detailsWindows = {}
P.quests = {}
@@ -10,25 +24,276 @@
-- design parameters
P.indentWidth = 20
-P.scrollbarWidth = 13
P.buttonHeight = 30
-P.titleHeight = 26
P.borderWidth = 5
-function P.onShow()
+--TODO:
+-- Highlight whether we are currently looking at active or finished quests
+-- Distinguish completet from failed quests
+-- Add hints
- local questsList = winMgr:getWindow("orxonox/QuestGUI/QuestsList")
+function P.onLoad()
+ P.questManager = orxonox.QuestManager:getInstance()
+end
+function P.onShow()
+ -- Get the player.
P.player = orxonox.GUIManager:getInstance():getPlayer(P.name)
- P.rootWindow = P.createQuestGUI()
- questsList:addChildWindow(P.rootWindow)
+ -- Load the list of quests to be displayed.
+ P.loadQuestsList(P.currentQuest)
end
function P.onHide()
- P.cleanup()
+ --P.cleanup()
end
+function P.loadQuestsList(selectQuest)
+ local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList"))
+ P.clearQuestList()
+
+ local selectQuestId = nil
+ if selectQuest ~= nil then
+ selectQuestId = P.questManager:getId(selectQuest)
+ end
+
+ -- Iterate through all root-quests.
+ local numRootQuests = P.questManager:getNumRootQuests(P.player)
+ if numRootQuests > 0 then
+ local i = 0
+ while i <= numRootQuests-1 do
+ local quest = P.questManager:getRootQuest(P.player, i)
+ local item = P.insertQuest(list, quest)
+ if selectQuestId ~= nil and item ~= nil and selectQuestId == P.questManager:getId(quest) then
+ list:setItemSelectState(item, true)
+ end
+ P.insertSubQuests(list, quest, selectQuestId)
+ i = i+1
+ end
+ if list:getItemCount() > 0 then
+ if selectQuestId == nil then
+ list:setItemSelectState(list:getListboxItemFromIndex(0), true) -- Select first quest.
+ end
+ else
+ P.loadQuest()
+ end
+ end
+end
+
+function P.insertSubQuests(list, quest, selectQuestId)
+ -- Iterate through all sub-quests.
+ local numQuests = P.questManager:getNumSubQuests(quest, P.player)
+ if numQuests > 0 then
+ local i = 0
+ while i <= numQuests-1 do
+ local subquest = P.questManager:getSubQuest(quest, P.player, i)
+ local item = P.insertQuest(list, subquest)
+ if selectQuestId ~= nil and item ~= nil and selectQuestId == P.questManager:getId(subquest) then
+ list:setItemSelectState(item, true)
+ end
+ i = i+1
+ end
+ end
+end
+
+function P.insertQuest(list, quest)
+ if P.showActive == quest:isActive(P.player) then
+ local item = CEGUI.createListboxTextItem(P.questManager:getDescription(quest):getTitle())
+ item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
+ list:addItem(item)
+ table.insert(P.quests, quest)
+ return item
+ end
+ return nil
+end
+
+function P.loadQuest(quest)
+
+ P.clearQuest()
+ if quest == nil then
+ return
+ else
+ local offset = 0
+
+ -- Load title and description
+ local description = P.questManager:getDescription(quest)
+ local titleWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Title")
+ titleWindow:setText(description:getTitle())
+ local descriptionWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Description")
+ descriptionWindow:setText(description:getDescription())
+ descriptionWindow:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.scrollbarWidth-P.borderSize), CEGUI.UDim(1, 0)))
+ descriptionWindow:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, P.borderSize)))
+ local height = getStaticTextWindowHeight(descriptionWindow)
+ descriptionWindow:setHeight(CEGUI.UDim(0, height))
+ offset = offset + height
+
+ -- Load subquests
+ local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/Quest/SubquestsList"))
+ local numQuests = P.questManager:getNumSubQuests(quest, P.player)
+ local i = 0
+ while i <= numQuests-1 do
+ local quest = P.questManager:getSubQuest(quest, P.player, i)
+ --if P.showActive == quest:isActive(P.player) then
+ local item = CEGUI.createListboxTextItem(P.questManager:getDescription(quest):getTitle())
+ item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
+ list:addItem(item)
+ table.insert(P.subquests, quest)
+ --end
+ i = i+1
+ end
+ height = list:getTotalItemsHeight()
+ if height > 0 then
+ height = height+P.frameHeigth
+ end
+ list:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.scrollbarWidth-P.borderSize), CEGUI.UDim(0, height)))
+ list:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, offset)))
+ offset = offset + height
+
+ -- Load hints
+ local hintsWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Hints")
+ hintsWindow:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, offset)))
+ hintsWindow:setWidth(CEGUI.UDim(1, -P.scrollbarWidth-P.borderSize))
+ height = P.titleHeight
+ local numHints = P.questManager:getNumHints(quest, P.player)
+ local i = 0
+ while i <= numHints-1 do
+ local hint = P.questManager:getHints(quest, P.player, i)
+ height = height + P.insertHint(hintsWindow, hint, i, height)
+ i = i+1
+ end
+ hintsWindow:setHeight(CEGUI.UDim(0, height))
+ end
+
+ P.currentQuest = quest
+end
+
+function P.clearQuest()
+ -- clear title
+ local titleWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Title")
+ titleWindow:setText("no Quests")
+
+ -- clear description
+ local descriptionWindow = winMgr:getWindow("orxonox/QuestGUI/Quest/Description")
+ descriptionWindow:setText("There is currently no quest that can be displayed.")
+
+ -- clear list fo subquests
+ local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/Quest/SubquestsList"))
+ list:resetList()
+ list:setHeight(CEGUI.UDim(0, 0))
+ P.subquests = {}
+
+ -- clear hints
+ local hints = winMgr:getWindow("orxonox/QuestGUI/Quest/Hints")
+ local numChildren = hints:getChildCount()-2 -- TODO: HACK
+ local i = 0
+ while i < numChildren do
+ local hint = hints:getChild("orxonox/QuestGUI/Quest/Hints/" .. i)
+ if hint ~= nil then
+ hints:removeChildWindow(hint)
+ winMgr:destroyWindow(hint)
+ end
+ i = i+1
+ end
+ hints:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.scrollbarWidth-P.borderSize), CEGUI.UDim(0, 0)))
+
+ P.currentQuest = nil
+end
+
+function P.clearQuestList()
+ local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList"))
+ list:resetList()
+ P.quests = {}
+end
+
+function P.selectQuest(list, quest)
+ if quest == nil then
+ cout(1, "Error in QuestGUI: selectQuest(), input quest is nil. Selecting first.")
+ list:setItemSelectState(list:getListboxItemFromIndex(0), true) -- Select first
+ return
+ end
+
+ local questId = P.questManager:getId(quest)
+ local found = false
+ local index = 0
+ for k,v in pairs(P.quests) do
+ if P.questManager:getId(v) == questId then
+ found = true
+ index = k-1
+ end
+ end
+ cout(0, questId .. " " .. index)
+ if found then
+ list:setItemSelectState(list:getListboxItemFromIndex(index), true)
+ else
+ cout(1, "Error in QuestGUI: selectQuest(), input quest is not in list. Selecting first.")
+ list:setItemSelectState(list:getListboxItemFromIndex(0), true) -- Select first
+ end
+end
+
+function P.insertHint(hintsWindow, hint, index, offset)
+ local window = winMgr:createWindow("MenuWidgets/StaticText", "orxonox/QuestGUI/Quest/Hints/" .. index)
+ window:setProperty("HorzFormatting", "WordWrapLeftAligned")
+ window:setProperty("VertFormatting", "TopAligned")
+ window:setProperty("FrameEnabled", "false")
+ window:setID(index)
+ hintsWindow:addChildWindow(window)
+ local description = P.questManager:getDescription(hint)
+ window:setText(description:getDescription())
+ window:setSize(CEGUI.UVector2(CEGUI.UDim(1, -P.scrollbarWidth-P.borderSize), CEGUI.UDim(1, 0)))
+ local height = getStaticTextWindowHeight(window)
+ window:setHeight(CEGUI.UDim(0, height))
+ window:setPosition(CEGUI.UVector2(CEGUI.UDim(0, P.borderSize), CEGUI.UDim(0, offset)))
+ return height+P.borderSize
+end
+
+function P.showActiveQuestsButton_clicked(e)
+ if P.showActive == false then
+ P.showActive = true
+ P.loadQuestsList()
+ end
+end
+
+function P.showFinishedQuestsButton_clicked(e)
+ if P.showActive == true then
+ P.showActive = false
+ P.loadQuestsList()
+ end
+end
+
+function P.changeQuest_clicked(e)
+ local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList"))
+ local choice = list:getFirstSelectedItem()
+ if choice ~= nil then
+ local index = list:getItemIndex(choice)
+ local quest = P.quests[index+1]
+ if quest ~= nil then
+ P.loadQuest(quest)
+ end
+ end
+end
+
+function P.changeToSubquest_clicked(e)
+ local list = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/Quest/SubquestsList"))
+ local questsList = CEGUI.toListbox(winMgr:getWindow("orxonox/QuestGUI/QuestsList"))
+ local choice = list:getFirstSelectedItem()
+ if choice ~= nil then
+ local index = list:getItemIndex(choice)
+ local quest = P.subquests[index+1]
+ if quest ~= nil then
+ if quest:isActive(P.player) == P.showActive then
+ P.selectQuest(questsList, quest)
+ else
+ P.showActive = quest:isActive(P.player)
+ P.loadQuestsList(quest)
+ end
+ else
+ cout(1, "Error in QuestGUI: changeToSubquest(), quest was nil. Ignoring...")
+ end
+ end
+end
+
+-- old:
+--[[
function P.createQuestGUI()
local questManager = orxonox.QuestManager:getInstance()
@@ -282,7 +547,7 @@
winMgr:destroyWindow(P.detailsWindows[detailsNr])
P.detailsWindows[detailsNr] = nil
-end
+end --]]
return P
Modified: code/branches/tutoriallevel/data/gui/scripts/SingleplayerMenu.lua
===================================================================
--- code/branches/tutoriallevel/data/gui/scripts/SingleplayerMenu.lua 2011-01-13 22:43:20 UTC (rev 7829)
+++ code/branches/tutoriallevel/data/gui/scripts/SingleplayerMenu.lua 2011-01-16 13:15:39 UTC (rev 7830)
@@ -46,8 +46,7 @@
end
index = index + 1
end
- --TODO: Reintroduce sorting, if needed. At the moment it's sorted by filename.
- --table.sort(levelList)
+
for k,v in pairs(P.levelList) do
local item = CEGUI.createListboxTextItem(v:getName())
item:setSelectionBrushImage(menuImageSet, "MultiListSelectionBrush")
Added: code/branches/tutoriallevel/data/levels/quests.oxw
===================================================================
--- code/branches/tutoriallevel/data/levels/quests.oxw (rev 0)
+++ code/branches/tutoriallevel/data/levels/quests.oxw 2011-01-16 13:15:39 UTC (rev 7830)
@@ -0,0 +1,231 @@
+<LevelInfo
+ name = "Quests showcase"
+ description = "Level to test and showcase quests."
+ tags = "test, showcase"
+/>
+
+<?lua
+ include("HUDTemplates3.oxo")
+ include("stats.oxo")
+ include("templates/spaceshipAssff.oxt")
+ include("templates/lodInformation.oxt")
+?>
+
+<Level
+ name = "Questsystem"
+ description = "Just a few tests"
+>
+ <templates>
+ <Template link=lodtemplate_default />
+ </templates>
+
+ <Scene
+ ambientlight = "0.5, 0.5, 0.5"
+ skybox = "Orxonox/Starbox"
+ >
+
+ <Script code="showGUI NotificationLayer false true" needsGraphics="true" />
+
+ <GlobalQuest id="quest0">
+ <QuestDescription title="Quest 0" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. Integer a nisl odio, in iaculis tortor. Nam erat erat, commodo quis tincidunt et, congue at quam. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+ Ut consequat leo ut quam congue semper et eget nibh. Nunc sit amet velit eu lorem pretium adipiscing eu ut ante. Nulla facilisi. Pellentesque interdum, neque nec consectetur vulputate, mauris risus feugiat nunc, ac sollicitudin neque quam ut tellus. Morbi elit velit, tincidunt et hendrerit eget, rutrum at erat. Duis eros nulla, faucibus vitae blandit vitae, pharetra sollicitudin justo." failMessage="Fail message 0" completeMessage="Complete message 0" />
+ </GlobalQuest>
+ <GlobalQuest id="quest1">
+ <QuestDescription title="Quest 1" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor." failMessage="Fail message 1" completeMessage="Complete message 1" />
+ <hints>
+ <QuestHint id="quest1hint1">
+ <QuestDescription title="The super Hint." description="Be proud of yourself." />
+ </QuestHint>
+ <QuestHint id="quest1hint2">
+ <QuestDescription title="The super Hint2." description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor." />
+ </QuestHint>
+ <QuestHint id="quest1hint3">
+ <QuestDescription title="The super Hint3." description="Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus." />
+ </QuestHint>
+ </hints>
+ <subquests>
+ <GlobalQuest id="quest1.1">
+ <QuestDescription title="Quest 1: Subquest 1" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. Integer a nisl odio, in iaculis tortor. Nam erat erat, commodo quis tincidunt et, congue at quam." failMessage="Fail message 2" completeMessage="Complete message 2" />
+ </GlobalQuest>
+ <GlobalQuest id="quest1.2">
+ <QuestDescription title="Quest 1: Subquest 2" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor." failMessage="Fail message 2" completeMessage="Complete message 2" />
+ </GlobalQuest>
+ <GlobalQuest id="quest1.3">
+ <QuestDescription title="Quest 1: Subquest 3" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas." failMessage="Fail message 2" completeMessage="Complete message 2" />
+ </GlobalQuest>
+ <GlobalQuest id="quest1.4">
+ <QuestDescription title="Quest 1: Subquest 4" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. Integer a nisl odio, in iaculis tortor. Nam erat erat, commodo quis tincidunt et, congue at quam. Lorem ipsum dolor sit amet, consectetur adipiscing elit." failMessage="Fail message 2" completeMessage="Complete message 2" />
+ </GlobalQuest>
+ <GlobalQuest id="quest1.5">
+ <QuestDescription title="Quest 1: Subquest 5" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. Integer a nisl odio, in iaculis tortor. Nam erat erat, commodo quis tincidunt et, congue at quam." failMessage="Fail message 2" completeMessage="Complete message 2" />
+ </GlobalQuest>
+ </subquests>
+ </GlobalQuest>
+ <GlobalQuest id="quest2">
+ <QuestDescription title="Quest 2" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac." failMessage="Fail message 2" completeMessage="Complete message 2" />
+ </GlobalQuest>
+ <GlobalQuest id="quest3">
+ <QuestDescription title="Quest 3" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. Integer a nisl odio, in iaculis tortor. Nam erat erat, commodo quis tincidunt et, congue at quam. Lorem ipsum dolor sit amet, consectetur adipiscing elit." failMessage="Fail message 1" completeMessage="Complete message 1" />
+ </GlobalQuest>
+ <GlobalQuest id="quest4">
+ <QuestDescription title="Quest 4" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. Integer a nisl odio, in iaculis tortor. Nam erat erat, commodo quis tincidunt et, congue at quam. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+
+ Ut consequat leo ut quam congue semper et eget nibh. Nunc sit amet velit eu lorem pretium adipiscing eu ut ante. Nulla facilisi. Pellentesque interdum, neque nec consectetur vulputate, mauris risus feugiat nunc, ac sollicitudin neque quam ut tellus. Morbi elit velit, tincidunt et hendrerit eget, rutrum at erat. Duis eros nulla, faucibus vitae blandit vitae, pharetra sollicitudin justo. Donec luctus est a tortor auctor feugiat." failMessage="Fail message 1" completeMessage="Complete message 1" />
+ </GlobalQuest>
+ <GlobalQuest id="quest5">
+ <QuestDescription title="Quest 5" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa." failMessage="Fail message 1" completeMessage="Complete message 1" />
+ </GlobalQuest>
+ <GlobalQuest id="quest6">
+ <QuestDescription title="Quest 6" description="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus at dolor quis dui gravida faucibus quis ut augue. Nulla sed accumsan nulla. Sed eleifend arcu ante, vel congue neque. Praesent vel felis sit amet lacus elementum laoreet at et massa. Pellentesque imperdiet orci sit amet sem gravida a ornare odio tempor. Donec posuere scelerisque purus, et porttitor ipsum dictum ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed non turpis non eros porttitor dignissim. Phasellus at elit vel diam gravida malesuada ut a lorem. Etiam vel lacus massa. In arcu neque, ultrices at placerat in, facilisis a metus. Curabitur erat nunc, molestie sed pretium ac, ullamcorper eget tellus. Vivamus tortor magna, mollis ut vulputate vel, lacinia nec neque. " failMessage="Fail message 1" completeMessage="Complete message 1" />
+ </GlobalQuest>
+
+ <EventMultiTrigger name=spawntrigger>
+ <events>
+ <trigger>
+ <SpawnPoint position="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipassff />
+ </trigger>
+ </events>
+ </EventMultiTrigger>
+
+ <QuestEffectBeacon times=1>
+ <effects>
+ <AddQuest questId="quest0" />
+ <AddQuest questId="quest1" />
+ <AddQuest questId="quest1.1" />
+ <AddQuest questId="quest1.2" />
+ <AddQuest questId="quest1.3" />
+ <AddQuest questId="quest1.4" />
+ <AddQuest questId="quest1.5" />
+ <AddQuest questId="quest2" />
+ <AddQuest questId="quest3" />
+ <AddQuest questId="quest4" />
+ <AddQuest questId="quest5" />
+ <AddQuest questId="quest6" />
+ <AddQuestHint hintId ="quest1hint1" />
+ <AddQuestHint hintId ="quest1hint2" />
+ <AddQuestHint hintId ="quest1hint3" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=spawntrigger />
+ </execute>
+ </events>
+ </QuestEffectBeacon>
+
+ <QuestEffectBeacon position="-100,0,0" times=1>
+ <effects>
+ <FailQuest questId="quest1.1" />
+ <FailQuest questId="quest1.2" />
+ <FailQuest questId="quest1.3" />
+ <FailQuest questId="quest1.4" />
+ <FailQuest questId="quest1.5" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=dtrigger1 />
+ </execute>
+ </events>
+ <attached>
+ <Billboard position="0,0,0" colour="1.0,0,0" material="Examples/Flare" />
+ <DistanceTrigger name=dtrigger1 position="0,0,0" distance=10 target="Pawn" />
+ </attached>
+ </QuestEffectBeacon>
+
+ <QuestEffectBeacon position="100,0,0" times=-1>
+ <effects>
+ <CompleteQuest questId="quest0" />
+ <CompleteQuest questId="quest1" />
+ <CompleteQuest questId="quest1.1" />
+ <CompleteQuest questId="quest1.2" />
+ <CompleteQuest questId="quest1.3" />
+ <CompleteQuest questId="quest1.4" />
+ <CompleteQuest questId="quest1.5" />
+ <CompleteQuest questId="quest2" />
+ <CompleteQuest questId="quest3" />
+ <CompleteQuest questId="quest4" />
+ <CompleteQuest questId="quest5" />
+ <CompleteQuest questId="quest6" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=dtrigger2 />
+ </execute>
+ </events>
+ <attached>
+ <Billboard position="0,0,0" colour="0,1.0,0" material="Examples/Flare" />
+ <DistanceTrigger name=dtrigger2 position="0,0,0" distance=10 target="Pawn" />
+ </attached>
+ </QuestEffectBeacon>
+
+ <!--QuestEffectBeacon position="0,0,100" times=-1>
+ <effects>
+ <AddQuest questId="b80c2c60-e62c-4637-80f8-5aa18dc93b34" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=qebdt1 />
+ </execute>
+ </events>
+ <attached>
+ <Billboard position="0,0,0" colour="1.0,1.0,1.0" material="Examples/Flare" />
+ <DistanceTrigger name=qebdt1 position="0,0,0" distance=10 target="ControllableEntity" />
+ </attached>
+ </QuestEffectBeacon>
+
+ <QuestEffectBeacon position="-100,0,0" times=-1>
+ <effects>
+ <FailQuest questId="b80c2c60-e62c-4637-80f8-5aa18dc93b34" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=qebdt2 />
+ </execute>
+ </events>
+ <attached>
+ <Billboard position="0,0,0" colour="1.0,0,0" material="Examples/Flare" />
+ <DistanceTrigger name=qebdt2 position="0,0,0" distance=10 target="ControllableEntity" />
+ </attached>
+ </QuestEffectBeacon>
+
+ <QuestEffectBeacon position="100,0,0" times=-1>
+ <effects>
+ <CompleteQuest questId="b80c2c60-e62c-4637-80f8-5aa18dc93b34" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=qebdt3 />
+ </execute>
+ </events>
+ <attached>
+ <Billboard position="0,0,0" colour="0,1.0,0" material="Examples/Flare" />
+ <DistanceTrigger name=qebdt3 position="0,0,0" distance=10 target="ControllableEntity" />
+ </attached>
+ </QuestEffectBeacon>
+
+ <QuestEffectBeacon position="0,100,0" times=-1>
+ <effects>
+ <AddQuestHint hintId="022a859d-08dd-4eac-a085-c28c29c06d48" />
+ </effects>
+ <events>
+ <execute>
+ <EventListener event=qebdt4 />
+ </execute>
+ </events>
+ <attached>
+ <Billboard position="0,0,0" colour="0,0,1.0" material="Examples/Flare" />
+ <DistanceTrigger name=qebdt4 position="0,0,0" distance=10 target="ControllableEntity" />
+ </attached>
+ </QuestEffectBeacon>
+
+ <ParticleEmitter name=firecenter position="0,0,0" source="Orxonox/fire3" active=false>
+ <events>
+ <activity>
+ <QuestListener questId="b80c2c60-e62c-4637-80f8-5aa18dc93b34" mode="complete" />
+ </activity>
+ </events>
+ </ParticleEmitter-->
+
+ </Scene>
+</Level>
+
Modified: code/branches/tutoriallevel/src/modules/questsystem/QuestManager.cc
===================================================================
--- code/branches/tutoriallevel/src/modules/questsystem/QuestManager.cc 2011-01-13 22:43:20 UTC (rev 7829)
+++ code/branches/tutoriallevel/src/modules/questsystem/QuestManager.cc 2011-01-16 13:15:39 UTC (rev 7830)
@@ -273,6 +273,9 @@
*/
int QuestManager::getNumSubQuests(Quest* quest, PlayerInfo* player)
{
+ if(quest == NULL)
+ return this->getNumRootQuests(player);
+
std::list<Quest*> quests = quest->getSubQuestList();
int numQuests = 0;
for(std::list<Quest*>::iterator it = quests.begin(); it != quests.end(); it++)
@@ -295,6 +298,9 @@
*/
Quest* QuestManager::getSubQuest(Quest* quest, PlayerInfo* player, int index)
{
+ if(quest == NULL)
+ return this->getRootQuest(player, index);
+
std::list<Quest*> quests = quest->getSubQuestList();
for(std::list<Quest*>::iterator it = quests.begin(); it != quests.end(); it++)
{
@@ -348,6 +354,19 @@
/**
@brief
+ Get the parent-quest of the input Quest for the input player.
+ @param quest
+ The Quest to get the parent-quest of.
+ @param player
+ The player.
+ */
+ Quest* QuestManager::getParentQuest(Quest* quest)
+ {
+ return quest->getParentQuest();
+ }
+
+ /**
+ @brief
Get the QuestDescription of the input Quest.
@param item
The Quest to get the QuestDescription of.
@@ -374,6 +393,32 @@
/**
@brief
+ Get the id of the input Quest.
+ @param item
+ The Quest to get the id of.
+ @return
+ Returns the id of the input Quest.
+ */
+ const std::string QuestManager::getId(Quest* item) const
+ {
+ return item->getId();
+ }
+
+ /**
+ @brief
+ Get the id of the input QuestHint.
+ @param item
+ The QuestHint to get the id of.
+ @return
+ Returns the id of the input QuestHint.
+ */
+ const std::string QuestManager::getId(QuestHint* item) const
+ {
+ return item->getId();
+ }
+
+ /**
+ @brief
Retrieve the player for a certain GUI.
@param guiName
The name of the GUI the player is retrieved for.
Modified: code/branches/tutoriallevel/src/modules/questsystem/QuestManager.h
===================================================================
--- code/branches/tutoriallevel/src/modules/questsystem/QuestManager.h 2011-01-13 22:43:20 UTC (rev 7829)
+++ code/branches/tutoriallevel/src/modules/questsystem/QuestManager.h 2011-01-16 13:15:39 UTC (rev 7830)
@@ -80,8 +80,13 @@
int getNumHints(Quest* quest, orxonox::PlayerInfo* player); //!< Get the number of QuestHints of the input Quest for the input player.
QuestHint* getHints(Quest* quest, orxonox::PlayerInfo* player, int index); //!< Get the index-th QuestHint of the input Quest for the input player.
- QuestDescription* getDescription(Quest* item);
- QuestDescription* getDescription(QuestHint* item);
+ Quest* getParentQuest(Quest* quest); //!< Get the parent-quest of the input Quest.
+
+ QuestDescription* getDescription(Quest* item); //!< Get the QuestDescription of the input Quest.
+ QuestDescription* getDescription(QuestHint* item); //!< Get the QuestDescription of the input QuestHint.
+
+ const std::string getId(Quest* item) const; //!< Get the id of the input Quest.
+ const std::string getId(QuestHint* item) const; //!< Get the id of the input QuestHint.
// tolua_end
bool registerQuest(Quest* quest); //!< Registers a Quest in the QuestManager.
More information about the Orxonox-commit
mailing list