- Timestamp:
- Dec 23, 2008, 10:40:38 PM (16 years ago)
- Location:
- code/branches/bugger
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/bugger
- Property svn:mergeinfo changed
/code/branches/questsystem2 (added) merged: 2109,2146,2159,2191,2193-2196,2205-2206,2208-2209,2221,2226,2228,2251,2258
- Property svn:mergeinfo changed
-
code/branches/bugger/src/orxonox/objects/quest/GlobalQuest.cc
- Property svn:mergeinfo changed
/code/branches/questsystem2/src/orxonox/objects/quest/GlobalQuest.cc (added) merged: 2146,2159,2191,2205,2226,2251,2258 /code/trunk/src/orxonox/objects/quest/GlobalQuest.cc merged: 1925-2089
r2105 r2530 26 26 * 27 27 */ 28 29 /** 30 @file GlobalQuest.cc 31 @brief 32 Implementation of the GlobalQuest class. 33 */ 28 34 29 35 #include "OrxonoxStableHeaders.h" 30 36 #include "GlobalQuest.h" 31 37 38 #include "orxonox/objects/infos/PlayerInfo.h" 32 39 #include "core/CoreIncludes.h" 33 40 #include "util/Exception.h" 34 41 42 #include "QuestEffect.h" 43 35 44 namespace orxonox { 36 45 … … 39 48 /** 40 49 @brief 41 Constructor. 50 Constructor. Registers the object. 42 51 */ 43 52 GlobalQuest::GlobalQuest(BaseObject* creator) : Quest(creator) 44 53 { 45 54 RegisterObject(GlobalQuest); 46 47 this->initialize();48 55 } 49 56 … … 56 63 57 64 } 58 65 66 /** 67 @brief 68 Method for creating a GlobalQuest object through XML. 69 */ 59 70 void GlobalQuest::XMLPort(Element& xmlelement, XMLPort::Mode mode) 60 71 { 61 72 SUPER(GlobalQuest, XMLPort, xmlelement, mode); 73 74 XMLPortObject(GlobalQuest, QuestEffect, "reward-effects", addRewardEffect, getRewardEffects, xmlelement, mode); 62 75 63 76 COUT(3) << "New GlobalQuest {" << this->getId() << "} created." << std::endl; 64 77 } 65 66 void GlobalQuest::initialize(void) 67 { 68 RegisterObject(GlobalQuest); 69 } 70 71 /** 72 @brief 73 Checks whether the quest can be started. 78 79 /** 80 @brief 81 Fails the Quest for all players. 82 Invokes the fail QuestEffects on all the players possessing this Quest. 83 @param player 84 The player failing it. 85 @return 86 Returns true if the Quest could be failed, false if not. 87 */ 88 bool GlobalQuest::fail(PlayerInfo* player) 89 { 90 if(this->isFailable(player)) //!< Check whether the Quest can be failed. 91 { 92 this->setStatus(player, questStatus::failed); 93 94 //! Iterate through all players possessing this Quest. 95 for(std::set<PlayerInfo*>::const_iterator it = players_.begin(); it != players_.end(); it++) 96 { 97 QuestEffect::invokeEffects(*it, this->getFailEffectList()); 98 } 99 100 return true; 101 } 102 103 COUT(4) << "A non-completable quest was trying to be failed." << std::endl; 104 return false; 105 } 106 107 /** 108 @brief 109 Completes the Quest for all players. 110 Invokes the complete QuestEffects on all the players possessing this Quest. 111 Invokes the reward QuestEffects on the player completing the Quest. 112 @param player 113 The player completing it. 114 @return 115 Returns true if the Quest could be completed, false if not. 116 */ 117 bool GlobalQuest::complete(PlayerInfo* player) 118 { 119 if(this->isCompletable(player)) //!< Check whether the Quest can be completed. 120 { 121 this->setStatus(player, questStatus::completed); 122 123 //! Iterate through all players possessing the Quest. 124 for(std::set<PlayerInfo*>::const_iterator it = players_.begin(); it != players_.end(); it++) 125 { 126 QuestEffect::invokeEffects(*it, this->getCompleteEffectList()); 127 } 128 129 QuestEffect::invokeEffects(player, this->rewards_); //!< Invoke reward QuestEffects on the player completing the Quest. 130 return true; 131 } 132 133 COUT(4) << "A non-completable quest was trying to be completed." << std::endl; 134 return false; 135 } 136 137 /** 138 @brief 139 Checks whether the Quest can be started. 74 140 @param player 75 141 The player for whom is to be checked. … … 79 145 Throws an exception if either isInactive() of isActive() throws one. 80 146 */ 81 bool GlobalQuest::isStartable(const Player* player) const 82 { 83 return this->isInactive(player) || this->isActive(player); 84 } 85 86 /** 87 @brief 88 Checks whether the quest can be failed. 147 bool GlobalQuest::isStartable(const PlayerInfo* player) const 148 { 149 if(!(this->getParentQuest() == NULL || this->getParentQuest()->isActive(player))) 150 { 151 return false; 152 } 153 return (this->isInactive(player) && !(this->status_ == questStatus::completed || this->status_ == questStatus::failed)); 154 } 155 156 /** 157 @brief 158 Checks whether the Quest can be failed. 89 159 @param player 90 160 The player for whom is to be checked. 91 161 @return 92 Returns true if the quest can be failed, false if not.162 Returns true if the Quest can be failed, false if not. 93 163 @throws 94 164 Throws an Exception if isActive() throws one. 95 165 */ 96 bool GlobalQuest::isFailable(const Player * player) const166 bool GlobalQuest::isFailable(const PlayerInfo* player) const 97 167 { 98 168 return this->isActive(player); … … 102 172 /** 103 173 @brief 104 Checks whether the quest can be completed.174 Checks whether the Quest can be completed. 105 175 @param player 106 176 The player for whom is to be checked. 107 177 @return 108 Returns true if the quest can be completed, false if not.178 Returns true if the Quest can be completed, false if not. 109 179 @throws 110 180 Throws an Exception if isActive() throws one. 111 181 */ 112 bool GlobalQuest::isCompletable(const Player * player) const182 bool GlobalQuest::isCompletable(const PlayerInfo* player) const 113 183 { 114 184 return this->isActive(player); … … 117 187 /** 118 188 @brief 119 Returns the status of the quest for a specific player.189 Returns the status of the Quest for a specific player. 120 190 @param player 121 191 The player. … … 123 193 Throws an Exception if player is NULL. 124 194 */ 125 questStatus::Enum GlobalQuest::getStatus(const Player * player) const126 { 127 if(player == NULL) 128 { 129 ThrowException(Argument, "The input Player * is NULL.");130 } 131 132 // TDO: Does this really work???133 std::set<Player *>::const_iterator it = this->players_.find((Player*)(void*)player);134 if (it != this->players_.end()) 195 questStatus::Enum GlobalQuest::getStatus(const PlayerInfo* player) const 196 { 197 if(player == NULL) //!< We don't want NULL-Pointers! 198 { 199 ThrowException(Argument, "The input PlayerInfo* is NULL."); 200 } 201 202 //! Find the player. 203 std::set<PlayerInfo*>::const_iterator it = this->players_.find((PlayerInfo*)(void*)player); 204 if (it != this->players_.end()) //!< If the player was found. 135 205 { 136 206 return this->status_; 137 207 } 138 else 139 { 140 return questStatus::inactive; 141 } 142 208 209 return questStatus::inactive; 143 210 } 144 211 … … 154 221 Returns false if player is NULL. 155 222 */ 156 bool GlobalQuest::setStatus(Player * player, const questStatus::Enum & status)157 { 158 if(player == NULL) 223 bool GlobalQuest::setStatus(PlayerInfo* player, const questStatus::Enum & status) 224 { 225 if(player == NULL) //!< We don't want NULL-Pointers! 159 226 { 160 227 return false; 161 228 } 162 229 163 std::set<Player*>::const_iterator it = this->players_.find(player); 230 //! Find the player. 231 std::set<PlayerInfo*>::const_iterator it = this->players_.find(player); 164 232 if (it == this->players_.end()) //!< Player is not yet in the list. 165 233 { 166 this->players_.insert(player); 167 } 168 this->status_ = status; 234 this->players_.insert(player); //!< Add the player to the set. 235 } 236 237 this->status_ = status; //!< Set the status, which is global, remember...? 169 238 return true; 170 239 } 240 241 /** 242 @brief 243 Adds a reward QuestEffect to the list of reward QuestEffects. 244 @param effect 245 The QuestEffect to be added. 246 @return 247 Returns true if successful. 248 */ 249 bool GlobalQuest::addRewardEffect(QuestEffect* effect) 250 { 251 if(effect == NULL) //!< We don't want NULL-Pointers! 252 { 253 COUT(2) << "The reward effect to be added to quest {" << this->getId() << "} was NULL." << std::endl; 254 return false; 255 } 256 257 this->rewards_.push_back(effect); //!< Add the QuestEffect to the list. 258 259 COUT(3) << "Reward effect was added to Quest {" << this->getId() << "}." << std::endl; 260 return true; 261 } 262 263 /** 264 @brief 265 Returns the reward QuestEffect at the given index. 266 @param index 267 The index. 268 @return 269 Returns the QuestEffect at the given index. 270 */ 271 const QuestEffect* GlobalQuest::getRewardEffects(unsigned int index) const 272 { 273 int i = index; 274 for (std::list<QuestEffect*>::const_iterator effect = this->rewards_.begin(); effect != this->rewards_.end(); ++effect) 275 { 276 if(i == 0) 277 { 278 return *effect; 279 } 280 i--; 281 } 282 return NULL; 283 } 171 284 172 285 - Property svn:mergeinfo changed
Note: See TracChangeset
for help on using the changeset viewer.