#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()->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(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(size), static_cast(window->getSize().y*size / window->getSize().x))); //minimap.setViewport(sf::FloatRect(1.f - static_cast(minimap.getSize().x) / window->getSize().x - 0.02f, 1.f - static_cast(minimap.getSize().y) / window->getSize().y - 0.02f, static_cast(minimap.getSize().x) / window->getSize().x, static_cast(minimap.getSize().y) / window->getSize().y)); //minimap.zoom(4.f); //sf::View left(sf::FloatRect(0.f, 0.f, static_cast(window->getSize().x / 2), static_cast(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(window->getSize().x / 2), static_cast(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; } }