#include "Score.h" // Conmstructor Score::Score(Scene& inputScene): EngineMessageSystem(inputScene), entityPlayer(nullptr), highScore(-176) { scene->text.setPosition(15, 15); scene->text.setCharacterSize(20); scene->text.setFillColor(sf::Color::Black); scene->text.setString("HighScore:"); scene->enableDebugTextOnScene(true); } // Desctructor Score::~Score() {} // Step through the game void Score::play(const sf::Time& elapsedTime) { if (!entityPlayer) { // Event Que auto messageSystemEventType = this->scene->getEntityManagement().getMessageSystemEventType(MessageSystemEventType::TEXT_TYPE); for (auto message : *messageSystemEventType) { auto checkPlayer = static_cast(message.first); if (checkPlayer->getText() == "player") { entityPlayer = message.second; break; } } } // Check player position int playerCurrentPosition = entityPlayer->getEntitySprite()->getPosition().x; if (playerCurrentPosition > highScore) { highScore = playerCurrentPosition; } // If the player failed if (playerCurrentPosition <= playerDead) { std::stringstream messageOnScreen; messageOnScreen << "GAME OVER" << std::endl; messageOnScreen << "HIGH SCORE: " << (highScore) << std::endl; gameOver = true; } //If the player is still alive if (!gameOver) { // Print useful messages std::stringstream messageOnScreen; // Display FPS time += elapsedTime; float fpsCounter = 1 / elapsedTime.asSeconds(); scene->saveFPS(fpsCounter); messageOnScreen << "FPS: " << fpsCounter << std::endl; if (time.asSeconds() > 1) { time = sf::Time::Zero; } // Display High Score messageOnScreen << "HIGH SCORE: " << (highScore) << std::endl; // Display Current Position (x position) messageOnScreen << "CURRENT POSITION: " << playerCurrentPosition << std::endl; scene->text.setString(messageOnScreen.str()); scene->text.setFillColor(sf::Color::Black); if (playerCurrentPosition >= playerAim) { // When the Goal/Aim is reached, Display Message to the user/palyer messageOnScreen << "Well Done! - Quest Completed - The Princess is Saved!!" << std::endl << "FINAL SCORE: " << highScore << std::endl; auto pos = scene->text.getPosition(); scene->text.setString(messageOnScreen.str()); scene->text.setFillColor(sf::Color::Red); gameOver = true; } } } // Check for Win or Game Over condition - Change the condition based on player (Final State Machine) void Score::recieveEngineMessage(const SystemMessage& inputSystemMessage) { if (inputSystemMessage.messageName == "win") { std::stringstream messageOnScreen; messageOnScreen << "WIN!!!" << std::endl << "FINAL SCORE: " << highScore << std::endl; auto pos = scene->text.getPosition(); scene->text.setString(messageOnScreen.str()); gameOver = true; } if (inputSystemMessage.messageName == "gameover") { std::stringstream messageOnScreen; messageOnScreen << "GAME OVER" << std::endl << "FINAL SCORE: " << highScore << std::endl; auto pos = scene->text.getPosition(); scene->text.setString(messageOnScreen.str()); gameOver = true; } }