void LevelPlaySelect::checkMouse(ImageManager &imageManager, SDL_Renderer &renderer){ int x,y; //Get the current mouse location. SDL_GetMouseState(&x,&y); //Check if we should replay the record. if(selectedNumber!=NULL){ SDL_Rect mouse={x,y,0,0}; if(!bestTimeFilePath.empty()){ SDL_Rect box={SCREEN_WIDTH-420,SCREEN_HEIGHT-130,372,32}; if(checkCollision(box,mouse)){ Game::recordFile=bestTimeFilePath; levels->setCurrentLevel(selectedNumber->getNumber()); setNextState(STATE_GAME); return; } } if(!bestRecordingFilePath.empty()){ SDL_Rect box={SCREEN_WIDTH-420,SCREEN_HEIGHT-98,372,32}; if(checkCollision(box,mouse)){ Game::recordFile=bestRecordingFilePath; levels->setCurrentLevel(selectedNumber->getNumber()); setNextState(STATE_GAME); return; } } } //Call the base method from the super class. LevelSelect::checkMouse(imageManager, renderer); }
void StateDistractedMath::update() { // Hier alle actieve shit if (mathstate == 5) { number = rand()%10; number2 = (rand()%9 + 1); number2 = rand()%40; if (teller.getScaledTicks() == 3) { input->resetKeys(); teller.start(); mathstate = 0; number = rand()%10; if (oper == 0) { number2 = rand()%((5 + variables[2].getInt())*2); number3 = (number2 - number); } if (oper == 1) { number2 = (rand()%(int)((3 + variables[2].getInt())*0.5f)) + 1; // number3 = number2 * number; } } } if(teller.getScaledTicks() > (8 - round)) { if (mathstate == 0 ) { mathstate = 3; teller.start(); round = 4; } else { variables[0].setInt(0); //SDL_EnableUNICODE(tv); setNextState(STATE_MAIN); } } if(hasWon) { variables[0].setInt(1); //SDL_EnableUNICODE(tv); setNextState(STATE_MAIN); } }
void StateHeader::unlimitedUpdate() { // Are we in the end game? if ( fail && done) { variables[0].setInt(0); setNextState( STATE_MAIN); } // Done it! if ( count == 0) { variables[0].setInt(1); setNextState( STATE_MAIN); } }
void LevelFinishedMenu::logic() { //sprawdzam czy okno nie zosta�o zamkni�te if (!window->isOpen()) { setNextState(GAME_STATE_EXIT); } //aktualizuj� tekstury przycisk�w for (unsigned int i = 0; i < interactiveElements.size(); i++) { if (i == currentOption) { //to jest aktywny przycisk interactiveElements[i].setColor(sf::Color(255, 255, 255)); } else { //to nie jest aktywny przycisk interactiveElements[i].setColor(sf::Color(96, 96, 96)); } } //przesuwam map� w d�� if (secondBackgroundPosition.y == 0) firstBackgroundPosition.y = -1600.0; if (firstBackgroundPosition.y == 0) secondBackgroundPosition.y = -1600.0; firstBackground.setPosition(firstBackgroundPosition); firstBackgroundPosition.y = firstBackgroundPosition.y + 1.0f; secondBackground.setPosition(secondBackgroundPosition); secondBackgroundPosition.y = secondBackgroundPosition.y + 1.0f; }
void CMapQMAPExport::slotStart() { if(!states.isEmpty() || !state.isNull()) return; pushExport->setEnabled(false); pushCancel->setText(tr("Cancel")); textBrowser->clear(); tainted = false; if(mapsel.subtype == IMapSelection::eGDAL) { startExportGDAL(); } else if(mapsel.subtype == IMapSelection::eTMS || mapsel.subtype == IMapSelection::eWMS) { startExportStreaming(); } else { stdErr(tr("Unknown map format."), true); } totalNumberOfStates = states.count(); // start the statemachine setNextState(); }
void LevelFinishedMenu::handleEvents() { sf::Event event; while (window->pollEvent(event)) { if (event.type == sf::Event::Closed) { window->close(); } else if (event.type == sf::Event::KeyPressed) { if (event.key.code == sf::Keyboard::Down) { if (currentOption < 2) { currentOption++; } } else if (event.key.code == sf::Keyboard::Up) { if (currentOption > 0) { currentOption--; } } else if (event.key.code == sf::Keyboard::Return) { switch (currentOption) { case 0: //NEXT nextLevel++; setNextState(GAME_STATE_GAME); break; case 1: //MAIN MENU setNextState(GAME_STATE_MAIN_MENU); break; case 2: //EXIT setNextState(GAME_STATE_EXIT); break; } } } } }
CCMWSConnection::CCMWSConnection() { registerState(CCMWSConnection::csHello, new CStateCreator<CCMWCHelloState, CCMWSConnection>(this)); registerState(CCMWSConnection::csMain, new CStateCreator<CCMWCMainState, CCMWSConnection>(this)); setNextState(CCMWSConnection::csHello); switchStates(); };
void LevelPlaySelect::selectNumber(ImageManager& imageManager, SDL_Renderer& renderer, unsigned int number,bool selected){ if(selected){ levels->setCurrentLevel(number); setNextState(STATE_GAME); }else{ displayLevelInfo(imageManager, renderer,number); } }
void Options::handleEvents() { if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE) setNextState(STATE_EXIT); back->handleEvents(); exit->handleEvents(); }
void StateTitle::update() { EFFECTSYSTEM->update(); if(m_IsEnd && m_ThunderAlpha != 255) { m_ThunderAlpha += 75; if(m_mscAmbient.getVolume() != 0) m_mscAmbient.setVolume(m_mscAmbient.getVolume() - 75); if(m_ThunderAlpha > 255) m_ThunderAlpha = 255; m_rctThunder.setAlpha(m_ThunderAlpha); } if(EFFECTSYSTEM->getFadeAlpha() == 255 && m_IsEnd) setNextState(STATE_STORY); if(m_CurrentScreen != 2) { if(EFFECTSYSTEM->getFadeAlpha() == 0) m_Counter +=1; if(m_Counter >= 64) { if(m_Counter == 64) EFFECTSYSTEM->fadeOut(8); if(EFFECTSYSTEM->getFadeAlpha() == 255) { m_CurrentScreen += 1; //SOUNDSYSTEM->playSound(THUNDER2); EFFECTSYSTEM->fadeIn(8); } m_Counter +=1; if(EFFECTSYSTEM->getFadeAlpha() == 0 && EFFECTSYSTEM->getFadeDirection() == -1) m_Counter = 0; } if(m_Counter == 0 && m_CurrentScreen == 0) { //SOUNDSYSTEM->playSound(THUNDER1); } } if(m_CurrentScreen == 2) { if(!EFFECTSYSTEM->isRaining()) { m_mscTitle.play(); EFFECTSYSTEM->setRain(true); } m_bmpPressStart.setAlpha(m_bmpPressStart.getAlpha() + m_FadeDir); if(m_bmpPressStart.getAlpha() == 0 || m_bmpPressStart.getAlpha() == 255) m_FadeDir *= -1; } if(m_mscAmbient.getVolume() != 100 && !m_IsEnd) m_mscAmbient.setVolume(m_mscAmbient.getVolume() + 2); }
void StateStory::update() { EFFECTSYSTEM->update(); if(m_Counter == 0) EFFECTSYSTEM->fadeIn(8); if(m_Counter != -1) m_Counter -= 1; if(EFFECTSYSTEM->getFadeAlpha() == 255 && m_IsEnd) setNextState(STATE_LEVEL); }
void JM_GameOverState::activateButton(JM_GUIElementTypes type) { if(type != ELEMENTTYPE_NULL){ switch(type){ case BUTTONELEMENTTYPE_QUIT: setNextState(STATE_MAINMENU); break; default: break; } } }
MainMenu::MainMenu( World * worldObject ) { cout << "Main Menu instansiated . . .\n\n"; setNextState (Screen_GAME); setDone(true); //object setup this->worldObject = worldObject; // world object }
//metody wirtualne dziedziczone od GameState //czyli MainLoop void LevelFinishedMenu::handleEvents() { sf::Event event; while (window->pollEvent(event)) { if (event.type == sf::Event::Closed) { window->close(); } if (event.type == sf::Event::KeyPressed) { if (event.key.code == sf::Keyboard::Return) { switch (actualOption) { case 0: //nastêpny poziom nextLevel++; setNextState(GAME_STATE_GAME); break; case 1: //powtórzenie poziomu setNextState(GAME_STATE_GAME); break; case 2: //do menu setNextState(GAME_STATE_MAIN_MENU); break; } } else if (event.key.code == sf::Keyboard::Down) //naciœniêto klawisz w dó³ { if (actualOption < 2) actualOption++; } else if (event.key.code == sf::Keyboard::Up) //naciœniêto klawisz do góry { if (actualOption > 0) actualOption--; } } } }
void LevelFinishedMenu::logic() { //sprawdzam czy okno nie zosta³o zamkniête if (!window->isOpen()) { setNextState(GAME_STATE_EXIT); } //uaktualniam pozycjê celownika viewFinder.setPosition(sf::Vector2f(interactiveElements[actualOption].getPosition().x - 5, interactiveElements[actualOption].getPosition().y - 5)); }
void StateMachine::update(float dt) { if (m_nextState) { setNextState(); } if (m_currentState) { m_currentState->onExcute(dt); } }
void LevelPlaySelect::GUIEventCallback_OnEvent(ImageManager& imageManager, SDL_Renderer& renderer, std::string name,GUIObject* obj,int eventType){ //Let the level select handle his GUI events. LevelSelect::GUIEventCallback_OnEvent(imageManager,renderer,name,obj,eventType); //Check for the play button. if(name=="cmdPlay"){ if(selectedNumber!=NULL){ levels->setCurrentLevel(selectedNumber->getNumber()); setNextState(STATE_GAME); } } }
bool Options::clickHandler() { enum MenuValues { GFX, CONTROLS, AUDIO, BACK, }; if(InputManager::pressedWithoutRepeat(KEY_SPACE) || InputManager::pressedWithoutRepeat(KEY_ENTER)) { if(!(*current_selected)) return true; switch((current_selected - menu_texts.begin())) { case GFX: setNextState("GFXState"); break; case CONTROLS: setNextState("OptionControls"); break; case AUDIO: setNextState("OptionAudio"); break; case BACK: setNextState("Menu"); break; } return false; } if(InputManager::mousePressedOnce(MOUSE_LEFT)) { for(auto it = menu_texts.begin(); it != menu_texts.end(); ++it) { if((*it)->inside(InputManager::mouseX, InputManager::mouseY)) { switch((it - menu_texts.begin())) { case GFX: setNextState("GFXState"); break; case CONTROLS: setNextState("OptionControls"); break; case AUDIO: setNextState("OptionAudio"); break; case BACK: setNextState("Menu"); break; } return false; } } } return true; }
bool PausState::Update(float deltatime) { for(int i=0; i<m_buttons.size();i++) { if(m_buttons.at(i)->Update()== "Clicked" && m_buttons.at(i)->GetType2() == "Resume") { m_engine->m_soundmanager->PlaySound("M4A1.wav"); printf("Next State set to GameState\n"); setNextState("Game"); return false; } if(m_buttons.at(i)->Update()== "Clicked" && m_buttons.at(i)->GetType2() == "Customization") { m_engine->m_soundmanager->PlaySound("M4A1.wav"); printf("Next State set to Customize\n"); setNextState("Customize"); return false; } if(m_buttons.at(i)->Update()== "Clicked" && m_buttons.at(i)->GetType2() == "MainMenu") { m_engine->m_soundmanager->PlaySound("M4A1.wav"); m_engine->m_soundmanager->PlayMusic("Campfire.wav"); printf("Next State set to MainMenu\n"); m_engine->m_gom->ClearGameObjects(); setNextState("MainMenu"); m_engine->m_paused = 1; return false; } } return true; }
void BaseCar::initFSM() { FSMState line; line.setName(CarState::Line); line.enterCallback = CC_CALLBACK_0(BaseCar::enterLineCallBack, this); line.updateCallback = CC_CALLBACK_1(BaseCar::lineUpdate, this); addState(line); FSMState circle; circle.setName(CarState::Circle); circle.enterCallback = CC_CALLBACK_0(BaseCar::enterCircleCallBack, this); circle.updateCallback = CC_CALLBACK_1(BaseCar::circleUpdate, this); addState(circle); setNextState(CarState::Line); }
void StateBadVista::userInput() { if (inputDelay.getTicks() < INPUT_DELAY) return; inputDelay.start(); input->update(); #ifdef PLATFORM_PC if(input->isQuit()) nullifyState(); #endif if(input->isB() && bvState < BV_PITCHED) { bvState = BV_WINDUP; armAngle += armIncrement; if (armAngle >= ARM_ANGLE_MAX || armAngle <= 1) { armIncrement = -armIncrement; ++pwned_count; pwned = PWNED_STOPPED <= pwned_count && pwned_count <= PWNED_PWNED + 1; } logo.setPosition((int)ARM_INIT_X, (int)ARM_INIT_Y + armAngle); } if (bvState == BV_WINDUP && !input->isB()) { bvState = BV_PITCHED; logoX = LOGO_INIT_X; logoY = LOGO_INIT_Y; float initVelocity = (float) armAngle * ANGLE_TO_VELOCITY_MULTIPLIER; logoVelocityX = -initVelocity; logoVelocityY = initVelocity; armAngle = 1; } if(bvState > BV_PITCHED) { if(input->isB()) setNextState(STATE_MAIN); } if(input->isStart())//I wasnt sure what exit key was... { pauseToggle(); input->resetKeys(); } }
void JM_GameOverState::handleInput() { while(SDL_PollEvent(&m_event)) { if(m_event.type == SDL_MOUSEBUTTONDOWN){ if(m_event.button.button == SDL_BUTTON_LEFT){ activateButton(getGUI().handleClick(m_event.button.x, m_event.button.y)); } } else if(m_event.type == SDL_KEYDOWN){ if(m_event.key.keysym.sym == SDLK_p){ setNextState(STATE_PLAYING); } } } }
void StateCredits::userInput() { // Refresh inputs input->update(); #ifdef PLATFORM_PC if(input->isQuit()) nullifyState(); #endif // Skip current Credits item if((input->isB() || input->isX()) && currentLine < NumberUtility::getSize(CREDITS)-1) { ++currentLine; input->resetKeys(); } // skip credits if(input->isStart()) { setNextState(STATE_TITLE); input->resetKeys(); } }
void StateBarrelRoll::userInput() { input->update(); #ifdef PLATFORM_PC if(input->isQuit()) nullifyState(); #endif if(input->isLeft()) { ang += 0.3; //Input.resetKeys(); } if(input->isRight()) { ang -= 0.3; //Input.resetKeys(); } if(input->isUp()) { zoom += 0.001; } if(input->isDown()) { if(zoom > 0.3) { zoom -= 0.001; } } if(input->isSelect())//I wasnt sure what exit key was... { setNextState(STATE_MAIN); //nullifyState(); input->resetKeys(); } }
int StateMachine::processEventsInWaitForTopicState(int ev, broker::message msg) { int statusCode = 0; switch(ev) { case TOPIC_RECEIVED_EVENT: { statusCode = doActionsForGroupTopicEvent(msg); setNextState(statusCode); break; } case SIG_KILL_EVENT: { statusCode = doActionsForKillSignalEvent(); return statusCode; } case TIMER_EVENT: { //stop the timer.In this state timer is not allowed. StateMachine::isTimerEvent = false; break; } case CONNECTION_BROKEN_EVENT: { doActionsForConnectionBrokenEvent(); break; } default: { std::ostringstream stringStream; stringStream << eventToString(ev) << " is not allowed in " << "WAIT_FOR_TOPIC" << "expecting group topic events"; LOG(WARNING) << stringStream; ptBCM->getQueryManagerPointer()-> sendErrortoBro(stringStream.str()); } }; }
void Commander::initFSM(){ FSMState g3; g3.setName(GroupState::g3); g3.enterCallback = CC_CALLBACK_0(Commander::g3enter, this); g3.updateCallback = CC_CALLBACK_1(Commander::g3update, this); FSMState g12; g12.setName(GroupState::g12); g12.enterCallback = CC_CALLBACK_0(Commander::g12enter, this); g12.updateCallback = CC_CALLBACK_1(Commander::g12update, this); FSMState g111; g111.setName(GroupState::g111); g111.enterCallback = CC_CALLBACK_0(Commander::g111enter, this); g111.updateCallback = CC_CALLBACK_1(Commander::g111update, this); addState(g3); addState(g12); addState(g111); setNextState(GroupState::g3); }
void StateBadVista::update() { const int LOGO_SIDE = logo.getWidth() / 2; const int LOGO_TOP = logo.getHeight() / 2; arm.setScaleX(1); arm.setScaleY(1); arm.setRotation(-armAngle); logo.setScaleX(1); logo.setScaleY(1); logo.setRotation(-armAngle * 0.5f); if(bvState == BV_WINDUP) { float radians = armAngle * 3.14159f / 180.0f; logo.setPosition( (int) LOGO_INIT_X + (armAngle * 0.25f) - (50 * sin(radians)), (int) LOGO_INIT_Y - 100 + (100 * cos(radians))); return; } if(bvState == BV_PITCHED) { // Calculate motion region #ifdef PENJIN_FIXED SimpleRegion tempRegion(logoX, logoY, fixedpoint::fix2int(logoX + logoVelocityX), fixedpoint::fix2int(logoY + logoVelocityY)); #else SimpleRegion tempRegion(logoX, logoY, logoX + logoVelocityX, logoY + logoVelocityY); #endif SimpleRegion motion( tempRegion.x1() - LOGO_SIDE, tempRegion.y1() - LOGO_TOP, tempRegion.x2() + LOGO_SIDE, tempRegion.y2() + LOGO_TOP); if (hitObstacle(horizontalObstacles, motion)) { if (bounce.isPlaying()) bounce.stop(); bounce.play(); logoVelocityX *= BOUNCE_DECAY; logoVelocityY *= BOUNCE_DECAY; logoVelocityY *= -1; numBounces++; } if (hitObstacle(verticalObstacles, motion)) { if (bounce.isPlaying()) bounce.stop(); bounce.play(); logoVelocityX *= BOUNCE_DECAY; logoVelocityY *= BOUNCE_DECAY; logoVelocityX *= -1; } // Sometimes the ball gets caught inside the side of the litter can: // neither inside nor out. The following two paragraphs seek to prevent // that. if (hitObstacle(basketLeft, motion)) { bounce.play(); logoVelocityX *= BOUNCE_DECAY; logoVelocityY *= BOUNCE_DECAY; if (logoX >= BASKET_LEFT_INSIDE && logoVelocityX < 0) logoVelocityX *= -1; if (logoX < BASKET_LEFT_INSIDE && logoVelocityX > 0) logoVelocityX *= -1; } if (hitObstacle(basketRight, motion)) { bounce.play(); logoVelocityX *= BOUNCE_DECAY; logoVelocityY *= BOUNCE_DECAY; if (logoX >= BASKET_RIGHT_INSIDE && logoVelocityX < 0) logoVelocityX *= -1; if (logoX < BASKET_RIGHT_INSIDE && logoVelocityX > 0) logoVelocityX *= -1; } if (hitObstacle(playerObstacle, motion)) { init(); return; } SimpleRegion logoPosition(logoX - LOGO_SIDE, logoY - LOGO_TOP, logoX + LOGO_SIDE, logoY + LOGO_TOP); // Check for end of game if (ballStopped()) { bool won = inBasket(); variables[0].setValue(won ? 1 : 0); if (won) bvState = BV_WON; else bvState = BV_LOST; counter.start(); } // Ensure gravity doesn't overcome the bounce decay if (inBasket()) { // Once the logo enters the basket, don't let it bounce out float newYPos = GRAVITY + logoVelocityY + logoY + LOGO_TOP; if (logoVelocityY < 1 && BASKET_BOT - logoY < LOGO_TOP + 5) { logoVelocityY = 0; logoVelocityX = 0; logoY = BASKET_BOT - LOGO_TOP; } else if (BASKET_TOP < newYPos && newYPos < BASKET_BOT) logoVelocityY += GRAVITY; else if (newYPos > BASKET_BOT) logoVelocityY = BASKET_BOT - logoY - LOGO_TOP; else logoVelocityY = BASKET_TOP - logoY - LOGO_TOP; } else { if (GRAVITY + logoVelocityY + logoY + LOGO_TOP < FLOOR) logoVelocityY += GRAVITY; else logoVelocityY = FLOOR - logoY - LOGO_TOP; } #ifdef PENJIN_FIXED logoY += fixedpoint::fix2int(logoVelocityY); logoX += fixedpoint::fix2int(logoVelocityX); #else logoY += logoVelocityY; logoX += logoVelocityX; #endif logo.setPosition(logoX - LOGO_SIDE, logoY - LOGO_TOP); return; } if(bvState == BV_LOST) { if(pwned) { bounce.loadSound("music/BadVista/chimes.ogg"); bounce.play(); backsound.stop(); backsound.loadMusic("music/BadVista/pp.bv.windows.e.egg.ogg"); backsound.setLooping(false); backsound.play(); if (pwned_count < PWNED_PWNED) loserBackground.loadSprite("images/BadVista/stopped.jpg"); else loserBackground.loadSprite("images/BadVista/lost.png"); bvState = BV_PWNED; } else if(counter.getScaledTicks() > END_DELAY) setNextState(STATE_MAIN); } if(bvState == BV_WON) { if(counter.getScaledTicks() > END_DELAY) setNextState(STATE_MAIN); } if(bvState == BV_PWNED) { if(counter.getScaledTicks() > LOSER_DELAY && !backsound.isPlaying()) setNextState(STATE_MAIN); } }
void StateOneButtonBandit::unlimitedUpdate() { switch (currentState) { // Standing still case 0: if (gameTimer.getScaledTicks() >= 10) { currentState = 1; gameTimer.start(); // Next step is to go backwards currentGlobalRate = -0.2f; } break; // Small climb backwards case 1: if (gameTimer.getScaledTicks() >= 3) { click.play(); currentState = 2; gameTimer.start(); // Next step is start spinning currentGlobalRate = 0.0f; } break; // Beginning to spin case 2: if (gameTimer.getScaledTicks() >= 15) { tumbler.play(); currentState = 3; gameTimer.stop(); leftColumn.active = true; // Next step is spin at full speed currentGlobalRate = startGlobalRate; } break; // Playable case 3: break; // Start the end timer case 4: if (rightColumn.isStopped()) { tumbler.stop(); } if ((win && rightColumn.isStopped()) || !win) { gameTimer.start(); currentState = 5; if (win) { // Play victory music chime.play(); } else { // Play defeat music error.play(); } } break; // End the game case 5: if (gameTimer.getScaledTicks() >= 15) { variables[0].setInt(win); setNextState(STATE_MAIN); } } }
/** * Enable the FileContent command and wait for a configuration file. * Set the next expected state when the file is correctly decoded and applied. * @param expectedState next expected state after successfully applying the configuration */ void NA62DimServer::waitConfigurationFile(int expectedState) { println("... Waiting for configuration file"); fDimFileContent->enable(); setNextState(expectedState); }
RWGame::RWGame(int argc, char* argv[]) : config("openrw.ini") , state(nullptr), world(nullptr), renderer(nullptr), script(nullptr), debugScript(false), inFocus(true), showDebugStats(false), showDebugPaths(false), showDebugPhysics(false), accum(0.f), timescale(1.f) { if (!config.isValid()) { throw std::runtime_error("Invalid configuration file at: " + config.getConfigFile()); } size_t w = GAME_WINDOW_WIDTH, h = GAME_WINDOW_HEIGHT; bool fullscreen = false; bool newgame = false; bool test = false; std::string startSave; std::string benchFile; for( int i = 1; i < argc; ++i ) { if( strcasecmp( "-w", argv[i] ) == 0 && i+1 < argc ) { w = std::atoi(argv[i+1]); } if( strcasecmp( "-h", argv[i] ) == 0 && i+1 < argc ) { h = std::atoi(argv[i+1]); } if( strcasecmp( "-f", argv[i] ) == 0 ) { fullscreen = true; } if( strcmp( "--newgame", argv[i] ) == 0 ) { newgame = true; } if( strcmp( "--test", argv[i] ) == 0 ) { test = true; } if( strcmp( "--debug", argv[i] ) == 0 ) { debugScript = true; } if( strcmp( "--load", argv[i] ) == 0 && i+1 < argc ) { startSave = argv[i+1]; } if( strcmp( "--benchmark", argv[i]) == 0 && i+1 < argc ) { benchFile = argv[i+1]; } } sf::Uint32 style = sf::Style::Default; if( fullscreen ) { style |= sf::Style::Fullscreen; } sf::ContextSettings cs; cs.depthBits = 32; cs.stencilBits = 8; window.create(sf::VideoMode(w, h), "", style, cs); log.addReciever(&logPrinter); log.info("Game", "Game directory: " + config.getGameDataPath()); if(! GameData::isValidGameDirectory(config.getGameDataPath()) ) { throw std::runtime_error("Invalid game directory path: " + config.getGameDataPath()); } data = new GameData(&log, &work, config.getGameDataPath()); // Initalize all the archives. data->loadIMG("/models/gta3"); //engine->data.loadIMG("/models/txd"); data->loadIMG("/anim/cuts"); data->loadTXD("/models/hud.txd"); data->load(); // Initialize renderer renderer = new GameRenderer(&log, data); // Set up text renderer renderer->text.setFontTexture(0, "pager"); renderer->text.setFontTexture(1, "font1"); renderer->text.setFontTexture(2, "font2"); debug = new DebugDraw; debug->setDebugMode(btIDebugDraw::DBG_DrawWireframe | btIDebugDraw::DBG_DrawConstraints | btIDebugDraw::DBG_DrawConstraintLimits); debug->setShaderProgram(renderer->worldProg); data->loadDynamicObjects(config.getGameDataPath() + "/data/object.dat"); /// @TODO language choices. data->loadGXT("english.gxt"); getRenderer()->water.setWaterTable(data->waterHeights, 48, data->realWater, 128*128); for(int m = 0; m < MAP_BLOCK_SIZE; ++m) { std::string num = (m < 10 ? "0" : ""); std::string name = "radar" + num + std::to_string(m); data->loadTXD(name + ".txd"); } auto loading = new LoadingState(this); if (! benchFile.empty()) { loading->setNextState(new BenchmarkState(this, benchFile)); } else if( newgame ) { if( test ) { loading->setNextState(new IngameState(this,true, "test")); } else { loading->setNextState(new IngameState(this,true)); } } else if( ! startSave.empty() ) { loading->setNextState(new IngameState(this,true, startSave)); } else { loading->setNextState(new MenuState(this)); } StateManager::get().enter(loading); log.info("Game", "Started"); }