bool LevelMenuScene::init() { if (!Layer::init()) { return false; } page_ = 0; buttonArrowLeft_ = new PButton(new PPoint(1, 1), EArrow_left, 65, 50); buttonArrowRight_ = new PButton(new PPoint(23, 1), EArrow_right, 65, 50); rectangle_ = new PRectangle(0, 0, 2, 2); int offset = 0; for (int i = 0; i <= LAST_PAGE; i++) { offset += 2; for (int j=0; j < 4; j++) { int levelUp = (i * 8) + j; int levelDown = (i * 8) + j + 4; if(levelUp < MAX_LEVEL){ levels_.push_back(createLevel(offset, 11, levelUp)); } if(levelDown < MAX_LEVEL) { levels_.push_back(createLevel(offset, 5, levelDown)); } offset +=6; } } touchListener_ = EventListenerTouchOneByOne::create(); touchListener_->onTouchBegan = CC_CALLBACK_2(LevelMenuScene::TouchBegan,this); getEventDispatcher()->addEventListenerWithFixedPriority(touchListener_, 100); keyboardListener_ = EventListenerKeyboard::create(); keyboardListener_->onKeyReleased = CC_CALLBACK_2(LevelMenuScene::onKeyReleased, this); getEventDispatcher()->addEventListenerWithSceneGraphPriority(keyboardListener_, this); for (auto level: levels_) { this->addChild(level->getTexture(), 1); level->getTexture()->setScale(SCALE); if(!level->getLock()){ this->addChild(level->getLabel(), 2); } } buttonArrowLeft_->getTexture()->setVisible(false); this->addChild(buttonArrowRight_->getTexture(), 1); this->addChild(buttonArrowLeft_->getTexture(), 1); scene_ = Scene::create(); scene_->addChild(this); return true; }
void KJezzball::newGame() { // Check for running game closeGame(); if ( m_state==Idle ) { // untoggles the pause button in case it was toggled m_pauseButton->setChecked(false); // update displays m_game.level = 1; m_game.score = 0; m_levelLCD->display( m_game.level ); m_scoreLCD->display( m_game.score ); statusBar()->clear(); // start new game m_state = Running; createLevel( m_game.level ); startLevel(); } }
void KrecikApp::init() { win.draw(Text(L"Loading...", r.f, 30)); win.display(); loadTextures(); createCar(); createLevel(); Sprite loadwheel(whTex); loadwheel.setPosition(20.0f, 20.0f); //loadwheel.setScale(2.0f, 2.0f); loadwheel.setOrigin(getCenter(loadwheel.getGlobalBounds())); Clock tmp; while(!Keyboard::isKeyPressed(Keyboard::Return)) { Time elapsed = tmp.restart(); win.clear(); win.draw(Text(" Press <Enter> to start...",r.f, 30)); loadwheel.rotate(elapsed.asSeconds() * 400.0f); win.draw(loadwheel); win.display(); } }
//GAME OVER RESTART THE WHOLE GAME void restart(void){ gameState = PLAY; createPlayer(); createLevel(); }
bool EnvironmentHandler::loadContent( ) { if( !m_bitmap.loadFromFile( "../../Resources/levelOne.png" ) ) { return EXIT_FAILURE; } m_iHorizontalBitmapSize = m_bitmap.getSize().x; m_iVerticalBitmapSize = m_bitmap.getSize().y; if(!m_tiles.loadFromFile( "../../Resources/tiles.png" ) ) { return EXIT_FAILURE; } m_floorArray.reserve( m_iHorizontalBitmapSize * m_iVerticalBitmapSize ); bitmapToArray( ); m_sprites.reserve( m_floorArray.size( ) ); createLevel( ); checkWalls( ); if(!m_objectBitmap.loadFromFile( "../../Resources/levelOneObjects.png" ) ) { return EXIT_FAILURE; } m_objects.reserve( m_floorArray.size( ) ); findObjects(); return EXIT_SUCCESS; }
LevelManager::LevelManager(Camera* _camera) { currentState = state::CHILD_START; // activeState = globalState::GLOBAL_LEVEL; // CONTINUE means no level activity yet // IDLE will mean what global::CONTINUE means, its currently in that state and working //activeLevel = levelState::LEVEL_START; defaultCamera = _camera; createLevel("testlevel.tmx", &Window::getHandle(), defaultCamera); }
void MainScene::onLoad() { createLevel(); ps.init(); for(int i=0; i<enemy.size(); i++) enemy[i]->init(); time = 0; dt = 1.0/FPS; }
Level* LevelManager::forwardLevel() { prevLevel = currentLevel; currentLevel = 0; Level* tempLevel = createLevel("testlevelbig.tmx", &Window::getHandle(), defaultCamera); currentLevel = tempLevel; activeLevelState = currentLevel->getState(); tempLevel = 0; delete tempLevel; return currentLevel; }
void loadLevel(char *fName){ //int iSect[5][5]; int i = 0; int j = 0; int c = 25; int scItem; int ch; char line[256]; FILE *fFile; fFile = fopen(fName, "r"); if (fFile != NULL){ while (fgets(line, 256, fFile)){ sscanf(line, "%i", &ch); if ((i < 5 || j < 4) && c > 0){ c--; switch (ch){ case 0: lvlSect[j][i] = 0; break; case 1: lvlSect[j][i] = 1; break; case 2: lvlSect[j][i] = 2; break; case 3: lvlSect[j][i] = 3; break; } if (i < 4){ i++; } else if(j < 4){ j++; i = 0; } } else{ sscanf(line, "%i", &scItem); } } createLevel(scItem); fclose(fFile); } //memcpy(*lvlSect, *iSect, sizeof(iSect)); }
void KJezzball::switchLevel() { m_game.score += m_level.score; // make sure the LCD provides enough digits for the score // (fixes #96841) int numDigits=0; int temp_score = m_game.score; for ( ; temp_score > 0; ++numDigits ) temp_score /= 10; if ( numDigits < 5 ) numDigits = 5; // set numDigits to at least 5, otherwise it does not look well m_scoreLCD->setNumDigits( numDigits ); m_scoreLCD->display( m_game.score ); QString score; score.setNum( m_level.score ); QString level; level.setNum( m_game.level ); QString foo = QString( i18n("You have successfully cleared more than 75% of the board.\n") + i18n("%1 points: 15 points per remaining life\n").arg(m_level.lifes*15) + i18n("%1 points: Bonus\n").arg((m_gameWidget->percent()-75)*2*(m_game.level+5)) + i18n("%1 points: Total score for this level\n").arg(score) + i18n("On to level %1. Remember you get %2 lives this time!")).arg(m_game.level+1).arg(m_game.level+2); KMessageBox::information( this,foo ); // KMessageBox::information( this, i18n("You've completed level %1 with " // "a score of %2.\nGet ready for the next one!").arg(level).arg(score)); m_game.level++; m_levelLCD->display( m_game.level ); createLevel( m_game.level ); startLevel(); }
bool Game::init(int w, int h){ if (SDL_Init(SDL_INIT_EVERYTHING) != 0){ cout << "SDL_Init Error: " << SDL_GetError() << endl; return 1; } if ((window = SDL_CreateWindow("Sumo Game", 50, 50, w, h, SDL_WINDOW_OPENGL)) == nullptr){ cout << "Window Error: " << SDL_GetError() << endl; return 1; } if ((context = SDL_GL_CreateContext(window)) == nullptr){ cout << "GL Context Error: " << SDL_GetError() << endl; return 1; } running = true; gStates = START; glewExperimental = GL_TRUE; glewInit(); p1win = shared_ptr<MenuCube>(new MenuCube(5, 4.5, -6, 1)); p2win = shared_ptr<MenuCube>(new MenuCube(5, 4.5, -6, 2)); menu = shared_ptr<MenuCube>(new MenuCube(5, 4.5, -6, 0)); player = shared_ptr<Player>(new Player(2, 3, 2, 1)); //x offset, height, y/z offset, player number objects.push_back(player); player2 = shared_ptr<Player>(new Player(8, 3, 2, 2)); objects.push_back(player2); createLevel(); camera = Camera::getInstance().getCameraM(); Camera::getInstance().lookAt(Point3(45.0, 0.0, 0.0), Point3(5.0, 5.0, 5.0), Vector3(0.0, 1.0, 0.0)); Camera::getInstance().setCamera(camera * Matrix4::translation(Vector3(-5.0, -4.5, 7.3))); display(); return 0; }
void Scene::createScene() { rootNode = moduleRegistry->getRootNode(); moduleRegistry->registerDynamicsWorld(dynamicsWorld); lastCheckpoint = new btVector3(); moduleRegistry->registerLastCheckpoint(lastCheckpoint); moduleRegistry->registerAllowMovement(&allowMovement); moduleRegistry->registerCameraAngle(&cameraAngle); createLights(); // SKYBOX ! Skybox* skybox = new Skybox(rootNode,"skybox1"); // 2D TEXT FOR DEBUGGING PURPOSE ! text2d = new Text2D(rootNode); moduleRegistry->registerText2D(text2d); // 3D TEXT FOR FUN PURPOSE ! text3d = new Text3D(rootNode); moduleRegistry->registerText3D(text3d); // THE MIGHTY BALL ball = new Ball(osg::Vec3f(0, 0, 50), 7., moduleRegistry); moduleRegistry->getInputManager()->setBall(ball); moduleRegistry->registerBall(ball); ball->setModuleRegistry(moduleRegistry); ballBody = ball->getBody(); createLevel(currentLevel); #ifndef VRJUGGLER moduleRegistry->getSceneView()->setSceneData(rootNode); #endif }
/* *Initializes all data structures required for level */ void initLevel(int level) { createKeywordQueue(); switch(level) { case 0: readLevelSettingsFile("../data/tutorial.txt"); break; case 1: createLevel(); break; default: break; } createLevelPaths(); createTowerGroup(); createActionQueue(); createGame(); createLevelClocks(); createEnemyGroup(); createTowerPos(); initialQueueReader(); createProjectileList(); initialiseParser(); init_abilities(); }
KJezzball::KJezzball() : m_gameWidget( 0 ) { // setup variables m_game.level = 1; m_game.score = 0; m_state = Idle; KConfig *config = kapp->config(); m_backgroundDir = config->readPathEntry( "BackgroundDir" ); m_showBackground = config->readBoolEntry( "ShowBackground", false ); statusBar(); initXMLUI(); m_soundAction -> setChecked((config->readBoolEntry( "PlaySounds", true ))); // create widgets m_view = new QWidget( this, "m_view" ); setCentralWidget( m_view ); m_layout = new QGridLayout( m_view, 1, 3 ); m_layout->setColStretch( 2, 1 ); QVBoxLayout *infoLayout = new QVBoxLayout; m_layout->addLayout( infoLayout, 0, 1 ); QLabel *label = new QLabel( i18n("Level:"), m_view ); infoLayout->addWidget( label ); m_levelLCD = new QLCDNumber( 5, m_view ); infoLayout->addWidget( m_levelLCD ); label = new QLabel( i18n("Score:"), m_view ); infoLayout->addWidget( label ); m_scoreLCD = new QLCDNumber( 5, m_view ); infoLayout->addWidget( m_scoreLCD ); infoLayout->addSpacing( 20 ); label = new QLabel( i18n("Filled area:"), m_view ); infoLayout->addWidget( label ); m_percentLCD = new QLCDNumber( 5, m_view ); infoLayout->addWidget( m_percentLCD ); label = new QLabel( i18n("Lives:"), m_view ); infoLayout->addWidget( label ); m_lifesLCD = new QLCDNumber( 5, m_view ); infoLayout->addWidget( m_lifesLCD ); label = new QLabel( i18n("Time:"), m_view ); infoLayout->addWidget( label ); m_timeLCD = new QLCDNumber( 5, m_view ); infoLayout->addWidget( m_timeLCD ); // create timers m_nextLevelTimer = new QTimer( this, "m_nextLevelTimer" ); connect( m_nextLevelTimer, SIGNAL(timeout()), this, SLOT(switchLevel()) ); m_gameOverTimer = new QTimer( this, "m_gameOverTimer" ); connect( m_gameOverTimer, SIGNAL(timeout()), this, SLOT(gameOverNow()) ); m_timer = new QTimer( this, "m_timer" ); connect( m_timer, SIGNAL(timeout()), this, SLOT(second()) ); // create demo game createLevel( 1 ); statusBar()->message( i18n("Press %1 to start a game!") .arg(m_newAction->shortcut().toString()) ); //m_gameWidget->display( i18n("Press <Space> to start a game!") ); setFocusPolicy(QWidget::StrongFocus); setFocus(); setupGUI(); }
void TutorialLevel::setup(){ INFO("Generating Tutorial Level..."); readFile(); initalizeGrid(); createRenders(); createLevel(); waterSurfaceManager = WaterSurfaceManagerPtr(new WaterSurfaceManager()); addGameObject(waterSurfaceManager); INFO("Removal String so less of make"); INFO("Setting up the cameras for the Test Level..."); CameraPtr cam3(new Camera(glm::vec3(25, 30, 0), glm::vec3(10, 20, 6), glm::vec3(0, 1, 0))); cam3->setProjectionMatrix( glm::perspective(glm::radians(90.0f), (float) Global::ScreenWidth/Global::ScreenHeight, 0.1f, 100.f)); addCamera("CinematicCamera", cam3); setMainCamera("CinematicCamera"); setCullingCamera("CinematicCamera"); CameraPtr cam1(new Camera(glm::vec3(4, 10, -5), glm::vec3(4, 4, -10), glm::vec3(0, 1, 0))); cam1->setProjectionMatrix( glm::perspective(glm::radians(90.0f), (float) Global::ScreenWidth/Global::ScreenHeight, 0.1f, 100.f)); addCamera("Camera1", cam1); CameraPtr cam2(new Camera(glm::vec3(0, 1, 0), glm::vec3(-6, -3, 6), glm::vec3(0, 1, 0))); cam2->setProjectionMatrix( glm::perspective(glm::radians(90.0f), (float) Global::ScreenWidth/Global::ScreenHeight, 0.1f, 100.f)); l1 = LightPtr(new Light(glm::vec3(1), 30.0f, glm::vec3(0, 30, 0))); l1->setPosition(l1->getDirection()); Uniform3DGridPtr<int> typeGrid = getTypeGrid(); gridCenter = glm::vec3((typeGrid->getMaxX() - typeGrid->getMinX())/2.0f, (typeGrid->getMaxY() - typeGrid->getMinY())/2.0f, (typeGrid->getMinZ() - typeGrid->getMaxZ())/2.0f); l1->setViewMatrix(glm::lookAt( l1->getPosition(), gridCenter, glm::vec3(0, 1, 0))); l1->setProjectionMatrix(glm::ortho<float>(-30,30,-30,30,-70,70)); addLight("Sun", l1); INFO("Setting up the player for the Test Level..."); cinematicPlayer = CinematicPlayerPtr(new CinematicPlayer(cam3)); cinematicPlayer->setup(); addGameObject("cinematicPlayer", cinematicPlayer); player = PlayerPtr(new Player(cam1, 2)); player->setup(); addGameObject("player" , player); CollisionManager::addCollisionObjectToList(player); debugPlayer = DebugPlayerPtr(new DebugPlayer(cam2)); debugPlayer->setup(); addGameObject("debugPlayer" , debugPlayer); //Text addCamera("DebugCamera", cam2); sky = ObjectPtr(new Object( LoadManager::getMesh("sphere.obj"), MaterialManager::getMaterial("None"))); sky->applyTexture(LoadManager::getTexture("Sky")); sky->enableTexture(); sky->scale(glm::vec3(-90.0f,-90.0f,-90.0f)); sky->translate(Director::getScene()->getCamera()->getEye()); RenderEngine::getRenderElement("textured")->addObject(sky); ExclamationPtr exclamation = ExclamationPtr(new Exclamation(glm::vec3(30, 26, -48))); exclamation->setup(); addGameObject("exclamation", exclamation); }
void getIntensitySumFromOpenCLImage(OpenCLDevice::pointer device, cl::Image2D image, DataType type, float* sum) { // Get power of two size unsigned int powerOfTwoSize = getPowerOfTwoSize(std::max(image.getImageInfo<CL_IMAGE_WIDTH>(), image.getImageInfo<CL_IMAGE_HEIGHT>())); // Create image levels unsigned int size = powerOfTwoSize; size /= 2; std::vector<cl::Image2D> levels; while(size >= 4) { cl::Image2D level = cl::Image2D(device->getContext(), CL_MEM_READ_WRITE, getOpenCLImageFormat(device, CL_MEM_OBJECT_IMAGE2D, TYPE_FLOAT, 1), size, size); levels.push_back(level); size /= 2; } // Compile OpenCL code std::string buildOptions = ""; switch(type) { case TYPE_FLOAT: buildOptions = "-DTYPE_FLOAT"; break; case TYPE_UINT8: buildOptions = "-DTYPE_UINT8"; break; case TYPE_INT8: buildOptions = "-DTYPE_INT8"; break; case TYPE_UINT16: buildOptions = "-DTYPE_UINT16"; break; case TYPE_INT16: buildOptions = "-DTYPE_INT16"; break; } std::string sourceFilename = std::string(FAST_SOURCE_DIR) + "/ImageSum.cl"; std::string programName = sourceFilename + buildOptions; // Only create program if it doesn't exist for this device from before if(!device->hasProgram(programName)) device->createProgramFromSourceWithName(programName, sourceFilename, buildOptions); cl::Program program = device->getProgram(programName); cl::CommandQueue queue = device->getCommandQueue(); // Fill first level size = powerOfTwoSize/2; cl::Kernel firstLevel(program, "createFirstSumImage2DLevel"); firstLevel.setArg(0, image); firstLevel.setArg(1, levels[0]); queue.enqueueNDRangeKernel( firstLevel, cl::NullRange, cl::NDRange(size,size), cl::NullRange ); // Fill all other levels cl::Kernel createLevel(program, "createSumImage2DLevel"); int i = 0; size /= 2; while(size >= 4) { createLevel.setArg(0, levels[i]); createLevel.setArg(1, levels[i+1]); queue.enqueueNDRangeKernel( createLevel, cl::NullRange, cl::NDRange(size,size), cl::NullRange ); i++; size /= 2; } // Get result from the last level unsigned int nrOfElements = 4*4; unsigned int nrOfComponents = getOpenCLImageFormat(device, CL_MEM_OBJECT_IMAGE2D, TYPE_FLOAT, 1).image_channel_order == CL_RGBA ? 4 : 1; float* result = (float*)allocateDataArray(nrOfElements,TYPE_FLOAT,nrOfComponents); queue.enqueueReadImage(levels[levels.size()-1],CL_TRUE,createOrigoRegion(),createRegion(4,4,1),0,0,result); *sum = getSumFromOpenCLImageResult<float>(result, nrOfElements, nrOfComponents); delete[] result; }
//Rebuild level, reset players position void playerDied(void){ createLevel(); player.reset(startingPosition); }
void TunnelLevel::setup(){ INFO("Generating Test Level..."); readFile(); initalizeGrid(); createRenders(); createLevel(); INFO("Removal String so less of make"); waterSurfaceManager = WaterSurfaceManagerPtr(new WaterSurfaceManager()); addGameObject(waterSurfaceManager); CameraPtr cam3(new Camera(glm::vec3(30, 45, 0), glm::vec3(30, 15, 6), glm::vec3(0, 1, 0))); cam3->setProjectionMatrix( glm::perspective(glm::radians(90.0f), (float) Global::ScreenWidth/Global::ScreenHeight, 0.1f, 100.f)); addCamera("CinematicCamera", cam3); setMainCamera("CinematicCamera"); setCullingCamera("CinematicCamera"); INFO("Setting up the cameras for the Test Level..."); CameraPtr cam1(new Camera(glm::vec3(32.0f, 12.0f, -24.0f), glm::vec3(4, 4, -10), glm::vec3(0, 1, 0))); cam1->setProjectionMatrix( glm::perspective(glm::radians(90.0f), (float) Global::ScreenWidth/Global::ScreenHeight, 0.1f, 100.f)); addCamera("Camera1", cam1); setMainCamera("Camera1"); setCullingCamera("Camera1"); CameraPtr cam2(new Camera(glm::vec3(0, 1, 0), glm::vec3(-6, -3, 6), glm::vec3(0, 1, 0))); cam2->setProjectionMatrix( glm::perspective(glm::radians(90.0f), (float) Global::ScreenWidth/Global::ScreenHeight, 0.1f, 100.f)); l1 = LightPtr(new Light(glm::vec3(1), 30.0f, glm::vec3(32, 30, -20))); l1->setPosition(l1->getDirection()); Uniform3DGridPtr<int> typeGrid = getTypeGrid(); gridCenter = glm::vec3((typeGrid->getMaxX() - typeGrid->getMinX())/2.0f, (typeGrid->getMaxY() - typeGrid->getMinY())/2.0f, (typeGrid->getMinZ() - typeGrid->getMaxZ())/2.0f); l1->setViewMatrix(glm::lookAt( l1->getPosition(), gridCenter, glm::vec3(0, 1, 0))); l1->setProjectionMatrix(glm::ortho<float>(-30,30,-30,30,-70,70)); addLight("Sun", l1); cinematicPlayer = CinematicPlayerPtr(new CinematicPlayer(cam3)); cinematicPlayer->setup(); addGameObject("cinematicPlayer", cinematicPlayer); INFO("Setting up the player for the Test Level..."); player = PlayerPtr(new Player(cam1, 2)); player->setup(); addGameObject("player" , player); CollisionManager::addCollisionObjectToList(player); debugPlayer = DebugPlayerPtr(new DebugPlayer(cam2)); debugPlayer->setup(); addGameObject("debugPlayer" , debugPlayer); addCamera("DebugCamera", cam2); INFO("Creating Switch for the Test Level..."); SwitchPtr s1(new Switch(glm::vec3(0.9f, 0.1f, 0.1f), glm::vec3(33.7f, 11.0f, -27.0f), glm::vec3(0,0,1), -20.0f, 1)); s1->setup(); addGameObject("s1", s1); CollisionManager::addCollisionObjectToGrid(s1); std::list<SolidCubePtr> solidCubes; // INFO("Creating Active Terrain for the Test Level..."); for(int i = 11; i < 36; i+=2) { for(int j = -27; j < -20; j+=2) { SolidCubePtr at1(new SolidCube(glm::vec3(29, i, j))); at1->setup(); RenderEngine::getRenderGrid()->removeObject(at1->getObject()); solidCubes.push_back(at1); } } ActiveTerrainPtr a1(new ActiveTerrain(s1, glm::vec3(), glm::vec3(), 50.0f)); a1->setup(); a1->setCubes(solidCubes); addGameObject("a1", a1); sky = ObjectPtr(new Object( LoadManager::getMesh("sphere.obj"), MaterialManager::getMaterial("None"))); sky->applyTexture(LoadManager::getTexture("Sky")); sky->enableTexture(); sky->scale(glm::vec3(-50.0f,-50.0f,-50.0f)); sky->translate(Director::getScene()->getCamera()->getEye()); RenderEngine::getRenderElement("textured")->addObject(sky); ExclamationPtr exclamation = ExclamationPtr(new Exclamation(glm::vec3(60, 5, -23))); exclamation->setup(); addGameObject("exclamation", exclamation); PTR_CAST(SolidCube, (*grid)(7, 20, 11))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(7, 20, 12))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(7, 20, 11))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); PTR_CAST(SolidCube, (*grid)(7, 20, 12))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); shearRegion(8, 10, 21, 21, 11, 12, 1, 0, 0.0f); shearRegion(11, 13, 20, 20, 11, 12, 1, 0, 0.5f); PTR_CAST(SolidCube, (*grid)(16, 12, 0))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(17, 12, 0))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(16, 12, 0))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); PTR_CAST(SolidCube, (*grid)(17, 12, 0))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); shearRegion(16, 17, 13, 13, 1, 4, 0, 1, 0.0f); shearRegion(16, 17, 12, 12, 5, 8, 0, 1, 0.5f); PTR_CAST(SolidCube, (*grid)(16, 12, 23))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(17, 12, 23))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(16, 12, 23))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); PTR_CAST(SolidCube, (*grid)(17, 12, 23))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); shearRegion(16, 17, 13, 13, 19, 22, 0, -1, 0.0f); shearRegion(16, 17, 12, 12, 15, 18, 0, -1, 0.5f); PTR_CAST(SolidCube, (*grid)(26, 12, 15))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(26, 12, 8))->getObject()->applyTextureIndex(LoadManager::getTexture("DrainTexture"), 0); PTR_CAST(SolidCube, (*grid)(26, 12, 15))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); PTR_CAST(SolidCube, (*grid)(26, 12, 8))->getObject()->applyNormalMapIndex(LoadManager::getTexture("RegularNormalMap"), 0); }
void Scene::run(double elapsed) { ball->update(elapsed); text2d->update(elapsed); for(int i = 0;i<numPlatforms;i++) { platforms[i]->update(elapsed); } if(elapsed>10000000) elapsed = 0.016; dynamicsWorld->stepSimulation(elapsed,10,1./120.); btVector3 ballPos = ball->getBody()->getWorldTransform().getOrigin(); std::stringstream out; out << "ball pos : " << ballPos.x(); *(moduleRegistry->getText2D()->print()) = out.str(); if(ballPos.z() < -100) { text3d->setColor(osg::Vec4(1, 0, 0, 1)); text3d->setText("Perdu !"); if(time_elapsed_lost < 2) { time_elapsed_lost += elapsed; text3d->setPosition(textOffset-osg::Vec3f(0., 0., time_elapsed_lost*20)); } else { text3d->setText(""); resetLevel(); createLevel(currentLevel); setBallPos(*lastCheckpoint); time_elapsed_lost = 0; cameraAngle = 0; } } else { osg::Matrix cameraMatrix; //cameraMatrix.makeLookAt(Utils::asOsgVec3(ballPos) + osg::Vec3f(-15*cos(cameraAngle), 15*sin(cameraAngle), 10), Utils::asOsgVec3(ballPos), osg::Vec3f(0, 0, 1)); cameraMatrix.makeLookAt(Utils::asOsgVec3(ballPos) + osg::Vec3f(-20*cos(cameraAngle), 20*sin(cameraAngle), 10), Utils::asOsgVec3(ballPos) + osg::Vec3f(0, 0, 10), osg::Vec3f(0, 0, 1)); rootNode->setMatrix(cameraMatrix); } if(!allowMovement) { time_elapsed_begin += elapsed; text3d->setPosition(textOffset-osg::Vec3f(0, 0., time_elapsed_begin*20)); if(time_elapsed_begin > 2) { allowMovement = true; time_elapsed_begin = 0; text3d->setText(""); } } if(moduleRegistry->playerReachedEnd) { time_elapsed_end_level += elapsed; if(currentLevel == MAX_LEVEL) { time_elapsed_end_game += elapsed; if(!hasStartedEndText) { text3d->setText("THE END !"); text3d->setColor(osg::Vec4d(0, 0, 1, 1)); text3d->setPosition(textOffset); hasStartedEndText = true; } text3d->setPosition(textOffset-osg::Vec3f(0, 0., time_elapsed_end_game*20)); if(time_elapsed_end_game > 2) { text3d->setText(""); exit(0); } } else { if(!hasStartedEndText) { std::stringstream out; out << currentLevel; text3d->setText("You reached the end of level " + out.str() + " !"); text3d->setColor(osg::Vec4d(0, 1, 1, 1)); text3d->setPosition(textOffset); hasStartedEndText = true; } text3d->setPosition(textOffset-osg::Vec3f(0, 0., time_elapsed_end_level*20)); if(time_elapsed_end_level > 2) { moduleRegistry->playerReachedEnd = false; setBallPos(btVector3(0, 0, 50)); cameraAngle = 0; resetLevel(); createLevel(++currentLevel); } } } }
Scene* Level::createSceneWithMap(std::string mapPath){ auto scene = Level::createScene(); auto level = (Level*)(scene->getChildByTag(levelTag)); level->createLevel(mapPath); return scene; }