#include "ArcGenerator.h" #include #include #include #include #include "ConstantVelocity.h" ArcGenerator::ArcGenerator(std::shared_ptr position, ConstantVelocityBullet::Vector& bullets) : m_position {position}, m_bullets {bullets}, m_delay {0}, m_interval {0.22f}, m_arc {2.f}, m_angle {0}, m_rotation {0}, m_radius {3}, m_last {false}, m_speed {80}, m_shift {10}, m_segments {30}, m_color {100, 100, 240, 255} { } void ArcGenerator::update(const float dt) { if (!m_enabled) return; m_delay += dt; m_angle += m_rotation * dt; const int segments = m_last ? m_segments + 1 : m_segments; if (m_delay > m_interval) { m_delay -= m_interval; for (float i = 0; i < segments; ++i) { const float angle = (m_angle - m_arc / 2 + m_arc * i / m_segments) * M_PI; const float cos = std::cos(angle); const float sin = std::sin(angle); ConstantVelocityBullet bullet; bullet.color = m_color; bullet.radius = m_radius; bullet.velocity.x = cos * m_speed; bullet.velocity.y = sin * m_speed; bullet.position.x = m_position->x + cos * m_shift; bullet.position.y = m_position->y + sin * m_shift; m_bullets.push_back(std::move(bullet)); } } }