diff --git a/src/Constants.hpp b/src/Constants.hpp index b8b82a9..5f8181f 100644 --- a/src/Constants.hpp +++ b/src/Constants.hpp @@ -6,8 +6,8 @@ constexpr unsigned HEIGHT = 1080; constexpr float GRAVITY = 781.f; constexpr float RESTITUTION = 0.8f; constexpr float FRICTION = 0.9f; -constexpr float IMPULSE = 2000.f; +constexpr float IMPULSE = 1000.f; constexpr float REST_PIXEL_VELOCITY = 2.0f; -constexpr float BALL_RADIUS = 6.f; -constexpr unsigned BALL_QUANTITY = 1000; +constexpr float BALL_RADIUS = 50.f; +constexpr unsigned BALL_QUANTITY = 10; } // namespace Constants diff --git a/src/Game.cpp b/src/Game.cpp index e9afde1..15950c6 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -43,24 +43,33 @@ void Game::processKeyPressed(const sf::Event::KeyPressed &kP) { if (m_timeScale < 0.25f) m_timeScale = 0.25f; } - if (kP.code == sf::Keyboard::Key::F3) { + if (kP.code == sf::Keyboard::Key::D) { m_toggleDebug = !m_toggleDebug; } } void Game::processMousePressed(const sf::Event::MouseButtonPressed &mP) { - if (mP.button != sf::Mouse::Button::Left) return; - handleMouseClick(sf::Vector2i(mP.position.x, mP.position.y)); + sf::Vector2f mousePos(static_cast(mP.position.x), + static_cast(mP.position.y)); + if (mP.button == sf::Mouse::Button::Left) impulseBalls(mousePos); + if (mP.button == sf::Mouse::Button::Right) spawnBall(mousePos); } -void Game::handleMouseClick(const sf::Vector2i &mousePos) { - sf::Vector2f mouseWorld(static_cast(mousePos.x), - static_cast(mousePos.y)); +void Game::spawnBall(const sf::Vector2f &mousePos) { + auto newBallPtr = std::make_unique( + Constants::BALL_RADIUS, + mousePos, + sf::Vector2f(0.f, 0.f), + sf::Color::Black); + m_objects.push_back(std::move(newBallPtr)); +} + +void Game::impulseBalls(const sf::Vector2f &mousePos) { for (auto &object : m_objects) { auto *ball = dynamic_cast(object.get()); if (!ball) continue; - sf::Vector2f dir = mouseWorld - ball->getPosition(); + sf::Vector2f dir = mousePos - ball->getPosition(); ball->applyImpulse(Constants::IMPULSE * VectorMath::normalize(dir)); } } diff --git a/src/Game.hpp b/src/Game.hpp index 8bbf05e..ff058f8 100644 --- a/src/Game.hpp +++ b/src/Game.hpp @@ -46,7 +46,8 @@ class Game { void processKeyPressed(const sf::Event::KeyPressed& keyPressed); void processMousePressed(const sf::Event::MouseButtonPressed& mousePressed); - void handleMouseClick(const sf::Vector2i& mousePos); + void impulseBalls(const sf::Vector2f& mousePos); + void spawnBall(const sf::Vector2f& mousePos); void update(); void render(); void updateBallsParallel(float dt);