Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jan 31, 2015, 5:31:23 PM (9 years ago)
Author:
landauf
Message:

replaced tabs with spaces. no changes in code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentationFS14/src/modules/jump/Jump.cc

    r10078 r10215  
    8484    void Jump::tick(float dt)
    8585    {
    86         SUPER(Jump, tick, dt);
    87 
    88         if (figure_ != NULL)
    89         {
    90                 Vector3 figurePosition = figure_->getPosition();
    91                 Vector3 figureVelocity = figure_->getVelocity();
    92 
    93                 float boundary = totalScreenShift_+center_->getCameraOffset();
    94 
    95                 if (figurePosition.z > boundary)
    96                 {
    97                         screenShiftSinceLastUpdate_ += figurePosition.z - boundary;
    98                         totalScreenShift_ = figurePosition.z - center_->getCameraOffset();
     86        SUPER(Jump, tick, dt);
     87
     88        if (figure_ != NULL)
     89        {
     90            Vector3 figurePosition = figure_->getPosition();
     91            Vector3 figureVelocity = figure_->getVelocity();
     92
     93            float boundary = totalScreenShift_+center_->getCameraOffset();
     94
     95            if (figurePosition.z > boundary)
     96            {
     97                screenShiftSinceLastUpdate_ += figurePosition.z - boundary;
     98                totalScreenShift_ = figurePosition.z - center_->getCameraOffset();
    9999
    100100                // Create new platforms if needed
    101101                if (screenShiftSinceLastUpdate_ > center_->getSectionLength())
    102102                {
    103                         if (sectionNumber_ > 2 && sectionNumber_%4 == 0 && rand()%2 == 0 && figure_->propellerActive_ == false && figure_->rocketActive_ == false && addAdventure(adventureNumber_) == true)
    104                         {
    105                                 screenShiftSinceLastUpdate_ -= 2*center_->getSectionLength();
    106                                                 ++ adventureNumber_;
    107                         }
    108                         else
    109                         {
    110                                 screenShiftSinceLastUpdate_ -= center_->getSectionLength();
    111                                 addSection();
    112                         }
     103                    if (sectionNumber_ > 2 && sectionNumber_%4 == 0 && rand()%2 == 0 && figure_->propellerActive_ == false && figure_->rocketActive_ == false && addAdventure(adventureNumber_) == true)
     104                    {
     105                        screenShiftSinceLastUpdate_ -= 2*center_->getSectionLength();
     106                        ++ adventureNumber_;
     107                    }
     108                    else
     109                    {
     110                        screenShiftSinceLastUpdate_ -= center_->getSectionLength();
     111                        addSection();
     112                    }
    113113                }
    114                 }
    115 
    116                 if (figurePosition.z < totalScreenShift_ - center_->getFieldDimension().y + platformHeight_ && figureVelocity.z < 0)
    117                 {
    118                         figure_->dead_ = true;
    119                 }
    120 
    121                 if (figure_->fireSignal_ == true)
    122                 {
    123                         if (figure_->dead_ == true)
    124                         {
    125                                 end();
    126                         }
    127                         else
    128                         {
    129                                 figure_->fireSignal_ = false;
    130                                 addProjectile(figurePosition.x, figurePosition.z + figure_->getPropellerPos());
    131                         }
    132                 }
    133 
    134 
    135                 if (camera != NULL)
    136                         {
    137                                 Vector3 cameraPosition = Vector3(0, totalScreenShift_, 0);
    138                                 camera->setPosition(cameraPosition);
    139                         }
    140                         else
    141                         {
    142                                 orxout() << "No camera found." << endl;
    143                         }
    144         }
    145 
    146                 ObjectList<JumpPlatform>::iterator beginPlatform = ObjectList<JumpPlatform>::begin();
    147                 ObjectList<JumpPlatform>::iterator endPlatform = ObjectList<JumpPlatform>::end();
    148                 ObjectList<JumpPlatform>::iterator itPlatform = beginPlatform;
    149                 Vector3 platformPosition;
    150 
    151                 while (itPlatform != endPlatform)
    152                 {
    153                         platformPosition = itPlatform->getPosition();
    154                         if (platformPosition.z < totalScreenShift_ - center_->getFieldDimension().y)
    155                         {
    156                                 ObjectList<JumpPlatform>::iterator temp = itPlatform;
    157                                 ++ itPlatform;
    158                                 center_->detach(*temp);
    159                                 temp->destroy();
    160                         }
    161                         else
    162                         {
    163                                 ++ itPlatform;
    164                         }
    165                 }
    166 
    167                 // Deleted deactivated platforms
    168                 ObjectList<JumpPlatformDisappear>::iterator beginDisappear = ObjectList<JumpPlatformDisappear>::begin();
    169                 ObjectList<JumpPlatformDisappear>::iterator endDisappear = ObjectList<JumpPlatformDisappear>::end();
    170                 ObjectList<JumpPlatformDisappear>::iterator itDisappear = beginDisappear;
    171 
    172                 while (itDisappear != endDisappear)
    173                 {
    174                         if (!itDisappear->isActive())
    175                         {
    176                                 ObjectList<JumpPlatformDisappear>::iterator temp = itDisappear;
    177                                 ++ itDisappear;
    178                                 center_->detach(*temp);
    179                                 temp->destroy();
    180                         }
    181                         else
    182                         {
    183                                 ++ itDisappear;
    184                         }
    185                 }
    186 
    187                 ObjectList<JumpPlatformTimer>::iterator beginTimer = ObjectList<JumpPlatformTimer>::begin();
    188                 ObjectList<JumpPlatformTimer>::iterator endTimer = ObjectList<JumpPlatformTimer>::end();
    189                 ObjectList<JumpPlatformTimer>::iterator itTimer = beginTimer;
    190 
    191                 while (itTimer != endTimer)
    192                 {
    193                         if (!itTimer->isActive())
    194                         {
    195                                 ObjectList<JumpPlatformTimer>::iterator temp = itTimer;
    196                                 ++ itTimer;
    197                                 center_->detach(*temp);
    198                                 temp->destroy();
    199                         }
    200                         else
    201                         {
    202                                 ++ itTimer;
    203                         }
    204                 }
    205 
    206                 ObjectList<JumpProjectile>::iterator beginProjectile = ObjectList<JumpProjectile>::begin();
    207                 ObjectList<JumpProjectile>::iterator endProjectile = ObjectList<JumpProjectile>::end();
    208                 ObjectList<JumpProjectile>::iterator itProjectile = beginProjectile;
    209                 Vector3 projectilePosition;
    210 
    211                 while (itProjectile != endProjectile)
    212                 {
    213                         projectilePosition = itProjectile->getPosition();
    214                         if (projectilePosition.z > totalScreenShift_ + 5*center_->getFieldDimension().y)
    215                         {
    216                                 ObjectList<JumpProjectile>::iterator temp = itProjectile;
    217                                 ++ itProjectile;
    218                                 center_->detach(*temp);
    219                                 temp->destroy();
    220                         }
    221                         else
    222                         {
    223                                 ++ itProjectile;
    224                         }
    225                 }
    226 
    227                 ObjectList<JumpEnemy>::iterator beginEnemy = ObjectList<JumpEnemy>::begin();
    228                 ObjectList<JumpEnemy>::iterator endEnemy = ObjectList<JumpEnemy>::end();
    229                 ObjectList<JumpEnemy>::iterator itEnemy = beginEnemy;
    230                 Vector3 enemyPosition;
    231 
    232                 while (itEnemy != endEnemy)
    233                 {
    234                         enemyPosition = itEnemy->getPosition();
    235                         if (enemyPosition.z < totalScreenShift_ - center_->getFieldDimension().y || itEnemy->dead_ == true)
    236                         {
    237                                 ObjectList<JumpEnemy>::iterator temp = itEnemy;
    238                                 ++ itEnemy;
    239                                 center_->detach(*temp);
    240                                 temp->destroy();
    241                         }
    242                         else
    243                         {
    244                                 ++ itEnemy;
    245                         }
    246                 }
    247 
    248                 ObjectList<JumpItem>::iterator beginItem = ObjectList<JumpItem>::begin();
    249                 ObjectList<JumpItem>::iterator endItem = ObjectList<JumpItem>::end();
    250                 ObjectList<JumpItem>::iterator itItem = beginItem;
    251                 Vector3 itemPosition;
    252 
    253                 while (itItem != endItem)
    254                 {
    255                         itemPosition = itItem->getPosition();
    256 
    257                         WorldEntity* parent = itItem->getParent();
    258 
    259                         if (itItem->attachedToFigure_ == false && itemPosition.z < totalScreenShift_ - center_->getFieldDimension().y && parent == center_)
    260                         {
    261                                 ObjectList<JumpItem>::iterator temp = itItem;
    262                                 ++ itItem;
    263                                 center_->detach(*temp);
    264                                 temp->destroy();
    265                         }
    266                         else
    267                         {
    268                                 ++ itItem;
    269                         }
    270                 }
     114            }
     115
     116            if (figurePosition.z < totalScreenShift_ - center_->getFieldDimension().y + platformHeight_ && figureVelocity.z < 0)
     117            {
     118                figure_->dead_ = true;
     119            }
     120
     121            if (figure_->fireSignal_ == true)
     122            {
     123                if (figure_->dead_ == true)
     124                {
     125                    end();
     126                }
     127                else
     128                {
     129                    figure_->fireSignal_ = false;
     130                    addProjectile(figurePosition.x, figurePosition.z + figure_->getPropellerPos());
     131                }
     132            }
     133
     134
     135            if (camera != NULL)
     136            {
     137                Vector3 cameraPosition = Vector3(0, totalScreenShift_, 0);
     138                camera->setPosition(cameraPosition);
     139            }
     140            else
     141            {
     142                orxout() << "No camera found." << endl;
     143            }
     144        }
     145
     146        ObjectList<JumpPlatform>::iterator beginPlatform = ObjectList<JumpPlatform>::begin();
     147        ObjectList<JumpPlatform>::iterator endPlatform = ObjectList<JumpPlatform>::end();
     148        ObjectList<JumpPlatform>::iterator itPlatform = beginPlatform;
     149        Vector3 platformPosition;
     150
     151        while (itPlatform != endPlatform)
     152        {
     153            platformPosition = itPlatform->getPosition();
     154            if (platformPosition.z < totalScreenShift_ - center_->getFieldDimension().y)
     155            {
     156                ObjectList<JumpPlatform>::iterator temp = itPlatform;
     157                ++ itPlatform;
     158                center_->detach(*temp);
     159                temp->destroy();
     160            }
     161            else
     162            {
     163                ++ itPlatform;
     164            }
     165        }
     166
     167        // Deleted deactivated platforms
     168        ObjectList<JumpPlatformDisappear>::iterator beginDisappear = ObjectList<JumpPlatformDisappear>::begin();
     169        ObjectList<JumpPlatformDisappear>::iterator endDisappear = ObjectList<JumpPlatformDisappear>::end();
     170        ObjectList<JumpPlatformDisappear>::iterator itDisappear = beginDisappear;
     171
     172        while (itDisappear != endDisappear)
     173        {
     174            if (!itDisappear->isActive())
     175            {
     176                ObjectList<JumpPlatformDisappear>::iterator temp = itDisappear;
     177                ++ itDisappear;
     178                center_->detach(*temp);
     179                temp->destroy();
     180            }
     181            else
     182            {
     183                ++ itDisappear;
     184            }
     185        }
     186
     187        ObjectList<JumpPlatformTimer>::iterator beginTimer = ObjectList<JumpPlatformTimer>::begin();
     188        ObjectList<JumpPlatformTimer>::iterator endTimer = ObjectList<JumpPlatformTimer>::end();
     189        ObjectList<JumpPlatformTimer>::iterator itTimer = beginTimer;
     190
     191        while (itTimer != endTimer)
     192        {
     193            if (!itTimer->isActive())
     194            {
     195                ObjectList<JumpPlatformTimer>::iterator temp = itTimer;
     196                ++ itTimer;
     197                center_->detach(*temp);
     198                temp->destroy();
     199            }
     200            else
     201            {
     202                ++ itTimer;
     203            }
     204        }
     205
     206        ObjectList<JumpProjectile>::iterator beginProjectile = ObjectList<JumpProjectile>::begin();
     207        ObjectList<JumpProjectile>::iterator endProjectile = ObjectList<JumpProjectile>::end();
     208        ObjectList<JumpProjectile>::iterator itProjectile = beginProjectile;
     209        Vector3 projectilePosition;
     210
     211        while (itProjectile != endProjectile)
     212        {
     213            projectilePosition = itProjectile->getPosition();
     214            if (projectilePosition.z > totalScreenShift_ + 5*center_->getFieldDimension().y)
     215            {
     216                ObjectList<JumpProjectile>::iterator temp = itProjectile;
     217                ++ itProjectile;
     218                center_->detach(*temp);
     219                temp->destroy();
     220            }
     221            else
     222            {
     223                ++ itProjectile;
     224            }
     225        }
     226
     227        ObjectList<JumpEnemy>::iterator beginEnemy = ObjectList<JumpEnemy>::begin();
     228        ObjectList<JumpEnemy>::iterator endEnemy = ObjectList<JumpEnemy>::end();
     229        ObjectList<JumpEnemy>::iterator itEnemy = beginEnemy;
     230        Vector3 enemyPosition;
     231
     232        while (itEnemy != endEnemy)
     233        {
     234            enemyPosition = itEnemy->getPosition();
     235            if (enemyPosition.z < totalScreenShift_ - center_->getFieldDimension().y || itEnemy->dead_ == true)
     236            {
     237                ObjectList<JumpEnemy>::iterator temp = itEnemy;
     238                ++ itEnemy;
     239                center_->detach(*temp);
     240                temp->destroy();
     241            }
     242            else
     243            {
     244                ++ itEnemy;
     245            }
     246        }
     247
     248        ObjectList<JumpItem>::iterator beginItem = ObjectList<JumpItem>::begin();
     249        ObjectList<JumpItem>::iterator endItem = ObjectList<JumpItem>::end();
     250        ObjectList<JumpItem>::iterator itItem = beginItem;
     251        Vector3 itemPosition;
     252
     253        while (itItem != endItem)
     254        {
     255            itemPosition = itItem->getPosition();
     256
     257            WorldEntity* parent = itItem->getParent();
     258
     259            if (itItem->attachedToFigure_ == false && itemPosition.z < totalScreenShift_ - center_->getFieldDimension().y && parent == center_)
     260            {
     261                ObjectList<JumpItem>::iterator temp = itItem;
     262                ++ itItem;
     263                center_->detach(*temp);
     264                temp->destroy();
     265            }
     266            else
     267            {
     268                ++ itItem;
     269            }
     270        }
    271271    }
    272272
    273273    void Jump::cleanup()
    274274    {
    275                 camera = 0;
     275        camera = 0;
    276276    }
    277277
     
    280280        if (center_ != NULL) // There needs to be a JumpCenterpoint, i.e. the area the game takes place.
    281281        {
    282                         if (figure_ == NULL)
    283                         {
    284                                 figure_ = new JumpFigure(center_->getContext());
    285                                 figure_->addTemplate(center_->getFigureTemplate());
    286                                 figure_->InitializeAnimation(center_->getContext());
    287                         }
     282            if (figure_ == NULL)
     283            {
     284                figure_ = new JumpFigure(center_->getContext());
     285                figure_->addTemplate(center_->getFigureTemplate());
     286                figure_->InitializeAnimation(center_->getContext());
     287            }
    288288
    289289            center_->attach(figure_);
     
    303303        if (figure_ != NULL)
    304304        {
    305                 camera = figure_->getCamera();
     305            camera = figure_->getCamera();
    306306        }
    307307
     
    318318    void Jump::end()
    319319    {
    320         cleanup();
    321         GSLevel::startMainMenu();
     320        cleanup();
     321        GSLevel::startMainMenu();
    322322
    323323        Deathmatch::end();
     
    349349    void Jump::addPlatform(JumpPlatform* newPlatform, std::string platformTemplate, float xPosition, float zPosition)
    350350    {
    351         if (newPlatform != NULL && center_ != NULL)
    352                 {
    353                 newPlatform->addTemplate(platformTemplate);
    354                 newPlatform->setPosition(Vector3(xPosition, 0.0, zPosition));
    355                 newPlatform->setFigure(this->figure_);
    356                 center_->attach(newPlatform);
    357                 }
     351        if (newPlatform != NULL && center_ != NULL)
     352        {
     353            newPlatform->addTemplate(platformTemplate);
     354            newPlatform->setPosition(Vector3(xPosition, 0.0, zPosition));
     355            newPlatform->setFigure(this->figure_);
     356            center_->attach(newPlatform);
     357        }
    358358    }
    359359
    360360    JumpPlatformStatic* Jump::addPlatformStatic(float xPosition, float zPosition)
    361361    {
    362                 JumpPlatformStatic* newPlatform = new JumpPlatformStatic(center_->getContext());
    363                 addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, zPosition);
    364 
    365                 return newPlatform;
     362        JumpPlatformStatic* newPlatform = new JumpPlatformStatic(center_->getContext());
     363        addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, zPosition);
     364
     365        return newPlatform;
    366366    }
    367367
    368368    JumpPlatformHMove* Jump::addPlatformHMove(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float speed)
    369369    {
    370         JumpPlatformHMove* newPlatform = new JumpPlatformHMove(center_->getContext());
    371                 newPlatform->setProperties(leftBoundary, rightBoundary, speed);
    372                 addPlatform(newPlatform, center_->getPlatformHMoveTemplate(), xPosition, zPosition);
    373 
    374                 return newPlatform;
     370        JumpPlatformHMove* newPlatform = new JumpPlatformHMove(center_->getContext());
     371        newPlatform->setProperties(leftBoundary, rightBoundary, speed);
     372        addPlatform(newPlatform, center_->getPlatformHMoveTemplate(), xPosition, zPosition);
     373
     374        return newPlatform;
    375375    }
    376376
    377377    JumpPlatformVMove* Jump::addPlatformVMove(float xPosition, float zPosition, float lowerBoundary, float upperBoundary, float speed)
    378378    {
    379         JumpPlatformVMove* newPlatform = new JumpPlatformVMove(center_->getContext());
    380                 newPlatform->setProperties(lowerBoundary, upperBoundary, speed);
    381                 addPlatform(newPlatform, center_->getPlatformVMoveTemplate(), xPosition, zPosition);
    382 
    383                 return newPlatform;
     379        JumpPlatformVMove* newPlatform = new JumpPlatformVMove(center_->getContext());
     380        newPlatform->setProperties(lowerBoundary, upperBoundary, speed);
     381        addPlatform(newPlatform, center_->getPlatformVMoveTemplate(), xPosition, zPosition);
     382
     383        return newPlatform;
    384384    }
    385385
    386386    JumpPlatformDisappear* Jump::addPlatformDisappear(float xPosition, float zPosition)
    387387    {
    388                 JumpPlatformDisappear* newPlatform = new JumpPlatformDisappear(center_->getContext());
    389                 newPlatform->setProperties(true);
    390                 addPlatform(newPlatform, center_->getPlatformDisappearTemplate(), xPosition, zPosition);
    391 
    392                 return newPlatform;
     388        JumpPlatformDisappear* newPlatform = new JumpPlatformDisappear(center_->getContext());
     389        newPlatform->setProperties(true);
     390        addPlatform(newPlatform, center_->getPlatformDisappearTemplate(), xPosition, zPosition);
     391
     392        return newPlatform;
    393393    }
    394394
    395395    JumpPlatformTimer* Jump::addPlatformTimer(float xPosition, float zPosition, float time, float variance)
    396396    {
    397                 float additionalTime = (float)(rand()%100)/(100*variance) - variance/2;
    398 
    399         JumpPlatformTimer* newPlatform = new JumpPlatformTimer(center_->getContext());
    400                 newPlatform->setProperties(time + additionalTime);
    401                 addPlatform(newPlatform, center_->getPlatformTimerTemplate(), xPosition, zPosition);
    402 
    403                 return newPlatform;
     397        float additionalTime = (float)(rand()%100)/(100*variance) - variance/2;
     398
     399        JumpPlatformTimer* newPlatform = new JumpPlatformTimer(center_->getContext());
     400        newPlatform->setProperties(time + additionalTime);
     401        addPlatform(newPlatform, center_->getPlatformTimerTemplate(), xPosition, zPosition);
     402
     403        return newPlatform;
    404404    }
    405405
    406406    JumpPlatformFake* Jump::addPlatformFake(float xPosition, float zPosition)
    407407    {
    408                 JumpPlatformFake* newPlatform = new JumpPlatformFake(center_->getContext());
    409                 addPlatform(newPlatform, center_->getPlatformFakeTemplate(), xPosition, zPosition);
    410                 newPlatform->setAngularVelocity(Vector3(0, 0, 2.0));
    411 
    412                 return newPlatform;
     408        JumpPlatformFake* newPlatform = new JumpPlatformFake(center_->getContext());
     409        addPlatform(newPlatform, center_->getPlatformFakeTemplate(), xPosition, zPosition);
     410        newPlatform->setAngularVelocity(Vector3(0, 0, 2.0));
     411
     412        return newPlatform;
    413413    }
    414414
     
    416416    void Jump::addProjectile(float xPosition, float zPosition)
    417417    {
    418         JumpProjectile* newProjectile = new JumpProjectile(center_->getContext());
    419         if (newProjectile != NULL && center_ != NULL)
    420                 {
    421                 newProjectile->addTemplate(center_->getProjectileTemplate());
    422                 newProjectile->setPosition(Vector3(xPosition, 0.0, zPosition));
    423                 newProjectile->setFieldDimension(center_->getFieldDimension());
    424                 newProjectile->setFigure(this->figure_);
    425                 center_->attach(newProjectile);
    426                 }
     418        JumpProjectile* newProjectile = new JumpProjectile(center_->getContext());
     419        if (newProjectile != NULL && center_ != NULL)
     420        {
     421            newProjectile->addTemplate(center_->getProjectileTemplate());
     422            newProjectile->setPosition(Vector3(xPosition, 0.0, zPosition));
     423            newProjectile->setFieldDimension(center_->getFieldDimension());
     424            newProjectile->setFigure(this->figure_);
     425            center_->attach(newProjectile);
     426        }
    427427    }
    428428
    429429    void Jump::addSpring(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
    430430    {
    431         JumpSpring* newSpring = new JumpSpring(center_->getContext());
    432         if (newSpring != NULL && center_ != NULL)
    433                 {
    434                 newSpring->addTemplate(center_->getSpringTemplate());
    435                 newSpring->setPosition(Vector3(xPosition, 0.0, zPosition));
    436                 newSpring->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
    437                 newSpring->setFigure(figure_);
    438                 center_->attach(newSpring);
    439                 }
     431        JumpSpring* newSpring = new JumpSpring(center_->getContext());
     432        if (newSpring != NULL && center_ != NULL)
     433        {
     434            newSpring->addTemplate(center_->getSpringTemplate());
     435            newSpring->setPosition(Vector3(xPosition, 0.0, zPosition));
     436            newSpring->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     437            newSpring->setFigure(figure_);
     438            center_->attach(newSpring);
     439        }
    440440    }
    441441
    442442    void Jump::addSpring(JumpPlatform* platform)
    443443    {
    444         JumpSpring* newSpring = new JumpSpring(center_->getContext());
    445         if (newSpring != NULL && center_ != NULL)
    446                 {
    447                 newSpring->addTemplate(center_->getSpringTemplate());
    448                 newSpring->setPosition(Vector3(0.0, 0.0, 0.0));
    449                 newSpring->setProperties(-10.0, 10.0, -10.0, 10.0, 0.0, 0.0);
    450                 newSpring->setFigure(figure_);
    451                 platform->attach(newSpring);
    452                 }
     444        JumpSpring* newSpring = new JumpSpring(center_->getContext());
     445        if (newSpring != NULL && center_ != NULL)
     446        {
     447            newSpring->addTemplate(center_->getSpringTemplate());
     448            newSpring->setPosition(Vector3(0.0, 0.0, 0.0));
     449            newSpring->setProperties(-10.0, 10.0, -10.0, 10.0, 0.0, 0.0);
     450            newSpring->setFigure(figure_);
     451            platform->attach(newSpring);
     452        }
    453453    }
    454454
    455455    void Jump::addRocket(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
    456456    {
    457         JumpRocket* newRocket = new JumpRocket(center_->getContext());
    458         if (newRocket != NULL && center_ != NULL)
    459                 {
    460                 newRocket->addTemplate(center_->getRocketTemplate());
    461                 newRocket->setPosition(Vector3(xPosition, 0.0, zPosition));
    462                 newRocket->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
    463                 newRocket->setFigure(figure_);
    464                 center_->attach(newRocket);
    465                 }
     457        JumpRocket* newRocket = new JumpRocket(center_->getContext());
     458        if (newRocket != NULL && center_ != NULL)
     459        {
     460            newRocket->addTemplate(center_->getRocketTemplate());
     461            newRocket->setPosition(Vector3(xPosition, 0.0, zPosition));
     462            newRocket->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     463            newRocket->setFigure(figure_);
     464            center_->attach(newRocket);
     465        }
    466466    }
    467467
    468468    void Jump::addRocket(JumpPlatform* platform)
    469469    {
    470         JumpRocket* newRocket = new JumpRocket(center_->getContext());
    471         if (newRocket != NULL && center_ != NULL)
    472                 {
    473                 newRocket->addTemplate(center_->getRocketTemplate());
    474                 newRocket->setPosition(Vector3(0.0, 0.0, 0.0));
    475                 newRocket->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    476                 newRocket->setFigure(figure_);
    477                 platform->attach(newRocket);
    478                 }
     470        JumpRocket* newRocket = new JumpRocket(center_->getContext());
     471        if (newRocket != NULL && center_ != NULL)
     472        {
     473            newRocket->addTemplate(center_->getRocketTemplate());
     474            newRocket->setPosition(Vector3(0.0, 0.0, 0.0));
     475            newRocket->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
     476            newRocket->setFigure(figure_);
     477            platform->attach(newRocket);
     478        }
    479479    }
    480480
    481481    void Jump::addPropeller(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
    482482    {
    483         JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
    484         if (newPropeller != NULL && center_ != NULL)
    485                 {
    486                 newPropeller->addTemplate(center_->getPropellerTemplate());
    487                 newPropeller->setPosition(Vector3(xPosition, 0.0, zPosition));
    488                 newPropeller->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
    489                 newPropeller->setFigure(figure_);
    490                 center_->attach(newPropeller);
    491                 }
     483        JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
     484        if (newPropeller != NULL && center_ != NULL)
     485        {
     486            newPropeller->addTemplate(center_->getPropellerTemplate());
     487            newPropeller->setPosition(Vector3(xPosition, 0.0, zPosition));
     488            newPropeller->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     489            newPropeller->setFigure(figure_);
     490            center_->attach(newPropeller);
     491        }
    492492    }
    493493
    494494    void Jump::addPropeller(JumpPlatform* platform)
    495495    {
    496         JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
    497         if (newPropeller != NULL && center_ != NULL)
    498                 {
    499                 newPropeller->addTemplate(center_->getPropellerTemplate());
    500                 newPropeller->setPosition(Vector3(0.0, 0.0, 0.0));
    501                 newPropeller->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    502                 newPropeller->setFigure(figure_);
    503                 platform->attach(newPropeller);
    504                 }
     496        JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
     497        if (newPropeller != NULL && center_ != NULL)
     498        {
     499            newPropeller->addTemplate(center_->getPropellerTemplate());
     500            newPropeller->setPosition(Vector3(0.0, 0.0, 0.0));
     501            newPropeller->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
     502            newPropeller->setFigure(figure_);
     503            platform->attach(newPropeller);
     504        }
    505505    }
    506506
    507507    void Jump::addBoots(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
    508508    {
    509         JumpBoots* newBoots = new JumpBoots(center_->getContext());
    510         if (newBoots != NULL && center_ != NULL)
    511                 {
    512                 newBoots->addTemplate(center_->getBootsTemplate());
    513                 newBoots->setPosition(Vector3(xPosition, 0.0, zPosition));
    514                 newBoots->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
    515                 newBoots->setFigure(figure_);
    516                 center_->attach(newBoots);
    517                 }
     509        JumpBoots* newBoots = new JumpBoots(center_->getContext());
     510        if (newBoots != NULL && center_ != NULL)
     511        {
     512            newBoots->addTemplate(center_->getBootsTemplate());
     513            newBoots->setPosition(Vector3(xPosition, 0.0, zPosition));
     514            newBoots->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     515            newBoots->setFigure(figure_);
     516            center_->attach(newBoots);
     517        }
    518518    }
    519519
    520520    void Jump::addBoots(JumpPlatform* platform)
    521521    {
    522         JumpBoots* newBoots = new JumpBoots(center_->getContext());
    523         if (newBoots != NULL && center_ != NULL)
    524                 {
    525                 newBoots->addTemplate(center_->getBootsTemplate());
    526                 newBoots->setPosition(Vector3(0.0, 0.0, 0.0));
    527                 newBoots->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    528                 newBoots->setFigure(figure_);
    529                 platform->attach(newBoots);
    530                 }
     522        JumpBoots* newBoots = new JumpBoots(center_->getContext());
     523        if (newBoots != NULL && center_ != NULL)
     524        {
     525            newBoots->addTemplate(center_->getBootsTemplate());
     526            newBoots->setPosition(Vector3(0.0, 0.0, 0.0));
     527            newBoots->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
     528            newBoots->setFigure(figure_);
     529            platform->attach(newBoots);
     530        }
    531531    }
    532532
    533533    void Jump::addShield(float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
    534534    {
    535         JumpShield* newShield = new JumpShield(center_->getContext());
    536         if (newShield != NULL && center_ != NULL)
    537                 {
    538                 newShield->addTemplate(center_->getShieldTemplate());
    539                 newShield->setPosition(Vector3(xPosition, 0.0, zPosition));
    540                 newShield->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
    541                 newShield->setFigure(figure_);
    542                 center_->attach(newShield);
    543                 }
     535        JumpShield* newShield = new JumpShield(center_->getContext());
     536        if (newShield != NULL && center_ != NULL)
     537        {
     538            newShield->addTemplate(center_->getShieldTemplate());
     539            newShield->setPosition(Vector3(xPosition, 0.0, zPosition));
     540            newShield->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     541            newShield->setFigure(figure_);
     542            center_->attach(newShield);
     543        }
    544544    }
    545545
    546546    void Jump::addShield(JumpPlatform* platform)
    547547    {
    548         JumpShield* newShield = new JumpShield(center_->getContext());
    549         if (newShield != NULL && center_ != NULL)
    550                 {
    551                 newShield->addTemplate(center_->getShieldTemplate());
    552                 newShield->setPosition(Vector3(0.0, 0.0, 0.0));
    553                 newShield->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
    554                 newShield->setFigure(figure_);
    555                 platform->attach(newShield);
    556                 }
     548        JumpShield* newShield = new JumpShield(center_->getContext());
     549        if (newShield != NULL && center_ != NULL)
     550        {
     551            newShield->addTemplate(center_->getShieldTemplate());
     552            newShield->setPosition(Vector3(0.0, 0.0, 0.0));
     553            newShield->setProperties(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
     554            newShield->setFigure(figure_);
     555            platform->attach(newShield);
     556        }
    557557    }
    558558
    559559    void Jump::addEnemy(int type, float xPosition, float zPosition, float leftBoundary, float rightBoundary, float lowerBoundary, float upperBoundary, float xVelocity, float zVelocity)
    560560    {
    561         JumpEnemy* newEnemy = new JumpEnemy(center_->getContext());
    562         if (newEnemy != NULL && center_ != NULL)
    563                 {
    564                 switch (type)
    565                 {
    566                 case 1:
    567                         newEnemy->addTemplate(center_->getEnemy1Template());
    568                         break;
    569                 case 2:
    570                         newEnemy->addTemplate(center_->getEnemy2Template());
    571                         break;
    572                 case 3:
    573                         newEnemy->addTemplate(center_->getEnemy3Template());
    574                         break;
    575                 case 4:
    576                         newEnemy->addTemplate(center_->getEnemy4Template());
    577                         break;
    578                 default:
    579                         return;
    580                 }
    581 
    582                 newEnemy->setPosition(Vector3(xPosition, 0.0, zPosition));
    583                 newEnemy->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
    584                 newEnemy->setFieldDimension(center_->getFieldDimension());
    585                 newEnemy->setFigure(this->figure_);
    586                 center_->attach(newEnemy);
    587                 }
     561        JumpEnemy* newEnemy = new JumpEnemy(center_->getContext());
     562        if (newEnemy != NULL && center_ != NULL)
     563        {
     564            switch (type)
     565            {
     566            case 1:
     567                newEnemy->addTemplate(center_->getEnemy1Template());
     568                break;
     569            case 2:
     570                newEnemy->addTemplate(center_->getEnemy2Template());
     571                break;
     572            case 3:
     573                newEnemy->addTemplate(center_->getEnemy3Template());
     574                break;
     575            case 4:
     576                newEnemy->addTemplate(center_->getEnemy4Template());
     577                break;
     578            default:
     579                return;
     580            }
     581
     582            newEnemy->setPosition(Vector3(xPosition, 0.0, zPosition));
     583            newEnemy->setProperties(leftBoundary, rightBoundary, lowerBoundary, upperBoundary, xVelocity, zVelocity);
     584            newEnemy->setFieldDimension(center_->getFieldDimension());
     585            newEnemy->setFigure(this->figure_);
     586            center_->attach(newEnemy);
     587        }
    588588    }
    589589
    590590    void Jump::addStartSection()
    591591    {
    592                 JumpPlatform* newPlatform;
    593 
    594                 float sectionLength = center_->getSectionLength();
    595 
    596                 newPlatform = new JumpPlatformStatic(center_->getContext());
    597                 addPlatform(newPlatform, center_->getPlatformStaticTemplate(), 0.0, -0.05*sectionLength);
    598 
    599                 platformWidth_ = newPlatform->getWidth();
    600                 platformHeight_ = newPlatform->getHeight();
    601 
    602                 for (float xPosition = platformWidth_; xPosition <= center_->getFieldDimension().x; xPosition += platformWidth_)
    603                 {
    604                         newPlatform = new JumpPlatformStatic(center_->getContext());
    605                         addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, -0.05*sectionLength);
    606                         newPlatform = new JumpPlatformStatic(center_->getContext());
    607                         addPlatform(newPlatform, center_->getPlatformStaticTemplate(), -xPosition, -0.05*sectionLength);
    608                 }
     592        JumpPlatform* newPlatform;
     593
     594        float sectionLength = center_->getSectionLength();
     595
     596        newPlatform = new JumpPlatformStatic(center_->getContext());
     597        addPlatform(newPlatform, center_->getPlatformStaticTemplate(), 0.0, -0.05*sectionLength);
     598
     599        platformWidth_ = newPlatform->getWidth();
     600        platformHeight_ = newPlatform->getHeight();
     601
     602        for (float xPosition = platformWidth_; xPosition <= center_->getFieldDimension().x; xPosition += platformWidth_)
     603        {
     604            newPlatform = new JumpPlatformStatic(center_->getContext());
     605            addPlatform(newPlatform, center_->getPlatformStaticTemplate(), xPosition, -0.05*sectionLength);
     606            newPlatform = new JumpPlatformStatic(center_->getContext());
     607            addPlatform(newPlatform, center_->getPlatformStaticTemplate(), -xPosition, -0.05*sectionLength);
     608        }
    609609    }
    610610
     
    619619        int numJ = 4;
    620620
    621         enum PlatformType
    622         {
    623                 PLATFORM_EMPTY, PLATFORM_STATIC, PLATFORM_HMOVE, PLATFORM_VMOVE, PLATFORM_DISAPPEAR, PLATFORM_TIMER, PLATFORM_FAKE
    624         };
    625 
    626         enum ItemType
    627         {
    628                 ITEM_NOTHING, ITEM_SPRING, ITEM_PROPELLER, ITEM_ROCKET, ITEM_BOOTS, ITEM_SHIELD
    629         };
     621        enum PlatformType
     622        {
     623            PLATFORM_EMPTY, PLATFORM_STATIC, PLATFORM_HMOVE, PLATFORM_VMOVE, PLATFORM_DISAPPEAR, PLATFORM_TIMER, PLATFORM_FAKE
     624        };
     625
     626        enum ItemType
     627        {
     628            ITEM_NOTHING, ITEM_SPRING, ITEM_PROPELLER, ITEM_ROCKET, ITEM_BOOTS, ITEM_SHIELD
     629        };
    630630
    631631        struct PlatformMatrix
    632632        {
    633                 PlatformType type;
     633            PlatformType type;
    634634            bool done;
    635635        } matrix[numI][numJ];
    636636
    637637
    638                 for (int i = 0; i < numI; ++i)
    639                 {
    640                         for (int j = 0; j < numJ; ++j)
    641                         {
    642                                 matrix[i][j].type = PLATFORM_EMPTY;
    643                                 matrix[i][j].done = false;
    644                         }
    645                 }
    646                 PlatformType platformtype1;
    647                 PlatformType platformtype2;
    648                 ItemType itemType = ITEM_NOTHING;
    649 
    650             if (rand()%2 == 0)
    651             {
    652                 itemType = ITEM_SPRING;
    653             }
    654             else if (rand()%2 == 0 && sectionNumber_ > 3)
    655             {
    656                         switch(rand()%4)
    657                         {
    658                         case 0:
    659                                 itemType = ITEM_PROPELLER;
    660                                 break;
    661                         case 1:
    662                                 itemType = ITEM_ROCKET;
    663                                 break;
    664                         case 2:
    665                                 itemType = ITEM_BOOTS;
    666                                 break;
    667                         case 3:
    668                                 itemType = ITEM_SHIELD;
    669                                 break;
    670                         default:
    671                                 break;
    672                         }
    673             }
    674 
    675                 switch((sectionNumber_ > 28) ? rand()%29 : rand()%(sectionNumber_+1))
    676             {
    677             case 0:
    678                 platformtype1 = PLATFORM_STATIC;
    679                 platformtype2 = PLATFORM_STATIC;
    680                 break;
    681             case 1:
    682                 platformtype1 = PLATFORM_STATIC;
    683                 platformtype2 = PLATFORM_STATIC;
    684                 break;
    685             case 2:
    686               platformtype1 = PLATFORM_STATIC;
    687               platformtype2 = PLATFORM_HMOVE;
    688               break;
    689             case 3:
    690               platformtype1 = PLATFORM_STATIC;
    691               platformtype2 = PLATFORM_DISAPPEAR;
    692               break;
    693             case 4:
    694               platformtype1 = PLATFORM_STATIC;
    695               platformtype2 = PLATFORM_VMOVE;
    696               break;
    697             case 5:
    698               platformtype1 = PLATFORM_STATIC;
    699               platformtype2 = PLATFORM_TIMER;
    700               break;
    701             case 6:
    702               platformtype1 = PLATFORM_HMOVE;
    703               platformtype2 = PLATFORM_STATIC;
    704               break;
    705             case 7:
    706               platformtype1 = PLATFORM_HMOVE;
    707               platformtype2 = PLATFORM_HMOVE;
    708               break;
    709             case 8:
    710               platformtype1 = PLATFORM_HMOVE;
    711               platformtype2 = PLATFORM_HMOVE;
    712               break;
    713             case 9:
    714               platformtype1 = PLATFORM_HMOVE;
    715               platformtype2 = PLATFORM_DISAPPEAR;
    716               break;
    717             case 10:
    718               platformtype1 = PLATFORM_HMOVE;
    719               platformtype2 = PLATFORM_VMOVE;
    720               break;
    721             case 11:
    722               platformtype1 = PLATFORM_HMOVE;
    723               platformtype2 = PLATFORM_TIMER;
    724               break;
    725             case 12:
    726               platformtype1 = PLATFORM_DISAPPEAR;
    727               platformtype2 = PLATFORM_STATIC;
    728               break;
    729             case 13:
    730               platformtype1 = PLATFORM_DISAPPEAR;
    731               platformtype2 = PLATFORM_HMOVE;
    732               break;
    733             case 14:
    734               platformtype1 = PLATFORM_DISAPPEAR;
    735               platformtype2 = PLATFORM_DISAPPEAR;
    736               break;
    737             case 15:
    738               platformtype1 = PLATFORM_DISAPPEAR;
    739               platformtype2 = PLATFORM_DISAPPEAR;
    740               break;
    741             case 16:
    742               platformtype1 = PLATFORM_DISAPPEAR;
    743               platformtype2 = PLATFORM_VMOVE;
    744               break;
    745             case 17:
    746               platformtype1 = PLATFORM_DISAPPEAR;
    747               platformtype2 = PLATFORM_TIMER;
    748               break;
    749             case 18:
    750               platformtype1 = PLATFORM_VMOVE;
    751               platformtype2 = PLATFORM_STATIC;
    752               break;
    753             case 19:
    754               platformtype1 = PLATFORM_VMOVE;
    755               platformtype2 = PLATFORM_HMOVE;
    756               break;
    757             case 20:
    758               platformtype1 = PLATFORM_VMOVE;
    759               platformtype2 = PLATFORM_DISAPPEAR;
    760               break;
    761             case 21:
    762               platformtype1 = PLATFORM_VMOVE;
    763               platformtype2 = PLATFORM_VMOVE;
    764               break;
    765             case 22:
    766               platformtype1 = PLATFORM_VMOVE;
    767               platformtype2 = PLATFORM_VMOVE;
    768               break;
    769             case 23:
    770               platformtype1 = PLATFORM_VMOVE;
    771               platformtype2 = PLATFORM_TIMER;
    772               break;
    773             case 24:
    774               platformtype1 = PLATFORM_TIMER;
    775               platformtype2 = PLATFORM_STATIC;
    776               break;
    777             case 25:
    778               platformtype1 = PLATFORM_TIMER;
    779               platformtype2 = PLATFORM_HMOVE;
    780               break;
    781             case 26:
    782               platformtype1 = PLATFORM_TIMER;
    783               platformtype2 = PLATFORM_DISAPPEAR;
    784               break;
    785             case 27:
    786                 platformtype1 = PLATFORM_TIMER;
    787                 platformtype2 = PLATFORM_VMOVE;
    788                 break;
    789             case 28:
    790                 platformtype1 = PLATFORM_TIMER;
    791                 platformtype2 = PLATFORM_TIMER;
    792                 break;
    793             default:
    794                 platformtype1 = PLATFORM_TIMER;
    795                 platformtype2 = PLATFORM_TIMER;
    796                 break;
    797             }
    798 
    799             // Fill matrix with selected platform types
    800             for (int i = 0; i < numI; ++ i)
    801             {
    802                           for (int j = 0; j < numJ; ++ j)
    803                           {
    804                                         if (rand()%3 == 0)
    805                                         {
    806                                             matrix[i][j].type = platformtype1;
    807                                         }
    808                                         else
    809                                         {
    810                                                 matrix[i][j].type = platformtype2;
    811                                         }
    812                                         matrix[i][j].done = false;
    813                           }
    814             }
    815 
    816             if (platformtype1 == platformtype2 && sectionNumber_ > 10 && rand()%2 == 0)
    817             {
    818                 matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    819                     matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    820             }
    821 
    822             // Delete some planned platforms or replace them with fake platforms
    823             if (sectionNumber_ > 5)
    824             {
    825                 if (rand()%2 == 0)
    826                 {
    827                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    828                 }
    829                 else
    830                 {
    831                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
    832                 }
    833             }
    834             else if (sectionNumber_ > 10)
    835             {
    836                 if (rand()%2 == 0)
    837                 {
    838                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    839                 }
    840                 else
    841                 {
    842                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
    843                 }
    844                 if (rand()%2 == 0)
    845                 {
    846                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    847                 }
    848                 else
    849                 {
    850                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
    851                 }
    852             }
    853             else if (sectionNumber_ > 15)
    854             {
    855                 if (rand()%2 == 0)
    856                 {
    857                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    858                 }
    859                 else
    860                 {
    861                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
    862                 }
    863                 if (rand()%2 == 0)
    864                 {
    865                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    866                 }
    867                 else
    868                 {
    869                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
    870                 }
    871                 if (rand()%2 == 0)
    872                 {
    873                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
    874                 }
    875                 else
    876                 {
    877                         matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
    878                 }
    879             }
    880 
    881             std::vector<JumpPlatform*> platformList;
    882 
    883             for (int i = 0; i < numI; ++ i)
    884             {
    885                 for (int j = 0; j < numJ; ++ j)
    886                 {
    887                     if (matrix[i][j].done == false)
    888                     {
    889                         float xPosition = 0.0;
    890                         float zPosition = 0.0;
    891                                 float leftBoundary = 0.0;
    892                                 float rightBoundary = 0.0;
    893                                 float lowerBoundary = 0.0;
    894                                 float upperBoundary = 0.0;
    895                                 float xVelocity = 0.0;
    896                                 float zVelocity = 0.0;
    897 
    898                         switch(matrix[i][j].type)
    899                                     {
    900                                     case PLATFORM_EMPTY:
    901                                             matrix[i][j].done = true;
    902                                             break;
    903                                     case PLATFORM_STATIC:
    904                                                 xPosition = randomXPosition(numJ, j);
    905                                                 zPosition = sectionBegin + i*sectionLength/numI;
    906                                                 platformList.push_back(addPlatformStatic(xPosition, zPosition));
    907                                                 matrix[i][j].done = true;
    908                                         break;
    909                                     case PLATFORM_FAKE:
    910                                                 xPosition = randomXPosition(numJ, j);
    911                                                 zPosition = sectionBegin + i*sectionLength/numI;
    912                                                 platformList.push_back(addPlatformFake(xPosition, zPosition));
    913                                             matrix[i][j].done = true;
    914                                         break;
    915                                     case PLATFORM_TIMER:
    916                                                 xPosition = randomXPosition(numJ, j);
    917                                                 zPosition = sectionBegin + i*sectionLength/numI;
    918                                                 platformList.push_back(addPlatformTimer(xPosition, zPosition, 12.0, 1.5));
    919                                             matrix[i][j].done = true;
    920                                         break;
    921                                     case PLATFORM_DISAPPEAR:
    922                                                 xPosition = randomXPosition(numJ, j);
    923                                                 zPosition = sectionBegin + i*sectionLength/numI;
    924                                                 platformList.push_back(addPlatformDisappear(xPosition, zPosition));
    925                                             matrix[i][j].done = true;
    926                                         break;
    927                                     case PLATFORM_HMOVE:
    928                                         xVelocity = randomSpeed();
    929                                             if (j <= numJ-3 && matrix[i][j+1].type == PLATFORM_HMOVE && matrix[i][j+2].type == PLATFORM_HMOVE && rand()%2 == 0)
    930                                             {
    931                                                 leftBoundary = randomXPositionLeft(numJ, j);
    932                                                 rightBoundary = randomXPositionRight(numJ, j+2);
    933                                                 xPosition = randomPosition(leftBoundary, rightBoundary);
    934                                                         zPosition = sectionBegin + i*sectionLength/numI;
    935                                                         platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
    936                                                 matrix[i][j].done = true;
    937                                                 matrix[i][j+1].done = true;
    938                                                 matrix[i][j+2].done = true;
    939                                             }
    940                                             else if (j <= numJ-2 && matrix[i][j+1].type == PLATFORM_HMOVE && rand()%2 == 0)
    941                                             {
    942                                                 leftBoundary = randomXPositionLeft(numJ, j);
    943                                                 rightBoundary = randomXPositionRight(numJ, j+1);
    944                                                 xPosition = randomPosition(leftBoundary, rightBoundary);
    945                                                         zPosition = sectionBegin + i*sectionLength/numI;
    946                                                         platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
    947                                                 matrix[i][j].done = true;
    948                                                 matrix[i][j+1].done = true;
    949                                             }
    950                                             else
    951                                             {
    952                                                 leftBoundary = randomXPositionLeft(numJ, j);
    953                                                 rightBoundary = randomXPositionRight(numJ, j);
    954                                                 xPosition = randomPosition(leftBoundary, rightBoundary);
    955                                                         zPosition = sectionBegin + i*sectionLength/numI;
    956                                                         platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
    957                                                 matrix[i][j].done = true;
    958                                             }
    959                                             break;
    960                                     case PLATFORM_VMOVE:
    961                                         zVelocity = randomSpeed();
    962                                             if (i <= numI-3 && matrix[i+1][j].type == PLATFORM_VMOVE && matrix[i+2][j].type == PLATFORM_VMOVE && rand()%2 == 0)
    963                                             {
    964                                                 lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
    965                                                 upperBoundary = randomZPositionUpper(numI, i+2, sectionBegin, sectionEnd);
    966                                                 zPosition = randomPosition(lowerBoundary, upperBoundary);
    967                                                 xPosition = randomXPosition(numJ, j);
    968                                                 platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
    969                                                 matrix[i][j].done = true;
    970                                                 matrix[i+1][j].done = true;
    971                                                 matrix[i+2][j].done = true;
    972                                             }
    973                                             else if (i <= numI-2 && matrix[i+1][j].type == PLATFORM_VMOVE && rand()%2 == 0)
    974                                             {
    975                                                 lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
    976                                                 upperBoundary = randomZPositionUpper(numI, i+1, sectionBegin, sectionEnd);
    977                                                 zPosition = randomPosition(lowerBoundary, upperBoundary);
    978                                                 xPosition = randomXPosition(numJ, j);
    979                                                 platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
    980                                                 matrix[i][j].done = true;
    981                                                 matrix[i+1][j].done = true;
    982                                             }
    983                                             else
    984                                             {
    985                                                 lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
    986                                                 upperBoundary = randomZPositionUpper(numI, i, sectionBegin, sectionEnd);
    987                                                 zPosition = randomPosition(lowerBoundary, upperBoundary);
    988                                                 xPosition = randomXPosition(numJ, j);
    989                                                 platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
    990                                                 matrix[i][j].done = true;
    991                                             }
    992                                             break;
    993                                     default:
    994                                         //ERROR
    995                                         break;
    996 
    997                         }
    998                     }
    999                 }
    1000             }
    1001 
    1002             //Add items
    1003         int numNewPlatforms = platformList.size();
    1004 
    1005         if (rand()%4 == 0)
    1006         {
    1007                         if (rand()%2 == 0)
    1008                         {
    1009                         switch (itemType)
    1010                                 {
    1011                                 case ITEM_ROCKET:
    1012                                         addRocket(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
    1013                                         break;
    1014                                 case ITEM_PROPELLER:
    1015                                         addPropeller(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
    1016                                         break;
    1017                                 case ITEM_BOOTS:
    1018                                         addBoots(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
    1019                                         break;
    1020                                 case ITEM_SHIELD:
    1021                                         addShield(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
    1022                                         break;
    1023                                 default:
    1024                                         break;
    1025                                 }
    1026                         }
    1027                         else
    1028                         {
    1029                         switch (itemType)
    1030                                 {
    1031                                 case ITEM_ROCKET:
    1032                                         addRocket(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
    1033                                         break;
    1034                                 case ITEM_PROPELLER:
    1035                                         addPropeller(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
    1036                                         break;
    1037                                 case ITEM_BOOTS:
    1038                                         addBoots(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
    1039                                         break;
    1040                                 case ITEM_SHIELD:
    1041                                         addShield(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
    1042                                         break;
    1043                                 default:
    1044                                         break;
    1045                                 }
    1046                         }
    1047         }
    1048         else
    1049         {
    1050                 if (numNewPlatforms > 0)
    1051                 {
    1052                         JumpPlatform* itemPlatform = platformList[rand()%numNewPlatforms];
    1053 
    1054                         switch (itemType)
    1055                         {
    1056                         case ITEM_SPRING:
    1057                                 addSpring(itemPlatform);
    1058                                 break;
    1059                         case ITEM_ROCKET:
    1060                                 addRocket(itemPlatform);
    1061                                 break;
    1062                         case ITEM_PROPELLER:
    1063                                 addPropeller(itemPlatform);
    1064                                 break;
    1065                         case ITEM_BOOTS:
    1066                                 addBoots(itemPlatform);
    1067                                 break;
    1068                         case ITEM_SHIELD:
    1069                                 addShield(itemPlatform);
    1070                                 break;
    1071                         default:
    1072                                 break;
    1073                         }
    1074                 }
    1075         }
     638        for (int i = 0; i < numI; ++i)
     639        {
     640            for (int j = 0; j < numJ; ++j)
     641            {
     642                matrix[i][j].type = PLATFORM_EMPTY;
     643                matrix[i][j].done = false;
     644            }
     645        }
     646        PlatformType platformtype1;
     647        PlatformType platformtype2;
     648        ItemType itemType = ITEM_NOTHING;
     649
     650        if (rand()%2 == 0)
     651        {
     652            itemType = ITEM_SPRING;
     653        }
     654        else if (rand()%2 == 0 && sectionNumber_ > 3)
     655        {
     656            switch(rand()%4)
     657            {
     658            case 0:
     659                itemType = ITEM_PROPELLER;
     660                break;
     661            case 1:
     662                itemType = ITEM_ROCKET;
     663                break;
     664            case 2:
     665                itemType = ITEM_BOOTS;
     666                break;
     667            case 3:
     668                itemType = ITEM_SHIELD;
     669                break;
     670            default:
     671                break;
     672            }
     673        }
     674
     675        switch((sectionNumber_ > 28) ? rand()%29 : rand()%(sectionNumber_+1))
     676        {
     677        case 0:
     678            platformtype1 = PLATFORM_STATIC;
     679            platformtype2 = PLATFORM_STATIC;
     680            break;
     681        case 1:
     682            platformtype1 = PLATFORM_STATIC;
     683            platformtype2 = PLATFORM_STATIC;
     684            break;
     685        case 2:
     686            platformtype1 = PLATFORM_STATIC;
     687            platformtype2 = PLATFORM_HMOVE;
     688            break;
     689        case 3:
     690            platformtype1 = PLATFORM_STATIC;
     691            platformtype2 = PLATFORM_DISAPPEAR;
     692            break;
     693        case 4:
     694            platformtype1 = PLATFORM_STATIC;
     695            platformtype2 = PLATFORM_VMOVE;
     696            break;
     697        case 5:
     698            platformtype1 = PLATFORM_STATIC;
     699            platformtype2 = PLATFORM_TIMER;
     700            break;
     701        case 6:
     702            platformtype1 = PLATFORM_HMOVE;
     703            platformtype2 = PLATFORM_STATIC;
     704            break;
     705        case 7:
     706            platformtype1 = PLATFORM_HMOVE;
     707            platformtype2 = PLATFORM_HMOVE;
     708            break;
     709        case 8:
     710            platformtype1 = PLATFORM_HMOVE;
     711            platformtype2 = PLATFORM_HMOVE;
     712            break;
     713        case 9:
     714            platformtype1 = PLATFORM_HMOVE;
     715            platformtype2 = PLATFORM_DISAPPEAR;
     716            break;
     717        case 10:
     718            platformtype1 = PLATFORM_HMOVE;
     719            platformtype2 = PLATFORM_VMOVE;
     720            break;
     721        case 11:
     722            platformtype1 = PLATFORM_HMOVE;
     723            platformtype2 = PLATFORM_TIMER;
     724            break;
     725        case 12:
     726            platformtype1 = PLATFORM_DISAPPEAR;
     727            platformtype2 = PLATFORM_STATIC;
     728            break;
     729        case 13:
     730            platformtype1 = PLATFORM_DISAPPEAR;
     731            platformtype2 = PLATFORM_HMOVE;
     732            break;
     733        case 14:
     734            platformtype1 = PLATFORM_DISAPPEAR;
     735            platformtype2 = PLATFORM_DISAPPEAR;
     736            break;
     737        case 15:
     738            platformtype1 = PLATFORM_DISAPPEAR;
     739            platformtype2 = PLATFORM_DISAPPEAR;
     740            break;
     741        case 16:
     742            platformtype1 = PLATFORM_DISAPPEAR;
     743            platformtype2 = PLATFORM_VMOVE;
     744            break;
     745        case 17:
     746            platformtype1 = PLATFORM_DISAPPEAR;
     747            platformtype2 = PLATFORM_TIMER;
     748            break;
     749        case 18:
     750            platformtype1 = PLATFORM_VMOVE;
     751            platformtype2 = PLATFORM_STATIC;
     752            break;
     753        case 19:
     754            platformtype1 = PLATFORM_VMOVE;
     755            platformtype2 = PLATFORM_HMOVE;
     756            break;
     757        case 20:
     758            platformtype1 = PLATFORM_VMOVE;
     759            platformtype2 = PLATFORM_DISAPPEAR;
     760            break;
     761        case 21:
     762            platformtype1 = PLATFORM_VMOVE;
     763            platformtype2 = PLATFORM_VMOVE;
     764            break;
     765        case 22:
     766            platformtype1 = PLATFORM_VMOVE;
     767            platformtype2 = PLATFORM_VMOVE;
     768            break;
     769        case 23:
     770            platformtype1 = PLATFORM_VMOVE;
     771            platformtype2 = PLATFORM_TIMER;
     772            break;
     773        case 24:
     774            platformtype1 = PLATFORM_TIMER;
     775            platformtype2 = PLATFORM_STATIC;
     776            break;
     777        case 25:
     778            platformtype1 = PLATFORM_TIMER;
     779            platformtype2 = PLATFORM_HMOVE;
     780            break;
     781        case 26:
     782            platformtype1 = PLATFORM_TIMER;
     783            platformtype2 = PLATFORM_DISAPPEAR;
     784            break;
     785        case 27:
     786            platformtype1 = PLATFORM_TIMER;
     787            platformtype2 = PLATFORM_VMOVE;
     788            break;
     789        case 28:
     790            platformtype1 = PLATFORM_TIMER;
     791            platformtype2 = PLATFORM_TIMER;
     792            break;
     793        default:
     794            platformtype1 = PLATFORM_TIMER;
     795            platformtype2 = PLATFORM_TIMER;
     796            break;
     797        }
     798
     799        // Fill matrix with selected platform types
     800        for (int i = 0; i < numI; ++ i)
     801        {
     802            for (int j = 0; j < numJ; ++ j)
     803            {
     804                if (rand()%3 == 0)
     805                {
     806                    matrix[i][j].type = platformtype1;
     807                }
     808                else
     809                {
     810                    matrix[i][j].type = platformtype2;
     811                }
     812                matrix[i][j].done = false;
     813            }
     814        }
     815
     816        if (platformtype1 == platformtype2 && sectionNumber_ > 10 && rand()%2 == 0)
     817        {
     818            matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     819            matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     820        }
     821
     822        // Delete some planned platforms or replace them with fake platforms
     823        if (sectionNumber_ > 5)
     824        {
     825            if (rand()%2 == 0)
     826            {
     827                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     828            }
     829            else
     830            {
     831                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
     832            }
     833        }
     834        else if (sectionNumber_ > 10)
     835        {
     836            if (rand()%2 == 0)
     837            {
     838                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     839            }
     840            else
     841            {
     842                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
     843            }
     844            if (rand()%2 == 0)
     845            {
     846                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     847            }
     848            else
     849            {
     850                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
     851            }
     852        }
     853        else if (sectionNumber_ > 15)
     854        {
     855            if (rand()%2 == 0)
     856            {
     857                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     858            }
     859            else
     860            {
     861                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
     862            }
     863            if (rand()%2 == 0)
     864            {
     865                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     866            }
     867            else
     868            {
     869                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
     870            }
     871            if (rand()%2 == 0)
     872            {
     873                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
     874            }
     875            else
     876            {
     877                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
     878            }
     879        }
     880
     881        std::vector<JumpPlatform*> platformList;
     882
     883        for (int i = 0; i < numI; ++ i)
     884        {
     885            for (int j = 0; j < numJ; ++ j)
     886            {
     887                if (matrix[i][j].done == false)
     888                {
     889                    float xPosition = 0.0;
     890                    float zPosition = 0.0;
     891                    float leftBoundary = 0.0;
     892                    float rightBoundary = 0.0;
     893                    float lowerBoundary = 0.0;
     894                    float upperBoundary = 0.0;
     895                    float xVelocity = 0.0;
     896                    float zVelocity = 0.0;
     897
     898                    switch(matrix[i][j].type)
     899                    {
     900                    case PLATFORM_EMPTY:
     901                        matrix[i][j].done = true;
     902                        break;
     903                    case PLATFORM_STATIC:
     904                        xPosition = randomXPosition(numJ, j);
     905                        zPosition = sectionBegin + i*sectionLength/numI;
     906                        platformList.push_back(addPlatformStatic(xPosition, zPosition));
     907                        matrix[i][j].done = true;
     908                        break;
     909                    case PLATFORM_FAKE:
     910                        xPosition = randomXPosition(numJ, j);
     911                        zPosition = sectionBegin + i*sectionLength/numI;
     912                        platformList.push_back(addPlatformFake(xPosition, zPosition));
     913                        matrix[i][j].done = true;
     914                        break;
     915                    case PLATFORM_TIMER:
     916                        xPosition = randomXPosition(numJ, j);
     917                        zPosition = sectionBegin + i*sectionLength/numI;
     918                        platformList.push_back(addPlatformTimer(xPosition, zPosition, 12.0, 1.5));
     919                        matrix[i][j].done = true;
     920                        break;
     921                    case PLATFORM_DISAPPEAR:
     922                        xPosition = randomXPosition(numJ, j);
     923                        zPosition = sectionBegin + i*sectionLength/numI;
     924                        platformList.push_back(addPlatformDisappear(xPosition, zPosition));
     925                        matrix[i][j].done = true;
     926                        break;
     927                    case PLATFORM_HMOVE:
     928                        xVelocity = randomSpeed();
     929                        if (j <= numJ-3 && matrix[i][j+1].type == PLATFORM_HMOVE && matrix[i][j+2].type == PLATFORM_HMOVE && rand()%2 == 0)
     930                        {
     931                            leftBoundary = randomXPositionLeft(numJ, j);
     932                            rightBoundary = randomXPositionRight(numJ, j+2);
     933                            xPosition = randomPosition(leftBoundary, rightBoundary);
     934                            zPosition = sectionBegin + i*sectionLength/numI;
     935                            platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
     936                            matrix[i][j].done = true;
     937                            matrix[i][j+1].done = true;
     938                            matrix[i][j+2].done = true;
     939                        }
     940                        else if (j <= numJ-2 && matrix[i][j+1].type == PLATFORM_HMOVE && rand()%2 == 0)
     941                        {
     942                            leftBoundary = randomXPositionLeft(numJ, j);
     943                            rightBoundary = randomXPositionRight(numJ, j+1);
     944                            xPosition = randomPosition(leftBoundary, rightBoundary);
     945                            zPosition = sectionBegin + i*sectionLength/numI;
     946                            platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
     947                            matrix[i][j].done = true;
     948                            matrix[i][j+1].done = true;
     949                        }
     950                        else
     951                        {
     952                            leftBoundary = randomXPositionLeft(numJ, j);
     953                            rightBoundary = randomXPositionRight(numJ, j);
     954                            xPosition = randomPosition(leftBoundary, rightBoundary);
     955                            zPosition = sectionBegin + i*sectionLength/numI;
     956                            platformList.push_back(addPlatformHMove(xPosition, zPosition, leftBoundary, rightBoundary, xVelocity));
     957                            matrix[i][j].done = true;
     958                        }
     959                        break;
     960                    case PLATFORM_VMOVE:
     961                        zVelocity = randomSpeed();
     962                        if (i <= numI-3 && matrix[i+1][j].type == PLATFORM_VMOVE && matrix[i+2][j].type == PLATFORM_VMOVE && rand()%2 == 0)
     963                        {
     964                            lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
     965                            upperBoundary = randomZPositionUpper(numI, i+2, sectionBegin, sectionEnd);
     966                            zPosition = randomPosition(lowerBoundary, upperBoundary);
     967                            xPosition = randomXPosition(numJ, j);
     968                            platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
     969                            matrix[i][j].done = true;
     970                            matrix[i+1][j].done = true;
     971                            matrix[i+2][j].done = true;
     972                        }
     973                        else if (i <= numI-2 && matrix[i+1][j].type == PLATFORM_VMOVE && rand()%2 == 0)
     974                        {
     975                            lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
     976                            upperBoundary = randomZPositionUpper(numI, i+1, sectionBegin, sectionEnd);
     977                            zPosition = randomPosition(lowerBoundary, upperBoundary);
     978                            xPosition = randomXPosition(numJ, j);
     979                            platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
     980                            matrix[i][j].done = true;
     981                            matrix[i+1][j].done = true;
     982                        }
     983                        else
     984                        {
     985                            lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
     986                            upperBoundary = randomZPositionUpper(numI, i, sectionBegin, sectionEnd);
     987                            zPosition = randomPosition(lowerBoundary, upperBoundary);
     988                            xPosition = randomXPosition(numJ, j);
     989                            platformList.push_back(addPlatformVMove(xPosition, zPosition, lowerBoundary, upperBoundary, zVelocity));
     990                            matrix[i][j].done = true;
     991                        }
     992                        break;
     993                    default:
     994                        //ERROR
     995                        break;
     996
     997                    }
     998                }
     999            }
     1000        }
     1001
     1002        //Add items
     1003        int numNewPlatforms = platformList.size();
     1004
     1005        if (rand()%4 == 0)
     1006        {
     1007            if (rand()%2 == 0)
     1008            {
     1009                switch (itemType)
     1010                {
     1011                case ITEM_ROCKET:
     1012                    addRocket(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
     1013                    break;
     1014                case ITEM_PROPELLER:
     1015                    addPropeller(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
     1016                    break;
     1017                case ITEM_BOOTS:
     1018                    addBoots(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
     1019                    break;
     1020                case ITEM_SHIELD:
     1021                    addShield(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
     1022                    break;
     1023                default:
     1024                    break;
     1025                }
     1026            }
     1027            else
     1028            {
     1029                switch (itemType)
     1030                {
     1031                case ITEM_ROCKET:
     1032                    addRocket(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
     1033                    break;
     1034                case ITEM_PROPELLER:
     1035                    addPropeller(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
     1036                    break;
     1037                case ITEM_BOOTS:
     1038                    addBoots(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
     1039                    break;
     1040                case ITEM_SHIELD:
     1041                    addShield(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
     1042                    break;
     1043                default:
     1044                    break;
     1045                }
     1046            }
     1047        }
     1048        else
     1049        {
     1050            if (numNewPlatforms > 0)
     1051            {
     1052                JumpPlatform* itemPlatform = platformList[rand()%numNewPlatforms];
     1053
     1054                switch (itemType)
     1055                {
     1056                case ITEM_SPRING:
     1057                    addSpring(itemPlatform);
     1058                    break;
     1059                case ITEM_ROCKET:
     1060                    addRocket(itemPlatform);
     1061                    break;
     1062                case ITEM_PROPELLER:
     1063                    addPropeller(itemPlatform);
     1064                    break;
     1065                case ITEM_BOOTS:
     1066                    addBoots(itemPlatform);
     1067                    break;
     1068                case ITEM_SHIELD:
     1069                    addShield(itemPlatform);
     1070                    break;
     1071                default:
     1072                    break;
     1073                }
     1074            }
     1075        }
    10761076
    10771077        if (sectionNumber_ >= 5 && rand()%3 == 0)
    10781078        {
    1079             switch(rand()%4)
    1080                 {
     1079            switch(rand()%4)
     1080            {
    10811081            case 0:
    1082                 addEnemy(1, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
    1083                 break;
     1082                addEnemy(1, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
     1083                break;
    10841084            case 1:
    1085                 addEnemy(2, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
    1086                 break;
     1085                addEnemy(2, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
     1086                break;
    10871087            case 2:
    1088                 addEnemy(3, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
    1089                 break;
     1088                addEnemy(3, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
     1089                break;
    10901090            case 3:
    1091                 addEnemy(4, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
    1092                 break;
    1093                 }
    1094         }
    1095                 ++ sectionNumber_;
     1091                addEnemy(4, randomXPosition(), randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/3*2, fieldWidth/3*2, sectionBegin, sectionBegin + sectionLength, randomSpeed(), 0.0);
     1092                break;
     1093            }
     1094        }
     1095        ++ sectionNumber_;
    10961096    }
    10971097
     
    11061106        {
    11071107        case 0:
    1108                         {
    1109                                 int numI = 10;
    1110                                 if (rand()%2 == 0)
    1111                                 {
    1112                                         for (int i = 0; i < numI; ++ i)
    1113                                         {
    1114                                                 addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+i*sectionLength/numI);
    1115                                         }
    1116                                 }
    1117                                 else
    1118                                 {
    1119                                         for (int i = 0; i < numI; ++ i)
    1120                                         {
    1121                                                 addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+(numI-i)*sectionLength/numI);
    1122                                         }
    1123                                 }
    1124                                 break;
    1125                         }
     1108        {
     1109            int numI = 10;
     1110            if (rand()%2 == 0)
     1111            {
     1112                for (int i = 0; i < numI; ++ i)
     1113                {
     1114                    addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+i*sectionLength/numI);
     1115                }
     1116            }
     1117            else
     1118            {
     1119                for (int i = 0; i < numI; ++ i)
     1120                {
     1121                    addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+(numI-i)*sectionLength/numI);
     1122                }
     1123            }
     1124            break;
     1125        }
    11261126        case 1:
    1127                 {
    1128                         int numI = 7;
    1129 
    1130                         addPlatformStatic(0.0, sectionBegin);
    1131                         if (rand()%2 == 0)
    1132                         {
    1133                                 for (int i = 1; i < numI; ++ i)
    1134                                 {
    1135                                         addPlatformStatic((fieldWidth-platformWidth_/2)*i/numI, sectionBegin+i*sectionLength/numI);
    1136                                         addPlatformStatic(-(fieldWidth-platformWidth_/2)*i/numI, sectionBegin+i*sectionLength/numI);
    1137                                 }
    1138                         }
    1139                         else
    1140                         {
    1141                                 for (int i = 1; i < numI; ++ i)
    1142                                 {
    1143                                         addPlatformStatic((fieldWidth-platformWidth_/2)*i/numI, sectionBegin+(numI-i)*sectionLength/numI);
    1144                                         addPlatformStatic(-(fieldWidth-platformWidth_/2)*i/numI, sectionBegin+(numI-i)*sectionLength/numI);
    1145                                 }
    1146                         }
    1147                         break;
    1148                 }
     1127        {
     1128            int numI = 7;
     1129
     1130            addPlatformStatic(0.0, sectionBegin);
     1131            if (rand()%2 == 0)
     1132            {
     1133                for (int i = 1; i < numI; ++ i)
     1134                {
     1135                    addPlatformStatic((fieldWidth-platformWidth_/2)*i/numI, sectionBegin+i*sectionLength/numI);
     1136                    addPlatformStatic(-(fieldWidth-platformWidth_/2)*i/numI, sectionBegin+i*sectionLength/numI);
     1137                }
     1138            }
     1139            else
     1140            {
     1141                for (int i = 1; i < numI; ++ i)
     1142                {
     1143                    addPlatformStatic((fieldWidth-platformWidth_/2)*i/numI, sectionBegin+(numI-i)*sectionLength/numI);
     1144                    addPlatformStatic(-(fieldWidth-platformWidth_/2)*i/numI, sectionBegin+(numI-i)*sectionLength/numI);
     1145                }
     1146            }
     1147            break;
     1148        }
    11491149        case 2:
    1150                         {
    1151                                 int numI = 5;
    1152                                 for (int i = 0; i <= numI; ++ i)
    1153                                 {
    1154                                         addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin);
    1155                                         addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength/5);
    1156                                         addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength*2/5);
    1157                                         addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength*3/5);
    1158                                         addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength*4/5);
    1159                                         addEnemy(4, (2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength/2, -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 0.0, 0.0);
    1160                                 }
    1161                                 break;
    1162                         }
     1150        {
     1151            int numI = 5;
     1152            for (int i = 0; i <= numI; ++ i)
     1153            {
     1154                addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin);
     1155                addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength/5);
     1156                addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength*2/5);
     1157                addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength*3/5);
     1158                addPlatformStatic((2*fieldWidth-platformWidth_)*i/numI-fieldWidth, sectionBegin+sectionLength*4/5);
     1159                addEnemy(4, (2*fieldWidth-platformWidth_)*i/numI-fieldWidth+platformWidth_/2, sectionBegin+sectionLength/2, -fieldWidth, fieldWidth, sectionBegin, sectionBegin + sectionLength, 0.0, 0.0);
     1160            }
     1161            break;
     1162        }
    11631163        case 3:
    1164                         {
    1165                                 addRocket(addPlatformStatic(0.0, sectionBegin));
    1166                                 addEnemy(2, 0.0, sectionBegin+sectionLength/5, 0.0,0.0, 0.0, 0.0, 0.0, 0.0);
    1167                                 break;
    1168                         }
     1164        {
     1165            addRocket(addPlatformStatic(0.0, sectionBegin));
     1166            addEnemy(2, 0.0, sectionBegin+sectionLength/5, 0.0,0.0, 0.0, 0.0, 0.0, 0.0);
     1167            break;
     1168        }
    11691169        case 4:
    1170                         {
    1171                                 addPropeller(addPlatformStatic(0.0, sectionBegin));
    1172                                 addPropeller(addPlatformStatic(-fieldWidth/2, sectionBegin));
    1173                                 addPropeller(addPlatformStatic(fieldWidth/2, sectionBegin));
    1174                                 break;
    1175                         }
     1170        {
     1171            addPropeller(addPlatformStatic(0.0, sectionBegin));
     1172            addPropeller(addPlatformStatic(-fieldWidth/2, sectionBegin));
     1173            addPropeller(addPlatformStatic(fieldWidth/2, sectionBegin));
     1174            break;
     1175        }
    11761176        default:
    1177                 return false;
     1177            return false;
    11781178        }
    11791179        sectionNumber_ +=2;
     
    11851185        float fieldWidth = center_->getFieldDimension().x;
    11861186
    1187         return (float)(rand()%(2*(int)fieldWidth)) - fieldWidth;
     1187        return (float)(rand()%(2*(int)fieldWidth)) - fieldWidth;
    11881188    }
    11891189
    11901190    float Jump::randomXPosition(int totalColumns, int culomn)
    11911191    {
    1192         float fieldWidth = center_->getFieldDimension().x;
    1193 
    1194         float halfWidth = fieldWidth/totalColumns;
    1195         float leftBound = culomn*halfWidth*2-fieldWidth;
    1196         float rightBound = leftBound + 2*halfWidth;
    1197 
    1198         return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
     1192        float fieldWidth = center_->getFieldDimension().x;
     1193
     1194        float halfWidth = fieldWidth/totalColumns;
     1195        float leftBound = culomn*halfWidth*2-fieldWidth;
     1196        float rightBound = leftBound + 2*halfWidth;
     1197
     1198        return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
    11991199    }
    12001200
    12011201    float Jump::randomXPositionLeft(int totalColumns, int culomn)
    12021202    {
    1203         float fieldWidth = center_->getFieldDimension().x;
    1204 
    1205         float halfWidth = fieldWidth/totalColumns;
    1206         float leftBound = culomn*halfWidth*2-fieldWidth;
    1207         float rightBound = leftBound + 2*halfWidth/3;
    1208 
    1209         return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
     1203        float fieldWidth = center_->getFieldDimension().x;
     1204
     1205        float halfWidth = fieldWidth/totalColumns;
     1206        float leftBound = culomn*halfWidth*2-fieldWidth;
     1207        float rightBound = leftBound + 2*halfWidth/3;
     1208
     1209        return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
    12101210    }
    12111211
    12121212    float Jump::randomXPositionRight(int totalColumns, int culomn)
    12131213    {
    1214         float fieldWidth = center_->getFieldDimension().x;
    1215 
    1216         float halfWidth = fieldWidth/totalColumns;
    1217         float rightBound = (culomn+1)*halfWidth*2-fieldWidth;
    1218         float leftBound = rightBound - 2*halfWidth/3;
    1219         return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
     1214        float fieldWidth = center_->getFieldDimension().x;
     1215
     1216        float halfWidth = fieldWidth/totalColumns;
     1217        float rightBound = (culomn+1)*halfWidth*2-fieldWidth;
     1218        float leftBound = rightBound - 2*halfWidth/3;
     1219        return randomPosition(leftBound+platformWidth_/2, rightBound-platformWidth_/2);
    12201220    }
    12211221
    12221222    float Jump::randomZPosition(int totalRows, int row, float sectionBegin, float SectionEnd)
    12231223    {
    1224         float fieldHeight = SectionEnd - sectionBegin;
    1225         float halfHeight = fieldHeight/totalRows;
    1226         float lowerBound = row*halfHeight*2+sectionBegin;
    1227         float upperBound = lowerBound + 2*halfHeight;
    1228 
    1229         return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
     1224        float fieldHeight = SectionEnd - sectionBegin;
     1225        float halfHeight = fieldHeight/totalRows;
     1226        float lowerBound = row*halfHeight*2+sectionBegin;
     1227        float upperBound = lowerBound + 2*halfHeight;
     1228
     1229        return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
    12301230    }
    12311231
    12321232    float Jump::randomZPositionLower(int totalRows, int row, float sectionBegin, float SectionEnd)
    12331233    {
    1234         float fieldHeight = SectionEnd - sectionBegin;
    1235         float rowHeight = fieldHeight/totalRows;
    1236         float lowerBound = row*rowHeight+sectionBegin;
    1237         float upperBound = lowerBound + rowHeight/3;
    1238 
    1239         return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
     1234        float fieldHeight = SectionEnd - sectionBegin;
     1235        float rowHeight = fieldHeight/totalRows;
     1236        float lowerBound = row*rowHeight+sectionBegin;
     1237        float upperBound = lowerBound + rowHeight/3;
     1238
     1239        return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
    12401240    }
    12411241
    12421242    float Jump::randomZPositionUpper(int totalRows, int row, float sectionBegin, float SectionEnd)
    12431243    {
    1244         float fieldHeight = SectionEnd - sectionBegin;
    1245         float rowHeight = fieldHeight/totalRows;
    1246         float lowerBound = (row+1)*rowHeight+sectionBegin;
    1247         float upperBound = lowerBound - rowHeight/3;
    1248 
    1249         return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
     1244        float fieldHeight = SectionEnd - sectionBegin;
     1245        float rowHeight = fieldHeight/totalRows;
     1246        float lowerBound = (row+1)*rowHeight+sectionBegin;
     1247        float upperBound = lowerBound - rowHeight/3;
     1248
     1249        return randomPosition(lowerBound+platformHeight_/2, upperBound-platformHeight_/2);
    12501250    }
    12511251
    12521252    float Jump::randomPosition(float lowerBoundary, float upperBoundary)
    12531253    {
    1254         if (lowerBoundary >= upperBoundary)
    1255         {
    1256                 return (lowerBoundary + upperBoundary)/2;
    1257         }
    1258 
    1259         return (float)(rand()%(int)(100*(upperBoundary - lowerBoundary)))/100 + lowerBoundary;
     1254        if (lowerBoundary >= upperBoundary)
     1255        {
     1256            return (lowerBoundary + upperBoundary)/2;
     1257        }
     1258
     1259        return (float)(rand()%(int)(100*(upperBoundary - lowerBoundary)))/100 + lowerBoundary;
    12601260    }
    12611261
    12621262    float Jump::randomSpeed()
    12631263    {
    1264         float platformSpeed = center_->getPlatformSpeed();
    1265         return randomPosition(0.5*platformSpeed, 1.5*platformSpeed);
     1264        float platformSpeed = center_->getPlatformSpeed();
     1265        return randomPosition(0.5*platformSpeed, 1.5*platformSpeed);
    12661266    }
    12671267
Note: See TracChangeset for help on using the changeset viewer.