Changeset 8453 for code/branches/tutoriallevel3/src/orxonox/infos
- Timestamp:
- May 12, 2011, 12:31:23 AM (14 years ago)
- Location:
- code/branches/tutoriallevel3
- Files:
-
- 3 edited
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/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 }
Note: See TracChangeset
for help on using the changeset viewer.