void MissionBegin::beginAtConnectionScreen() { beginMPlayer(); int i; for (i = 0; i < 5/*dim screen X*/; i+=1) { int j; for (j = 0; j < 3/*dim screen Y*/; j += 1) { screens[i][j] = multiplayerScreens[i][j]; } } curScreenX = 0; curScreenY = 1; screens[curScreenX][curScreenY]->beginFadeIn( 1.0 ); bReadyToLoad = 0; bDone = 0; LogisticsData::instance->startMultiPlayer(); ChatWindow::init(); }
void MissionBegin::beginZone() { beginMPlayer(); restartMPlayer(nullptr); bReadyToLoad = 0; bDone = 0; LogisticsData::instance->startMultiPlayer(); mainMenu->skipIntro(); ChatWindow::init(); }
PCSTR MissionBegin::update() { if(bSplash) { mainMenu->update(); if(LogisticsScreen::RUNNING != mainMenu->getStatus()) { bSplash = 0; if(LogisticsScreen::RESTART == mainMenu->getStatus()) { LogisticsScreen* pCurScreen = screens[curScreenX][curScreenY]; if(pCurScreen) pCurScreen->end(); int32_t i; for(i = 0; i < 5/*dim screen X*/; i += 1) { int32_t j; for(j = 0; j < 3/*dim screen Y*/; j += 1) { screens[i][j] = singlePlayerScreens[i][j]; } } if(LogisticsData::instance->skipLogistics()) { if(LogisticsData::instance->showChooseMission()) { curScreenX = 3; curScreenY = 1; screens[3][1] = singlePlayerScreens[0][1]; screens[curScreenX][curScreenY]->begin(); } else { curScreenX = 4; curScreenY = 1; screens[curScreenX][curScreenY]->begin(); } } else { curScreenX = 0; curScreenY = 1; screens[curScreenX][curScreenY]->beginFadeIn(1.0); screens[curScreenX][curScreenY]->begin(); } return LogisticsData::instance->getCurrentBigVideo(); } else if(LogisticsScreen::MULTIPLAYERRESTART == mainMenu->getStatus()) { LogisticsScreen* pCurScreen = screens[curScreenX][curScreenY]; if(pCurScreen) pCurScreen->end(); beginMPlayer(); int32_t i; for(i = 0; i < 5/*dim screen X*/; i += 1) { int32_t j; for(j = 0; j < 3/*dim screen Y*/; j += 1) { screens[i][j] = multiplayerScreens[i][j]; } } curScreenX = 0; curScreenY = 1; screens[curScreenX][curScreenY]->beginFadeIn(1.0); } else if(LogisticsScreen::SKIPONENEXT == mainMenu->getStatus()) { LogisticsScreen* pCurScreen = screens[curScreenX][curScreenY]; if(pCurScreen) pCurScreen->end(); int32_t i; for(i = 0; i < 5/*dim screen X*/; i += 1) { int32_t j; for(j = 0; j < 3/*dim screen Y*/; j += 1) { screens[i][j] = singlePlayerScreens[i][j]; } } curScreenX = 1; curScreenY = 1; screens[curScreenX][curScreenY]->beginFadeIn(1.0); screens[curScreenX][curScreenY]->begin(); } if(screens[curScreenX][curScreenY] && curScreenX != -1) { screens[curScreenX][curScreenY]->begin(); } else // no screen? stay on main menu { bSplash = true; mainMenu->begin(); } } return nullptr; } leftAnim.update(); rightAnim.update(); downAnim.update(); upAnim.update(); LogisticsScreen* pCurScreen = screens[curScreenX][curScreenY]; if(pCurScreen) { if(logisticsBrain && !MPlayer) logisticsBrain->execute(); //-------------------- //For Tutorial if(animationRunning) { //Move mouse to correct position. if(targetIsButton) { aButton* targetButton = pCurScreen->getButton(targetButtonId); if(!targetButton) { animationRunning = false; } else { userInput->setMouseCursor(mState_TUTORIALS); //Get button position. float buttonPosX = (targetButton->left() + targetButton->right()) * 0.5f; float buttonPosY = (targetButton->top() + targetButton->bottom()) * 0.5f; //------------------- // Mouse Checks Next float realMouseX = userInput->realMouseX(); float realMouseY = userInput->realMouseY(); if(timeLeftToScroll > 0.0f) { float xDistLeft = buttonPosX - realMouseX; float yDistLeft = buttonPosY - realMouseY; float xDistThisFrame = xDistLeft / timeLeftToScroll * frameLength; float yDistThisFrame = yDistLeft / timeLeftToScroll * frameLength; userInput->setMousePos(realMouseX + xDistThisFrame, realMouseY + yDistThisFrame); timeLeftToScroll -= frameLength; } else { userInput->setMousePos(buttonPosX, buttonPosY); //We are there. Start flashing. if(buttonNumFlashes) { buttonFlashTime += frameLength; if(buttonFlashTime > .5f) { pCurScreen->getButton(targetButtonId)->setColor(0xffffffff); buttonFlashTime = 0.0f; buttonNumFlashes--; } else if(buttonFlashTime > .25f) { pCurScreen->getButton(targetButtonId)->setColor(0xff7f7f7f); } } else { //Flashing is done. We now return you to your regularly scheduled program. animationRunning = false; pCurScreen->getButton(targetButtonId)->setColor(0xffffffff); } } } } else { aRect* targetButton = pCurScreen->getRect(targetButtonId); if(!targetButton) { animationRunning = false; } else { userInput->setMouseCursor(mState_TUTORIALS); //Get button position. float buttonPosX = (targetButton->left() + targetButton->right()) * 0.5f; float buttonPosY = (targetButton->top() + targetButton->bottom()) * 0.5f; //------------------- // Mouse Checks Next float realMouseX = userInput->realMouseX(); float realMouseY = userInput->realMouseY(); if(timeLeftToScroll > 0.0f) { float xDistLeft = buttonPosX - realMouseX; float yDistLeft = buttonPosY - realMouseY; float xDistThisFrame = xDistLeft / timeLeftToScroll * frameLength; float yDistThisFrame = yDistLeft / timeLeftToScroll * frameLength; userInput->setMousePos(realMouseX + xDistThisFrame, realMouseY + yDistThisFrame); timeLeftToScroll -= frameLength; } else { userInput->setMousePos(buttonPosX, buttonPosY); //We are there. Start flashing. if(buttonNumFlashes) { buttonFlashTime += frameLength; if(buttonFlashTime > .5f) { pCurScreen->getRect(targetButtonId)->setColor(0xff000000); buttonFlashTime = 0.0f; buttonNumFlashes--; } else if(buttonFlashTime > .25f) { pCurScreen->getRect(targetButtonId)->setColor(0xffffffff); } } else { //Flashing is done. We now return you to your regularly scheduled program. animationRunning = false; pCurScreen->getRect(targetButtonId)->setColor(0xff000000); } } } } } pCurScreen->update(); if(pCurScreen->getStatus() == LogisticsScreen::GOTOSPLASH || (MPlayer && MPlayer->hostLeft)) { pCurScreen->end(); beginSplash(); if(MPlayer && MPlayer->hostLeft) { MPlayer->closeSession(); delete MPlayer; MPlayer = nullptr; } return nullptr; } if(pCurScreen->getStatus() == LogisticsScreen::READYTOLOAD && (curScreenX == 4 || (MPlayer && curScreenX == 3))) bReadyToLoad = true; if(pCurScreen->getStatus() != LogisticsScreen::RUNNING) { soundSystem->stopBettySample(); // don't want to carry droning on to next screen soundSystem->stopSupportSample(); if(pCurScreen->getStatus() == LogisticsScreen::NEXT) { pCurScreen->end(); if(curScreenX < 4) { if(MPlayer) // different rules for multiplayer { if(dynamic_cast<MPParameterScreen*>(screens[curScreenX][curScreenY])) { if(curScreenX == 2) { if(!MPlayer->missionSettings.quickStart) { setUpMultiplayerLogisticsScreens(); } } else if(curScreenX == 3) { bDone = true; } } } if(screens[curScreenX + 1][curScreenY]) { if(screens[curScreenX + 1][curScreenY] == placeHolderScreen) curScreenX++; screens[curScreenX + 1][curScreenY]->begin(); } leftAnim.begin(); curScreenX++; soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS); animJustBegun = true; } else { bDone = true; } } else if(pCurScreen->getStatus() == LogisticsScreen::PREVIOUS) { pCurScreen->end(); if(screens[curScreenX - 1][curScreenY]) { if(screens[curScreenX - 1][curScreenY] == placeHolderScreen) curScreenX--; screens[curScreenX - 1][curScreenY]->begin(); } rightAnim.begin(); curScreenX--; soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS); animJustBegun = true; } else if(pCurScreen->getStatus() == LogisticsScreen::DOWN) { pCurScreen->end(); if(screens[curScreenX][curScreenY + 1]) screens[curScreenX][curScreenY + 1]->begin(); upAnim.begin(); curScreenY++; soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS); animJustBegun = true; } else if(pCurScreen->getStatus() == LogisticsScreen::UP) { pCurScreen->end(); if(screens[curScreenX][curScreenY - 1]) screens[curScreenX][curScreenY - 1]->begin(); downAnim.begin(); curScreenY--; soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS); animJustBegun = true; } else if(pCurScreen->getStatus() == LogisticsScreen::MAINMENU) { bSplash = true; mainMenu->setDrawBackground(false); mainMenu->begin(); animJustBegun = true; } else if(pCurScreen->getStatus() == LogisticsScreen::SKIPONENEXT) { pCurScreen->end(); if(curScreenX < 3 - 1) { if(screens[curScreenX + 1 + 1][curScreenY]) screens[curScreenX + 1 + 1][curScreenY]->begin(); leftAnim.begin(); curScreenX++; curScreenX++; soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS); animJustBegun = true; } else { bDone = true; } } else if(pCurScreen->getStatus() == LogisticsScreen::SKIPONEPREVIOUS) { pCurScreen->end(); if(screens[curScreenX - 1 - 1][curScreenY]) screens[curScreenX - 1 - 1][curScreenY]->begin(); rightAnim.begin(); curScreenX--; curScreenX--; soundSystem->playDigitalSample(LOG_NEXTBACKBUTTONS); animJustBegun = true; } } } else bDone = true; return nullptr; }