diff --git a/SFMLEngine/makingAGameTick/Classes/Other/world.cpp b/SFMLEngine/makingAGameTick/Classes/Other/world.cpp index 2e3d765..dd0a953 100644 --- a/SFMLEngine/makingAGameTick/Classes/Other/world.cpp +++ b/SFMLEngine/makingAGameTick/Classes/Other/world.cpp @@ -1,6 +1,9 @@ #ifndef WORLD_CPP // ZA WARUDO #define WORLD_CPP +#include // std::size_t +#include "../SceneNodeDerrivatives/SpriteNode.hpp" + World::World(sf::RenderWindow& window) : mWindow(window) , mWorldView(window.getDefaultView()) @@ -20,8 +23,8 @@ World::World(sf::RenderWindow& window) , mPlayerAircraft(nullptr) { loadTextures(); - // buildScene(); - // mWorldView.setCenter(mSpawnPosition); + buildScene(); + mWorldView.setCenter(mSpawnPosition); } void World::loadTextures() @@ -31,4 +34,39 @@ void World::loadTextures() mTextures.load(Textures::Desert, PATH_TO_DESERT_TEXTURE); } +void World::buildScene() +{ + for (std::size_t i = 0; i < LayerCount; i++) // initialization of scene layers, iterate through array of layer node pointers + { + SceneNode::ScenePointer layer(new SceneNode()); + mSceneLayers[i] = layer.get(); // initialize elments of this arry + + mSceneGraph.attachChild(std::move(layer)); // attach new node to the scene graph's root node + } + + sf::Texture& texture = mTextures.get(Textures::Desert); + sf::IntRect textureRect(mWorldBounds); + texture.setRepeated(true); // make desert texture repeat itself + + std::unique_ptr backgroundSprite(new SpriteNode(texture, textureRect)); // SpriteNode class that links to the desrt texture, our sprite will be as big as the whole world because we passed the texture rectangle + backgroundSprite -> setPosition(mWorldBounds.left, mWorldBounds.top); + mSceneLayers[Background] -> attachChild(std::move(backgroundSprite)); + + // Adding airplanes + 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 + 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 + leftEscort -> setPosition(LEFT_ESCORT_X_POSITION, LEFT_ESCORT_Y_POSITION); // Set new airplane position + mPlayerAircraft -> attachChild(std::move(leftEscort)); // leftEscort is now a child of player aircraft and it will folow it! + + 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! + + + } #endif // WORLD_CPP diff --git a/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/SpriteNode.cpp b/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/SpriteNode.cpp index 6c92ba4..5fa3157 100644 --- a/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/SpriteNode.cpp +++ b/SFMLEngine/makingAGameTick/Classes/SceneNodeDerrivatives/SpriteNode.cpp @@ -1,5 +1,19 @@ #ifndef SPRITE_NODE_CPP #define SPRITE_NODE_CPP +SpriteNode::SpriteNode(const sf::Texture& texture) +: mSprite(texture) +{ +} + +SpriteNode::SpriteNode(const sf::Texture& texture, const sf::IntRect& textureRect) +: mSprite(texture, textureRect) +{ +} + +void SpriteNode::drawCurrent(sf::RenderTarget& target, sf::RenderStates states) const +{ + target.draw(mSprite, states); +} #endif // SPRITE_NODE_CPP diff --git a/SFMLEngine/makingAGameTick/Textures/Desert.jpg b/SFMLEngine/makingAGameTick/Textures/Desert.jpg new file mode 100644 index 0000000..3554b2d Binary files /dev/null and b/SFMLEngine/makingAGameTick/Textures/Desert.jpg differ diff --git a/SFMLEngine/makingAGameTick/Textures/Eagle.png b/SFMLEngine/makingAGameTick/Textures/Eagle.png new file mode 100644 index 0000000..f06466b Binary files /dev/null and b/SFMLEngine/makingAGameTick/Textures/Eagle.png differ diff --git a/SFMLEngine/makingAGameTick/Textures/Raptor.png b/SFMLEngine/makingAGameTick/Textures/Raptor.png new file mode 100644 index 0000000..8249b10 Binary files /dev/null and b/SFMLEngine/makingAGameTick/Textures/Raptor.png differ diff --git a/SFMLEngine/makingAGameTick/Textures/Raptor.xcf b/SFMLEngine/makingAGameTick/Textures/Raptor.xcf new file mode 100644 index 0000000..67ff582 Binary files /dev/null and b/SFMLEngine/makingAGameTick/Textures/Raptor.xcf differ diff --git a/SFMLEngine/makingAGameTick/app b/SFMLEngine/makingAGameTick/app index e7fe4b7..51cd5a1 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 897e414..f4bdc52 100644 --- a/SFMLEngine/makingAGameTick/constants.hpp +++ b/SFMLEngine/makingAGameTick/constants.hpp @@ -7,16 +7,24 @@ const std::string PATH_TO_PLAYER_TEXTURE = "Textures/Player.png"; const std::string PATH_TO_EAGLE_TEXTURE = "Textures/Eagle.png"; const std::string PATH_TO_RAPTOR_TEXTURE = "Textures/Raptor.png"; -const std::string PATH_TO_DESERT_TEXTURE = "Textures/Desert.png"; +const std::string PATH_TO_DESERT_TEXTURE = "Textures/Desert.jpg"; // Player constants const float PLAYER_RADIUS = 40; const float PLAYER_X_POSITION = 100; const float PLAYER_Y_POSITION = 100; const sf::Color PLAYER_COLOR = sf::Color::Cyan; +const float PLAYER_SIDEWARD_VELOCITY = 40; + +// Other sprites constants +const float LEFT_ESCORT_X_POSITION = -80; +const float LEFT_ESCORT_Y_POSITION = 50; +const float RIGHT_ESCORT_X_POSITION = -LEFT_ESCORT_X_POSITION; +const float RIGHT_ESCORT_Y_POSITION = LEFT_ESCORT_Y_POSITION; // Movement constants // const sf::Vector2f INITIAL_MOVEMENT (0.f, 0.f); + const float MOVING_UP_SPEED = -100; const float MOVING_DOWN_SPEED = -MOVING_UP_SPEED; const float MOVING_RIGHT_SPEED = 100; diff --git a/SFMLEngine/makingAGameTick/game.cpp b/SFMLEngine/makingAGameTick/game.cpp index a76d7ad..ac141e1 100644 --- a/SFMLEngine/makingAGameTick/game.cpp +++ b/SFMLEngine/makingAGameTick/game.cpp @@ -132,8 +132,15 @@ void Game::render() int main() { - Game game; - game.run(); + try + { + Game game; + game.run(); + } + catch (std::exception& e) + { + std::cout << "\nEXCEPTION: " << e.what() << std::endl; + } } #endif // GAME_CPP diff --git a/SFMLEngine/makingAGameTick/game.o b/SFMLEngine/makingAGameTick/game.o index 7c08357..89f3062 100644 Binary files a/SFMLEngine/makingAGameTick/game.o and b/SFMLEngine/makingAGameTick/game.o differ