Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Sep 4, 2012, 6:13:03 PM (12 years ago)
Author:
jo
Message:

The transporter's life is now set depending on the number of players.

Location:
code/branches/release2012/src/orxonox/gametypes
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/branches/release2012/src/orxonox/gametypes/TeamGametype.cc

    r9363 r9370  
    188188    }
    189189
     190    int TeamGametype::getTeamSize(int team)
     191    {
     192        int teamSize = 0;
     193        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
     194        {
     195            if (it->second == team)
     196                teamSize++;
     197        }
     198        return teamSize;
     199    }
     200
     201    int TeamGametype::getHumansInTeam(int team)
     202    {
     203        int teamSize = 0;
     204        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
     205        {
     206            if (it->second == team  && it->first->isHumanPlayer())
     207                teamSize++;
     208        }
     209        return teamSize;
     210    }
     211
     212
    190213    SpawnPoint* TeamGametype::getBestSpawnPoint(PlayerInfo* player) const
    191214    {
  • code/branches/release2012/src/orxonox/gametypes/TeamGametype.h

    r9363 r9370  
    6363                { return this->teamcolours_[teamnr]; }
    6464            int getTeamScore(PlayerInfo* player);
    65 
     65            int getTeamSize(int team);
     66            int getHumansInTeam(int team);
    6667
    6768        protected:
  • code/branches/release2012/src/orxonox/gametypes/UnderAttack.cc

    r9348 r9370  
    3939{
    4040    CreateUnloadableFactory(UnderAttack);
     41    static const int attacker_ = 0; // teamnumber of the attacking team
     42    static const int defender_ = 1; // defender's teamnumber
    4143
    4244    UnderAttack::UnderAttack(BaseObject* creator) : TeamDeathmatch(creator)
     
    5153        this->setConfigValues();
    5254        this->timesequence_ = static_cast<int>(this->gameTime_);
     55
    5356    }
    5457
     
    7679                continue;
    7780
    78             if (it->second == 0)
     81            if (it->second == attacker_)
    7982                this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
    8083            else
     
    188191        }
    189192    }
     193
     194    void UnderAttack::playerEntered(PlayerInfo* player)
     195    {
     196        if (!player)
     197            return;
     198        TeamDeathmatch::playerEntered(player);
     199        this->setTransporterHealth();
     200    }
     201
     202    void UnderAttack::setTransporterHealth()
     203    {
     204        if (this->destroyer_ != 0)
     205        {
     206            //Calculation: Each attacker deals about 3500 damage. A human attacker deals 1500 damage additionally.
     207            //Each defender prevents 500 damage. If human 2000 damage will be additionally be prevented.
     208            //TODO: use gametime and the damage dealt so far in order to calculate the transporter's life more precisely
     209            float health = this->getTeamSize(attacker_)*3500.0f + this->getHumansInTeam(attacker_)*1500.0f - this->getTeamSize(defender_)*500.0f - this->getHumansInTeam(defender_)*2000.0f ;
     210            this->destroyer_->setHealth(std::max(health, 5000.0f)); //the destoyer should have at least 5000.0f life.
     211        }
     212    }
     213
     214
    190215}
  • code/branches/release2012/src/orxonox/gametypes/UnderAttack.h

    r5929 r9370  
    5151            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0);
    5252            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0);
     53            virtual void playerEntered(PlayerInfo* player);
    5354
    5455        protected:
    5556            virtual void killedDestroyer();
     57            void setTransporterHealth();
    5658
    5759            WeakPtr<Destroyer> destroyer_;
Note: See TracChangeset for help on using the changeset viewer.