diff --git a/SFMLEngine/makingAGameTick/Classes/Other/world.cpp b/SFMLEngine/makingAGameTick/Classes/Other/world.cpp index dd0a953..efe393c 100644 --- a/SFMLEngine/makingAGameTick/Classes/Other/world.cpp +++ b/SFMLEngine/makingAGameTick/Classes/Other/world.cpp @@ -3,6 +3,7 @@ #include // std::size_t #include "../SceneNodeDerrivatives/SpriteNode.hpp" +#include "../SceneNodeDerrivatives/entity.hpp" World::World(sf::RenderWindow& window) : mWindow(window) @@ -56,7 +57,7 @@ void World::buildScene() std::unique_ptr leader(new Aircraft(Aircraft::Eagle, mTextures)); // we create the player's airplane mPlayerAircraft = leader.get(); mPlayerAircraft -> setPosition(mSpawnPosition); // Set player position - mPlayerAircraft -> setVelocity(PLAYER_SIDEWARD_VELOCITY, mScrollSpeed); // forward velocity equals scroll speed, sideward velocity equals PLAYER_SIDEWARD_VELOCITY + mPlayerAircraft -> SetVelocity(PLAYER_SIDEWARD_VELOCITY, mScrollSpeed); // forward velocity equals scroll speed, sideward velocity equals PLAYER_SIDEWARD_VELOCITY mSceneLayers[Air] -> attachChild(std::move(leader)); // we attach the plane to the Air scene layer std::unique_ptr leftEscort(new Aircraft(Aircraft::Raptor, mTextures)); // create new airplane @@ -66,7 +67,28 @@ void World::buildScene() std::unique_ptr rightEscort(new Aircraft(Aircraft::Raptor, mTextures)); // create new airplane rightEscort -> setPosition(RIGHT_ESCORT_X_POSITION, RIGHT_ESCORT_Y_POSITION); // Set new airplane position mPlayerAircraft -> attachChild(std::move(rightEscort)); // leftEscort is now a child of player aircraft and it will folow it! +} +void World::draw() +{ + mWindow.setView(mWorldView); + mWindow.draw(mSceneGraph); +} +void World::update(sf::Time deltaTime) // controls world scrolling and entity movement +{ + mWorldView.move(0.f, mScrollSpeed * deltaTime.asSeconds()); + + sf::Vector2f position = mPlayerAircraft -> getPosition(); + sf::Vector2f velocity = mPlayerAircraft -> getVelocity(); + + if(position.x <= mWorldBounds.left + WORLD_MAX_DISTANCE_FROM_BOUNDARY || position.x >= mWorldBounds.left + mWorldBounds.width - WORLD_MAX_DISTANCE_FROM_BOUNDARY) // if the player gets too close to world bounds make its velocity negative so it comes back + { + velocity.x = -velocity.x; + mPlayerAircraft -> SetVelocity(velocity); } + + mSceneGraph.update(deltaTime); // mSceneGraph actaully applies these velocities +} + #endif // WORLD_CPP diff --git a/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.cpp b/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.cpp index 4f3e1a4..aa03a70 100644 --- a/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.cpp +++ b/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.cpp @@ -6,7 +6,7 @@ void Entity::SetVelocity(sf::Vector2f velocity) mVelocity = velocity; } -void Entity::setVelocity(float velocityX, float velocityY) +void Entity::SetVelocity(float velocityX, float velocityY) { mVelocity.x = velocityX; mVelocity.y = velocityY; diff --git a/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.hpp b/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.hpp index dee1bac..3816ef2 100644 --- a/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.hpp +++ b/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/entity.hpp @@ -7,7 +7,7 @@ class Entity : public SceneNode { public: void SetVelocity(sf::Vector2f velocity); - void setVelocity(float velocityX, float velocityY); + void SetVelocity(float velocityX, float velocityY); sf::Vector2f getVelocity() const; private: diff --git a/SFMLEngine/makingAGameTick/app b/SFMLEngine/makingAGameTick/app index 51cd5a1..cebf48e 100755 Binary files a/SFMLEngine/makingAGameTick/app and b/SFMLEngine/makingAGameTick/app differ diff --git a/SFMLEngine/makingAGameTick/constants.hpp b/SFMLEngine/makingAGameTick/constants.hpp index f4bdc52..347ca85 100644 --- a/SFMLEngine/makingAGameTick/constants.hpp +++ b/SFMLEngine/makingAGameTick/constants.hpp @@ -42,5 +42,6 @@ const float WORLD_TOP_Y_POSITION = 0; // const float WORLD_WIDTH = 0; by default mWorldView.getSize().x const float WORLD_HEIGHT = 2000; const float WORLD_SCROLL_SPEED = -1; +const float WORLD_MAX_DISTANCE_FROM_BOUNDARY = 150; #endif // CONSTANTS_HPP diff --git a/SFMLEngine/makingAGameTick/game.cpp b/SFMLEngine/makingAGameTick/game.cpp index ac141e1..fa824f5 100644 --- a/SFMLEngine/makingAGameTick/game.cpp +++ b/SFMLEngine/makingAGameTick/game.cpp @@ -16,7 +16,7 @@ -class Game +class Game : private sf::NonCopyable { public: Game(); // Sets up player radius, position and fill color @@ -35,15 +35,27 @@ class Game sf::RenderWindow mWindow; TextureHolder mTexture; sf::Sprite mPlayer; + World mWorld; }; -Game::Game() : mWindow(sf::VideoMode(640, 480), "SFML Application"), mTexture(), mPlayer() +Game::Game() +: mWindow(sf::VideoMode(640, 480), "World", sf::Style::Close) +, mWorld(mWindow) +/* , mFont() +, mStatisticsText() +, mStatisticsUpdateTime() +, mStatisticsNumFrames(0) +*/ { - mTexture.load(Textures::Eagle, PATH_TO_PLAYER_TEXTURE); - mPlayer.setTexture(mTexture.get(Textures::Eagle)); - mPlayer.setPosition(PLAYER_X_POSITION, PLAYER_Y_POSITION); + /* mFont.loadFromFile("Media/Sansation.ttf"); + mStatisticsText.setFont(mFont); + mStatisticsText.setPosition(5.f, 5.f); + mStatisticsText.setCharacterSize(10); + */ } + +// Resposible for managing game loop - fetching input form the window system, updating the world, and ordering the rendering of the game void Game::run() { /* Other useful frame rate related tecnhiques: @@ -126,7 +138,10 @@ void Game::update(sf::Time deltaTime) void Game::render() { mWindow.clear(); - mWindow.draw(mPlayer); + mWorld.draw(); + + mWindow.setView(mWindow.getDefaultView()); + // mWindow.draw(mStatisticsText); mWindow.display(); } diff --git a/SFMLEngine/makingAGameTick/game.o b/SFMLEngine/makingAGameTick/game.o index 89f3062..fbc9db9 100644 Binary files a/SFMLEngine/makingAGameTick/game.o and b/SFMLEngine/makingAGameTick/game.o differ