Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10591


Ignore:
Timestamp:
Sep 17, 2015, 3:32:50 PM (9 years ago)
Author:
fvultier
Message:

Different wave types with different enemies. New field type: obstacle. It is impossible to build a tower on a field with an obstacle.

Location:
code/branches/towerdefenseFabien
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • code/branches/towerdefenseFabien/data/levels/towerDefense.oxw

    r10586 r10591  
    235235   explosionchunks        = 6
    236236
    237    health            = 1
    238    maxhealth         = 2
    239    initialhealth     = 1
    240 
    241    shieldhealth        = 30
    242    initialshieldhealth = 30
    243    maxshieldhealth     = 50
     237   health            = 15
     238   maxhealth         = 15
     239   initialhealth     = 15
     240
     241   shieldhealth        = 15
     242   initialshieldhealth = 15
     243   maxshieldhealth     = 15
    244244   shieldabsorption    = 0.8
    245245   reloadrate          = 1
    246246   reloadwaittime      = 1
    247247
    248    primaryThrust     = 100
     248   primaryThrust     = 1000
    249249   auxilaryThrust    = 30
    250    rotationThrust    = 50
     250   rotationThrust    = 80
    251251
    252252   lift = 1;
     
    262262
    263263   collisionType     = "dynamic"
    264    mass              = 100
     264   mass              = 10
    265265   linearDamping     = 0.7
    266266   angularDamping    = 0.9999999
     
    287287    </collisionShapes>
    288288    <controller>
    289       <WaypointController accuracy=60>
    290       </WaypointController>
     289       <WaypointController accuracy = 50/>
    291290    </controller>
    292291  </TowerDefenseEnemy>
     
    301300   explosionchunks        = 6
    302301
    303    health            = 100
    304    maxhealth         = 200
    305    initialhealth     = 100
    306 
    307    shieldhealth        = 30
    308    initialshieldhealth = 30
    309    maxshieldhealth     = 50
     302   health            = 30
     303   maxhealth         = 30
     304   initialhealth     = 30
     305
     306   shieldhealth        = 0
     307   initialshieldhealth = 0
     308   maxshieldhealth     = 0
    310309   shieldabsorption    = 0.8
    311310   reloadrate          = 1
     
    314313   primaryThrust     = 100
    315314   auxilaryThrust    = 30
    316    rotationThrust    = 50
     315   rotationThrust    = 80
    317316
    318317   lift = 1;
     
    338337      <Engine position=" 0, 0, 0"
    339338        boostfactor    = 2
    340         speedfront     = 150
     339        speedfront     = 100
    341340        speedback      =  50
    342341        speedleftright =  50
    343         speedupdown    =  50         
     342        speedupdown    =  50       
    344343        accelerationfront     = 500
    345344        accelerationbrake     = 500
     
    359358      <BoxCollisionShape position="0,0.1,-11"  halfExtents="2.2, 1.8, 6" />
    360359      <BoxCollisionShape position="0,0.1,-19"  halfExtents="1.4, 1, 2" />
    361     </collisionShapes>
    362     <controller>
    363       <WaypointController accuracy=60>
    364       </WaypointController>
    365     </controller>   
     360    </collisionShapes>
     361    <controller>
     362       <WaypointController accuracy = 50/>
     363    </controller>
    366364  </TowerDefenseEnemy>
    367365</Template>
     
    375373   explosionchunks        = 6
    376374
    377    health            = 100
    378    maxhealth         = 200
    379    initialhealth     = 100
     375   health            = 15
     376   maxhealth         = 15
     377   initialhealth     = 15
    380378   
    381    shieldhealth        = 30
    382    initialshieldhealth = 30
    383    maxshieldhealth     = 50
     379   shieldhealth        = 5
     380   initialshieldhealth = 5
     381   maxshieldhealth     = 5
    384382   shieldabsorption    = 0.8
    385383   reloadrate          = 1
     
    388386   primaryThrust     = 100
    389387   auxilaryThrust    = 30
    390    rotationThrust    = 50
     388   rotationThrust    = 80
    391389
    392390   lift = 1;
     
    412410      <Engine position=" 0, 0, 0"
    413411        boostfactor    = 2
    414         speedfront     = 150
    415         speedback      =  50
    416         speedleftright =  50
    417         speedupdown    =  50         
     412        speedfront     = 300
     413        speedback      =  300
     414        speedleftright =  300
     415        speedupdown    =  300         
    418416        accelerationfront     = 500
    419417        accelerationbrake     = 500
    420         accelerationback      =  125
    421         accelerationleftright =  125
    422         accelerationupdown    =  125
     418        accelerationback      =  500
     419        accelerationleftright =  500
     420        accelerationupdown    =  500
    423421      />
    424422    </engines>
     
    435433    </collisionShapes>
    436434    <controller>
    437       <WaypointController accuracy=60>
    438       </WaypointController>
    439     </controller>   
     435       <WaypointController accuracy = 50/>
     436    </controller>
    440437  </TowerDefenseEnemy>
    441438</Template>
     
    486483            F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
    487484            F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
     485            F1F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1
    488486            F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
    489             F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
    490             F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1
     487            F1F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1
    491488            F1F1F1R2I3I3I3I3L3F1F1F1F1F1F1F1
    492489            F1F1F1F1F1F1F1F1I2F1F1F1F1F1F1F1
  • code/branches/towerdefenseFabien/data/overlays/towerdefenseHUD.oxo

    r10258 r10591  
    11<Template name="TowerDefenseHUD">
     2  <OverlayGroup name="TowerDefenseHUD" scale = "1, 1">
     3   
     4     <TowerDefenseHUDController
     5     position  = "0.9, 0.10"
     6     pickpoint = "0.0, 0.0"
     7     font      = "ShareTechMono"
     8     textsize  = 0.05
     9     colour    = "1.0, 1.0, 1.0, 1.0"
     10     align     = "left"
     11        showlives = false
     12        showcredits = true
     13        showwaves = false
     14    />
    215
     16    <TowerDefenseHUDController
     17     position  = "0.9, 0.25"
     18     pickpoint = "0.0, 0.0"
     19     font      = "ShareTechMono"
     20     textsize  = 0.05
     21     colour    = "1.0, 1.0, 1.0, 1.0"
     22     align     = "left"
     23        showlives = true
     24        showcredits = false
     25        showwaves = false
     26    /> 
     27     
     28    <TowerDefenseHUDController
     29     position  = "0.9, 0.40"
     30     pickpoint = "0.0, 0.0"
     31     font      = "ShareTechMono"
     32     textsize  = 0.05
     33     colour    = "1.0, 1.0, 1.0, 1.0"
     34     align     = "left"
     35        showlives = false
     36        showcredits = false
     37        showwaves = true
     38    />     
    339
    4   <OverlayGroup name="TowerDefenseHUD" scale = "1, 1">
    5  
    6  
    740    <OverlayText
    8      position  = "0.83, 0.05"
     41     position  = "0.8, 0.1"
    942     pickpoint = "0.0, 0.0"
    1043     font      = "ShareTechMono"
     
    1649    />
    1750   
    18    
    19      <TowerDefenseHUDController
    20      position  = "0.88, 0.10"
    21      pickpoint = "0.0, 0.0"
    22      font      = "ShareTechMono"
    23      textsize  = 0.05
    24      colour    = "1.0, 1.0, 1.0, 1.0"
    25      align     = "left"
    26                 showlives = false
    27                 showcredits = true
    28                 showwaves = false
    29     />
    30    
    31         <OverlayText
    32      position  = "0.83, 0.22"
     51    <OverlayText
     52     position  = "0.8, 0.25"
    3353     pickpoint = "0.0, 0.0"
    3454     font      = "ShareTechMono"
     
    4060    />
    4161   
    42          <TowerDefenseHUDController
    43      position  = "0.88, 0.27"
    44      pickpoint = "0.0, 0.0"
    45      font      = "ShareTechMono"
    46      textsize  = 0.05
    47      colour    = "1.0, 1.0, 1.0, 1.0"
    48      align     = "left"
    49                 showlives = true
    50                 showcredits = false
    51                 showwaves = false
    52     />
    53    
    54             <OverlayText
    55      position  = "0.83, 0.39"
     62    <OverlayText
     63     position  = "0.8, 0.40"
    5664     pickpoint = "0.0, 0.0"
    5765     font      = "ShareTechMono"
     
    6371    />
    6472   
    65          <TowerDefenseHUDController
    66      position  = "0.88, 0.44"
    67      pickpoint = "0.0, 0.0"
    68      font      = "ShareTechMono"
    69      textsize  = 0.05
    70      colour    = "1.0, 1.0, 1.0, 1.0"
    71      align     = "left"
    72         showlives = false
    73                 showcredits = false
    74                 showwaves = true
    75 
    76     />
    77    
    78    
    7973  </OverlayGroup>
    8074</Template>
  • code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefense.cc

    r10589 r10591  
    8787namespace orxonox
    8888{
    89     static const std::string __CC_addTower_name  = "addTower";
    90     static const std::string __CC_upgradeTower_name = "upgradeTower";
    91 
    92     SetConsoleCommand("TowerDefense", __CC_addTower_name,  &TowerDefense::addTower ).addShortcut().defaultValues(1);
    93     SetConsoleCommand("TowerDefense", __CC_upgradeTower_name, &TowerDefense::upgradeTower).addShortcut().defaultValues(0);
    94 
    9589    RegisterUnloadableClass(TowerDefense);
    9690
     
    10296        this->player_ = NULL;       
    10397        this->setHUDTemplate("TowerDefenseHUD");
    104         this->nextwaveTimer_.setTimer(10, false, createExecutor(createFunctor(&TowerDefense::nextwave, this)));
    105         this->nextwaveTimer_.stopTimer();
    106         this->waves_ = 0;
    107         this->time = 0;
     98        this->waveNumber_ = 0;
     99        this->timeSinceLastSpawn_ = 0.0;
     100        this->timeUntilNextWave_ = 0.0;
    108101        this->credit_ = 0;
    109102        this->lifes_ = 0;
     103        this->waveSize_ = 0;
     104        offset_ = Vector3(0,0,10);
    110105
    111106        //this->stats_ = new TowerDefensePlayerStats();
    112 
    113         ModifyConsoleCommand(__CC_addTower_name).setObject(this);
    114         ModifyConsoleCommand(__CC_upgradeTower_name).setObject(this);
    115107    }
    116108
    117109    TowerDefense::~TowerDefense()
    118     {        /* Part of a temporary hack to allow the player to add towers */
     110    {
    119111        if (this->isInitialized())
    120112        {
    121             ModifyConsoleCommand(__CC_addTower_name).setObject(NULL);
    122             ModifyConsoleCommand(__CC_upgradeTower_name).setObject(NULL);
     113
    123114        }
    124115    }
     
    149140
    150141        createFields();
    151 
    152142        TeamDeathmatch::start();
    153 
    154         // Waypoints: [1,3] [10,3] [10,11] [13,11] -> add the points to a matrix so the player cant place towers on the path
    155        
    156143
    157144        //set initial credits, lifes and WaveNumber
    158145        this->setCredit(1000);
    159         this->setLifes(100);
     146        this->setLifes(100);       
     147        this->timeSinceLastSpawn_ = 0.0;
     148        this->timeUntilNextWave_ = 5.0;
     149        this->waveSize_ = 0;
    160150        this->setWaveNumber(0);
    161         time = 0.0;
    162151    }
    163152
     
    165154    void TowerDefense::addTowerDefenseEnemy(int templatenr)
    166155    {
    167         orxout() << "addTowerDefenseEnemy" << endl;
    168 
    169156        TowerDefenseEnemy* en1 = new TowerDefenseEnemy(this->center_->getContext());
    170157       
     
    200187        if (controller != NULL && waypoints_.size() > 1)
    201188        {
    202             en1->setPosition(waypoints_.at(0)->getPosition());
     189            en1->setPosition(waypoints_.at(0)->getPosition() + offset_);
    203190            en1->setOrientation(Vector3(0,0,10), Degree(0));
    204191            en1->setDirection(Vector3(0,1,0));
    205             en1->lookAt(waypoints_.at(1)->getPosition());
     192            en1->lookAt(waypoints_.at(1)->getPosition() + offset_);
    206193
    207194            for (unsigned int i = 0; i < waypoints_.size(); ++ i)
    208195            {
    209196                orxonox::WeakPtr<MovableEntity> waypoint = new MovableEntity(this->center_->getContext());
    210                 waypoint->setPosition(waypoints_.at(i)->getPosition());
     197                waypoint->setPosition(waypoints_.at(i)->getPosition() + offset_);
    211198                controller->addWaypoint(waypoint);
    212199            }
     
    229216        assert(player);
    230217        player_ = player;
    231 
    232         orxout() << "spawnPlayer" << endl;
    233218
    234219        if (selecter->getPlayer() == NULL)
     
    287272    void TowerDefense::tick(float dt)
    288273    {
    289         //orxout() << "tick1" << endl;
    290274        SUPER(TowerDefense, tick, dt);
    291         //orxout() << "tick2" << endl;
    292275
    293276        if (hasStarted() == false || player_ == NULL)
     
    295278            return;
    296279        }
    297         time += dt;       
     280        timeUntilNextWave_ -= dt;
     281        timeSinceLastSpawn_ += dt;
    298282
    299283        //build/upgrade tower at selecter position
     
    311295            }           
    312296        }
    313 
    314         if (time >= 1.3 * enemies_.size() && enemies_.size() < 10)
    315         {
    316             //adds different types of enemys depending on the WaveNumber
    317             addTowerDefenseEnemy(this->getWaveNumber() % 3 +1 );
    318         }
    319 
    320         //if ships are at the end they get destroyed
    321 
     297       
    322298        for (std::list<WeakPtr<TowerDefenseEnemy> >::iterator it = enemies_.begin(); it != enemies_.end(); )
    323299        {
     
    326302                // the enemy was destroyed by a tower - remove it from the list
    327303                enemies_.erase(it++);
     304                addCredit(1);
    328305            }
    329306            else
    330307            {
    331                 //destroys enemys at the end of the path and reduces the life by 1. No credits gifted
     308                //if ships are at the end they get destroyed
    332309                Vector3 ship = (*it)->getRVWorldPosition();
    333310                float distance = ship.distance(endpoint_);
    334                 if(distance < 50)
     311                if(distance < 40)
    335312                {
    336                     orxout() << "enemy deleted" << endl;
    337313                    (*it)->destroy();
    338314                    enemies_.erase(it++);
     
    348324                }
    349325            }
    350         }       
    351 
    352         if (enemies_.size() == 0 && !this->nextwaveTimer_.isActive())
    353         {
    354             this->nextwaveTimer_.startTimer();
    355         }
     326        } 
     327
     328        // Add new enemy?
     329        if (timeSinceLastSpawn_ >= 1.0 && waveSize_ > 0)
     330        {
     331            // Add new enemy
     332            timeSinceLastSpawn_ -= 1.0;
     333            -- waveSize_;
     334            addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1);
     335        }
     336        else if (timeUntilNextWave_ <= 0.0 && waveSize_ <= 0)
     337        {
     338            //New wave
     339            ++ waveNumber_;
     340            timeSinceLastSpawn_ = 0.0;
     341
     342            timeUntilNextWave_ = waveNumber_+10;
     343            waveSize_ = waveNumber_+5;
     344        }
     345
    356346    }
    357347
     
    361351        TDCoordinate coord(0,0);
    362352        TDCoordinate startCoord(0,0);
    363 
    364353        std::string fields = center_->getFields();
    365354        int pos = 0;
     
    372361                fields_[i][j]->setCenterpoint(center_);
    373362                center_->attach(fields_[i][j]);
    374                 fields_[i][j]->setPosition(coord.get3dcoordinate());                
    375                 fields_[i][j]->create(fields.at(pos), fields.at(pos+1));           
     363                fields_[i][j]->setPosition(coord.get3dcoordinate());
     364                fields_[i][j]->create(fields.at(pos), fields.at(pos+1));
    376365                pos += 2;
    377366                if (fields_[i][j]->getType() == START)
     
    382371            }
    383372        }
    384 
    385373        //Place waypoints along the street for the waypoint controllers of the enemies
    386374        TDCoordinate* thisCoord = &startCoord;
     
    429417        return NULL;
    430418    }
    431 
    432     /*
    433     void TowerDefense::playerEntered(PlayerInfo* player)
    434     {
    435         TeamDeathmatch::playerEntered(player);
    436 
    437         const std::string& message = player->getName() + " entered the game";
    438         ChatManager::message(message);
    439     }
    440 
    441     bool TowerDefense::playerLeft(PlayerInfo* player)
    442     {
    443         bool valid_player = TeamDeathmatch::playerLeft(player);
    444 
    445         if (valid_player)
    446         {
    447             const std::string& message = player->getName() + " left the game";
    448             ChatManager::message(message);
    449         }
    450 
    451         return valid_player;
    452     }
    453 
    454 
    455     void TowerDefense::pawnKilled(Pawn* victim, Pawn* killer)
    456     {
    457         if (victim && victim->getPlayer())
    458         {
    459             std::string message;
    460             if (killer)
    461             {
    462                 if (killer->getPlayer())
    463                     message = victim->getPlayer()->getName() + " was killed by " + killer->getPlayer()->getName();
    464                 else
    465                     message = victim->getPlayer()->getName() + " was killed";
    466             }
    467             else
    468                 message = victim->getPlayer()->getName() + " died";
    469 
    470             ChatManager::message(message);
    471         }
    472 
    473         TeamDeathmatch::pawnKilled(victim, killer);
    474     }
    475 
    476     void TowerDefense::playerScored(PlayerInfo* player, int score)
    477     {
    478         Gametype::playerScored(player, score);
    479     }*/
    480419}
  • code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefense.h

    r10587 r10591  
    6161        void payCredit(int pay){ this->credit_ -= pay; }
    6262        int getLifes(){ return this->lifes_; }
    63         int getWaveNumber(){ return this->waves_; }
     63        int getWaveNumber(){ return this->waveNumber_; }
     64        void setWaveNumber(int wavenumber){ waveNumber_=wavenumber; }
    6465        void setCredit(int credit){ credit_ = credit; }
    65         void setLifes(int lifes){ lifes_ = lifes; }
    66         void setWaveNumber(int wavenumber){ waves_=wavenumber; }
    67         void buyTower(int cost){ credit_ -= cost;}
     66        void setLifes(int lifes){ lifes_ = lifes; }       
     67        void buyTower(int cost){ cost -= cost;}
    6868        void addCredit(int credit) { credit_+=credit; }
    69         void nextwave(){ enemies_.clear(); waves_++; time=0;}
    7069        int reduceLifes(int NumberofLifes){ return lifes_-=NumberofLifes; }
    7170        TowerDefenseField* getField(TDCoordinate* coord){ return fields_[coord->GetX()][coord->GetY()]; }
    72         /*  Called by TowerDefenseCenterpoint upon game start
    73             The centerpoint is used to create towers
    74         */
    7571        void setCenterpoint(TowerDefenseCenterpoint* centerpoint);       
    76         /* Adds a tower at x, y in the playfield */
    7772        void addTower(int x, int y);
    7873        void upgradeTower(int x, int y);
    7974        virtual TDCoordinate* getNextStreetCoord(TDCoordinate*);
    80 
    81         //virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
    82         //virtual void playerScored(PlayerInfo* player, int score);
    83 
     75       
    8476        TowerDefenseSelecter* selecter;       
    8577
    86         //TODO: void spawnNewWave()
    87         //TODO: create a timer which regularly calls the spawnNewWave function  (time driven)
    88         //      or spawn a new wave when the old wave has been killed           (event driven)
     78    private:
     79        void createFields();
    8980
    90     private:
    9181        orxonox::WeakPtr<TowerDefenseCenterpoint> center_;
    9282        PlayerInfo* player_;
    93         float time;       
     83        float timeSinceLastSpawn_;
     84        float timeUntilNextWave_;
     85        int waveSize_;
    9486        int credit_;
    95         int waves_;
     87        int waveNumber_;
    9688        int lifes_;
    97         Timer nextwaveTimer_;
    9889        std::list<orxonox::WeakPtr<TowerDefenseEnemy> > enemies_;
    9990        TowerDefenseField* fields_[16][16];
    10091        std::vector<orxonox::WeakPtr<TowerDefenseField> > waypoints_;
    10192        Vector3 endpoint_;
    102 
    103         void createFields();
     93        Vector3 offset_;       
    10494    };
    10595}
  • code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefenseEnemy.cc

    r10586 r10591  
    3535    TowerDefenseEnemy::~TowerDefenseEnemy()
    3636    {
    37         orxout() << "TowerDefenseEnemy::~TowerDefenseEnemy" << endl;
     37
    3838    }
    3939
     
    5757    void TowerDefenseEnemy::damage(float damage, float healthdamage, float shielddamage, Pawn* originator)
    5858    {
    59         orxout() << "TowerDefenseEnemy::damage" << endl;
    6059        Pawn::damage(damage, healthdamage, shielddamage, originator);
     60       
    6161        if (getGame() && once_ == false && getHealth() <= 0)
    6262        {
  • code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefenseField.cc

    r10586 r10591  
    5353        center_ = NULL;
    5454        upgrade_ = 0;
    55         setPosition(0,0,0);       
    56         model_ = new Model(getContext());
    57         model_->setScale(25);
    58         model_->pitch(Degree(90));
    59         attach(model_);
    60         setAngle(0);
     55        setPosition(0,0,0);                           
     56        modelGround_ = new Model(getContext());
     57        modelGround_->setScale(25);
     58        modelGround_->pitch(Degree(90));
     59        attach(modelGround_);
     60        modelObject_ = new Model(getContext());
     61        modelObject_->setScale(25);
     62        modelObject_->pitch(Degree(90));
     63        attach(modelObject_);
     64        setAngle(0);
    6165    }
    6266
     
    125129    void TowerDefenseField::setAngle(int newAngle)
    126130    {
    127         if (model_ == NULL)
    128         {
    129             return;
    130         }
    131 
    132         switch (newAngle)
    133         {
     131        if (modelGround_ != NULL)
     132        {
     133            switch (newAngle)
     134            {
    134135            case 0:
    135                 model_->yaw(Degree(0));
     136                modelGround_->yaw(Degree(0));
    136137                angle_ = 0;
    137138                break;
    138139            case 1:
    139                 model_->yaw(Degree(90));
     140                modelGround_->yaw(Degree(90));
    140141                angle_ = 1;
    141142                break;   
    142143            case 2:
    143                 model_->yaw(Degree(180));
     144                modelGround_->yaw(Degree(180));
    144145                angle_ = 2;
    145146                break;   
    146147            case 3:
    147                 model_->yaw(Degree(270));
     148                modelGround_->yaw(Degree(270));
    148149                angle_ = 3;
    149150                break;                                           
    150         }
     151            }
     152        }
     153
     154        if (modelObject_ != NULL)
     155        {
     156            switch (newAngle)
     157            {
     158            case 0:
     159                modelObject_->yaw(Degree(0));
     160                angle_ = 0;
     161                break;
     162            case 1:
     163                modelObject_->yaw(Degree(90));
     164                angle_ = 1;
     165                break;   
     166            case 2:
     167                modelObject_->yaw(Degree(180));
     168                angle_ = 2;
     169                break;   
     170            case 3:
     171                modelObject_->yaw(Degree(270));
     172                angle_ = 3;
     173                break;                                           
     174            }
     175        }
     176       
    151177    }
    152178
     
    158184    void TowerDefenseField::createFree(int orientation)
    159185    {           
    160         model_->setMeshSource("TD_F1.mesh");
     186        modelGround_->setMeshSource("TD_F1.mesh");
    161187        tower_ = NULL;
    162188        type_ = FREE;
     
    167193    void TowerDefenseField::createStart(int orientation)
    168194    {     
    169         model_->setMeshSource("TD_S5.mesh");
     195        modelGround_->setMeshSource("TD_S5.mesh");
    170196        tower_ = NULL;
    171197        type_ = START;
     
    177203    void TowerDefenseField::createEnd(int orientation)
    178204    {     
    179         model_->setMeshSource("TD_S4.mesh");
     205        modelGround_->setMeshSource("TD_S4.mesh");
    180206        tower_ = NULL;
    181207        type_ = END;
     
    186212    void TowerDefenseField::createStraight(int orientation)
    187213    {     
    188         model_->setMeshSource("TD_S1.mesh");
     214        modelGround_->setMeshSource("TD_S1.mesh");
    189215        tower_ = NULL;
    190216        type_ = STREET;
     
    195221    void TowerDefenseField::createRCurve(int orientation)
    196222    {     
    197         model_->setMeshSource("TD_S2.mesh");
     223        modelGround_->setMeshSource("TD_S2.mesh");
    198224        tower_ = NULL;
    199225        type_ = STREET;
     
    204230    void TowerDefenseField::createLCurve(int orientation)
    205231    {   
    206         model_->setMeshSource("TD_S3.mesh");
     232        modelGround_->setMeshSource("TD_S3.mesh");
    207233        tower_ = NULL;
    208234        type_ = STREET;
     
    210236        setAngle(orientation);
    211237    }
     238
     239    void TowerDefenseField::createObstacle(int orientation)
     240    {   
     241        modelGround_->setMeshSource("TD_F1.mesh");
     242        modelObject_->setMeshSource("TD_O1.mesh");
     243        tower_ = NULL;
     244        type_ = OBSTACLE;
     245        setUpgrade(0);
     246        setAngle(orientation);
     247    }
    212248
    213249    void TowerDefenseField::createTower(int upgrade)
     
    215251        if (tower_ == NULL)
    216252        {
     253            modelGround_->setMeshSource("TD_F1.mesh");
    217254            tower_ = new TowerDefenseTower(center_->getContext());
    218255            attach(tower_);
    219256            type_ = TOWER;
    220257            setUpgrade(upgrade);
    221             if (upgrade_ > 0 && model_ != NULL)
     258            if (upgrade_ > 0 && modelObject_ != NULL)
    222259            {
    223260                switch (upgrade_)
    224261                {
    225262                    case 1:
    226                         model_->setMeshSource("TD_T1.mesh");                   
     263                        modelObject_->setMeshSource("TD_T1.mesh");                   
    227264                        tower_->addTemplate(center_->getTower1Template());
    228265                        break;
    229266                    case 2:
    230                         model_->setMeshSource("TD_T2.mesh");
     267                        modelObject_->setMeshSource("TD_T2.mesh");
    231268                        tower_->addTemplate(center_->getTower2Template());
    232269                        break;
    233270                    case 3:
    234                         model_->setMeshSource("TD_T3.mesh");
     271                        modelObject_->setMeshSource("TD_T3.mesh");
    235272                        tower_->addTemplate(center_->getTower3Template());
    236273                        break;
    237274                    case 4:
    238                         model_->setMeshSource("TD_T4.mesh");
     275                        modelObject_->setMeshSource("TD_T4.mesh");
    239276                        tower_->addTemplate(center_->getTower4Template());
    240277                        break;
    241278                    case 5:
    242                         model_->setMeshSource("TD_T5.mesh");
     279                        modelObject_->setMeshSource("TD_T5.mesh");
    243280                        tower_->addTemplate(center_->getTower5Template());
    244281                        break;
     
    279316            case 'O':               
    280317                createEnd(paramInt);
    281                 break;   
     318                break;
     319            case 'Y':               
     320                createObstacle(paramInt);
     321                break;                 
    282322            case 'T':                               
    283323                createTower(paramInt);               
  • code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefenseField.h

    r10586 r10591  
    5252        START,
    5353        END,
     54        OBSTACLE,
    5455        TOWER
    5556    };
     
    7778            virtual void createLCurve(int orientation);
    7879            virtual void createRCurve(int orientation);
     80            virtual void createObstacle(int orientation);
    7981            virtual void createTower(int upgrade);
    80             virtual int getAngle();
     82            virtual int getAngle();           
    8183        private:
    8284            virtual void setAngle(int newAngle);           
     
    8486            int angle_;
    8587            TowerDefenseFieldType type_;
    86             Model* model_;
     88            Model* modelGround_;
     89            Model* modelObject_;
    8790            TowerDefenseTower* tower_;
    8891            TowerDefenseCenterpoint* center_;
  • code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefenseHUDController.cc

    r10258 r10591  
    5050    {
    5151        SUPER(TowerDefenseHUDController, tick, dt);
     52
    5253        const std::string& lifes = multi_cast<std::string>(this->td->getLifes());
    5354        const std::string& credits = multi_cast<std::string>(this->td->getCredit());
     
    5556
    5657        if(showlives == true)
    57           this->setCaption(multi_cast<std::string>(lifes));
     58        {
     59            this->setCaption(multi_cast<std::string>(lifes));
     60        }         
    5861        else if(showcredits == true)
    59           this->setCaption(multi_cast<std::string>(credits));
     62        {
     63            this->setCaption(multi_cast<std::string>(credits));
     64        }         
    6065        else if(showwaves == true)
    61           this->setCaption(multi_cast<std::string>(wave));
    62 
    63 
     66        {
     67            this->setCaption(multi_cast<std::string>(wave));
     68        }         
    6469    }
    6570
Note: See TracChangeset for help on using the changeset viewer.