#pragma once #include #include #include #include #include #include struct Ball { Ball(sf::Vector2f position_in, sf::Vector2f vel_in); sf::Vector2f pos; sf::Vector2f previousPos{}; sf::Vector2f velocity; bool alive{true}; }; struct Brick { Brick(sf::Vector2f position_in); sf::Vector2f pos; bool alive{true}; }; struct Player { Player() = default; Player(sf::Vector2f position_in); sf::Vector2f pos{}; sf::Vector2f previousPos{}; float score{}; int lives{3}; bool left{false}; bool right{false}; }; class Game { public: Game(); void run(); private: void imgui(); void render(); void input(); void collision(); void movement(); void updateEntities(); void checkEndGame(); void checkBallCollision(); private: sf::Clock clock; sf::RenderWindow window; Player player; std::vector balls; std::vector bricks; std::vector specialBricks; std::vector ballsToAdd; sf::CircleShape tempCircle; sf::RectangleShape tempRect; // mostly used for imgui sf::Vector2f brickSize{50, 10}; sf::Vector2f playerSize{500, 10}; sf::Vector2f playerStartPos{700,700}; sf::Vector2f brickHalfSize{brickSize / 2.f}; sf::Vector2f playerHalfSize{playerSize / 2.f}; int rowSize{8}; int columnSize{5}; int totalSpecialBricks{3}; int totalBricks{rowSize * columnSize}; unsigned int frameRate{60}; float playerSpeed{10}; float ballRadius{5.0f}; float ballMaxSpeed{10}; Color ballColor{sf::Color::Red}; Color brickColor{sf::Color::White}; Color playerColor{sf::Color::White}; Color specialBrickColor{sf::Color::Blue}; bool windowCollasped{false}; static constexpr unsigned int numPhysicsUpdates{4}; };