Changeset 8637 for code/branches/presentation/src/orxonox
- Timestamp:
- May 28, 2011, 5:10:01 PM (14 years ago)
- Location:
- code/branches/presentation
- Files:
-
- 9 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentation
- Property svn:mergeinfo changed
/code/branches/tutoriallevel (added) merged: 7828-7831,7894,8370 /code/branches/tutoriallevel2 (added) merged: 8371,8374,8376-8378,8444-8451 /code/branches/tutoriallevel3 (added) merged: 8453,8634,8636
- Property svn:mergeinfo changed
-
code/branches/presentation/src/orxonox/LevelManager.cc
r8079 r8637 222 222 this->nextLevel_ = this->availableLevels_.begin(); 223 223 } 224 224 225 while(this->nextIndex_ != index) 225 226 { -
code/branches/presentation/src/orxonox/gametypes/Gametype.cc
r8631 r8637 58 58 59 59 this->defaultControllableEntity_ = Class(Spectator); 60 60 61 61 this->bAutoStart_ = false; 62 62 this->bForceSpawn_ = false; … … 121 121 } 122 122 123 if (this->gtinfo_->bStartCountdownRunning_ && !this->gtinfo_->bStarted_) 124 this->gtinfo_->startCountdown_ -= dt; 125 126 if (!this->gtinfo_->bStarted_) 123 if (this->gtinfo_->isStartCountdownRunning() && !this->gtinfo_->hasStarted()) 124 this->gtinfo_->countdownStartCountdown(dt); 125 126 if (!this->gtinfo_->hasStarted()) 127 { 128 for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it) 129 { 130 // Inform the GametypeInfo that the player is ready to spawn. 131 if(it->first->isHumanPlayer() && it->first->isReadyToSpawn()) 132 this->gtinfo_->playerReadyToSpawn(it->first); 133 } 134 127 135 this->checkStart(); 128 else if (!this->gtinfo_->bEnded_) 136 } 137 else if (!this->gtinfo_->hasEnded()) 129 138 this->spawnDeadPlayersIfRequested(); 130 139 … … 136 145 this->addBots(this->numberOfBots_); 137 146 138 this->gtinfo_-> bStarted_ = true;147 this->gtinfo_->start(); 139 148 140 149 this->spawnPlayersIfRequested(); … … 143 152 void Gametype::end() 144 153 { 145 this->gtinfo_-> bEnded_ = true;154 this->gtinfo_->end(); 146 155 147 156 for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it) … … 173 182 { 174 183 this->players_[player].state_ = PlayerState::Joined; 184 this->gtinfo_->playerEntered(player); 175 185 } 176 186 … … 269 279 } 270 280 } 281 282 if(victim->getPlayer()->isHumanPlayer()) 283 this->gtinfo_->pawnKilled(victim->getPlayer()); 271 284 272 285 ControllableEntity* entity = this->defaultControllableEntity_.fabricate(victim->getCreator()); … … 345 358 it->second.state_ = PlayerState::Dead; 346 359 347 if (!it->first->isReadyToSpawn() || !this->gtinfo_-> bStarted_)360 if (!it->first->isReadyToSpawn() || !this->gtinfo_->hasStarted()) 348 361 { 349 362 this->spawnPlayerAsDefaultPawn(it->first); … … 356 369 void Gametype::checkStart() 357 370 { 358 if (!this->gtinfo_-> bStarted_)359 { 360 if (this->gtinfo_-> bStartCountdownRunning_)361 { 362 if (this->gtinfo_-> startCountdown_ <= 0)363 { 364 this->gtinfo_-> bStartCountdownRunning_ = false;365 this->gtinfo_->s tartCountdown_ = 0;371 if (!this->gtinfo_->hasStarted()) 372 { 373 if (this->gtinfo_->isStartCountdownRunning()) 374 { 375 if (this->gtinfo_->getStartCountdown() <= 0.0f) 376 { 377 this->gtinfo_->stopStartCountdown(); 378 this->gtinfo_->setStartCountdown(0.0f);; 366 379 this->start(); 367 380 } … … 388 401 // If in developer's mode, there is no start countdown. 389 402 if(Core::getInstance().inDevMode()) 390 this-> gtinfo_->startCountdown_ = 0;403 this->start(); 391 404 else 392 this->gtinfo_->s tartCountdown_ = this->initialStartCountdown_;393 this->gtinfo_-> bStartCountdownRunning_ = true;405 this->gtinfo_->setStartCountdown(this->initialStartCountdown_); 406 this->gtinfo_->startStartCountdown(); 394 407 } 395 408 } … … 401 414 { 402 415 for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it) 416 { 403 417 if (it->first->isReadyToSpawn() || this->bForceSpawn_) 404 418 this->spawnPlayer(it->first); 419 } 405 420 } 406 421 … … 421 436 player->startControl(spawnpoint->spawn()); 422 437 this->players_[player].state_ = PlayerState::Alive; 438 439 if(player->isHumanPlayer()) 440 this->gtinfo_->playerSpawned(player); 441 423 442 this->playerPostSpawn(player); 424 443 } -
code/branches/presentation/src/orxonox/gametypes/Gametype.h
r8178 r8637 78 78 79 79 inline bool hasStarted() const 80 { return this->gtinfo_-> bStarted_; }80 { return this->gtinfo_->hasStarted(); } 81 81 inline bool hasEnded() const 82 { return this->gtinfo_-> bEnded_; }82 { return this->gtinfo_->hasEnded(); } 83 83 84 84 virtual void start(); … … 114 114 115 115 inline bool isStartCountdownRunning() const 116 { return this->gtinfo_-> bStartCountdownRunning_; }116 { return this->gtinfo_->isStartCountdownRunning(); } 117 117 inline float getStartCountdown() const 118 { return this->gtinfo_-> startCountdown_; }118 { return this->gtinfo_->getStartCountdown(); } 119 119 120 120 inline void setHUDTemplate(const std::string& name) 121 { this->gtinfo_-> hudtemplate_ = name; }121 { this->gtinfo_->setHUDTemplate(name); } 122 122 inline const std::string& getHUDTemplate() const 123 { return this->gtinfo_-> hudtemplate_; }123 { return this->gtinfo_->getHUDTemplate(); } 124 124 125 125 void addBots(unsigned int amount); … … 167 167 168 168 SmartPtr<GametypeInfo> gtinfo_; 169 169 170 170 bool bAutoStart_; 171 171 bool bForceSpawn_; -
code/branches/presentation/src/orxonox/infos/GametypeInfo.cc
r8327 r8637 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Damian 'Mozork' Frick 26 26 * 27 27 */ 28 29 /** 30 @file GametypeInfo.cc 31 @brief Implementation of the GametypeInfo class 32 */ 28 33 29 34 #include "GametypeInfo.h" … … 31 36 #include "core/CoreIncludes.h" 32 37 #include "core/GameMode.h" 38 #include "network/Host.h" 33 39 #include "network/NetworkFunction.h" 34 #include "network/Host.h" 40 #include "util/Convert.h" 41 42 #include "controllers/HumanController.h" 35 43 #include "interfaces/GametypeMessageListener.h" 44 #include "interfaces/NotificationListener.h" 45 46 #include "PlayerInfo.h" 36 47 37 48 namespace orxonox … … 45 56 registerMemberNetworkFunction(GametypeInfo, dispatchFadingMessage); 46 57 58 registerMemberNetworkFunction(GametypeInfo, changedReadyToSpawn); 59 registerMemberNetworkFunction(GametypeInfo, changedSpawned); 60 61 /*static*/ const std::string GametypeInfo::NOTIFICATION_SENDER("gameinfo"); 62 63 /** 64 @brief 65 Registers and initializes the object. 66 */ 47 67 GametypeInfo::GametypeInfo(BaseObject* creator) : Info(creator) 48 68 { 49 69 RegisterObject(GametypeInfo); 50 70 51 71 this->bStarted_ = false; 52 72 this->bEnded_ = false; 53 this->startCountdown_ = 0 ;73 this->startCountdown_ = 0.0f; 54 74 this->bStartCountdownRunning_ = false; 75 this->counter_ = 0; 76 this->spawned_ = false; 77 this->readyToSpawn_ = false; 55 78 56 79 this->registerVariables(); … … 63 86 void GametypeInfo::registerVariables() 64 87 { 65 registerVariable(this->bStarted_, VariableDirection::ToClient); 66 registerVariable(this->bEnded_, VariableDirection::ToClient); 88 registerVariable(this->bStarted_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedStarted)); 89 registerVariable(this->bEnded_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedEnded)); 90 registerVariable(this->bStartCountdownRunning_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedStartCountdownRunning)); 67 91 registerVariable(this->startCountdown_, VariableDirection::ToClient); 68 registerVariable(this-> bStartCountdownRunning_, VariableDirection::ToClient);92 registerVariable(this->counter_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedCountdownCounter)); 69 93 registerVariable(this->hudtemplate_, VariableDirection::ToClient); 70 94 } 95 96 /** 97 @brief 98 Is called when the game has changed to started. 99 */ 100 void GametypeInfo::changedStarted(void) 101 { 102 103 } 104 105 /** 106 @brief 107 Is called when the game has changed to ended. 108 */ 109 void GametypeInfo::changedEnded(void) 110 { 111 // If the game has ended, a "Game has ended" notification is displayed. 112 if(this->hasEnded()) 113 NotificationListener::sendNotification("Game has ended", GametypeInfo::NOTIFICATION_SENDER); 114 } 115 116 /** 117 @brief 118 Is called when the start countdown has been either started or stopped. 119 */ 120 void GametypeInfo::changedStartCountdownRunning(void) 121 { 122 // Send first countdown notification if the countdown has started. 123 if(this->isReadyToSpawn() && !this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded()) 124 NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER); 125 } 126 127 /** 128 @brief 129 Is called when the start countdown counter has changed. 130 */ 131 void GametypeInfo::changedCountdownCounter(void) 132 { 133 // Send countdown notification if the counter has gone down. 134 if(this->isReadyToSpawn() && !this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded()) 135 NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER); 136 } 137 138 /** 139 @brief 140 Inform the GametypeInfo that the local player has changed its ready to spawn status. 141 @param ready 142 Whether the player has become ready to spawn or not. 143 */ 144 void GametypeInfo::changedReadyToSpawn(bool ready) 145 { 146 if(this->readyToSpawn_ == ready) 147 return; 148 149 this->readyToSpawn_ = ready; 150 151 // Send "Waiting for other players" if the player is ready to spawn but the game has not yet started nor is the countdown running. 152 if(this->readyToSpawn_ && !this->hasStarted() && !this->isStartCountdownRunning() && !this->hasEnded()) 153 NotificationListener::sendNotification("Waiting for other players", GametypeInfo::NOTIFICATION_SENDER); 154 // Send current countdown if the player is ready to spawn and the countdown has already started. 155 else if(this->readyToSpawn_ && !this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded()) 156 NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER); 157 } 158 159 /** 160 @brief 161 Inform the GametypeInfo that the game has started. 162 */ 163 void GametypeInfo::start(void) 164 { 165 if(this->bStarted_) 166 return; 167 168 this->bStarted_ = true; 169 this->changedStarted(); 170 } 171 172 /** 173 @brief 174 Inform the GametypeInfo that the game has ended. 175 */ 176 void GametypeInfo::end(void) 177 { 178 if(this->bEnded_) 179 return; 180 181 this->bEnded_ = true; 182 this->changedEnded(); 183 } 184 185 /** 186 @brief 187 Set the start countdown to the input value. 188 @param countdown 189 The countdown to be set. 190 */ 191 void GametypeInfo::setStartCountdown(float countdown) 192 { 193 if(this->startCountdown_ == countdown || countdown < 0.0f) 194 return; 195 196 this->startCountdown_ = countdown; 197 // Set the counter to the ceiling of the current countdown. 198 this->counter_ = ceil(countdown); 199 this->changedCountdownCounter(); 200 } 201 202 /** 203 @brief 204 Count down the start countdown by the specified value. 205 @param countDown 206 The amount by which we count down. 207 */ 208 void GametypeInfo::countdownStartCountdown(float countDown) 209 { 210 float newCountdown = this->startCountdown_ - countDown; 211 // If we have switched integers or arrived at zero, we also count down the start countdown counter. 212 if(ceil(newCountdown) != ceil(this->startCountdown_) || newCountdown <= 0.0f) 213 this->countDown(); 214 this->startCountdown_ = newCountdown; 215 } 216 217 /** 218 @brief 219 Count down the start countdown counter. 220 */ 221 void GametypeInfo::countDown() 222 { 223 if(this->counter_ == 0) 224 return; 225 226 this->counter_--; 227 this->changedCountdownCounter(); 228 } 229 230 /** 231 @brief 232 Inform the GametypeInfo about the start of the start countdown. 233 */ 234 void GametypeInfo::startStartCountdown(void) 235 { 236 if(GameMode::isMaster()) 237 { 238 if(this->bStartCountdownRunning_) 239 return; 240 241 this->bStartCountdownRunning_ = true; 242 this->changedStartCountdownRunning(); 243 } 244 } 245 246 /** 247 @brief 248 Inform the GametypeInfo about the stop of the start countdown. 249 */ 250 void GametypeInfo::stopStartCountdown(void) 251 { 252 if(GameMode::isMaster()) 253 { 254 if(!this->bStartCountdownRunning_) 255 return; 256 257 this->bStartCountdownRunning_ = false; 258 this->changedStartCountdownRunning(); 259 } 260 } 261 262 /** 263 @brief 264 Inform the GametypeInfo about a player that is ready to spawn. 265 @param player 266 The player that is ready to spawn. 267 */ 268 void GametypeInfo::playerReadyToSpawn(PlayerInfo* player) 269 { 270 if(GameMode::isMaster()) 271 { 272 // If the player has spawned already. 273 if(this->spawnedPlayers_.find(player) != this->spawnedPlayers_.end()) 274 return; 275 276 this->spawnedPlayers_.insert(player); 277 this->setReadyToSpawnHelper(player, true); 278 } 279 } 280 281 /** 282 @brief 283 Inform the GametypeInfo about a player whose Pawn has been killed. 284 @param player 285 The player whose Pawn has been killed. 286 */ 287 void GametypeInfo::pawnKilled(PlayerInfo* player) 288 { 289 if(GameMode::isMaster()) 290 { 291 NotificationListener::sendNotification("Press [Fire] to respawn", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID()); 292 // Remove the player from the list of players that have spawned, since it currently is not. 293 this->spawnedPlayers_.erase(player); 294 this->setReadyToSpawnHelper(player, false); 295 this->setSpawnedHelper(player, false); 296 } 297 } 298 299 /** 300 @brief 301 Inform the GametypeInfo about a player that has spawned. 302 @param player 303 The player that has spawned. 304 */ 305 void GametypeInfo::playerSpawned(PlayerInfo* player) 306 { 307 if(GameMode::isMaster()) 308 { 309 if(this->hasStarted() && !this->hasEnded()) 310 { 311 //NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER, notificationSendMode::network, player->getClientID()); 312 this->setSpawnedHelper(player, true); 313 } 314 } 315 } 316 317 /** 318 @brief 319 Inform the GametypeInfo that the local player has changed its spawned status. 320 @param spawned 321 Whether the local player has changed to spawned or to not spawned. 322 */ 323 void GametypeInfo::changedSpawned(bool spawned) 324 { 325 if(this->spawned_ == spawned) 326 return; 327 328 this->spawned_ = spawned; 329 // Clear the notifications if the Player has spawned. 330 if(this->spawned_ && !this->hasEnded()) 331 NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER); 332 } 333 334 /** 335 @brief 336 Inform the GametypeInfo about a player that has entered, 337 @param player 338 The player that has entered. 339 */ 340 void GametypeInfo::playerEntered(PlayerInfo* player) 341 { 342 if(GameMode::isMaster()) 343 { 344 // Display "Press [Fire] to start the match" if the game has not yet ended. 345 if(!this->hasEnded()) 346 NotificationListener::sendNotification("Press [Fire] to start the match", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID()); 347 // Else display "Game has ended". 348 else 349 NotificationListener::sendNotification("Game has ended", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID()); 350 } 351 } 352 353 /** 354 @brief 355 Helper method. Sends changedReadyToSpawn notifiers over the network. 356 @param player 357 The player that has changed its ready to spawn status. 358 @param ready 359 The new ready to spawn status. 360 */ 361 void GametypeInfo::setReadyToSpawnHelper(PlayerInfo* player, bool ready) 362 { 363 if(GameMode::isMaster()) 364 { 365 if(player->getClientID() == CLIENTID_SERVER) 366 this->changedReadyToSpawn(ready); 367 else 368 callMemberNetworkFunction(GametypeInfo, changedReadyToSpawn, this->getObjectID(), player->getClientID(), ready); 369 } 370 } 371 372 /** 373 @brief 374 Helper method. Sends changedSpawned notifiers over the network. 375 @param player 376 The player that has changed its spawned status. 377 @param ready 378 The new spawned status. 379 */ 380 void GametypeInfo::setSpawnedHelper(PlayerInfo* player, bool spawned) 381 { 382 if(GameMode::isMaster()) 383 { 384 if(player->getClientID() == CLIENTID_SERVER) 385 this->changedSpawned(spawned); 386 else 387 callMemberNetworkFunction(GametypeInfo, changedSpawned, this->getObjectID(), player->getClientID(), spawned); 388 } 389 } 390 391 // Announce messages. 392 // TODO: Replace with notifications. 71 393 72 394 void GametypeInfo::sendAnnounceMessage(const std::string& message) -
code/branches/presentation/src/orxonox/infos/GametypeInfo.h
r7163 r8637 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Damian 'Mozork' Frick 26 26 * 27 27 */ 28 29 /** 30 @file GametypeInfo.h 31 @brief Definition of the GametypeInfo class 32 */ 28 33 29 34 #ifndef _GametypeInfo_H__ … … 33 38 34 39 #include <string> 40 35 41 #include "Info.h" 36 42 37 43 namespace orxonox 38 44 { 45 46 /** 47 @brief 48 The GametypeInfo class keeps track of the state of the game and provides facilities to inform the player about it. 49 50 @author 51 Fabian 'x3n' Landau 52 @author 53 Damian 'Mozork' Frick 54 */ 39 55 class _OrxonoxExport GametypeInfo : public Info 40 56 { … … 45 61 virtual ~GametypeInfo(); 46 62 63 /** 64 @brief Get whether the game has started yet. 65 @return Returns true if the game has started, false if not. 66 */ 47 67 inline bool hasStarted() const 48 68 { return this->bStarted_; } 69 void changedStarted(void); // Is called when the game has changed to started. 70 71 /** 72 @brief Get whether the game has ended yet. 73 @return Returns true if the game has ended, false if not. 74 */ 49 75 inline bool hasEnded() const 50 76 { return this->bEnded_; } 77 void changedEnded(void); // Is called when the game has changed to ended. 51 78 79 /** 80 @brief Get whether the start countdown is currently running. 81 @return Returns true if the countdown is running, false if not. 82 */ 52 83 inline bool isStartCountdownRunning() const 53 84 { return this->bStartCountdownRunning_; } 85 void changedStartCountdownRunning(void); // Is called when the start countdown has been either started or stopped. 86 87 /** 88 @brief Get the current value of the start countdown. 89 @return Returns the current value of the start countdown. 90 */ 54 91 inline float getStartCountdown() const 55 92 { return this->startCountdown_; } 93 94 /** 95 @brief Get the current start countdown counter. 96 The start countdown counter only has integer values that correspond to the actually displayed countdown. 97 @return Returns the current integer countdown counter. 98 */ 99 inline unsigned int getStartCountdownCounter() const 100 { return this->counter_; } 101 void changedCountdownCounter(void); // Is called when the start countdown counter has changed. 102 103 /** 104 @brief Get whether the local player is ready to spawn. 105 @return Returns true if the player is ready to spawn, false if not. 106 */ 107 inline bool isReadyToSpawn() const 108 { return this->readyToSpawn_; } 109 void changedReadyToSpawn(bool ready); // Inform the GametypeInfo that the local player has changed its spawned status. 110 111 /** 112 @brief Get whether the local player is spawned. 113 @return Returns true if the local player is currently spawned, false if not. 114 */ 115 inline bool isSpawned() const 116 { return this->spawned_; } 117 void changedSpawned(bool spawned); // Inform the GametypeInfo that the local player has changed its spawned status. 56 118 57 119 inline const std::string& getHUDTemplate() const … … 70 132 void dispatchStaticMessage(const std::string& message,const ColourValue& colour); 71 133 void dispatchFadingMessage(const std::string& message); 134 135 protected: 136 void start(void); // Inform the GametypeInfo that the game has started. 137 void end(void); // Inform the GametypeInfo that the game has ended. 138 void setStartCountdown(float countdown); // Set the start countdown to the input value. 139 void countdownStartCountdown(float countDown); // Count down the start countdown by the specified value. 140 void countDown(); // Count down the start countdown counter. 141 void startStartCountdown(void); // Inform the GametypeInfo about the start of the start countdown. 142 void stopStartCountdown(void); // Inform the GametypeInfo about the stop of the start countdown. 143 void playerReadyToSpawn(PlayerInfo* player); // Inform the GametypeInfo about a player that is ready to spawn. 144 void pawnKilled(PlayerInfo* player); // Inform the GametypeInfo about a player whose Pawn has been killed. 145 void playerSpawned(PlayerInfo* player); // Inform the GametypeInfo about a player that has spawned. 146 void playerEntered(PlayerInfo* player); // Inform the GametypeInfo about a player that has entered, 147 148 inline void setHUDTemplate(const std::string& templateName) 149 { this->hudtemplate_ = templateName; }; 72 150 73 151 private: 74 152 void registerVariables(); 153 void setSpawnedHelper(PlayerInfo* player, bool spawned); // Helper method. Sends changedReadyToSpawn notifiers over the network. 154 void setReadyToSpawnHelper(PlayerInfo* player, bool ready); // Helper method. Sends changedSpawned notifiers over the network. 75 155 76 bool bStarted_; 77 bool bEnded_; 78 bool bStartCountdownRunning_; 79 float startCountdown_; 156 static const std::string NOTIFICATION_SENDER; //!< The name of the sender for the sending of notifications. 157 158 bool bStarted_; //!< Whether the game has started, 159 bool bEnded_; //!< Whether the game has ended. 160 bool bStartCountdownRunning_; //!< Whether the start countdown is running. 161 float startCountdown_; //!< The current value of the start countdown. 162 unsigned int counter_; //!< The current integer value of the start countdown, the start countdown counter. 80 163 std::string hudtemplate_; 164 165 std::set<PlayerInfo*> spawnedPlayers_; //!< A set of players that are currently spawned. 166 bool spawned_; //!< Whether the local Player is currently spawned. 167 bool readyToSpawn_; //!< Whether the local Player is ready to spawn. 81 168 }; 82 169 } -
code/branches/presentation/src/orxonox/interfaces/CMakeLists.txt
r7504 r8637 1 1 ADD_SOURCE_FILES(ORXONOX_SRC_FILES 2 2 InterfaceCompilation.cc 3 NotificationListener.cc 3 4 Pickupable.cc 4 5 PickupCarrier.cc -
code/branches/presentation/src/orxonox/interfaces/InterfaceCompilation.cc
r7606 r8637 86 86 RegisterRootObject(Rewardable); 87 87 } 88 89 //----------------------------90 // NotificationListener91 //----------------------------92 NotificationListener::NotificationListener()93 {94 RegisterRootObject(NotificationListener);95 }96 88 } -
code/branches/presentation/src/orxonox/interfaces/NotificationListener.h
r7552 r8637 21 21 * 22 22 * Author: 23 * Fabian 'x3n' Landau23 * Damian 'Mozork' Frick 24 24 * Co-authors: 25 25 * ... … … 48 48 namespace orxonox 49 49 { 50 class Notification; 50 // TODO: Document. 51 namespace notificationMessageType 52 { 53 enum Value { 54 info, 55 important 56 }; 57 } 58 59 namespace notificationSendMode 60 { 61 enum Value { 62 local, 63 network, 64 broadcast 65 }; 66 } 67 68 namespace notificationCommand 69 { 70 enum Value { 71 none, 72 clear 73 }; 74 } 51 75 76 // TODO: Update doc. 52 77 /** 53 78 @brief 54 79 NotificationListener interface. 55 80 56 The NotificationListener interface presents a means to being informed when @ref orxonox::Notification "Notifications" in the target set of this NotificationListener change. (e.g. @ref orxonox::Notification "Notifications" were added or removed) 57 When inheriting from a NotificationListener it is important to register (in the constructor) and unregister (in the destructor) it to and from the @ref orxonox::NotificationManager "NotificationManager". 81 The NotificationListener interface (or more precisely abstract class) presents a means of being informed when a new @ref orxonox::Notification "Notification" is sent. 82 The NotificationListener can be used to send a new notification message (with NotificationListener::sendNotification() ) or a new notification command (with NotificationListener::sendCommand() ). Each NotificationListener is then informed about the new @ref orxonox::Notification "Notification" and can take appropriate action. Currently the only NotificationListener ist the @ref orxonox::NotificationManager "NotificationManager" singleton. 83 84 When inheriting from a NotificationListener it is important to provide an appropriate implementation of registerNotification() and executeCommand(). 58 85 59 86 @author 60 Fabian 'x3n' Landau61 87 Damian 'Mozork' Frick 88 62 89 @ingroup Notifications 90 @todo Consistent terminology between message, notification and command. 63 91 */ 64 92 class _OrxonoxExport NotificationListener : virtual public OrxonoxClass … … 69 97 70 98 /** 71 @brief Get the senders that are targets of this NotificationListener. 72 @return Returns the set of senders that are targets of this NotificationListener. 99 @brief Sends a Notification with the specified message to the specified client from the specified sender. 100 @param message The message that should be sent. 101 @param sender The sender that sent the notification. Default is 'none'. 102 @param messageType The type of the message, can be either 'info' or 'important'. Default is 'info'. 103 @param sendMode The mode in which the notification is sent, can be 'local' to send the notification to the client where this function is executed, 'network' if the notification is to be sent to the client with the specified clientID, or 'broadcast' if the notification should be sent to all hosts. Default is notificationSendMode::local. 104 @param clientId The id of the client the notification should be sent to. Default is 0. 73 105 */ 74 virtual const std::set<std::string> & getTargetsSet(void) = 0; 106 static void sendNotification(const std::string& message, const std::string& sender = NotificationListener::NONE, notificationMessageType::Value messageType = notificationMessageType::info, notificationSendMode::Value sendMode = notificationSendMode::local, unsigned int clientId = 0) 107 { NotificationListener::sendNetworkHelper(message, sender, sendMode, clientId, false, messageType); } 108 /** 109 @brief Sends a specified command to the specified client from the specified sender. 110 @param command The command that should be sent (and later executed). 111 @param sender The sender that sent the notification. Default is 'none'. 112 @param sendMode The mode in which the command is sent, can be 'local' to send the command to the client where this function is executed, 'network' if the command is to be sent to the client with the specified clientID, or 'broadcast' if the command should be sent to all hosts. Default is notificationSendMode::local. 113 @param clientId The id of the client the command should be sent to. Default is 0. 114 */ 115 static void sendCommand(const std::string& command, const std::string& sender = NotificationListener::NONE, notificationSendMode::Value sendMode = notificationSendMode::local, unsigned int clientId = 0) 116 { NotificationListener::sendNetworkHelper(command, sender, sendMode, clientId, true); } 75 117 118 static void sendHelper(const std::string& message, const std::string& sender, bool isCommand = false, unsigned int messageMode = 0); // Helper method to register a notification/execute a command with all NotificationListeners after it has been sent over the network. 119 120 //TODO: Make protected? 121 76 122 /** 77 @brief Updates the whole NotificationListener. 78 This is called by the @ref orxonox::NotificationManager "NotificationManager" when the @ref orxonox::Notification "Notifications" have changed so much, that the NotificationListener may have to re-initialize his operations. 123 @brief Registers a notification with the NotificationListener. 124 This needs to be overloaded by each class inheriting from NotificationListener. 125 @param message The notification's message. 126 @param sender The sender of the notification. 127 @param type The type of the notification. 128 @return Returns true if the notification was successfully registered, false if not. 79 129 */ 80 virtual void update(void) = 0; 130 virtual bool registerNotification(const std::string& message, const std::string& sender, notificationMessageType::Value type) 131 { return false; } 81 132 /** 82 @brief Updates the NotificationListener, when a new Notification has come in at the specified time. 83 @param notification A pointer to the @ref orxonox::Notification "Notification". 84 @param time The time the @ref orxonox::Notification "Notification" has come in. 133 @brief Executes a command with the NotificationListener 134 This needs to be overloaded by each class inheriting from NotificationListener. 135 @param command The command to be executed. 136 @param sender The sender of the command. 137 @return Returns true if the command was successfully executed, false if not. 85 138 */ 86 virtual void update(Notification* notification, const std::time_t & time) = 0; 139 virtual bool executeCommand(notificationCommand::Value command, const std::string& sender) { return false; } 140 141 public: 142 143 static const std::string ALL; //!< Static string to indicate a sender that sends to all NotificationQueues. 144 static const std::string NONE; //!< Static string to indicate a sender that sends to no specific NotificationQueues. 145 146 //! Commands 147 static const std::string COMMAND_CLEAR; 148 static const std::string COMMAND_NONE; 149 150 protected: 151 static void sendNetworkHelper(const std::string& message, const std::string& sender, notificationSendMode::Value sendMode, unsigned int clientId, bool isCommand = false, notificationMessageType::Value messageType = notificationMessageType::info); // Helper method to send both notifications and commands over the network. 152 153 static notificationCommand::Value str2Command(const std::string& string); // Helper method. Converts a string into the enum for a command. 154 static const std::string& command2Str(notificationCommand::Value command); // Helper method. Converts a command enum into its corresponding string. 87 155 }; 88 156 }
Note: See TracChangeset
for help on using the changeset viewer.