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 }
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; }