Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Oct 16, 2017, 4:07:37 PM (7 years ago)
Author:
patricwi
Message:

Merged tgidronFS16

Location:
code/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • code/trunk

  • code/trunk/src/modules/hover/Hover.cc

    r11071 r11493  
    2424 *   Co-authors:
    2525 *      Cyrill Burgener
     26 *      Tomer Gidron
    2627 *
    2728 */
     
    3334
    3435#include "Hover.h"
    35 
     36#include "chat/ChatManager.h"
    3637#include "HoverOrigin.h"
    3738#include "HoverWall.h"
     
    3940#include "MazeGenerator.h"
    4041#include "core/CoreIncludes.h"
     42#include "gamestates/GSLevel.h"
     43#include "HoverShip.h"
     44
     45#include "pickup/PickupSpawner.h"
     46#include "pickup/Pickup.h"
    4147
    4248namespace orxonox
     
    5157        this->numberOfFlags_ = 1;
    5258        this->firstTick_ = true;
     59        level = 1; //start at level 1
     60        flagsTaken = 0;// took 0 flags in the beginning
     61        lives = 3;
     62
     63        numCells = 0;
     64        cellSize = 0;
     65        cellHeight = 0;
     66
     67        bLevelUpgradeHUD = false;
     68
     69        totFlags = 0;
    5370
    5471        this->setHUDTemplate("HoverHUD");
    55     }
    56 
    57     void Hover::tick(float dt)
    58     {
    59         SUPER(Hover, tick, dt);
    60 
     72
     73    }
     74
     75    void Hover::start()
     76    {
     77        Gametype::start();
    6178        if(this->firstTick_ && this->origin_)
    6279        {
    6380            this->firstTick_ = false;
    6481
    65             int numCells = this->origin_->getNumCells();
    66             int cellSize = this->origin_->getCellSize();
    67             int cellHeight = this->origin_->getCellHeight();
     82            numCells = this->origin_->getNumCells();
     83            cellSize = this->origin_->getCellSize();
     84            cellHeight = this->origin_->getCellHeight();
     85
     86            //TODO
     87            //create boolean array/vector to assert that no two objects are placed in the same way
     88           
    6889
    6990            MazeGenerator generator(numCells);
     
    81102            }
    82103
     104
     105            //Ground
     106            for(int i = 0; i<numCells; i++){
     107                for(int j = 0; j<numCells; j++){
     108                    StaticEntity* groundCell = new StaticEntity(origin_->getContext());
     109
     110                    groundCell->addTemplate(origin_->getGroundTemplate());
     111                    groundCell->setPosition(get3dCoordinates(i,j,-60));
     112                }
     113
     114            }
     115
     116
     117
    83118            //Generate inner Walls according to levelcode
    84119            for(int y=0; y<numCells; y++){
    85120                for(int x=0; x<numCells; x++){
    86                     switch(levelcode[ y * numCells + x ]){
     121                    switch(levelcode[ y * numCells + x ])
     122                    {
    87123                        case 1: (new HoverWall(origin_->getContext()))->init(x+1, numCells-y, cellSize, cellHeight, 1);
    88                                 break;
     124                            break;
    89125                        case 3: (new HoverWall(origin_->getContext()))->init(x+1, numCells-y, cellSize, cellHeight, 1);
    90126                        case 2: (new HoverWall(origin_->getContext()))->init(x+1, numCells-y, cellSize, cellHeight, 0);
    91                         default: break;
     127                        default:
     128                            break;
    92129                    }
    93                 }   
    94             }
    95 
    96             //Generate 5 flags randomly
    97             for ( int i = 0; i < 5; i++ )
    98             {
    99                 HoverFlag* flag = new HoverFlag(origin_->getContext());
    100                 flag->init(rand()%numCells, rand()%numCells, cellSize);
    101                 flags_.push_back(flag);
    102             }
    103 
    104         }//firsttick end
     130                }
     131            }
     132
     133            createFlags();
     134
     135            //Generate 3 PickupSpawners randomly (destroy hover pickup)
     136            for (int i = 0; i<3; i++)
     137            {
     138                PickupSpawner* pickupSpawner = new PickupSpawner(origin_->getContext());
     139
     140                pickupSpawner->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 0.0f));
     141                pickupSpawner->setPickupTemplateName(origin_->getPickupTemplate());
     142                pickupSpawner->setMaxSpawnedItems(3);
     143                pickupSpawner->setRespawnTime(30);
     144                pickupSpawner->setTriggerDistance(40);
     145                // Add pickup spawner to the pickup spawner list
     146                pickupSpawners_.push_back(pickupSpawner);
     147            }
     148           
     149            //Generate 3 PickupSpawners randomly (speed pickup)
     150            for (int i = 0; i<3; i++)
     151            {
     152                PickupSpawner* pickupSpawner = new PickupSpawner(origin_->getContext());
     153
     154                pickupSpawner->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 0.0f));
     155                pickupSpawner->setPickupTemplateName(origin_->getPickupTemplateSpeed());
     156                pickupSpawner->setMaxSpawnedItems(3);
     157                pickupSpawner->setRespawnTime(30);
     158                pickupSpawner->setTriggerDistance(40);
     159                // Add pickup spawner to the pickup spawner list
     160                pickupSpawners_.push_back(pickupSpawner);
     161            }
     162
     163            //Generate 3 PickupSpawners randomly (shrink pickup)
     164            for (int i = 0; i<3; i++)
     165            {
     166                PickupSpawner* pickupSpawner = new PickupSpawner(origin_->getContext());
     167
     168                pickupSpawner->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 0.0f));
     169                pickupSpawner->setPickupTemplateName(origin_->getPickupTemplateShrink());
     170                pickupSpawner->setMaxSpawnedItems(3);
     171                pickupSpawner->setRespawnTime(30);
     172                pickupSpawner->setTriggerDistance(40);
     173                // Add pickup spawner to the pickup spawner list
     174                pickupSpawners_.push_back(pickupSpawner);
     175            }
     176
     177            //*****************************************************************************
     178
     179            //Generate destroyable crates randomly on field
     180
     181            for (int i = 0; i<10; i++){
     182
     183                Pawn* crate = new Pawn(origin_->getContext());
     184
     185                crate->addTemplate(origin_->getObstacleTemplate()); 
     186                crate->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 43.0f));
     187
     188
     189            }   
     190           
     191
     192
     193
     194             //If no lives are left, end game
     195            if(lives <= 0)
     196            {
     197                GSLevel::startMainMenu();
     198            }
     199           
     200        }
     201    }
     202
     203
     204    // generate new Flags
     205    void Hover::createFlags()
     206    {
     207        //TODO
     208        //Generate flags randomly using bool array
     209
     210        //Generate 5 flags randomly on field
     211        for ( int i = 0; i < 5; i++ )
     212        {
     213            HoverFlag* flag = new HoverFlag(origin_->getContext());
     214            flag->init(rand()%numCells, rand()%numCells, cellSize);
     215            flags_.push_back(flag);
     216
     217           
     218
     219            if(flags_[i]->getPosition() == get3dCoordinates(0,0,-60))
     220            {
     221                flags_[i]->destroyLater();
     222                flags_.erase(flags_.begin()+i);
     223            }
     224        }
     225           
     226    }
     227
     228    void Hover::tick(float dt)
     229    {
     230        SUPER(Hover, tick, dt);
     231
    105232
    106233        // Check if ship collided with one of the flags
    107         for ( unsigned int i = 0; i < flags_.size(); i++ ){
    108             if(flags_[i]->getCollided()){
     234        for ( unsigned int i = 0; i < flags_.size(); i++ )
     235        {
     236            if(flags_[i]->getCollided())
     237            {
    109238                flags_[i]->destroyLater();
    110239                flags_.erase (flags_.begin()+i);
    111             }
     240                totFlags++;
     241                if(flags_.size()<=0){
     242                    //ChatManager::message("Level Up!");
     243                   
     244                    levelUp();
     245                }
     246            }
     247
    112248        }
    113249        numberOfFlags_ = flags_.size();
     250
     251        if(lives <= 0){
     252                GSLevel::startMainMenu();
     253            }
     254    }
     255
     256    //start new level - call to create new flags
     257    void Hover::levelUp()
     258    {
     259        level++;
     260        //increment lives after every 4 levels
     261        if(level%4 == 0)
     262        {
     263            lives++;
     264        }
     265        createFlags();
     266        toggleShowLevel();
     267        showLevelTimer.setTimer(2.0f, false, createExecutor(createFunctor(&Hover::toggleShowLevel, this)));
     268
     269        //spawn one additional crate randomly
     270        Pawn* crate = new Pawn(origin_->getContext());
     271        crate->addTemplate(origin_->getObstacleTemplate()); 
     272        crate->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 43.0f));
     273
     274    }
     275
     276    Vector3 Hover::get3dCoordinates(int x, int y, float heightOffset)
     277    {
     278        return Vector3(x*cellSize*1.0f + cellSize/2, heightOffset, y*cellSize*1.0f + cellSize/2);
     279    }
     280
     281    //if killed, subtract number of lives. If lives == 0, end game
     282    void Hover::costLife()
     283    {
     284        lives--;
     285        if (lives <= 0)
     286            GSLevel::startMainMenu();
    114287    }
    115288}
Note: See TracChangeset for help on using the changeset viewer.