#include "Spiral.h" #include #include SpiralSystem::SpiralSystem() { m_bullets.reserve(RESERVED); } void SpiralSystem::update(const float dt) { const int min_height = 0 - 3 * MARGIN; const int max_height = GetScreenHeight() + MARGIN; const int min_width = 0 - MARGIN; const int max_width = GetScreenWidth() + MARGIN; auto it = m_bullets.begin(); while (it != m_bullets.end()) { auto& bullet = *it; bullet.timer += dt; if (bullet.timer > bullet.redirect_time) { bullet.timer -= bullet.redirect_time; bullet.angle = bullet.angle + bullet.redirect; if (bullet.angle > 2.0) bullet.angle -= 2.0; bullet.redirect *= bullet.redirect_decrease; } float velocity_x = bullet.velocity * std::cos(bullet.angle * M_PI); float velocity_y = bullet.velocity * std::sin(bullet.angle * M_PI); bullet.position.x += velocity_x * dt; bullet.position.y += velocity_y * dt; //bullet.position.x += 5*dt; const bool y_exceeded = bullet.position.y < min_height || bullet.position.y > max_height; const bool x_exceeded = bullet.position.x < min_width || bullet.position.x > max_width; if (y_exceeded || x_exceeded) it = m_bullets.erase(it); else ++it; } } void SpiralSystem::draw() { for (const auto& bullet : m_bullets) DrawCircle(bullet.position.x, bullet.position.y, bullet.radius, bullet.color); }