Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Feb 1, 2015, 10:21:51 PM (9 years ago)
Author:
landauf
Message:

merged towerdefenseHS14 (except some debug code)

Location:
code/branches/presentationHS14merge
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentationHS14merge

  • code/branches/presentationHS14merge/src/modules/towerdefense/TowerDefense.cc

    r9667 r10248  
    2020 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
    2121 *
    22  *   Author:
     22 *  Author:
    2323 *
    2424 *   Co-authors:
     
    7373 *
    7474 */
    75 
    7675#include "TowerDefense.h"
    77 #include "Tower.h"
     76#include "TowerDefenseTower.h"
    7877#include "TowerDefenseCenterpoint.h"
    79 
     78//#include "TDCoordinate.h"
     79#include "TowerTurret.h"
    8080#include "worldentities/SpawnPoint.h"
    8181#include "worldentities/pawns/Pawn.h"
    8282#include "worldentities/pawns/SpaceShip.h"
    8383#include "controllers/WaypointController.h"
    84 
    8584#include "graphics/Model.h"
    8685#include "infos/PlayerInfo.h"
    87 
    8886#include "chat/ChatManager.h"
    8987#include "core/CoreIncludes.h"
    90 
    9188/* Part of a temporary hack to allow the player to add towers */
    9289#include "core/command/ConsoleCommand.h"
     
    9996    {
    10097        RegisterObject(TowerDefense);
     98/*
     99        for (int i=0; i < 16 ; i++){
     100            for (int j = 0; j< 16 ; j++){
     101                towermatrix[i][j] = NULL;
     102            }
     103        }*/
    101104
    102105        this->setHUDTemplate("TowerDefenseHUD");
    103106
    104         this->stats_ = new TowerDefensePlayerStats();
    105 
    106         /* Temporary hack to allow the player to add towers */
     107        //this->stats_ = new TowerDefensePlayerStats();
     108
     109        /* Temporary hack to allow the player to add towers and upgrade them */
    107110        this->dedicatedAddTower_ = createConsoleCommand( "addTower", createExecutor( createFunctor(&TowerDefense::addTower, this) ) );
     111        this->dedicatedUpgradeTower_ = createConsoleCommand( "upgradeTower", createExecutor( createFunctor(&TowerDefense::upgradeTower, this) ) );
    108112    }
    109113
     
    127131    void TowerDefense::start()
    128132    {
     133
    129134        Deathmatch::start();
    130135
    131         const int kInitialTowerCount = 3;
    132         Coordinate initialTowerCoordinates[kInitialTowerCount] = {{3,2}, {8,5}, {12,10}};
    133 
    134         for (int i = 0; i < kInitialTowerCount; i++)
    135         {
    136             Coordinate coordinate = initialTowerCoordinates[i];
    137             addTower(coordinate.x, coordinate.y);
    138         }
    139 
    140         ChatManager::message("Use the console command addTower x y to add towers");
    141 
    142         //TODO: let the player control his controllable entity && TODO: create a new ControllableEntity for the player
    143     }
     136// Waypoints: [1,3] [10,3] [10,11] [13,11] -> add the points to a matrix so the player cant place towers on the path
     137        for (int i=0; i < 16 ; i++){
     138            for (int j = 0; j< 16 ; j++){
     139                towermatrix[i][j] = false;
     140            }
     141        }
     142
     143        for (int k=0; k<3; k++)
     144            towermatrix[1][k]=true;
     145        for (int l=1; l<11; l++)
     146            towermatrix[l][3]=true;
     147        for (int m=3; m<12; m++)
     148            towermatrix[10][m]=true;
     149        for (int n=10; n<14; n++)
     150            towermatrix[n][11]=true;
     151        for (int o=13; o<16; o++)
     152            towermatrix[13][o]=true;
     153
     154        //set initial credits, lifes and WaveNumber
     155        this->setCredit(200);
     156        this->setLifes(50);
     157        this->setWaveNumber(0);
     158        time=0.0;
     159
     160        //adds initial towers
     161        for (int i=0; i <7; i++){
     162            addTower(i+3,4);
     163        }/*
     164        for (int j=0; j < 7; j++){
     165            addTower(9,j+5);
     166        }*/
     167    }
     168
     169    // Generates a TowerDefenseEnemy. Uses Template "enemytowerdefense". Sets position at first waypoint of path.
     170    void TowerDefense::addTowerDefenseEnemy(std::vector<TDCoordinate*> path, int templatenr){
     171
     172
     173        TowerDefenseEnemy* en1 = new TowerDefenseEnemy(this->center_->getContext());
     174       
     175        switch(templatenr)
     176        {
     177        case 1 :
     178            en1->addTemplate("enemytowerdefense1");
     179            en1->setScale(3);
     180            en1->setHealth(en1->getHealth() + this->getWaveNumber()*4);
     181            break;
     182
     183        case 2 :
     184            en1->addTemplate("enemytowerdefense2");
     185            en1->setScale(2);
     186            en1->setHealth(en1->getHealth() + this->getWaveNumber()*4);
     187            //  en1->setShieldHealth(en1->getShield() = this->getWaveNumber()*2))
     188            break;
     189
     190        case 3 :
     191            en1->addTemplate("enemytowerdefense3");
     192            en1->setScale(1);
     193            en1->setHealth(en1->getHealth() + this->getWaveNumber()*4);
     194            break;
     195        }
     196
     197        en1->getController();
     198        en1->setPosition(path.at(0)->get3dcoordinate());
     199        TowerDefenseEnemyvector.push_back(en1);
     200
     201        for(unsigned int i = 0; i < path.size(); ++i)
     202        {
     203            en1->addWaypoint((path.at(i)));
     204        }
     205    }
     206
    144207
    145208    void TowerDefense::end()
    146209    {
     210
    147211        Deathmatch::end();
    148 
    149         ChatManager::message("Match is over");
    150     }
    151 
     212        ChatManager::message("Match is over! Gameover!");
     213
     214    }
     215
     216    //not working yet
     217    void TowerDefense::upgradeTower(int x,int y)
     218    {/*
     219        const int upgradeCost = 20;
     220
     221        if (!this->hasEnoughCreditForTower(upgradeCost))
     222        {
     223            orxout() << "not enough credit: " << (this->getCredit()) << " available, " << upgradeCost << " needed.";
     224            return;
     225        }
     226
     227        if (towermatrix [x][y] == NULL)
     228        {
     229            orxout() << "no tower on this position" << endl;
     230            return;
     231        }
     232
     233        else
     234        {
     235            (towermatrix [x][y])->upgradeTower();
     236        }*/
     237    }
     238
     239    /*adds Tower at Position (x,y) and reduces credit and adds the point to the towermatrix. template ("towerturret")
     240    so towers have ability if the turrets
     241
     242    */
    152243    void TowerDefense::addTower(int x, int y)
    153244    {
    154         const TowerCost towerCost = TDDefaultTowerCost;
     245        const int towerCost = 20;
    155246
    156247        if (!this->hasEnoughCreditForTower(towerCost))
    157248        {
    158             orxout() << "not enough credit: " << (this->stats_->getCredit()) << " available, " << TDDefaultTowerCost << " needed.";
     249            orxout() << "not enough credit: " << (this->getCredit()) << " available, " << towerCost << " needed.";
    159250            return;
    160251        }
    161252
    162         if (this->towerExists(x,y))
    163         {
    164             orxout() << "tower exists!!" << endl;
     253        if (towermatrix [x][y]==true)
     254        {
     255            orxout() << "not possible to put tower here!!" << endl;
    165256            return;
    166257        }
    167258
    168         /*
     259/*
    169260        unsigned int width = this->center_->getWidth();
    170261        unsigned int height = this->center_->getHeight();
    171         */
     262*/
    172263
    173264        int tileScale = (int) this->center_->getTileScale();
     
    182273        orxout() << "Will add tower at (" << (x-8) * tileScale << "," << (y-8) * tileScale << ")" << endl;
    183274
    184         // Add tower to coordinatesStack
    185         Coordinate newTowerCoordinates = {x, y};
    186         addedTowersCoordinates_.push_back(newTowerCoordinates);
    187 
    188         // Reduce credit
    189         this->stats_->buyTower(towerCost);
    190 
    191         // Create tower
    192         Tower* newTower = new Tower(this->center_->getContext());
    193         newTower->addTemplate(this->center_->getTowerTemplate());
    194 
    195         newTower->setPosition(static_cast<float>((x-8) * tileScale), static_cast<float>((y-8) * tileScale), 75);
    196         newTower->setGame(this);
    197     }
    198 
    199     bool TowerDefense::hasEnoughCreditForTower(TowerCost towerCost)
    200     {
    201         return ((this->stats_->getCredit()) >= towerCost);
    202     }
    203 
    204     bool TowerDefense::towerExists(int x, int y)
    205     {
    206         for(std::vector<Coordinate>::iterator it = addedTowersCoordinates_.begin(); it != addedTowersCoordinates_.end(); ++it)
    207         {
    208             Coordinate currentCoordinates = (Coordinate) (*it);
    209             if (currentCoordinates.x == x && currentCoordinates.y == y)
    210                 return true;
    211         }
    212 
    213         return false;
    214     }
    215 
    216 
     275       //Reduce credit
     276        this->buyTower(towerCost);
     277        towermatrix [x][y]=true;
     278
     279        //Creates tower
     280        TowerDefenseTower* towernew = new TowerDefenseTower(this->center_->getContext());
     281        towernew->addTemplate("towerturret");
     282        towernew->setPosition(static_cast<float>((x-8) * tileScale), static_cast<float>((y-8) * tileScale), 75);
     283        towernew->setGame(this);
     284    }
     285
     286    bool TowerDefense::hasEnoughCreditForTower(int towerCost)
     287    {
     288        return ((this->getCredit()) >= towerCost);
     289    }
     290
     291
     292    bool TowerDefense::hasEnoughCreditForUpgrade()
     293    {
     294        return true;
     295    }
     296
     297 
    217298    void TowerDefense::tick(float dt)
    218299    {
    219300        SUPER(TowerDefense, tick, dt);
     301        time +=dt;
     302
     303        TDCoordinate* coord1 = new TDCoordinate(1,1);
     304        std::vector<TDCoordinate*> path;
     305        path.push_back(coord1);
     306        if(time>1 && TowerDefenseEnemyvector.size() < 30)
     307        {
     308            //adds different types of enemys depending on the WaveNumber
     309            addTowerDefenseEnemy(path, this->getWaveNumber() % 3 +1 );
     310            time = time-1;
     311        }
     312
     313        Vector3* endpoint = new Vector3(500, 700, 150);
     314        //if ships are at the end they get destroyed
     315        for(unsigned int i =0; i < TowerDefenseEnemyvector.size(); ++i)
     316        {
     317            if(TowerDefenseEnemyvector.at(i) != NULL && TowerDefenseEnemyvector.at(i)->isAlive())
     318            {
     319                //destroys enemys at the end of teh path and reduces the life by 1. no credits gifted
     320
     321                Vector3 ship = TowerDefenseEnemyvector.at(i)->getRVWorldPosition();
     322                float distance = ship.distance(*endpoint);
     323
     324                if(distance <50){
     325                    TowerDefenseEnemyvector.at(i)->destroy();
     326                    this->reduceLifes(1);
     327                    this->buyTower(1);
     328                    if (this->getLifes()==0)
     329                    {
     330                        this->end();
     331                    }
     332                }
     333            }
     334        }
     335        //goes thorugh vector to see if an enemy is still alive. if not next wave is launched
     336        int count= 0;
     337        for(unsigned int i =0; i < TowerDefenseEnemyvector.size(); ++i)
     338        {
     339            if(TowerDefenseEnemyvector.at(i)!= NULL)
     340            {
     341                ++count;
     342            }
     343        }
     344
     345        if(count== 0)
     346        {
     347            time2 +=dt;
     348            if(time2 > 10)
     349            {
     350                TowerDefenseEnemyvector.clear();
     351                this->nextwave();
     352                time=0;
     353                time2=0;
     354            }
     355        }
     356
     357
    220358    }
    221359
Note: See TracChangeset for help on using the changeset viewer.