Changeset 8453 for code/branches/tutoriallevel3/src/orxonox
- Timestamp:
- May 12, 2011, 12:31:23 AM (14 years ago)
- Location:
- code/branches/tutoriallevel3
- Files:
-
- 9 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/tutoriallevel3
- Property svn:mergeinfo changed
/code/branches/tutoriallevel (added) merged: 7828-7831,7894,8370 /code/branches/tutoriallevel2 (added) merged: 8371,8374,8376-8378,8444-8451
- Property svn:mergeinfo changed
-
code/branches/tutoriallevel3/src/orxonox/LevelManager.cc
r8079 r8453 222 222 this->nextLevel_ = this->availableLevels_.begin(); 223 223 } 224 224 225 while(this->nextIndex_ != index) 225 226 { -
code/branches/tutoriallevel3/src/orxonox/gametypes/Gametype.cc
r8327 r8453 59 59 this->defaultControllableEntity_ = Class(Spectator); 60 60 61 this->bFirstTick_ = true; 62 61 63 this->bAutoStart_ = false; 62 64 this->bForceSpawn_ = false; … … 112 114 SUPER(Gametype, tick, dt); 113 115 116 // Activate the GametypeInfo. 117 if(this->bFirstTick_) 118 { 119 this->gtinfo_->setActive(true); 120 this->bFirstTick_ = false; 121 } 122 114 123 //count timer 115 124 if (timerIsActive_) … … 121 130 } 122 131 123 if (this->gtinfo_-> bStartCountdownRunning_ && !this->gtinfo_->bStarted_)124 this->gtinfo_-> startCountdown_ -= dt;125 126 if (!this->gtinfo_-> bStarted_)132 if (this->gtinfo_->isStartCountdownRunning() && !this->gtinfo_->hasStarted()) 133 this->gtinfo_->countdownStartCountdown(dt); 134 135 if (!this->gtinfo_->hasStarted()) 127 136 this->checkStart(); 128 else if (!this->gtinfo_-> bEnded_)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) … … 270 279 } 271 280 281 if(victim->getPlayer()->isHumanPlayer()) 282 this->gtinfo_->pawnKilled(victim->getPlayer()); 283 272 284 ControllableEntity* entity = this->defaultControllableEntity_.fabricate(victim->getCreator()); 273 285 if (victim->getCamera()) … … 346 358 it->second.state_ = PlayerState::Dead; 347 359 348 if (!it->first->isReadyToSpawn() || !this->gtinfo_-> bStarted_)360 if (!it->first->isReadyToSpawn() || !this->gtinfo_->hasStarted()) 349 361 { 350 362 this->spawnPlayerAsDefaultPawn(it->first); … … 357 369 void Gametype::checkStart() 358 370 { 359 if (!this->gtinfo_-> bStarted_)360 { 361 if (this->gtinfo_-> bStartCountdownRunning_)362 { 363 if (this->gtinfo_-> startCountdown_ <= 0)364 { 365 this->gtinfo_-> bStartCountdownRunning_ = false;366 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);; 367 379 this->start(); 368 380 } … … 384 396 if (it->first->isHumanPlayer()) 385 397 hashumanplayers = true; 398 399 // Inform the GametypeInfo that the player is ready to spawn. 400 // TODO: Can it happen, that that changes? 401 if(it->first->isHumanPlayer() && it->first->isReadyToSpawn()) 402 this->gtinfo_->playerReadyToSpawn(it->first); 386 403 } 387 404 if (allplayersready && hashumanplayers) … … 389 406 // If in developer's mode, there is no start countdown. 390 407 if(Core::getInstance().inDevMode()) 391 this-> gtinfo_->startCountdown_ = 0;408 this->start(); 392 409 else 393 this->gtinfo_->s tartCountdown_ = this->initialStartCountdown_;394 this->gtinfo_-> bStartCountdownRunning_ = true;410 this->gtinfo_->setStartCountdown(this->initialStartCountdown_); 411 this->gtinfo_->startStartCountdown(); 395 412 } 396 413 } … … 402 419 { 403 420 for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it) 421 { 404 422 if (it->first->isReadyToSpawn() || this->bForceSpawn_) 405 423 this->spawnPlayer(it->first); 424 } 406 425 } 407 426 … … 422 441 player->startControl(spawnpoint->spawn()); 423 442 this->players_[player].state_ = PlayerState::Alive; 443 444 if(player->isHumanPlayer()) 445 this->gtinfo_->playerSpawned(player); 446 424 447 this->playerPostSpawn(player); 425 448 } -
code/branches/tutoriallevel3/src/orxonox/gametypes/Gametype.h
r8178 r8453 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); … … 168 168 SmartPtr<GametypeInfo> gtinfo_; 169 169 170 bool bFirstTick_; //!< Whether this is the first tick or not. 171 170 172 bool bAutoStart_; 171 173 bool bForceSpawn_; -
code/branches/tutoriallevel3/src/orxonox/infos/GametypeInfo.cc
r8327 r8453 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 35 42 #include "interfaces/GametypeMessageListener.h" 43 #include "interfaces/NotificationListener.h" 44 45 #include "PlayerInfo.h" 36 46 37 47 namespace orxonox … … 45 55 registerMemberNetworkFunction(GametypeInfo, dispatchFadingMessage); 46 56 57 /*static*/ const std::string GametypeInfo::NOTIFICATION_SENDER("gameinfo"); 58 59 /** 60 @brief 61 Registers and initializes the object. 62 */ 47 63 GametypeInfo::GametypeInfo(BaseObject* creator) : Info(creator) 48 64 { 49 65 RegisterObject(GametypeInfo); 50 66 67 this->bActive_ = false; // At first the GametypeInfo is inactive. 68 51 69 this->bStarted_ = false; 52 70 this->bEnded_ = false; 53 this->startCountdown_ = 0 ;71 this->startCountdown_ = 0.0f; 54 72 this->bStartCountdownRunning_ = false; 73 this->counter_ = 0; 55 74 56 75 this->registerVariables(); … … 63 82 void GametypeInfo::registerVariables() 64 83 { 65 registerVariable(this->bStarted_, VariableDirection::ToClient); 66 registerVariable(this->bEnded_, VariableDirection::ToClient); 84 registerVariable(this->bStarted_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedStarted)); 85 registerVariable(this->bEnded_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedEnded)); 86 registerVariable(this->bStartCountdownRunning_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedStartCountdownRunning)); 67 87 registerVariable(this->startCountdown_, VariableDirection::ToClient); 68 registerVariable(this-> bStartCountdownRunning_, VariableDirection::ToClient);88 registerVariable(this->counter_, VariableDirection::ToClient, new NetworkCallback<GametypeInfo>(this, &GametypeInfo::changedCountdownCounter)); 69 89 registerVariable(this->hudtemplate_, VariableDirection::ToClient); 90 } 91 92 /** 93 @brief 94 Is called when the activity has changed. 95 */ 96 void GametypeInfo::changedActivity(void) 97 { 98 SUPER(GametypeInfo, changedActivity); 99 100 // If the GametypeInfo has become active the "Press [Fire] to start the match" notification is sent. 101 if(this->isActive()) 102 NotificationListener::sendNotification("Press [Fire] to start the match", GametypeInfo::NOTIFICATION_SENDER); 103 } 104 105 /** 106 @brief 107 Is called when the game has changed to started. 108 */ 109 void GametypeInfo::changedStarted(void) 110 { 111 112 } 113 114 /** 115 @brief 116 Is called when the game has changed to ended. 117 */ 118 void GametypeInfo::changedEnded(void) 119 { 120 // If the game has ended, a "Game has ended" notification is displayed. 121 if(this->hasEnded()) 122 NotificationListener::sendNotification("Game has ended", GametypeInfo::NOTIFICATION_SENDER); 123 } 124 125 /** 126 @brief 127 Is called when the start countdown has been either started or stopped. 128 */ 129 void GametypeInfo::changedStartCountdownRunning(void) 130 { 131 // Clear the notifications if the countdown has stopped running. 132 if(!this->hasStarted() && !this->isStartCountdownRunning() && !this->hasEnded()) 133 NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER); 134 // Send first countdown notification if the countdown has started. 135 if(!this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded()) 136 NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER); 137 } 138 139 /** 140 @brief 141 Is called when the start countdown counter has changed. 142 */ 143 void GametypeInfo::changedCountdownCounter(void) 144 { 145 // Send countdown notification if the counter has gone down. 146 if(!this->hasStarted() && this->isStartCountdownRunning() && !this->hasEnded()) 147 NotificationListener::sendNotification(multi_cast<std::string>(this->counter_), GametypeInfo::NOTIFICATION_SENDER); 148 } 149 150 /** 151 @brief 152 Is called when a player has become ready to spawn. 153 @param player 154 The player that has become ready to spawn. 155 */ 156 void GametypeInfo::changedReadyToSpawn(PlayerInfo* player) 157 { 158 // Send "Waiting for other players" over the network to the right player if a player has become ready to spawn. 159 if(!this->hasStarted() && !this->isStartCountdownRunning() && !this->hasEnded()) 160 NotificationListener::sendNotification("Waiting for other players", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID()); 161 // Clear the notifications if the player has respawned. 162 if(this->hasStarted() && !this->hasEnded()) 163 NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER, notificationSendMode::network, player->getClientID()); 164 } 165 166 /** 167 @brief 168 Inform the GametypeInfo that the game has started. 169 */ 170 void GametypeInfo::start(void) 171 { 172 if(this->bStarted_) 173 return; 174 175 this->bStarted_ = true; 176 this->changedStarted(); 177 } 178 179 /** 180 @brief 181 Inform the GametypeInfo that the game has ended. 182 */ 183 void GametypeInfo::end(void) 184 { 185 if(this->bEnded_) 186 return; 187 188 this->bEnded_ = true; 189 this->changedEnded(); 190 } 191 192 /** 193 @brief 194 Set the start countdown to the input value. 195 @param countdown 196 The countdown to be set. 197 */ 198 void GametypeInfo::setStartCountdown(float countdown) 199 { 200 if(this->startCountdown_ == countdown || countdown < 0.0f) 201 return; 202 203 this->startCountdown_ = countdown; 204 // Set the counter to the ceiling of the current countdown. 205 this->counter_ = ceil(countdown); 206 this->changedCountdownCounter(); 207 } 208 209 /** 210 @brief 211 Count down the start countdown by the specified value. 212 @param countDown 213 The amount by which we count down. 214 */ 215 void GametypeInfo::countdownStartCountdown(float countDown) 216 { 217 float newCountdown = this->startCountdown_ - countDown; 218 // If we have switched integers or arrived at zero, we also count down the start countdown counter. 219 if(ceil(newCountdown) != ceil(this->startCountdown_) || newCountdown <= 0.0f) 220 this->countDown(); 221 this->startCountdown_ = newCountdown; 222 } 223 224 /** 225 @brief 226 Count down the start countdown counter. 227 */ 228 void GametypeInfo::countDown() 229 { 230 if(this->counter_ == 0) 231 return; 232 233 this->counter_--; 234 this->changedCountdownCounter(); 235 } 236 237 /** 238 @brief 239 Inform the GametypeInfo about the start of the start countdown. 240 */ 241 void GametypeInfo::startStartCountdown(void) 242 { 243 if(this->bStartCountdownRunning_) 244 return; 245 246 this->bStartCountdownRunning_ = true; 247 this->changedStartCountdownRunning(); 248 } 249 250 /** 251 @brief 252 Inform the GametypeInfo about the stop of the start countdown. 253 */ 254 void GametypeInfo::stopStartCountdown(void) 255 { 256 if(!this->bStartCountdownRunning_) 257 return; 258 259 this->bStartCountdownRunning_ = false; 260 this->changedStartCountdownRunning(); 261 } 262 263 /** 264 @brief 265 Inform the GametypeInfo about a player that is ready to spawn. 266 @param player 267 The player that is ready to spawn. 268 */ 269 void GametypeInfo::playerReadyToSpawn(PlayerInfo* player) 270 { 271 // If the player has spawned already. 272 if(this->spawned_.find(player) != this->spawned_.end()) 273 return; 274 275 this->spawned_.insert(player); 276 this->changedReadyToSpawn(player); 277 } 278 279 /** 280 @brief 281 Inform the GametypeInfo about a player whose Pawn has been killed. 282 @param player 283 The player whose Pawn has been killed. 284 */ 285 void GametypeInfo::pawnKilled(PlayerInfo* player) 286 { 287 NotificationListener::sendNotification("Press [Fire] to respawn", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID()); 288 // Remove the player from the list of players that have spawned, since it currently is not. 289 this->spawned_.erase(player); 290 } 291 292 /** 293 @brief 294 Inform the GametypeInfo about a player that has spawned. 295 @param player 296 The player that has spawned. 297 */ 298 void GametypeInfo::playerSpawned(PlayerInfo* player) 299 { 300 if(this->hasStarted() && !this->hasEnded()) 301 NotificationListener::sendCommand("clear", GametypeInfo::NOTIFICATION_SENDER, notificationSendMode::network, player->getClientID()); 70 302 } 71 303 -
code/branches/tutoriallevel3/src/orxonox/infos/GametypeInfo.h
r7163 r8453 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 virtual void changedActivity(void); // Is called when the activity has changed. 64 65 /** 66 @brief Get whether the game has started yet. 67 @return Returns true if the game has started, false if not. 68 */ 47 69 inline bool hasStarted() const 48 70 { return this->bStarted_; } 71 void changedStarted(void); // Is called when the game has changed to started. 72 73 /** 74 @brief Get whether the game has ended yet. 75 @return Returns true if the game has ended, false if not. 76 */ 49 77 inline bool hasEnded() const 50 78 { return this->bEnded_; } 79 void changedEnded(void); // Is called when the game has changed to ended. 51 80 81 /** 82 @brief Get whether the start countdown is currently running. 83 @return Returns true if the countdown is running, false if not. 84 */ 52 85 inline bool isStartCountdownRunning() const 53 86 { return this->bStartCountdownRunning_; } 87 void changedStartCountdownRunning(void); // Is called when the start countdown has been either started or stopped. 88 89 /** 90 @brief Get the current value of the start countdown. 91 @return Returns the current value of the start countdown. 92 */ 54 93 inline float getStartCountdown() const 55 94 { return this->startCountdown_; } 95 96 /** 97 @brief Get the current start countdown counter. 98 The start countdown counter only has integer values that correspond to the actually displayed countdown. 99 @return Returns the current integer countdown counter. 100 */ 101 inline unsigned int getStartCountdownCounter() const 102 { return this->counter_; } 103 void changedCountdownCounter(void); // Is called when the start countdown counter has changed. 56 104 57 105 inline const std::string& getHUDTemplate() const … … 70 118 void dispatchStaticMessage(const std::string& message,const ColourValue& colour); 71 119 void dispatchFadingMessage(const std::string& message); 120 121 protected: 122 void changedReadyToSpawn(PlayerInfo* player); // Is called when a player has become ready to spawn. 123 124 void start(void); // Inform the GametypeInfo that the game has started. 125 void end(void); // Inform the GametypeInfo that the game has ended. 126 void setStartCountdown(float countdown); // Set the start countdown to the input value. 127 void countdownStartCountdown(float countDown); // Count down the start countdown by the specified value. 128 void countDown(); // Count down the start countdown counter. 129 void startStartCountdown(void); // Inform the GametypeInfo about the start of the start countdown. 130 void stopStartCountdown(void); // Inform the GametypeInfo about the stop of the start countdown. 131 void playerReadyToSpawn(PlayerInfo* player); // Inform the GametypeInfo about a player that is ready to spawn. 132 void pawnKilled(PlayerInfo* player); // Inform the GametypeInfo about a player whose Pawn has been killed. 133 void playerSpawned(PlayerInfo* player); // Inform the GametypeInfo about a player that has spawned. 134 135 inline void setHUDTemplate(const std::string& templateName) 136 { this->hudtemplate_ = templateName; }; 72 137 73 138 private: 74 139 void registerVariables(); 75 140 76 bool bStarted_; 77 bool bEnded_; 78 bool bStartCountdownRunning_; 79 float startCountdown_; 141 static const std::string NOTIFICATION_SENDER; //!< The name of the sender for the sending of notifications. 142 143 bool bStarted_; //!< Whether the game has started, 144 bool bEnded_; //!< Whether the game has ended. 145 bool bStartCountdownRunning_; //!< Whether the start countdown is running. 146 float startCountdown_; //!< The current value of the start countdown. 147 unsigned int counter_; //!< The current integer value of the start countdown, the start countdown counter. 80 148 std::string hudtemplate_; 149 150 std::set<PlayerInfo*> spawned_; //!< A set of players that are currently spawned. 81 151 }; 82 152 } -
code/branches/tutoriallevel3/src/orxonox/interfaces/CMakeLists.txt
r7504 r8453 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/tutoriallevel3/src/orxonox/interfaces/InterfaceCompilation.cc
r7606 r8453 86 86 RegisterRootObject(Rewardable); 87 87 } 88 89 //----------------------------90 // NotificationListener91 //----------------------------92 NotificationListener::NotificationListener()93 {94 RegisterRootObject(NotificationListener);95 }96 88 } -
code/branches/tutoriallevel3/src/orxonox/interfaces/NotificationListener.h
r7552 r8453 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.