diff --git a/CMakeLists.txt b/CMakeLists.txt index 99ca51a..1a16cba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,9 @@ add_executable(LotoStatek main.cpp headers/Rocket.h sources/Rocket.cpp headers/Size.h - headers/Position.h) + headers/Position.h + headers/ObjectItem.hpp + sources/ObjectItem.cpp) if(WIN32) set(SFML_ROOT "${CMAKE_SOURCE_DIR}/lib/SFML") diff --git a/assets/img/hearts/heart.png b/assets/img/hearts/heart.png new file mode 100644 index 0000000..b028939 Binary files /dev/null and b/assets/img/hearts/heart.png differ diff --git a/headers/Meteor.h b/headers/Meteor.h index e283b82..1a01eec 100644 --- a/headers/Meteor.h +++ b/headers/Meteor.h @@ -4,22 +4,12 @@ #include "SFML/Graphics/Texture.hpp" #include "SFML/Graphics/Sprite.hpp" #include "Position.h" +#include "ObjectItem.hpp" -class Meteor { +class Meteor : public ObjectItem { public: Meteor(float x, float y, sf::Texture &texture); - sf::Sprite &getSprite(); - bool getStatus(); void update(); -// ~Meteor(); -private: - sf::Texture meteorTexture; - sf::Sprite meteorSprite; - Position meteorPosition; - float meteorRotationSpeed; - float meteorSpeed; - bool outOfBounds; - static unsigned int counter; }; diff --git a/headers/ObjectItem.hpp b/headers/ObjectItem.hpp new file mode 100644 index 0000000..18157e7 --- /dev/null +++ b/headers/ObjectItem.hpp @@ -0,0 +1,24 @@ +#ifndef LOTOSTATEK_OBJECTITEM_HPP +#define LOTOSTATEK_OBJECTITEM_HPP + +#include "SFML/Graphics/Sprite.hpp" +#include "Position.h" +#include "SFML/Graphics/Texture.hpp" + +class ObjectItem { +public: + ObjectItem(float x, float y, sf::Texture &texture); + sf::Sprite &getSprite(); + bool getStatus(); + virtual void update() = 0; +protected: + sf::Texture texture; + sf::Sprite sprite; + Position position; + float rotationSpeed; + float movingSpeed; + bool outOfBounds; + static unsigned int counter; +}; + +#endif //LOTOSTATEK_OBJECTITEM_HPP diff --git a/sources/Meteor.cpp b/sources/Meteor.cpp index 996d402..6e0e2eb 100644 --- a/sources/Meteor.cpp +++ b/sources/Meteor.cpp @@ -1,40 +1,29 @@ -#include #include "../headers/Meteor.h" -Meteor::Meteor(float x, float y, sf::Texture &texture) { +Meteor::Meteor(float x, float y, sf::Texture &texture) : ObjectItem(x, y, texture) { outOfBounds = false; - meteorTexture = texture; - meteorSprite.setTexture(texture); - meteorSprite.setOrigin(meteorSprite.getLocalBounds().width / 2, meteorSprite.getLocalBounds().height / 2); // wycentrowanie sprite - meteorSprite.setPosition(x, y); - meteorSpeed = 5.0f; - meteorSprite.scale(0.05f, 0.05f); - meteorPosition.x = x; - meteorPosition.y = y; - meteorRotationSpeed = static_cast(rand() % 2 + 1) * (rand() % 2 == 0 ? 1 : -1); + texture = texture; + sprite.setTexture(texture); + sprite.setOrigin(sprite.getLocalBounds().width / 2, sprite.getLocalBounds().height / 2); // wycentrowanie sprite + sprite.setPosition(x, y); + movingSpeed = 5.0f; + sprite.scale(0.05f, 0.05f); + position.x = x; + position.y = y; + rotationSpeed = static_cast(rand() % 2 + 1) * (rand() % 2 == 0 ? 1 : -1); } -sf::Sprite &Meteor::getSprite() { - return meteorSprite; -} + void Meteor::update() { - meteorSprite.move(0.0f, meteorSpeed); // przesunięcie sprajta - meteorPosition.y += int(meteorSpeed); // przesunięcie pozycji - meteorSprite.rotate(meteorRotationSpeed); // obracanie tym meteorkiem pięknym - if(meteorPosition.y > 900) { + sprite.move(0.0f, movingSpeed); // przesunięcie sprajta + position.y += int(movingSpeed); // przesunięcie pozycji + sprite.rotate(rotationSpeed); // obracanie tym meteorkiem pięknym + if(position.y > 900) { outOfBounds = true; // jeżeli wyszedł poza granice ekranu ustaw tą zmienną } -// std::cout << "x: " << meteorSprite.getPosition().x << std::endl; -// std::cout << "y: " << meteorSprite.getPosition().y << std::endl; } -bool Meteor::getStatus() { - return outOfBounds; -} - -unsigned int Meteor::counter = 0; - // było użyte do testowania czy meteoryt jest kasowany //Meteor::~Meteor() { // Meteor::counter++; diff --git a/sources/ObjectItem.cpp b/sources/ObjectItem.cpp new file mode 100644 index 0000000..7e4bb22 --- /dev/null +++ b/sources/ObjectItem.cpp @@ -0,0 +1,17 @@ +#include "../headers/ObjectItem.hpp" + +ObjectItem::ObjectItem(float x, float y, sf::Texture &texture) { + Position position_; + position_.x = x; + position_.y = y; + position = position_; + this->texture = texture; +} + +bool ObjectItem::getStatus() { + return outOfBounds; +} + +sf::Sprite &ObjectItem::getSprite() { + return sprite; +} \ No newline at end of file diff --git a/sources/Plansza.cpp b/sources/Plansza.cpp index 90acec2..5183a91 100644 --- a/sources/Plansza.cpp +++ b/sources/Plansza.cpp @@ -1,6 +1,7 @@ #include #include #include "../headers/Plansza.h" +#include "../headers/ObjectItem.hpp" Plansza::Plansza(unsigned int windowHeight, unsigned int windowWidth, sf::RenderWindow *mainWindow) : background("../assets/img/background/background.png", 2.0f),