#include "pch.h" #include "Particle.h" const Vector2f Particle::m_GravityAcceleration{ 0, -981.0f * 2 }; Particle::Particle(const Point2f& pos, const Vector2f& velocity) : m_Hitbox{ pos.x, pos.y, 0, 0 } , m_Velocity{ velocity } , m_Scale{ } , m_Angle{ } , m_BrakeSpeed{ 1000.f } , m_ScaleSpeed { 25.f } , m_Texture{ "Resources/Sprites/blood.png" } , m_Timer{ } { m_Hitbox.width = m_Texture.GetWidth() / 2.f; m_Hitbox.height = m_Texture.GetHeight() / 2.f; } Particle::~Particle() { } void Particle::Draw() const { if (!didFinish()) m_Texture.Draw(Rectf{ m_Hitbox.left - m_Hitbox.width / 2, m_Hitbox.bottom - m_Hitbox.height / 2, m_Hitbox.width, m_Hitbox.height }); } void Particle::Update(float elapsedSec, const Level& level) { if (!level.IsOnGround(m_Hitbox)) m_Velocity += elapsedSec * m_GravityAcceleration; if (std::fabs(m_Velocity.x) > m_BrakeSpeed * elapsedSec) { (m_Velocity.x > 0) ? m_Velocity.x -= m_BrakeSpeed * elapsedSec : m_Velocity.x += m_BrakeSpeed * elapsedSec; } else { m_Velocity.x = 0; } m_Hitbox.bottom += m_Velocity.y * elapsedSec; level.HandleCollision(m_Hitbox, m_Velocity); m_Hitbox.left += m_Velocity.x * elapsedSec; level.BounceCollision(m_Hitbox, m_Velocity); m_Hitbox.width -= elapsedSec * m_ScaleSpeed; m_Hitbox.height -= elapsedSec * m_ScaleSpeed; m_ScaleSpeed += elapsedSec; m_Timer += elapsedSec; } bool Particle::didFinish() const { if (m_Timer >= 0.75f) { return true; } return false; }