- Timestamp:
- Dec 7, 2008, 11:39:44 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/questsystem3/src/orxonox/objects/quest/QuestListener.cc
r2346 r2352 27 27 */ 28 28 29 /** 30 @file QuestListener.cc 31 @brief Implementation of the QuestListener class. 32 */ 33 29 34 #include "OrxonoxStableHeaders.h" 30 35 #include "QuestListener.h" … … 40 45 CreateFactory(QuestListener); 41 46 47 /** 48 @brief 49 Constructor. Registers the object and initializes variables. 50 */ 42 51 QuestListener::QuestListener(BaseObject* creator) : BaseObject(creator) 43 52 { 44 53 RegisterObject(QuestListener); 45 54 46 this->status_ = questListener Status::start;55 this->status_ = questListenerMode::all; 47 56 this->quest_ = NULL; 48 57 } 49 58 59 /** 60 @brief 61 Destructor. 62 */ 50 63 QuestListener::~QuestListener() 51 64 { … … 61 74 62 75 XMLPortParam(QuestListener, "questId", setQuestId, getQuestId, xmlelement, mode); 63 XMLPortParam(QuestListener, "questStatus", setQuestStatus, getQuestStatus, xmlelement, mode); 64 65 this->quest_->addListener(this); 66 67 COUT(3) << "QuestListener created for quest: {" << this->quest_->getId() << "} and status '" << this->getQuestStatus() << "'." << std::endl; 68 } 69 70 void QuestListener::advertiseStatusChange(std::list<QuestListener*> & listeners, const std::string & status) 71 { 72 for (std::list<QuestListener*>::iterator it = listeners.begin(); it != listeners.end(); ++it) 76 XMLPortParam(QuestListener, "mode", setMode, getMode, xmlelement, mode); 77 78 this->quest_->addListener(this); //!< Adds the QuestListener to the Quests list of listeners. 79 80 COUT(3) << "QuestListener created for quest: {" << this->quest_->getId() << "} with mode '" << this->getQuestStatus() << "'." << std::endl; 81 } 82 83 /** 84 @brief 85 Makes all QuestListener in the list aware that a certain status change has occured and executes them if the status change affects them. 86 @param listeners 87 The list of QuestListeners that have to be made aware of the status change. 88 @param status 89 The status that has changed. Can be 'start' (if the Quest was started), 'complete' (if the Quest was completed) or 'fail' (if the Quest was failed). 90 */ 91 /* static */ void QuestListener::advertiseStatusChange(std::list<QuestListener*> & listeners, const std::string & status) 92 { 93 for (std::list<QuestListener*>::iterator it = listeners.begin(); it != listeners.end(); ++it) //!< Iterate through all QuestListeners 73 94 { 74 95 QuestListener* listener = *it; 75 if(listener->get QuestStatus() == status)96 if(listener->getMode() == status || listener->getMode() == questListenerMode::all) //!< Check whether the status change affects the give QuestListener. 76 97 { 77 98 listener->execute(); … … 80 101 } 81 102 103 /** 104 @brief 105 Sets the questId of the Quest the QuestListener reacts to. 106 @param id 107 The questId of the Quest the QUestListener reacts to. 108 @return 109 Returns true if successful. 110 */ 111 bool QuestListener::setQuestId(const std::string & id) 112 { 113 this->quest_ = QuestManager::findQuest(id); //!< Find the Quest corresponding to the given questId. 114 115 if(this->quest_ == NULL) //!< If there is no such Quest. 116 { 117 COUT(1) << "This is bad! The QuestListener has not found a Quest qith a corresponding id." << std::endl; //TDO Throw a damn Exception! 118 return false; 119 } 120 121 return true; 122 } 123 124 /** 125 @brief 126 Sets the mode of the QuestListener. 127 @param mode 128 The mode to be set. Can be eighter 'all', 'start', 'fail' or 'complete'. 129 @return 130 Returns true if successful. 131 */ 132 bool QuestListener::setMode(const std::string & mode) 133 { 134 if(status == "all") 135 { 136 this->status_ = questListenerMode::all; 137 } 138 else if(status == "start") 139 { 140 this->status_ = questListenerMode::start; 141 } 142 else if(status == "fail") 143 { 144 this->status_ = questListenerMode::fail; 145 } 146 else if(status == "complete") 147 { 148 this->status_ = questListenerMode::complete; 149 } 150 else 151 { 152 COUT(2) << "QuestListener with invalid mode '" << mode << "' created. Mode set to 'all'." << std::endl; 153 this->status_ = questListenerMode::all; 154 return false; 155 } 156 157 return true; 158 } 159 160 /** 161 @brief 162 Get the mode of the QuestListener. 163 @return 164 Return the mode of the QuestListener. Can be eighter 'all', 'start', 'fail' or 'complete'. 165 */ 166 const std::string QuestListener::getMode(void) 167 { 168 if(this->status_ == questListenerMode::all) 169 { 170 return "all"; 171 } 172 else if(this->status_ == questListenerMode::start) 173 { 174 return "start"; 175 } 176 else if(this->status_ == questListenerMode::fail) 177 { 178 return "fail"; 179 } 180 else if(this->status_ == questListenerMode::complete) 181 { 182 return "complete"; 183 } 184 else 185 { 186 COUT(1) << "An unforseen, never to happen, Error has occured. This is impossible!" << std::endl; 187 return ""; 188 } 189 } 190 191 /** 192 @brief 193 Executes the QuestListener, resp. fires an Event. 194 @return 195 Returns true if successful. 196 */ 82 197 bool QuestListener::execute() 83 198 { … … 85 200 return true; 86 201 } 87 88 bool QuestListener::setQuestId(const std::string & id)89 {90 this->quest_ = QuestManager::findQuest(id);91 if(this->quest_ == NULL)92 {93 COUT(1) << "This is bad!" << std::endl; //TDO Find a better way.94 return false;95 }96 97 return true;98 }99 100 bool QuestListener::setQuestStatus(const std::string & status)101 {102 if(status == "start")103 {104 this->status_ = questListenerStatus::start;105 return true;106 }107 else if(status == "fail")108 {109 this->status_ = questListenerStatus::fail;110 return true;111 }112 else if(status == "complete")113 {114 this->status_ = questListenerStatus::complete;115 return true;116 }117 else118 {119 COUT(2) << "QuestListener with invalid status '" << status << "' created. Status set to 'start'." << std::endl;120 this->status_ = questListenerStatus::start;121 return false;122 }123 }124 125 const std::string QuestListener::getQuestStatus(void)126 {127 if(this->status_ == questListenerStatus::start)128 {129 return "start";130 }131 else if(this->status_ == questListenerStatus::fail)132 {133 return "fail";134 }135 else if(this->status_ == questListenerStatus::complete)136 {137 return "complete";138 }139 else140 {141 COUT(1) << "An unforseen, never to happen, Error has occured. This is impossible!" << std::endl;142 return "";143 }144 }145 146 202 147 203 }
Note: See TracChangeset
for help on using the changeset viewer.