void CMazeGameEngine::evolveWorld()
	{
		if (_isNextLevelRequested)
		{
			startNextLevel();
		}
		if (menu.isMenuShowing() || !_worldModel.isWorldInitialized())
		{ //world is not initialized yet, or menu is showing - no need to evolve.
			return;
		}
		float deltaT = getTimeFromPreviousFrame();
		if (deltaT > 0.3) //This probably happened because of a spike drop in framerate, ignore this long frame time.
		{ //if it happend due to the FPS droping to 3, the game is not playable anyway...
			LOG(DEBUG) << "Skipped frame, it was too late";
			return;
		}
		if (deltaT < _minTimeBetweenFrames) //I want max 60 FPS
		{
			_device->sleep((_minTimeBetweenFrames - deltaT) * 1000.0f);
			deltaT = getTimeFromPreviousFrame();
		}
		_worldModel.evolve(deltaT);
		for (auto & playerView : _playerViews)
			playerView.update(0);
		_camera.evolve(deltaT);
		if (_worldModel.isMazeGameWon() && !isWinScreenShowing)
		{
			showWinScreen();
		}
	}
示例#2
0
void Game::prepareNextLevel()
{
    GameState::getInstance()->setLevel(GameState::getInstance()->getLevel() + 1);

    if (GameState::getInstance()->getLevel() > GameState::getInstance()->getNumberOfLevels())
    {
        setState(END);
        return;
    }

    if (GameState::getInstance()->isLevelBonusLevel(GameState::getInstance()->getLevel()))
    {
        setState(BONUS_LEVEL_OR_SHOP);
    }
    else
    {
        startNextLevel();
    }
}
示例#3
0
void GameDisplay::timerTracking()
{
    //SUN DISAPPEARING TIMERS
    for(int i=0;i<sunVector.size();i++)
    {
        if(sunVector[i]->timeEllapsed()>7500&&sunVector[i]->getX()!=-1)
        {
            scene()->removeItem(sunVector[i]);
            sunVector[i]->setClicked();
        }
    }
    //CHECKS IF LEVEL IS COMPLETE
    if(zombieVector.size()==levelSequenceNumber[getCurrentLevel()-1].size())
    {
        for(int i=0;i<zombieVector.size();i++)
        {
            if(zombieVector[i]->getLife()<=0)
            {
                levelComplete=true;
            }
            else
            {
                levelComplete=false;
                break;
            }
         }
    }
    if(levelComplete)//SET THE GAME PARAMETERS FOR NEXT LEVEL
    {
        zombieIndex=0;
        zombiesFinished=true;
        levelComplete=false;
        zombieVector.clear();
        plantVector.clear();
        bulletVector.clear();
        sunVector.clear();
        lawnmowerVector.clear();
        emit startNextLevel();//this signals the next level to start
    }
}
示例#4
0
void Game::logic()
{
	pollMusic();

    switch (mState) 
    {
        case SPLASHSCREEN:
            mSplashScreen->logic();
            if (mSplashScreen->isDrawingDone())
            {
				clear_keybuf();
                setState(MENU);
            }
            break;
        case BONUS_LEVEL_OR_SHOP:
            mLevel->logic();
            if (mOptionalDialog->getState() == OptionalDialog::NONE
                && !mOptionalDialog->isVisible()
                    && !mDialog->isVisible())
            {
                mOptionalDialog->setVisible(true);
            }
            else if (!mDialog->isVisible()
                && mOptionalDialog->getState() == OptionalDialog::SHOP)
            {
                setState(SHOP);
            }
            else if (!mDialog->isVisible()
                && mOptionalDialog->getState() == OptionalDialog::BONUS_LEVEL)
            {
                startNextLevel();
            }
            break;
        case HIGH_SCORE:
        case SHOP:
        case MENU:
			break;
        case LEVEL:
            mLevel->logic();
            if (mLevel->isGameOver())
            {
                setState(HIGH_SCORE);
            }
            else if (mLevel->isLevelComplete())
            {
                std::cout << "LEVEL COMPLETE" << std::endl;
                prepareNextLevel();
            }
            else if (mLevel->isQuit())
            {
                setState(MENU);
            }
            break;
		case END:
			mEnding->logic();

			if (mEnding->isDone())
			{
				setState(HIGH_SCORE);
			}
            break;
        case PAUSE:
            break;
        case EXIT:
            break;
   	    default:
			throw DBSH07_EXCEPTION("Unknown game state.");
   }
   
      mGui->logic();

    if (key[KEY_F10]) 
    {
        setState(EXIT);
    }

    if (key[KEY_P] && !mPauseButtonPressed && mState == PAUSE)
    {
        setState(LEVEL);
    }
    else if (key[KEY_P] && !mPauseButtonPressed && mState == LEVEL)
    {
        setState(PAUSE);
    }

    mPauseButtonPressed = key[KEY_P] != 0;
}