void EngineStage::activatePerformSingleTap(float x, float y) { switch (stageState) { case STAGE_STATE_INIT: break; case STAGE_STATE_RUNNING: { std::string queryGUI = hud->queryButtons(Vector2(x, y)); if (queryGUI == "powerup1") player->performPowerUp("TractorBeam"); else if (queryGUI == "powerup2") player->performPowerUp("Shields"); else if (queryGUI == "powerup3") player->performPowerUp("TimeWarp"); else if (queryGUI == "toggle1") { if (tunnel && tunnel->isMultiCollectionTask()) { // Bad hack but // Don't show 3-Back for multi-collection tasks of 1 or less. if (player->getLevelRequestRow() > 0) player->setToggleBack(0); tunnel->respondToToggleCheat(); } } else if (queryGUI == "toggle2") { if (tunnel && tunnel->isMultiCollectionTask()) { player->setToggleBack(1); tunnel->respondToToggleCheat(); } } else if (queryGUI == "toggle3") { if (tunnel && tunnel->isMultiCollectionTask()) { player->setToggleBack(2); tunnel->respondToToggleCheat(); } } else if (queryGUI == "toggle4") { if (tunnel && tunnel->isMultiCollectionTask()) { player->setToggleBack(3); tunnel->respondToToggleCheat(); } } else if (queryGUI == "pause") { setPause(true); stageState = STAGE_STATE_PROMPT; } break; } case STAGE_STATE_PAUSE: { std::string queryGUI = hud->queryButtons(Vector2(x, y)); if (queryGUI == "toggle1") { if (tunnel && tunnel->isMultiCollectionTask()) { // Bad hack but // Don't show 3-Back for multi-collection tasks of 1 or less. if (player->getLevelRequestRow() > 0) player->setToggleBack(0); tunnel->respondToToggleCheat(); } } else if (queryGUI == "toggle2") { if (tunnel && tunnel->isMultiCollectionTask()) { player->setToggleBack(1); tunnel->respondToToggleCheat(); } } else if (queryGUI == "toggle3") { if (tunnel && tunnel->isMultiCollectionTask()) { player->setToggleBack(2); tunnel->respondToToggleCheat(); } } else if (queryGUI == "toggle4") { if (tunnel && tunnel->isMultiCollectionTask()) { player->setToggleBack(3); tunnel->respondToToggleCheat(); } } else if (queryGUI == "pause") { setPause(true); stageState = STAGE_STATE_PROMPT; } else if (queryGUI == "go") { stageState = STAGE_STATE_RUNNING; setPause(false); } break; } case STAGE_STATE_PROMPT: { std::string queryGUI = hud->queryButtons(Vector2(x, y)); if (queryGUI == "resume") { // If game hasn't started yet, go back to init prompt // Otherwise, go to gameplay if (hud->isGoButtonActive()) { stageState = STAGE_STATE_PAUSE; if (player->hasTriggeredStartup() && player->getStartMusicTimer() <= 0.0) player->playMusic(); } else if (!tunnel->needsCleaning()) { setPause(false); stageState = STAGE_STATE_RUNNING; } } else if (queryGUI == "next") { LevelSet* levels = player->getLevels(); int row = player->getLevelRequestRow(); int col = player->getLevelRequestCol(); int level = levels->getLevelNo(row, col); int nlevel = ((level + 1) % NUM_TASKS) != 5 ? level + 1 : level + 2; if (player->isLevelAvailable(nlevel)) { row = levels->getLevelRow(nlevel); col = levels->getLevelCol(nlevel); player->setLevelRequest(row, col); stageState = STAGE_STATE_INIT; setPause(false); OgreFramework::getSingletonPtr()->m_pSoundMgr->stopAllSounds(); } } else if (queryGUI == "restart") { stageState = STAGE_STATE_INIT; setPause(false); OgreFramework::getSingletonPtr()->m_pSoundMgr->stopAllSounds(); } else if (queryGUI == "levelselect") { stageState = STAGE_STATE_DONE; setPause(false); OgreFramework::getSingletonPtr()->m_pSoundMgr->stopAllSounds(); } break; } case STAGE_STATE_DONE: break; } }
void HudStage::update(float elapsed) { std::string GUIToggleNumber = "General/GUIToggleTextNumber"; toggle1TextArt->setMaterialName(GUIToggleNumber + Util::toStringInt(tunnel->getNBack() % 10)); toggle2TextArt->setMaterialName(GUIToggleNumber + Util::toStringInt(Util::clamp((tunnel->getNBack() - 1) % 10, 0, tunnel->getNBack()))); toggle3TextArt->setMaterialName(GUIToggleNumber + Util::toStringInt(Util::clamp((tunnel->getNBack() - 2) % 10, 0, tunnel->getNBack()))); // toggle4 is always n-back 0 if (!tunnel->needsCleaning()) resumeButtonBackground->setMaterialName("General/ResumeButtonRound"); else resumeButtonBackground->setMaterialName("General/ResumeButtonRoundGRAY"); LevelSet* levels = player->getLevels(); int levelRow = player->getLevelRequestRow(); int levelCol = player->getLevelRequestCol(); int level = levels->getLevelNo(levelRow, levelCol); if (player->isLevelAvailable(level + 1)) nextButtonBackground->setMaterialName("General/NextButtonRound"); else nextButtonBackground->setMaterialName("General/NextButtonRoundGRAY"); if( player->winFlag ) { setOverlay(3, true); tunnel->addToTimePenalty(2.0f); float timeLeft = tunnel->getStageTime() - tunnel->getTotalElapsed() - tunnel->getTimePenalty(); if( timeLeft < 0.0f && timeLeft > -1.0f) player->setScore(player->getScore()+100.0f); else if( timeLeft > 0.0f ) player->setScore(player->getScore()+200.0f); label2->setColour(ColourValue(1.0,1.0,0.0)); label5->setColour(ColourValue(1.0,1.0,0.0)); label2->setCaption(Util::toStringInt(timeLeft)); endTallyTimeLabel->setCaption("Time " + Util::toStringInt(timeLeft)); label5->setCaption(Util::toStringInt(player->getScore())); endTallyScoreLabel->setCaption(Util::toStringInt(player->getScore()) + " Score"); if( timeLeft <= 0.0f ) { label2->setCaption("0"); endTallyTimeLabel->setCaption("Time 0"); tunnel->setCleaning(true); player->winFlag = false; } return; } if( tunnel->isDone() ) return; float timeLeft = fmax(tunnel->getStageTime() - tunnel->getTotalElapsed() - tunnel->getTimePenalty(), 0.0f); label1->setCaption(globals.messageBig); Ogre::ColourValue fontColor = timeLeft <= 0.0 ? ColourValue(1.0, 0.0, 0.0) : ColourValue(1.0, 1.0, 1.0); label2->setColour(fontColor); label2->setCaption(Util::toStringInt(timeLeft)); if (tunnel->getMode() == STAGE_MODE_RECESS) label3->setCaption(Util::toStringInt(tunnel->getPercentComplete() * 100) + "%"); else label3->setCaption(""); label4->setCaption(Util::toStringInt(player->getBaseSpeed())); if (player->hasTriggeredStartup()) { speedSlider->setBallDestination(player->getBaseSpeed()); speedSlider->update(elapsed); } speedSlider->adjust(); label5->setCaption(Util::toStringInt(player->getScore())); label6->setCaption(globals.message); label7->setCaption(""); if( player->isPowerUpActive("TimeWarp") ) { TimeWarp* t = (TimeWarp*)player->getPowerUpPtr("TimeWarp"); if( t->zoomIn == 0 ) { setOverlay(2, false); timeWarpLabel->setCharHeight(0.05 * FONT_SZ_MULT); timeWarpContainer->setPosition(0.50, 0.15); } else if( t->zoomIn == 1 ) { setOverlay(2, true); timeWarpLabel->setCharHeight(timeWarpLabel->getCharHeight()-0.0005 * FONT_SZ_MULT); //timeWarpContainer->setPosition(timeWarpContainer->getLeft()+0.001 * FONT_SZ_MULT, timeWarpContainer->getTop()+0.0005 * FONT_SZ_MULT); } else { setOverlay(2, true); label2->setColour(ColourValue(1.0,1.0,0.0)); label2->setCharHeight(0.030 * FONT_SZ_MULT); } std::string val; if( t->currentTimeVal < 10 ) val = " "+Util::toStringInt(t->currentTimeVal); else val = Util::toStringInt(t->currentTimeVal); timeWarpLabel->setCaption("+" + val + " Seconds"); } else { setOverlay(2, false); label2->setColour(ColourValue(1.0,1.0,1.0)); label2->setCharHeight(0.025 * FONT_SZ_MULT); } // Set Progress Bar indicator position for the appropriate mode float barWidth = barHP->getWidth(); if (tunnel->getMode() == STAGE_MODE_PROFICIENCY) { float HPRange = globals.HPPositiveLimit - globals.HPNegativeLimit + 1; //indicator->setPosition(barHP->getLeft() + barWidth * player->getProgress(), indicator->getTop()); indicator->setPosition(barHP->getLeft() + barWidth * (player->getHP() - globals.HPNegativeLimit) / HPRange, indicator->getTop()); } switch (player->getToggleBack()) { case 0: toggleIndicator->setPosition(0.897, 0.31); break; case 1: toggleIndicator->setPosition(0.897, 0.43); break; case 2: toggleIndicator->setPosition(0.897, 0.55); break; case 3: toggleIndicator->setPosition(0.897, 0.67); break; } if (player->isPowerUpAvailable("TractorBeam")) buttons[BUTTON_POWERUP1].backgroundRef->setMaterialName("General/GUIPowerupButton2"); else buttons[BUTTON_POWERUP1].backgroundRef->setMaterialName("General/GUIPowerupButtonBlank"); if (player->isPowerUpAvailable("Shields")) buttons[BUTTON_POWERUP2].backgroundRef->setMaterialName("General/GUIPowerupButton0"); else buttons[BUTTON_POWERUP2].backgroundRef->setMaterialName("General/GUIPowerupButtonBlank"); if (player->isPowerUpAvailable("TimeWarp")) buttons[BUTTON_POWERUP3].backgroundRef->setMaterialName("General/GUIPowerupButton1"); else buttons[BUTTON_POWERUP3].backgroundRef->setMaterialName("General/GUIPowerupButtonBlank"); std::vector<CollectionCriteria> criterias = tunnel->getCollectionCriteria(); for (int i = 0; i < collectionBar.size(); ++i) { if (i < criterias.size()) { std::string scoreName = "General/GUICollection"; // For togglebacks //if (criterias[i].nback <= 0) // scoreName += Util::toStringInt(0); //else // scoreName += Util::toStringInt(Util::clamp(3 - (tunnel->getNBack() - criterias[i].nback), 0, 3)); // For just a single n-back and task switch (tunnel->getPhase()) { case 'A': scoreName += "0"; break; case 'B': scoreName += "1"; break; case 'C': scoreName += "2"; break; case 'D': scoreName += "3"; break; default: scoreName += "0"; break; } if (criterias[i].collected) scoreName += "Filled"; else scoreName += "Blank"; collectionBar[i]->setMaterialName(scoreName); } else { collectionBar[i]->setMaterialName("General/GUICollectionGreyed"); } } }