ray-casting-demo/Ray.cpp

170 lines
5.0 KiB
C++

#include "Ray.h"
Ray::Ray(sf::Vector2f startPoint, sf::Vector2f endPoint, sf::Color color)
{
m_points[start].position = startPoint;
m_points[start].color = color;
m_points[end].position = endPoint;
m_points[end].color = color;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
Ray::Ray(sf::Vector2f startPoint, float length, sf::Angle angle, sf::Color color)
{
m_points[start].position = startPoint;
m_points[start].color = color;
m_points[end].position = constructVector(startPoint, angle, length);
m_points[end].color = color;
m_angle = angle;
}
Ray::Ray(const Ray& ray)
{
auto& newPoints = ray.points();
m_points[start].position = newPoints[start].position;
m_points[start].color = newPoints[start].color;
m_points[end].position = newPoints[end].position;
m_points[end].color = newPoints[end].color;
m_angle = ray.angle();
}
void Ray::change(const Ray& ray, bool copyColor)
{
auto& newPoints = ray.points();
m_points[start].position = newPoints[start].position;
m_points[end].position = newPoints[end].position;
if (copyColor)
{
m_points[start].color = newPoints[start].color;
m_points[end].color = newPoints[0].color;
}
m_angle = ray.angle();
}
void Ray::change(sf::Vector2f startPoint, sf::Vector2f endPoint)
{
m_points[start].position = startPoint;
m_points[end].position = endPoint;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::change(sf::Vector2f startPoint, sf::Vector2f endPoint, sf::Color color)
{
m_points[start].position = startPoint;
m_points[start].color = color;
m_points[end].position = endPoint;
m_points[end].color = color;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeStart(sf::Vector2f startPoint, sf::Color color)
{
m_points[start].position = startPoint;
m_points[start].color = color;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeStart(sf::Vector2f startPoint)
{
m_points[start].position = startPoint;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeStart(const Ray& ray, bool copyColor)
{
auto& newStart = ray.points()[0];
m_points[start].position = newStart.position;
if (copyColor) m_points[start].color = newStart.color;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeEnd(sf::Vector2f endPoint, sf::Color color)
{
m_points[end].position = endPoint;
m_points[end].color = color;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeEnd(sf::Vector2f endPoint)
{
m_points[end].position = endPoint;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeEnd(const Ray& ray, bool copyColor)
{
auto& newEnd = ray.points()[end];
m_points[end].position = newEnd.position;
if (copyColor) m_points[end].color = newEnd.color;
if (m_points[start].position - m_points[end].position == sf::Vector2f{ 0.f, 0.f })
{
m_angle = sf::Angle::Zero;
}
else
{
m_angle = sf::radians(std::atan2f(m_points[end].position.y - m_points[start].position.y, m_points[end].position.x - m_points[start].position.x));
}
}
void Ray::changeColor(sf::Color color)
{
m_points[start].color = color;
m_points[end].color = color;
}