SpelunkyRemake / Particle.cpp
Particle.cpp
Raw
#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;
}