Example #1
0
void Game::action(const gcn::ActionEvent& actionEvent)
{
    if (actionEvent.getSource() == mStartButton)
    {
        GameState::getInstance()->reset();
        prepareNextLevel();
    }
    else if (actionEvent.getSource() == mHighScoreButton)
    {
        setState(HIGH_SCORE);
    }
    else if (actionEvent.getSource() == mCreditsButton)
    {
        mMainMenuContainer->setVisible(false);
        mCreditsContainer->setVisible(true);
    }
    else if (actionEvent.getSource() == mExitButton)
    {
        setState(EXIT);
    }
    else if (actionEvent.getSource() == mShop)
    {
        prepareNextLevel();
    }
    else if (actionEvent.getSource() == mOptionalDialog)
    {
        if (mOptionalDialog->getState() == OptionalDialog::BONUS_LEVEL)
        {
            mOptionalDialog->setVisible(false);
			mDialog->setText("B BAM BAM: I think I'll try my luck in a bonus level!");
            mDialog->setVisible(true);
        }
        else if (mOptionalDialog->getState() == OptionalDialog::SHOP)
        {
            mOptionalDialog->setVisible(false);
			mDialog->setText("B BAM BAM: I think I'll head for the shop!");
            mDialog->setVisible(true);
        }
    }
}
void IsoSurfacePolygonizer::polygonize(const Point3D &start
                                      ,double         cellSize
                                      ,const Cube3D  &boundingBox
                                      ,bool           tetrahedralMode
                                      ,bool           tetraOptimize4
                                      ,bool           adaptiveCellSize
                                      ) {

  const double startTime = getThreadTime();

  m_cellSize         = cellSize;
  m_boundingBox      = boundingBox;
  m_delta            = cellSize/(double)(RES*RES);
  m_tetrahedralMode  = tetrahedralMode;
  m_tetraOptimize4   = tetraOptimize4;
  m_adaptiveCellSize = adaptiveCellSize;

  m_statistics.clear();
  resetTables();

#ifdef _DEBUG
  _standardRandomGenerator->setSeed(87);
#else
  randomize();
#endif // _DEBUG

  m_start = start;
  for(int i = 0; i < 10; i++) {
    m_start = findStartPoint(m_start);
    if(putInitialCube()) {
      break;
    }
  }

  m_vertexArray.setCapacity( HASHSIZE);
  m_cubesDoneSet.setCapacity(HASHSIZE);
  m_edgeMap.setCapacity(     HASHSIZE);
  m_currentLevel = 0;
  while(hasActiveCubes()) {
    while(hasActiveCubes()) { // process active cubes until none left
      const StackedCube cube = getActiveCube();
#ifdef DEBUG_POLYGONIZER
      m_eval.markCurrentCube(cube);
#endif // DEBUG_POLYGONIZER
      const bool done = addSurfaceVertices(cube);

      if(cube.getLevel() == 0) {
        // test six face directions, maybe add to stack:
        testFace(cube.m_key.i-1 , cube.m_key.j   , cube.m_key.k   , cube, LFACE, LBN, LBF, LTN, LTF);
        testFace(cube.m_key.i+1 , cube.m_key.j   , cube.m_key.k   , cube, RFACE, RBN, RBF, RTN, RTF);
        testFace(cube.m_key.i   , cube.m_key.j-1 , cube.m_key.k   , cube, BFACE, LBN, LBF, RBN, RBF);
        testFace(cube.m_key.i   , cube.m_key.j+1 , cube.m_key.k   , cube, TFACE, LTN, LTF, RTN, RTF);
        testFace(cube.m_key.i   , cube.m_key.j   , cube.m_key.k-1 , cube, NFACE, LBN, LTN, RBN, RTN);
        testFace(cube.m_key.i   , cube.m_key.j   , cube.m_key.k+1 , cube, FFACE, LBF, LTF, RBF, RTF);
      }
      if(!done) {
        splitCube(cube);
      }
    }
    m_faceCount[m_currentLevel] = (UINT)m_faceArray.size();
    if(m_currentLevel>0) m_faceCount[m_currentLevel] -= m_faceCount[m_currentLevel-1];
    prepareNextLevel();
    m_currentLevel++;
  }
  saveStatistics(startTime);
  flushFaceArray();

#ifdef  DUMP_STATISTICS
  debugLog(_T("%s\n"), m_statistics.toString().cstr());
#endif
#ifdef DUMP_CORNERMAP
  dumpCornerMap();
#endif
#ifdef DUMP_EDGEMAP
  dumpEdgeMap();
#endif
#ifdef DUMP_VERTEXARRAY
  dumpVertexArray();
#endif
#ifdef DUMP_FACEARRAY
  dumpFaceArray();
#endif
}
Example #3
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;
}