CSC3224_Computer_Games_Development / Game / MovingCamera.cpp
MovingCamera.cpp
Raw
#include "MovingCamera.h"

MovingCamera::MovingCamera(Scene& w, sf::RenderWindow* windowRenderer, Json::Value platformConfig) : EngineMessageSystem(w), window(windowRenderer), camera(windowRenderer->getDefaultView()), playerEntity(nullptr), platformConfig(platformConfig)
{
	for (int i = 0; i < ceil(camera.getSize().y / maxVerticalDistance / PIXELS) + 1; ++i)
	{
		platformConfig["Sprite"]["PosX"] = fmod(platformConfig["Sprite"]["PosX"].asFloat() + RandomFloat(-maxHorixzontalDistance, maxHorixzontalDistance) * PIXELS, camera.getSize().x);
		platformConfig["Sprite"]["PosY"] = fmod(platformConfig["Sprite"]["PosY"].asFloat() + RandomFloat(-minVerticalDistance, -maxVerticalDistance) * PIXELS, camera.getSize().y);
		auto e = Entity::messageBuildFromJson(w.getEntityManagement(), w.getEnginePhysicsSystem(), platformConfig);
		platformBuffer.push_back(e->getMessageSystemEvent<RigidBodyPhysics>()->getBody());
	}
}

MovingCamera::~MovingCamera()
{
}



void MovingCamera::play(const sf::Time& dt)
{
	if (!loose)
	{
		if (!playerEntity)
		{
			auto message = this->scene->getEntityManagement().getMessageSystemEventType(MessageSystemEventType::TEXT_TYPE);
			for (auto messages : *message)
			{
				auto component = static_cast<Text*>(messages.first);
				if (component->getText() == "player")
				{
					playerEntity = messages.second;
					break;
				}
			}
		}

		auto Entityposition = playerEntity->getEntitySprite()->getPosition();
		auto leftSide = (Entityposition.x > camera.getSize().x / 2.5);
		scene->text.setPosition((leftSide ? 10 : 400), Entityposition.y - scene->text.getCharacterSize());

		currentdelay += dt.asMilliseconds();
		if (currentdelay > delayInMilliseconds)
		{
			auto finalSpeed = -moveSpeed * dt.asMilliseconds();
			finalSpeed = clamp((finalSpeed * currentdelay) / 18000, -5.f, -1.f);
			auto difference = Entityposition.y - camera.getCenter().y;
			if (difference < 0)
			{
				finalSpeed += difference;
			}
			camera.move(0, finalSpeed);

		}
		auto difference = Entityposition.y - camera.getCenter().y;
		if (difference < 0)
		{
			camera.move(0, difference);
		}
		window->setView(camera);

			if (checkIfBelowView(Entityposition.y))
		{
			scene->sendSceneSystemMessage({ "gameover" });
		}
	}

}

void MovingCamera::recieveEngineMessage(const SystemMessage & inputSystemMessage)
{
}

void MovingCamera::moveCamera() {

	//fixed = window->getView();
	//standard = fixed;
	//unsigned int size = 200;
	//sf::View minimap(sf::FloatRect(standard.getCenter().x, standard.getCenter().y, static_cast<float>(size), static_cast<float>(window->getSize().y*size / window->getSize().x)));
	//minimap.setViewport(sf::FloatRect(1.f - static_cast<float>(minimap.getSize().x) / window->getSize().x - 0.02f, 1.f - static_cast<float>(minimap.getSize().y) / window->getSize().y - 0.02f, static_cast<float>(minimap.getSize().x) / window->getSize().x, static_cast<float>(minimap.getSize().y) / window->getSize().y));
	//minimap.zoom(4.f);

	//sf::View left(sf::FloatRect(0.f, 0.f, static_cast<float>(window->getSize().x / 2), static_cast<float>(window->getSize().y)));
	//left.setViewport(sf::FloatRect(0.f, 0.f, 0.5, 1.f));
	//sf::View right(sf::FloatRect(0.f, 0.f, static_cast<float>(window->getSize().x / 2), static_cast<float>(window->getSize().y)));
	//right.setViewport(sf::FloatRect(0.5, 0.f, 0.5, 1.f));
	//right.move(100.f, 100.f);

	//sf::RectangleShape miniback;
	//miniback.setPosition(minimap.getViewport().left*window->getSize().x - 5, minimap.getViewport().top*window->getSize().y - 5);
	//miniback.setSize(sf::Vector2f(minimap.getViewport().width*window->getSize().x + 10, minimap.getViewport().height*window->getSize().y + 10));
	//miniback.setFillColor(sf::Color(160, 8, 8));

	//sf::Text position;
	//position.setString("<0, 0> - <0, 0>"); 
	//position.setPosition(10.f, 10.f);


	//sf::Vector2i pos = sf::Mouse::getPosition(); 

	//overlayClosed = false; 
	//toggleSplit = false; 
	//moved = true; 
	//std::stringstream ss;
}


void MovingCamera::recieveMessage(const SystemMessage& inputSystemMessage)
{
	if (inputSystemMessage.messageName == "gameover")
	{
		loose = true;
	}
}