Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 6812


Ignore:
Timestamp:
Apr 30, 2010, 4:42:58 PM (15 years ago)
Author:
jo
Message:

adding 3rd party: killers, making the gametype playable for larger groups of players, bug removed

Location:
code/branches/dynamicmatch
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/branches/dynamicmatch/data/levels/gametype_asteroids.oxw

    r6417 r6812  
    138138
    139139
    140 <CheckPoint name=trigger1 position="-300,300,0" scale=1 isdestination=false isfirst=true stayactive=true distance=10 addtime=13 />
    141 
    142 
    143 <CheckPoint name=trigger2 position="2200,600,0" scale=3 isdestination=false stayactive=true distance=100 addtime=10>
     140<CheckPoint name=trigger1 position="-300,300,0" scale=1 isdestination=false isfirst=true stayactive=true distance=10 addtime=14 />
     141
     142
     143<CheckPoint name=trigger2 position="2200,600,0" scale=3 isdestination=false stayactive=true distance=100 addtime=11>
    144144  <events>
    145145    <activity>
  • code/branches/dynamicmatch/src/orxonox/controllers/ArtificialController.cc

    r6686 r6812  
    249249        if (dynamic)
    250250        {
     251            if (dynamic->notEnoughPigs||dynamic->notEnoughKillers||dynamic->notEnoughChasers) {return false;}
     252       
    251253            if (entity1->getPlayer())
    252254                team1 = dynamic->getParty(entity1->getPlayer());
     
    254256            if (entity2->getPlayer())
    255257                team2 = dynamic->getParty(entity2->getPlayer());
    256         }
    257 
    258         return (team1 == team2 && team1 != -1)&&(!dynamic->onlyChasers); //returns false if players are in the same party and there is a victim
    259     }                                                           //-> if there is no victim or the AI-Player is not in the same team the AI attacks
     258                if (team1 ==-1 ||team2 ==-1 ) {return false;}
     259                else if (team1 == dynamic->chaser && team2 != dynamic->chaser) {return false;}
     260                else if (team1 == dynamic->piggy && team2 == dynamic->chaser) {return false;}
     261                else if (team1 == dynamic->killer && team2 == dynamic->chaser) {return false;}
     262                else return true;
     263               
     264        }
     265
     266        return (team1 == team2 && team1 != -1);
     267    }
    260268}
  • code/branches/dynamicmatch/src/orxonox/gametypes/Dynamicmatch.cc

    r6697 r6812  
    2626 *
    2727 */
    28 
     28//TODO: killers integrieren ; ArtificialController anpassen);
     29//pig punkte vergeben pro Zeit!
     30//killerfarbe schwarz; evtl. eigenes Raumfahrzeug;
     31//Low; Codeoptimierung und Dokumentation
     32
     33/*
     34short gaming manual:
     35There are three different parties a player can belong to: victim, chaser or killer
     36Every 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.
     37In 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
     43What you shouldn't do is shooting at players of your own party. By doing so your score will decrease.
     44P.S: If you don't want to be a victim: Get rid of your part by shooting a chaser.
     45*/
    2946#include "Dynamicmatch.h"
    3047
     
    4764    {
    4865        RegisterObject(Dynamicmatch);
    49         this->gameTime_ = 180;
    50         this->setConfigValues();
     66        this->gameTime_ = 180;
     67        this->setConfigValues();
    5168        this->chaser=0;
    52         this->piggy=1;
    53         this->onlyChasers=true;
    54         this->gameEnded_ =false;
    55         this->timesequence_ = static_cast<int>(this->gameTime_);
    56         this->friendlyfire=true;
     69        this->piggy=1;
     70        this->killer=2;
     71        this->notEnoughPigs=false;
     72        this->notEnoughKillers=false;
     73        this->notEnoughChasers=false;
     74        this->gameEnded_ =false;
     75        this->timesequence_ = static_cast<int>(this->gameTime_);
     76        this->friendlyfire=true;
     77        this->numberOf[chaser]=0;
     78        this->numberOf[piggy]=0;
     79        this->numberOf[killer]=0;
     80        this->tutorial=true;
     81        this->pointsPerTime=0.0f;
    5782    }
    5883
    5984    void Dynamicmatch::setConfigValues()
    6085    {
    61         SetConfigValue(gameTime_, 180);//just for test cases
    62         SetConfigValue(friendlyfire, true);
    63         static ColourValue colours[] =
    64         {
    65             ColourValue(0.3f, 0.3f, 1.0f),
    66             ColourValue(1.0f, 0.3f, 0.3f)
     86        SetConfigValue(gameTime_, 180);
     87        SetConfigValue(friendlyfire, true);
     88        SetConfigValue(tutorial, true);
     89        static ColourValue colours[] =
     90        {
     91            ColourValue(0.3f, 0.3f, 1.0f),      //chasercolour
     92            ColourValue(1.0f, 0.3f, 0.3f),      //piggycolour
     93            ColourValue(0.3f, 1.0f, 0.3f)       //killercolour  what about black: 0.0f, 0.0f, 0.0f
    6794           
    6895        };
     
    7299    }
    73100
    74 void Dynamicmatch::setPlayerColour(PlayerInfo* player) // not sure if this is the right place - helper function
    75 {
    76         std::map<PlayerInfo*, int>::const_iterator it_player = this->playerParty_.find(player);
    77             Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());
     101    bool Dynamicmatch::allowPawnDamage(Pawn* victim, Pawn* originator)//tested - works fine
     102    {   
     103        if (!originator||!victim)
     104        {return false;}
     105        if (victim && victim->getPlayer()) //&& originator && originator->getPlayer() ??
     106        {
     107        int target= playerParty_[victim->getPlayer()];
     108        int source= playerParty_[originator->getPlayer()];
     109
     110            //Case: Not Enough Pigs: party change (= party management)
     111            if (notEnoughPigs)
     112            {
     113                       
     114                numberOf[target]--;                             //decrease numberof victims's party
     115                const std::string& message = std::string(" Chasers ") + multi_cast<std::string>(numberOf[chaser]); COUT(0) << message << std::endl; Host::Broadcast(message);
     116                playerParty_[victim->getPlayer()]=piggy;        //victim's new party: pig
     117                setPlayerColour(victim->getPlayer());           //victim's new colour
     118                numberOf[piggy]++;                              //party switch: number of players is not affected (decrease and increase)
     119                const std::string& message1 = std::string(" Pig") + multi_cast<std::string>(numberOf[piggy]); COUT(0) << message1 << std::endl; Host::Broadcast(message1);
     120                    if (notEnoughKillers)                       //reward the originator
     121                    {
     122                        numberOf[source]--;                     //decrease numberof originator's party
     123                        const std::string& message = std::string(" Chasers ") + multi_cast<std::string>(numberOf[chaser]); COUT(0) << message << std::endl; Host::Broadcast(message);
     124                        playerParty_[originator->getPlayer()]=killer;           //originator's new party: killer
     125                        setPlayerColour(originator->getPlayer());               //originator's new colour
     126                        numberOf[killer]++;
     127                        const std::string& message2 = std::string(" Killers ") + multi_cast<std::string>(numberOf[killer]); COUT(0) << message2 << std::endl; Host::Broadcast(message2);
     128                    }
     129                evaluatePlayerParties();                        //check if the party change has to trigger futher party changes
     130                       
     131                //Give new pig boost
     132                SpaceShip* spaceship = dynamic_cast<SpaceShip*>(victim);
     133                if (spaceship && spaceship->getEngine())
     134                {
     135                    spaceship->getEngine()->setSpeedFactor(5);
     136                    WeakPtr<Engine>* ptr = new WeakPtr<Engine>(spaceship->getEngine());
     137                    new Timer(10, false, &createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this))->setDefaultValue(0, ptr), true);
     138                }
     139                std::string message5("First victim.");// for testing purposes
     140                COUT(0) << message5 << std::endl;
     141                Host::Broadcast(message5);
     142            }
     143
     144            //Case: notEnoughKillers: party change
     145            else if (notEnoughKillers)
     146            {
     147                numberOf[target]--;     //decrease numberof victims's party
     148                playerParty_[victim->getPlayer()]=killer;       //victim's new party: killer
     149                setPlayerColour(victim->getPlayer());           //victim colour
     150                numberOf[killer]++;                             //party switch: number of players is not affected (decrease and increase)
     151                const std::string& message = std::string(" Killers ") + multi_cast<std::string>(numberOf[killer]); COUT(0) << message << std::endl; Host::Broadcast(message);
     152                evaluatePlayerParties();                        //check if the party change has to trigger futher party changes
     153            }
     154            //Case: notEnoughChasers: party change
     155            else if (notEnoughChasers)
     156            {
     157                numberOf[target]--;     //decrease numberof victims's party
     158                playerParty_[victim->getPlayer()]=chaser;       //victim's new party: chaser
     159                setPlayerColour(victim->getPlayer());           //victim colour
     160                numberOf[chaser]++;                             //party switch: number of players is not affected (decrease and increase)
     161                const std::string& message = std::string(" Chasers ") + multi_cast<std::string>(numberOf[chaser]); COUT(0) << message << std::endl; Host::Broadcast(message);
     162                evaluatePlayerParties();                        //check if the party change has to trigger futher party changes
     163            }
     164
     165            //Case: chaser vs. killer
     166            else if ((source == killer && target == chaser)||(target == killer && source == chaser ))
     167            {
     168                return true;
     169            }
     170
     171            //Case: a chaser hits piggy
     172            else if ((source==chaser)&&(target==piggy))
     173            {
     174                std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer());
     175                if (it != this->players_.end())
     176                    {
     177                        it->second.frags_++;
     178                    }
     179            }
     180            //Case: piggy hits chaser
     181            else if (source==piggy&&target==chaser)
     182            {
     183                //partyswitch: victim bcomes piggy and the originator(piggy) becomes chaser
     184                playerParty_[victim->getPlayer()]=piggy;
     185                playerParty_[originator->getPlayer()]=chaser;
     186                //announce
     187                const std::string& messageVictim = victim->getPlayer()->getName() + " is victim";
     188                COUT(0) << messageVictim << std::endl;
     189                Host::Broadcast(messageVictim);
     190
     191                //party switch -> colour switch         
     192                setPlayerColour(victim->getPlayer()); //victim colour
     193                setPlayerColour(originator->getPlayer());//originator colour
     194
     195                //Give new pig boost
     196                SpaceShip* spaceship = dynamic_cast<SpaceShip*>(victim);
     197                if (spaceship && spaceship->getEngine())
     198                {
     199                    spaceship->getEngine()->setSpeedFactor(5);
     200                    WeakPtr<Engine>* ptr = new WeakPtr<Engine>(spaceship->getEngine());
     201                    new Timer(10, false, &createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this))->setDefaultValue(0, ptr), true);
     202                }
     203
     204            }
     205            //TODO: killer vs piggy
     206            else if (source==killer &&target==piggy)            //party and colour switch       
     207            {
     208            playerParty_[victim->getPlayer()]=killer;
     209            playerParty_[originator->getPlayer()]=piggy;
     210
     211            setPlayerColour(victim->getPlayer());               //victim colour
     212            setPlayerColour(originator->getPlayer());           //originator colour
     213            }
     214            //Case: friendly fire
     215            else if (friendlyfire && (source == target))
     216            {
     217                std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer());
     218                if (it != this->players_.end())
     219                    {
     220                        it->second.frags_--;
     221                    }
     222            }
     223        }// from far far away not to be removed!
     224        return false; //default: no damage
     225    }
     226
     227
     228
     229    bool Dynamicmatch::allowPawnDeath(Pawn* victim, Pawn* originator)
     230    {   
     231        //killers can kill chasers and killers can be killed by chasers
     232        if ((playerParty_[originator->getPlayer()] == killer && playerParty_[victim->getPlayer()] == chaser)||(playerParty_[victim->getPlayer()] == killer &&
     233        playerParty_[originator->getPlayer()] == chaser ))
     234        {
     235            if (playerParty_[originator->getPlayer()] == killer)        //reward the killer
     236            {
     237                std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer());
     238                if (it != this->players_.end())
     239                {
     240                    it->second.frags_+=20;      //value must be tested
     241                }
     242            }
     243        return true;
     244        }
     245        else return false;
     246    }
     247   
     248    void Dynamicmatch::playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) //set party + colouring
     249    {
     250        if (!player)
     251            return;
     252       
     253        Dynamicmatch::setPlayerColour(player);  //Set playercolour
     254        evaluatePlayerParties();
     255    }
     256
     257    void Dynamicmatch::playerEntered(PlayerInfo* player) //standardfunction
     258    {
     259        if (!player)// only for safety
     260            return;
     261        playerParty_[player]=chaser;            //Set playerparty
     262        numberOf[chaser]++; const std::string& message = std::string(" Chasers ") + multi_cast<std::string>(numberOf[chaser]); COUT(0) << message << std::endl; Host::Broadcast(message);
     263        Gametype::playerEntered(player);
     264        const std::string& message6 = player->getName() + " entered the game";
     265        COUT(0) << message6 << std::endl;
     266        Host::Broadcast(message6);
     267    }
     268
     269    bool Dynamicmatch::playerLeft(PlayerInfo* player) //standardfunction
     270    {
     271        bool valid_player = Gametype::playerLeft(player);
     272        if (valid_player)
     273        {
     274            switch (playerParty_[player])
     275            {
     276            case 0: numberOf[chaser]--; break;
     277            case 1: numberOf[piggy]--; break;
     278            case 2: numberOf[killer]--; break;
     279            }
     280            const std::string& message = player->getName() + " left the game";
     281            COUT(0) << message << std::endl;
     282            Host::Broadcast(message);
     283                //remove player from map
     284            playerParty_.erase (player);
     285                //adjust player parties
     286            evaluatePlayerParties();
     287        }
     288
     289        return valid_player;
     290    }
     291
     292   
     293
     294   
     295
     296    void Dynamicmatch::tick(float dt)
     297    {
     298        SUPER(Dynamicmatch, tick, dt);//TODO - was bedeutet diese Zeile
     299
     300        if (this->hasStarted() && !gameEnded_)
     301        {   pointsPerTime =pointsPerTime + dt;
     302            gameTime_ = gameTime_ - dt;
     303            if (pointsPerTime > 5)
     304            {
     305                pointsPerTime=0.0f;
     306               
     307            }
     308            if (gameTime_<= 0)
     309            {
     310                this->gameEnded_ = true;
     311                this->end();       
     312            }
     313            if ( gameTime_ <= timesequence_ && gameTime_ > 0)
     314            {
     315                const std::string& message = multi_cast<std::string>(timesequence_) + " seconds left!";
     316
     317                this->gtinfo_->sendAnnounceMessage(message);
     318
     319                if (timesequence_ >= 30 && timesequence_ <= 60)
     320                {
     321                    timesequence_ = timesequence_ - 10;
     322                }
     323                else if (timesequence_ <= 30)
     324                {
     325                    timesequence_ = timesequence_ - 5;
     326                }
     327                else
     328                {
     329                    timesequence_ = timesequence_ - 30;
     330                }
     331            }
     332        }
     333    }
     334
     335    void Dynamicmatch::rewardPig()
     336    {
     337        //durch alle Spieler iterieren
     338        // allen Spielern mit der Pig-party frags++
     339        ;
     340    }
     341    void Dynamicmatch::setPlayerColour(PlayerInfo* player) // sets a players colour
     342    {
     343        std::map<PlayerInfo*, int>::const_iterator it_player = this->playerParty_.find(player);
     344        Pawn* pawn = dynamic_cast<Pawn*>(player->getControllableEntity());
    78345            if (pawn)
    79346            {
     
    83350                for (std::set<WorldEntity*>::iterator it = pawnAttachments.begin(); it != pawnAttachments.end(); ++it)
    84351                {
    85                     if ((*it)->isA(Class(TeamColourable)))//not sure if this works
     352                    if ((*it)->isA(Class(TeamColourable)))
    86353                    {
    87354                        TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
     
    90357                }
    91358            }
    92 }
    93 
    94 
    95 int Dynamicmatch::getParty(PlayerInfo* player) // helper function for ArtificialController
    96 {
    97 return this->playerParty_[player];
    98 }
    99 
    100 
    101 bool Dynamicmatch::allowPawnDamage(Pawn* victim, Pawn* originator)//tested - works fine
    102     {   
    103 
    104         if (victim && victim->getPlayer())
    105         {
    106                 //Case 1: a chaser hits piggy // BUG: playerParty_[originator->getPlayer()]==chaser) is true even if victim is a chaser
    107                 if ((!onlyChasers)&&(playerParty_[originator->getPlayer()]==chaser)&&playerParty_[victim->getPlayer()]==piggy) {
    108                         std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer());
    109                     if (it != this->players_.end())
    110                     {
    111                         it->second.frags_++;
    112                     }
    113                 }
    114                 //Case 2: piggy hits chaser
    115                 else if ((!onlyChasers)&&(playerParty_[originator->getPlayer()]==piggy)){
    116                         //partyswitch: victim bcomes piggy and the orginator(piggy) becomes chaser
    117                         playerParty_[victim->getPlayer()]=piggy;
    118                         playerParty_[originator->getPlayer()]=chaser;
    119                         //announce
    120                         const std::string& messageVictim = victim->getPlayer()->getName() + " is victim";
    121                         COUT(0) << messageVictim << std::endl;
    122                         Host::Broadcast(messageVictim);
    123 
    124                         //party switch -> colour switch         
    125                         setPlayerColour(victim->getPlayer()); //victim colour
    126                         setPlayerColour(originator->getPlayer());//orginator colour
    127 
    128                         //Give new pig boost
    129                         SpaceShip* spaceship = dynamic_cast<SpaceShip*>(victim);
    130                         if (spaceship && spaceship->getEngine())
    131                         {
    132                                 spaceship->getEngine()->setSpeedFactor(5);
    133                                 WeakPtr<Engine>* ptr = new WeakPtr<Engine>(spaceship->getEngine());
    134                                 new Timer(10, false, &createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this))->setDefaultValue(0, ptr), true);
    135                         }
    136 
    137                 }
    138                 //Case 3: there are only chasers -> new piggy is needed
    139                 else if (onlyChasers){
    140                         //Rollenzuweisung victim wird piggy
    141                         playerParty_[victim->getPlayer()]=piggy;
    142                         onlyChasers=false;
    143                         setPlayerColour(victim->getPlayer()); //victim colour
    144 
    145                         //Give new pig boost
    146                         SpaceShip* spaceship = dynamic_cast<SpaceShip*>(victim);
    147                         if (spaceship && spaceship->getEngine())
    148                         {
    149                                 spaceship->getEngine()->setSpeedFactor(5);
    150                                 WeakPtr<Engine>* ptr = new WeakPtr<Engine>(spaceship->getEngine());
    151                                 new Timer(10, false, &createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this))->setDefaultValue(0, ptr), true);
    152                         }
    153 
    154 
    155                 std::string message("First victim.");
    156                 COUT(0) << message << std::endl;
    157                 Host::Broadcast(message);
    158                 }
    159                 else if (friendlyfire)
    160                 {
    161                 std::map<PlayerInfo*, Player>::iterator it = this->players_.find(originator->getPlayer());
    162                  if (it != this->players_.end())
    163                     {
    164                         it->second.frags_--;
    165                     }
    166                 }
    167         }
    168                
    169         return false;
    170     }
    171 
    172 void Dynamicmatch::resetSpeedFactor(WeakPtr<Engine>* ptr)
    173 {
    174         if (*ptr)
    175         {
    176                 (*ptr)->setSpeedFactor(1.0f);
    177359        }
    178         delete ptr;
    179 }
    180 
    181 bool Dynamicmatch::allowPawnDeath(Pawn* victim, Pawn* originator)//
    182     {
    183         return false;
    184     }
    185 
    186 void Dynamicmatch::start()
     360
     361    void Dynamicmatch::evaluatePlayerParties() //manages the notEnough booleans (here the percentage of special players is implemented)
     362    {
     363        //pigs: 1 + every 6th player is a pig
     364        if ( (1+this->getNumberOfPlayers()/6) > numberOf[piggy]) {notEnoughPigs=true;}
     365        else {notEnoughPigs=false;}
     366        //killers: every 4th player is a killer
     367        if (getNumberOfPlayers()/4 > numberOf[killer]) {notEnoughKillers=true;}
     368        else {notEnoughKillers=false;}
     369        //chasers: there are more chasers than killers + pigs
     370        if (numberOf[piggy]+numberOf[killer] > numberOf[chaser]) {notEnoughChasers=true;}
     371        else {notEnoughChasers=false; const std::string& message = "Players Evaluated";COUT(0) << message << std::endl; Host::Broadcast(message);}
     372        const std::string& messagetest = multi_cast<std::string>(numberOf[piggy]+numberOf[chaser]+numberOf[killer]) + "   players!";
     373        COUT(0) << messagetest << std::endl; Host::Broadcast(messagetest);     
     374    }
     375
     376    int Dynamicmatch::getParty(PlayerInfo* player) // helper function for ArtificialController
     377    {
     378        return this->playerParty_[player];
     379    }
     380
     381    void Dynamicmatch::resetSpeedFactor(WeakPtr<Engine>* ptr)// helper function
     382    {
     383        if (*ptr)
     384        {
     385            (*ptr)->setSpeedFactor(1.0f);
     386        }
     387        delete ptr;
     388    }
     389
     390    bool Dynamicmatch::playerChangedName(PlayerInfo* player) //standardfunction
     391    {
     392        bool valid_player = Gametype::playerChangedName(player);
     393        if (valid_player)
     394        {
     395            const std::string& message = player->getOldName() + " changed name to " + player->getName();
     396            COUT(0) << message << std::endl;
     397            Host::Broadcast(message);
     398        }
     399
     400        return valid_player;
     401    }
     402
     403    void Dynamicmatch::start()
    187404    {   
    188405        Gametype::start();
    189 
    190         std::string message("Don't be a victim!");
     406        if(!tutorial)
     407        {
     408            std::string message("Game started!");
     409            COUT(0) << message << std::endl;
     410            Host::Broadcast(message);
     411        }
     412        else if(tutorial) //in order to explain how this gametype works briefly
     413        {
     414            std::string tutotrialmessage("Shoot at other players as long as every player is red.\n\nIf you are fast enough you're spaceship will become green.\n\nIf you are hit you'll become blue.");
     415            COUT(0) << tutotrialmessage << std::endl;
     416            Host::Broadcast(tutotrialmessage);
     417            callInstructions_.setTimer(10, false, createExecutor(createFunctor(&Dynamicmatch::instructions, this)));
     418        }
     419    }   
     420
     421    void Dynamicmatch::instructions()
     422    {
     423        std::string message("Earn points:\n\n\n\tIf you're red: Chase the blue player!\n\n\tIf you're blue shoot at a red player or hide.\n\n\tIf you're green: You've got the licence to kill red players!");
    191424        COUT(0) << message << std::endl;
    192425        Host::Broadcast(message);
    193        
    194     }
    195 
     426        callInstructions_.setTimer(10, false, createExecutor(createFunctor(&Dynamicmatch::furtherInstructions, this)));
     427    }
     428
     429    void Dynamicmatch::furtherInstructions()
     430    {
     431        std::string message("After 3 Minutes the game is over.");
     432        COUT(0) << message << std::endl;
     433        Host::Broadcast(message);
     434    }
    196435    void Dynamicmatch::end()
    197436    {
    198437        Gametype::end();
    199438
    200         std::string message("Time out. Press F2 to see the soreboard");
     439        std::string message("Time out. Press F2 to see the points you scored.");
    201440        COUT(0) << message << std::endl;
    202441        Host::Broadcast(message);
     
    213452    }
    214453
    215    
    216 void Dynamicmatch::playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) //set party + colouring
    217     {
    218         if (!player)
    219             return;
    220         playerParty_[player]=chaser;//playerparty       
    221         Dynamicmatch::setPlayerColour(player); //Set playercolour
    222     }
    223 
    224     void Dynamicmatch::playerEntered(PlayerInfo* player) //standardfunction
    225     {
    226 
    227         if (!player)// only for safety
    228             return;
    229 
    230         Gametype::playerEntered(player);
    231        
    232         const std::string& message = player->getName() + " entered the game";
    233         COUT(0) << message << std::endl;
    234         Host::Broadcast(message);
    235     }
    236 
    237     bool Dynamicmatch::playerLeft(PlayerInfo* player) //standardfunction
    238     {
    239         bool valid_player = Gametype::playerLeft(player);
    240        
    241        
    242         if (valid_player)
    243         {
    244             const std::string& message = player->getName() + " left the game";
    245             COUT(0) << message << std::endl;
    246             Host::Broadcast(message);
    247                 //remove player from map
    248              playerParty_.erase (player); 
    249         }
    250 
    251         return valid_player;
    252     }
    253 
    254     bool Dynamicmatch::playerChangedName(PlayerInfo* player) //standardfunction
    255     {
    256         bool valid_player = Gametype::playerChangedName(player);
    257 
    258         if (valid_player)
    259         {
    260             const std::string& message = player->getOldName() + " changed name to " + player->getName();
    261             COUT(0) << message << std::endl;
    262             Host::Broadcast(message);
    263         }
    264 
    265         return valid_player;
    266     }
    267 
    268    
    269 
    270  void Dynamicmatch::tick(float dt)
    271     {
    272         SUPER(Dynamicmatch, tick, dt);//TODO - was bedeutet diese Zeile
    273 
    274         if (this->hasStarted() && !gameEnded_)
    275         {
    276             gameTime_ = gameTime_ - dt;
    277             if (gameTime_<= 0)
    278             {
    279                 this->gameEnded_ = true;
    280                 this->end();       
    281             }
    282                 if ( gameTime_ <= timesequence_ && gameTime_ > 0)
    283             {
    284                 const std::string& message = multi_cast<std::string>(timesequence_) + " seconds left!";
    285 
    286                 this->gtinfo_->sendAnnounceMessage(message);
    287 
    288                 if (timesequence_ >= 30 && timesequence_ <= 60)
    289                 {
    290                     timesequence_ = timesequence_ - 10;
    291                 }
    292                 else if (timesequence_ <= 30)
    293                 {
    294                     timesequence_ = timesequence_ - 5;
    295                 }
    296                 else
    297                 {
    298                     timesequence_ = timesequence_ - 30;
    299                 }
    300             }
    301         }
    302     }
    303454}
  • code/branches/dynamicmatch/src/orxonox/gametypes/Dynamicmatch.h

    r6697 r6812  
    4444            virtual ~Dynamicmatch() {}
    4545               
    46                 bool onlyChasers;
    47                 int getParty(PlayerInfo* player);
    48                 void setPlayerColour(PlayerInfo* player);//own function
    49                 void setConfigValues();//done
    50                 virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); //ok - score function and management of parties
    51                 virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); //ok - simple
     46            bool notEnoughPigs;
     47            bool notEnoughKillers;
     48            bool notEnoughChasers;
     49            virtual void evaluatePlayerParties();
     50            int getParty(PlayerInfo* player);
     51            void setPlayerColour(PlayerInfo* player);//own function
     52            void setConfigValues();//done
     53            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); //ok - score function and management of parties
     54            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); //ok - simple
    5255            virtual void start();
    53 
     56            virtual void end(); //Wie geht das mit der Punkteausgabe aendern? Z.B: Persoenliche Nachricht?
     57            virtual void playerEntered(PlayerInfo* player);
     58            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn);//is used to initialize the player's party and colour
     59            virtual bool playerLeft(PlayerInfo* player);
     60            virtual bool playerChangedName(PlayerInfo* player);//unchanged
     61            virtual void instructions();
     62            virtual void furtherInstructions();
     63            virtual void rewardPig();
     64            void resetSpeedFactor(WeakPtr<Engine>* ptr); 
     65            void tick (float dt);// used to end the game
     66            //three different parties   TODO const machen!     
     67            int chaser;
     68            int piggy;
     69            int killer;
     70               
     71            bool friendlyfire; //goal: player can switch it on/off
     72            bool tutorial; //goal: new players recieve messages how the new gametype works - later it can be switched off.
     73        protected:
    5474                 
    55             virtual void end(); //Wie geht das mit der Punkteausgabe? frags als Schnittstelle ausreichend?
    56             virtual void playerEntered(PlayerInfo* player);
    57                 virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn);//is used to initialize the player's party and colour
    58             virtual bool playerLeft(PlayerInfo* player);//ToDo: extract the player's party record - done?
    59             virtual bool playerChangedName(PlayerInfo* player);//unchanged
    60 
    61                 void resetSpeedFactor(WeakPtr<Engine>* ptr);
    62        
    63            
    64                 void tick (float dt);// used to end the game
    65                
    66                 //inline const ColourValue& getPlayerColour(int teamnr) const
    67                 //{ return this->partyColours_[teamnr]; }
    68                
    69                 protected:
    70                   //the two different parties
    71                   int chaser;
    72                   int piggy;
    73                   std::map< PlayerInfo*, int > playerParty_; //player's parties are recorded here
    74                   std::vector<ColourValue> partyColours_; //aus TeamDeathmatch           
    75                 bool friendlyfire; //goal: player can switch it on/off
    76                 float gameTime_;   // from UnderAttack
    77                 bool gameEnded_; // true if game is over
    78                 int timesequence_; //used for countdown
     75                 
     76            std::map< PlayerInfo*, int > playerParty_; //player's parties are recorded here
     77            std::vector<ColourValue> partyColours_; //aus TeamDeathmatch
     78            unsigned int numberOf[3]; //array to count number of chasers, pigs, killers
     79            float pointsPerTime;
     80            float gameTime_;   // from UnderAttack better: use gametype interface!!!
     81            bool gameEnded_; // true if game is over
     82            int timesequence_; //used for countdown
     83            Timer callInstructions_;
    7984    };
    8085}
Note: See TracChangeset for help on using the changeset viewer.