CSC3224_Computer_Games_Development / Game / Score.cpp
Score.cpp
Raw
#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<Text*>(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;
	}	
}