Changeset 9286 for code/branches/presentation2012merge/src/orxonox
- Timestamp:
- Jun 10, 2012, 5:13:00 PM (13 years ago)
- Location:
- code/branches/presentation2012merge
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentation2012merge
- Property svn:mergeinfo changed
/code/branches/pCuts (added) merged: 9023-9024,9027,9081-9092
- Property svn:mergeinfo changed
-
code/branches/presentation2012merge/src/orxonox/OrxonoxPrereqs.h
r8858 r9286 109 109 class TeamDeathmatch; 110 110 class UnderAttack; 111 class TeamGametype; 111 112 112 113 // graphics -
code/branches/presentation2012merge/src/orxonox/gametypes/Dynamicmatch.cc
r9279 r9286 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" … … 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) … … 309 309 /** 310 310 @brief 311 Grant the piggya boost.311 Grant the victim a boost. 312 312 @param spaceship 313 313 The SpaceShip to give the boost. … … 315 315 void Dynamicmatch::grantPigBoost(SpaceShip* spaceship) 316 316 { 317 // Give pigboost317 // Give victim boost 318 318 if (spaceship) 319 319 { … … 374 374 375 375 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; 376 { 377 orxout() << " number of chasers: " << numberOf[chaser] << endl; 378 orxout() << " number of killers: " << numberOf[killer] << endl; 379 orxout() << " number of victims: " << numberOf[piggy] << endl; 380 pointsPerTime = pointsPerTime + dt; //increase points 381 gameTime_ = gameTime_ - dt; // decrease game time 382 if (pointsPerTime > 2.0f) //hard coded points for victim! should be changed 383 { 384 pointsPerTime = 0.0f; 381 385 rewardPig(); 382 386 } … … 408 412 } 409 413 414 /** 415 @brief The reward function is called every 2 seconds via the tick function and makes the victim score points. 416 */ 410 417 void Dynamicmatch::rewardPig() 411 418 { … … 415 422 { 416 423 //Spieler mit der Pig-party frags++ 417 std::map<PlayerInfo*, Player>::iterator it2 = this->players_.find(it->first); // still not sure if right syntax424 std::map<PlayerInfo*, Player>::iterator it2 = this->players_.find(it->first); 418 425 if (it2 != this->players_.end()) 419 426 { -
code/branches/presentation2012merge/src/orxonox/gametypes/TeamDeathmatch.cc
r7182 r9286 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) 106 116 { 107 return (!this->pawnsAreInTheSameTeam(victim, originator) || !originator); 108 } 117 TeamGametype::playerScored(player); 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/branches/presentation2012merge/src/orxonox/gametypes/TeamDeathmatch.h
r9016 r9286 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); 68 51 }; 69 52 } -
code/branches/presentation2012merge/src/orxonox/gametypes/TeamGametype.cc
r9271 r9286 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;
Note: See TracChangeset
for help on using the changeset viewer.