Changeset 9348 for code/trunk/src/orxonox/gametypes
- Timestamp:
- Aug 30, 2012, 11:08:17 PM (12 years ago)
- Location:
- code/trunk
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:ignore
-
old new 1 .project 1 2 build 2 3 codeblocks 4 dependencies 3 5 vs 4 dependencies
-
- Property svn:mergeinfo changed
- Property svn:ignore
-
code/trunk/src/orxonox/gametypes/Deathmatch.cc
r8858 r9348 114 114 } 115 115 116 void Deathmatch::playerScored(PlayerInfo* player )116 void Deathmatch::playerScored(PlayerInfo* player, int score) 117 117 { 118 Gametype::playerScored(player );118 Gametype::playerScored(player, score); 119 119 120 120 if (player) -
code/trunk/src/orxonox/gametypes/Deathmatch.h
r5781 r9348 48 48 49 49 virtual void pawnKilled(Pawn* victim, Pawn* killer = 0); 50 virtual void playerScored(PlayerInfo* player );50 virtual void playerScored(PlayerInfo* player, int score = 1); 51 51 }; 52 52 } -
code/trunk/src/orxonox/gametypes/Dynamicmatch.cc
r8858 r9348 31 31 //Low; Codeoptimierung und Dokumentation 32 32 33 /* 34 short gaming manual: 35 There are three different parties a player can belong to: victim, chaser or killer 36 Every player starts as chaser. As long as there are not enough victims and killers, you can change your and other player's parties by shooting them. 37 In order to win you have to earn as much points as possible: 38 - as victim by escaping the chasers 39 - as chaser by shooting the victim 40 - as killer by killing the chasers 41 42 43 What you shouldn't do is shooting at players of your own party. By doing so your score will decrease. 44 P.S: If you don't want to be a victim: Get rid of your part by shooting a chaser. 33 /** 34 @brief 35 Short Gaming Manual: 36 There are three different parties a player can belong to: victim, chaser or killer 37 Every player starts as chaser. As long as there are not enough victims and killers, you can change your and other player's parties by shooting them. 38 In order to win you have to earn as much points as possible: 39 - as victim by escaping the chasers 40 - as chaser by shooting the victim 41 - as killer by killing the chasers 42 43 44 What you shouldn't do is shooting at players of your own party. By doing so your score will decrease. 45 P.S: If you don't want to be a victim: Get rid of your part by shooting a chaser. 45 46 */ 46 47 #include "Dynamicmatch.h" … … 81 82 this->numberOf[killer]=0; 82 83 this->tutorial=true; 83 this->pointsPerTime= 0.0f;84 this->pointsPerTime=1.0f; 84 85 this->setHUDTemplate("DynamicmatchHUD"); 85 86 } … … 95 96 ColourValue(0.3f, 0.3f, 1.0f), //piggycolour 96 97 ColourValue(0.3f, 1.0f, 0.3f) //killercolour what about black: 0.0f, 0.0f, 0.0f 97 98 98 }; 99 99 static std::vector<ColourValue> defaultcolours(colours, colours + sizeof(colours) / sizeof(ColourValue)); … … 111 111 if (victim && victim->getPlayer()) //&& originator && originator->getPlayer() ?? 112 112 { 113 int target= playerParty_[victim->getPlayer()];114 int source= playerParty_[originator->getPlayer()];113 int target = playerParty_[victim->getPlayer()]; 114 int source = playerParty_[originator->getPlayer()]; 115 115 116 116 //Case: Not Enough Pigs: party change (= party management) … … 151 151 152 152 //Give new pig boost 153 SpaceShip* spaceship = dynamic_cast<SpaceShip*>(victim);153 SpaceShip* spaceship = orxonox_cast<SpaceShip*>(victim); 154 154 this->grantPigBoost(spaceship); 155 155 } … … 245 245 } 246 246 //Give new pig boost 247 SpaceShip* spaceship = dynamic_cast<SpaceShip*>(victim);247 SpaceShip* spaceship = orxonox_cast<SpaceShip*>(victim); 248 248 this->grantPigBoost(spaceship); 249 249 } … … 276 276 else if (friendlyfire && (source == target)) 277 277 { 278 std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer()); 279 if (it != this->players_.end()) 280 { 281 it->second.frags_--; 282 } 283 } 284 }// from far far away not to be removed! 278 this->playerScored(originator->getPlayer(), -1); 279 } 280 } 285 281 return false; //default: no damage 286 282 } … … 296 292 if (playerParty_[originator->getPlayer()] == killer) //reward the killer 297 293 { 298 std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer()); 299 if (it != this->players_.end()) 300 { 301 it->second.frags_+=20; //value must be tested 302 } 303 } 304 return true; 294 this->playerScored(originator->getPlayer(), 25); 295 } 296 return true; 305 297 } 306 298 else return false; … … 309 301 /** 310 302 @brief 311 Grant the piggya boost.303 Grant the victim a boost. 312 304 @param spaceship 313 305 The SpaceShip to give the boost. … … 315 307 void Dynamicmatch::grantPigBoost(SpaceShip* spaceship) 316 308 { 317 // Give pigboost309 // Give victim boost 318 310 if (spaceship) 319 311 { 312 WeakPtr<SpaceShip>* ptr = new WeakPtr<SpaceShip>(spaceship); 313 if(ptr == NULL) 314 return; 320 315 spaceship->addSpeedFactor(5); 321 WeakPtr<SpaceShip>* ptr = new WeakPtr<SpaceShip>(spaceship);322 316 ExecutorPtr executor = createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this)); 323 317 executor->setDefaultValue(0, ptr); … … 374 368 375 369 if (this->hasStarted() && !gameEnded_) 376 { pointsPerTime =pointsPerTime + dt; 377 gameTime_ = gameTime_ - dt; 378 if (pointsPerTime > 2.0f)//hard coded!! should be changed 379 { 380 pointsPerTime=0.0f; 370 { 371 pointsPerTime = pointsPerTime + dt; //increase points 372 gameTime_ = gameTime_ - dt; // decrease game time 373 if (pointsPerTime > 2.0f) //hard coded points for victim! should be changed 374 { 375 pointsPerTime = 0.0f; 381 376 rewardPig(); 382 377 } … … 408 403 } 409 404 405 /** 406 @brief The reward function is called every 2 seconds via the tick function and makes the victim score points. 407 */ 410 408 void Dynamicmatch::rewardPig() 411 409 { 412 410 for (std::map< PlayerInfo*, int >::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it) //durch alle Spieler iterieren und alle piggys finden 413 411 { 414 if (it->second==piggy) 415 { 416 //Spieler mit der Pig-party frags++ 417 std::map<PlayerInfo*, Player>::iterator it2 = this->players_.find(it->first);// still not sure if right syntax 418 if (it2 != this->players_.end()) 419 { 420 it2->second.frags_++; 421 } 412 if (it->second==piggy)//Spieler mit der Pig-party frags++ 413 { 414 this->playerScored(it->first); 422 415 } 423 416 } … … 426 419 { 427 420 std::map<PlayerInfo*, int>::const_iterator it_player = this->playerParty_.find(player); 428 Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());421 Pawn* pawn = orxonox_cast<Pawn*>(player->getControllableEntity()); 429 422 if (pawn) 430 423 { … … 446 439 { 447 440 //pigs: 1 + every 6th player is a pig 448 if ( (1 +this->getNumberOfPlayers()/6) > numberOf[piggy])441 if ( (1 + getPlayerCount()/6) > numberOf[piggy]) 449 442 { 450 443 notEnoughPigs=true; … … 495 488 } 496 489 //killers: every 4th player is a killer 497 if ( getNumberOfPlayers()/4> numberOf[killer])490 if ( static_cast<unsigned int>(getPlayerCount()/4) > numberOf[killer]) 498 491 { 499 492 notEnoughKillers=true; -
code/trunk/src/orxonox/gametypes/Dynamicmatch.h
r8727 r9348 81 81 SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const; 82 82 83 83 84 protected: 85 inline int getPlayerCount() const 86 { return this->numberOf[chaser] + numberOf[piggy] + this->numberOf[killer]; } 84 87 85 88 std::map< PlayerInfo*, int > playerParty_; //player's parties are recorded here -
code/trunk/src/orxonox/gametypes/Gametype.cc
r9261 r9348 301 301 } 302 302 303 void Gametype::playerScored(PlayerInfo* player )303 void Gametype::playerScored(PlayerInfo* player, int score) 304 304 { 305 305 std::map<PlayerInfo*, Player>::iterator it = this->players_.find(player); 306 306 if (it != this->players_.end()) 307 it->second.frags_ ++;307 it->second.frags_ += score; 308 308 } 309 309 -
code/trunk/src/orxonox/gametypes/Gametype.h
r9260 r9348 90 90 virtual bool playerChangedName(PlayerInfo* player); 91 91 92 virtual void playerScored(PlayerInfo* player );92 virtual void playerScored(PlayerInfo* player, int score = 1); 93 93 94 94 virtual bool allowPawnHit(Pawn* victim, Pawn* originator = 0); … … 153 153 virtual void resetTimer(float t); 154 154 155 /** 156 @brief Get number of Players in game. 157 */ 155 158 inline unsigned int getNumberOfPlayers() const 156 { return this->gtinfo_->getNumberOfPlayers(); } 159 { return this->players_.size(); } 160 161 157 162 158 163 protected: -
code/trunk/src/orxonox/gametypes/LastManStanding.cc
r8858 r9348 211 211 if(!player->getControllableEntity()) 212 212 return; 213 Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());213 Pawn* pawn = orxonox_cast<Pawn*>(player->getControllableEntity()); 214 214 if(!pawn) 215 215 return; -
code/trunk/src/orxonox/gametypes/LastTeamStanding.cc
r8858 r9348 283 283 if(!player->getControllableEntity()) 284 284 return; 285 Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());285 Pawn* pawn = orxonox_cast<Pawn*>(player->getControllableEntity()); 286 286 if(!pawn) 287 287 return; -
code/trunk/src/orxonox/gametypes/Mission.cc
- Property svn:eol-style set to native
r9016 r9348 63 63 { 64 64 this->missionAccomplished_ = false; 65 65 this->end(); 66 66 } 67 67 } … … 78 78 { 79 79 Gametype::end(); 80 /*if (this->missionAccomplished_) 80 /*if (this->missionAccomplished_) 81 81 this->gtinfo_->sendAnnounceMessage("Mission accomplished!"); 82 82 else 83 83 this->gtinfo_->sendAnnounceMessage("Mission failed!"); 84 **/84 */ 85 85 } 86 86 -
code/trunk/src/orxonox/gametypes/Mission.h
- Property svn:eol-style set to native
-
code/trunk/src/orxonox/gametypes/TeamBaseMatch.cc
r8952 r9348 128 128 129 129 // collect Points for killing oppenents 130 void TeamBaseMatch::playerScored(PlayerInfo* player )130 void TeamBaseMatch::playerScored(PlayerInfo* player, int score) 131 131 { 132 132 int teamnr = this->getTeam(player); -
code/trunk/src/orxonox/gametypes/TeamBaseMatch.h
r5929 r9348 47 47 virtual bool allowPawnDamage(Pawn* victim, Pawn* originator); 48 48 49 virtual void playerScored(PlayerInfo* player );49 virtual void playerScored(PlayerInfo* player, int score = 1); 50 50 virtual void showPoints(); 51 51 virtual void endGame(); -
code/trunk/src/orxonox/gametypes/TeamDeathmatch.cc
r7182 r9348 30 30 31 31 #include "core/CoreIncludes.h" 32 #include "core/ConfigValueIncludes.h" 33 #include "interfaces/TeamColourable.h" 34 #include "worldentities/TeamSpawnPoint.h" 32 #include "chat/ChatManager.h" 33 #include "infos/PlayerInfo.h" 35 34 #include "worldentities/pawns/Pawn.h" 36 35 … … 39 38 CreateUnloadableFactory(TeamDeathmatch); 40 39 41 TeamDeathmatch::TeamDeathmatch(BaseObject* creator) : Deathmatch(creator)40 TeamDeathmatch::TeamDeathmatch(BaseObject* creator) : TeamGametype(creator) 42 41 { 43 42 RegisterObject(TeamDeathmatch); 44 45 this->teams_ = 2;46 47 this->setConfigValues();48 43 } 49 44 50 void TeamDeathmatch::s etConfigValues()45 void TeamDeathmatch::start() 51 46 { 52 SetConfigValue(teams_, 2);47 TeamGametype::start(); 53 48 54 static ColourValue colours[] = 55 { 56 ColourValue(1.0f, 0.3f, 0.3f), 57 ColourValue(0.3f, 0.3f, 1.0f), 58 ColourValue(0.3f, 1.0f, 0.3f), 59 ColourValue(1.0f, 1.0f, 0.0f) 60 }; 61 static std::vector<ColourValue> defaultcolours(colours, colours + sizeof(colours) / sizeof(ColourValue)); 49 std::string message("The match has started!"); 50 ChatManager::message(message); 51 } 62 52 63 SetConfigValue(teamcolours_, defaultcolours); 53 void TeamDeathmatch::end() 54 { 55 TeamGametype::end(); 56 57 std::string message("The match has ended."); 58 ChatManager::message(message); 64 59 } 65 60 66 61 void TeamDeathmatch::playerEntered(PlayerInfo* player) 67 62 { 68 Deathmatch::playerEntered(player);63 TeamGametype::playerEntered(player); 69 64 70 std::vector<unsigned int> playersperteam(this->teams_, 0); 71 72 for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it) 73 if (it->second < static_cast<int>(this->teams_) && it->second >= 0) 74 playersperteam[it->second]++; 75 76 unsigned int minplayers = static_cast<unsigned int>(-1); 77 size_t minplayersteam = 0; 78 for (size_t i = 0; i < this->teams_; ++i) 79 { 80 if (playersperteam[i] < minplayers) 81 { 82 minplayers = playersperteam[i]; 83 minplayersteam = i; 84 } 85 } 86 87 this->teamnumbers_[player] = minplayersteam; 65 const std::string& message = player->getName() + " entered the game"; 66 ChatManager::message(message); 88 67 } 89 68 90 69 bool TeamDeathmatch::playerLeft(PlayerInfo* player) 91 70 { 92 bool valid_player = Deathmatch::playerLeft(player);71 bool valid_player = TeamGametype::playerLeft(player); 93 72 94 73 if (valid_player) 95 this->teamnumbers_.erase(player); 74 { 75 const std::string& message = player->getName() + " left the game"; 76 ChatManager::message(message); 77 } 78 79 return valid_player; 80 } 81 bool TeamDeathmatch::playerChangedName(PlayerInfo* player) 82 { 83 bool valid_player = TeamGametype::playerChangedName(player); 84 85 if (valid_player) 86 { 87 const std::string& message = player->getOldName() + " changed name to " + player->getName(); 88 ChatManager::message(message); 89 } 96 90 97 91 return valid_player; 98 92 } 99 93 100 bool TeamDeathmatch::allowPawnHit(Pawn* victim, Pawn* originator)94 void TeamDeathmatch::pawnKilled(Pawn* victim, Pawn* killer) 101 95 { 102 return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator); 96 if (victim && victim->getPlayer()) 97 { 98 std::string message; 99 if (killer) 100 { 101 if (killer->getPlayer()) 102 message = victim->getPlayer()->getName() + " was killed by " + killer->getPlayer()->getName(); 103 else 104 message = victim->getPlayer()->getName() + " was killed"; 105 } 106 else 107 message = victim->getPlayer()->getName() + " died"; 108 109 ChatManager::message(message); 110 } 111 112 Gametype::pawnKilled(victim, killer); 103 113 } 104 114 105 bool TeamDeathmatch::allowPawnDamage(Pawn* victim, Pawn* originator)115 void TeamDeathmatch::playerScored(PlayerInfo* player, int score) 106 116 { 107 return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator); 108 } 117 TeamGametype::playerScored(player, score); 109 118 110 bool TeamDeathmatch::allowPawnDeath(Pawn* victim, Pawn* originator) 111 { 112 return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator); 113 } 114 115 SpawnPoint* TeamDeathmatch::getBestSpawnPoint(PlayerInfo* player) const 116 { 117 int desiredTeamNr = -1; 118 std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player); 119 if (it_player != this->teamnumbers_.end()) 120 desiredTeamNr = it_player->second; 121 122 // Only use spawnpoints of the own team (or non-team-spawnpoints) 123 std::set<SpawnPoint*> teamSpawnPoints = this->spawnpoints_; 124 for (std::set<SpawnPoint*>::iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ) 119 if (player) 125 120 { 126 if ((*it)->isA(Class(TeamSpawnPoint))) 127 { 128 TeamSpawnPoint* tsp = orxonox_cast<TeamSpawnPoint*>(*it); 129 if (tsp && static_cast<int>(tsp->getTeamNumber()) != desiredTeamNr) 130 { 131 teamSpawnPoints.erase(it++); 132 continue; 133 } 134 } 135 136 ++it; 137 } 138 139 SpawnPoint* fallbackSpawnPoint = NULL; 140 if (teamSpawnPoints.size() > 0) 141 { 142 unsigned int randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(teamSpawnPoints.size()))); 143 unsigned int index = 0; 144 // Get random fallback spawnpoint in case there is no active SpawnPoint. 145 for (std::set<SpawnPoint*>::const_iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ++it) 146 { 147 if (index == randomspawn) 148 { 149 fallbackSpawnPoint = (*it); 150 break; 151 } 152 153 ++index; 154 } 155 156 // Remove all inactive SpawnPoints from the list. 157 for (std::set<SpawnPoint*>::iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ) 158 { 159 if(!(*it)->isActive()) 160 { 161 teamSpawnPoints.erase(it++); 162 continue; 163 } 164 165 ++it; 166 } 167 168 randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(teamSpawnPoints.size()))); 169 index = 0; 170 for (std::set<SpawnPoint*>::const_iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ++it) 171 { 172 if (index == randomspawn) 173 return (*it); 174 175 ++index; 176 } 177 178 return fallbackSpawnPoint; 179 } 180 181 return 0; 182 } 183 184 void TeamDeathmatch::playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) 185 { 186 if (!player) 187 return; 188 189 // Set the team colour 190 std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player); 191 if (it_player != this->teamnumbers_.end() && it_player->second >= 0 && it_player->second < static_cast<int>(this->teamcolours_.size())) 192 { 193 if (pawn) 194 { 195 pawn->setRadarObjectColour(this->teamcolours_[it_player->second]); 196 197 std::set<WorldEntity*> pawnAttachments = pawn->getAttachedObjects(); 198 for (std::set<WorldEntity*>::iterator it = pawnAttachments.begin(); it != pawnAttachments.end(); ++it) 199 { 200 if ((*it)->isA(Class(TeamColourable))) 201 { 202 TeamColourable* tc = orxonox_cast<TeamColourable*>(*it); 203 tc->setTeamColour(this->teamcolours_[it_player->second]); 204 } 205 } 206 } 121 const std::string& message = player->getName() + " scores!"; 122 ChatManager::message(message); 207 123 } 208 124 } 209 125 210 bool TeamDeathmatch::pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2)211 {212 if (pawn1 && pawn2)213 {214 std::map<PlayerInfo*, int>::const_iterator it1 = this->teamnumbers_.find(pawn1->getPlayer());215 std::map<PlayerInfo*, int>::const_iterator it2 = this->teamnumbers_.find(pawn2->getPlayer());216 217 if (it1 != this->teamnumbers_.end() && it2 != this->teamnumbers_.end())218 return (it1->second == it2->second);219 }220 return false;221 }222 223 int TeamDeathmatch::getTeam(PlayerInfo* player)224 {225 std::map<PlayerInfo*, int>::const_iterator it_player = this->teamnumbers_.find(player);226 if (it_player != this->teamnumbers_.end())227 return it_player->second;228 else229 return -1;230 }231 126 } -
code/trunk/src/orxonox/gametypes/TeamDeathmatch.h
r9016 r9348 31 31 32 32 #include "OrxonoxPrereqs.h" 33 34 #include <map> 35 #include <vector> 36 #include "Deathmatch.h" 33 #include "TeamGametype.h" 37 34 38 35 namespace orxonox 39 36 { 40 class _OrxonoxExport TeamDeathmatch : public Deathmatch37 class _OrxonoxExport TeamDeathmatch : public TeamGametype 41 38 { 42 39 public: … … 44 41 virtual ~TeamDeathmatch() {} 45 42 46 v oid setConfigValues();47 43 virtual void start(); 44 virtual void end(); 48 45 virtual void playerEntered(PlayerInfo* player); 49 46 virtual bool playerLeft(PlayerInfo* player); 47 virtual bool playerChangedName(PlayerInfo* player); 50 48 51 virtual bool allowPawnHit(Pawn* victim, Pawn* originator = 0); 52 virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); 53 virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); 54 55 virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn); 56 57 int getTeam(PlayerInfo* player); 58 inline const ColourValue& getTeamColour(int teamnr) const 59 { return this->teamcolours_[teamnr]; } 60 61 protected: 62 virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const; 63 bool pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2); 64 65 std::map<PlayerInfo*, int> teamnumbers_; 66 std::vector<ColourValue> teamcolours_; 67 unsigned int teams_; 49 virtual void pawnKilled(Pawn* victim, Pawn* killer = 0); 50 virtual void playerScored(PlayerInfo* player, int score = 1); 68 51 }; 69 52 } -
code/trunk/src/orxonox/gametypes/TeamGametype.cc
- Property svn:eol-style set to native
r9048 r9348 89 89 } 90 90 91 /** 92 @brief 93 Function that determines the player's team number when entering the game for the first time. 94 Override this function for other team structures. 95 */ 91 96 void TeamGametype::findAndSetTeam(PlayerInfo* player) 92 97 { … … 130 135 this->allowedInGame_.erase(player); 131 136 } 132 133 137 134 138 return valid_player; -
code/trunk/src/orxonox/gametypes/TeamGametype.h
- Property svn:eol-style set to native
-
code/trunk/src/orxonox/gametypes/UnderAttack.cc
r9016 r9348 49 49 this->gameEnded_ = false; 50 50 51 //this->setHUDTemplate("UnderAttackHUD");52 //This HUD is in conflict with the HUDEnemyHealthBar53 51 this->setConfigValues(); 54 52 this->timesequence_ = static_cast<int>(this->gameTime_);
Note: See TracChangeset
for help on using the changeset viewer.