#pragma once #include "../GameEngine/Engine_Messaging_System/EngineMessageSystem.h" #include "../GameEngine/Engine_Messaging_System/MessageSystemEvent.h" #include "../GameEngine/Engine_Messages/MessageObserver.h" #include "../GameEngine/Engine_Messages/MessageHandler.h" #include "../Box2D/Box2D/Box2D/Dynamics/b2WorldCallbacks.h" #include "../Box2D/Box2D/Box2D/Dynamics/Contacts/b2Contact.h" #include "../GameEngine/Engine_Text/Text.h" #include "../GameEngine/Engine_Graphics/Scene.h" #include "../GameEngine/Engine_Physics/Entity.h" #include "../GameEngine/Engine_Physics/RigidBodyPhysics.h" #include "../GameEngine/Engine_Core/BaseGameEvents.h" #include "../GameEngine/Engine_Audio/AudioSoundEffect.h" #include "../GameEngine/Engine_Common/Common.h" #include #define PIXELS 20.f class MovingCamera : public EngineMessageSystem { public: //MovingCamera(); MovingCamera(Scene & w, sf::RenderWindow * window, Json::Value platformConfig); ~MovingCamera(); void moveCamera(); void recieveMessage(const SystemMessage & m); void play(const sf::Time& elapsedTime) override; void recieveEngineMessage(const SystemMessage& inputSystemMessage) override; sf::View fixed; sf::View standard; bool overlayClosed = false; bool toggleSplit = false; bool moved = false; sf::View right; sf::View left; sf::View minimap; protected: sf::RenderWindow* window; Entity* playerEntity; const float jumpVel = 15.0; const float moveVel = 8; float desiredVel = 0; sf::View camera; const float delayInMilliseconds = 2000; float currentdelay = 0; const float moveSpeed = 1 / PIXELS; Json::Value platformConfig; bool loose = false; std::deque platformBuffer; bool jump = false; bool ground = false; const float maxVerticalDistance = 75.f / PIXELS; const float minVerticalDistance = 65.f / PIXELS; const float maxHorixzontalDistance = 80.f / PIXELS; const float minHorixzontalDistance = 30.f / PIXELS; bool checkIfBelowView(float y) const { auto bottom = camera.getCenter().y + (camera.getSize().y / 2); return (y - bottom) > 0; } };