// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #include "Ray2D.hpp" using namespace Dawn; Ray2D::Ray2D(glm::vec2 pos, glm::vec2 dir) : position(pos), direction(dir) { } bool_t Ray2D::intersects(struct Ray2D ray, glm::vec2 *out) { glm::vec2 j = this->position - ray.position; float_t f = -ray.direction.x * direction.y + direction.x * ray.direction.y; float_t s = (-direction.y * j.x + direction.x * j.y) / f; float_t t = (ray.direction.x * j.y - ray.direction.y * j.x) / f; if(s >= 0 && s <= 1 && t >= 0 && t <= 1) { *out = position + (t * direction); return true; } return false; }