#pragma once
#include <SFML/Graphics.hpp>
#include <iostream>
#include "Map.h"

class Ray {

	private:

        // The Tail of the vector
		sf::Vector3<float> origin;

		// Direction / Length of the vector
		sf::Vector3<float> direction;

		// The incrementing points at which T intersects int(X, Y, Z) points
		sf::Vector3<float> intersection_t;

		// The speed at which the ray climbs.
		// Take the slope of the line (1 / cartesian.x/y/z) = delta_t.x/y/z
		sf::Vector3<float> delta_t;

		// The 3d voxel position the ray is currently at
		sf::Vector3<int> voxel;

		// The 2d pixel coordinate
		sf::Vector2<int> pixel;

		// Reference to the voxel map
		Map *map;

		// The dimensions of the voxel map
		sf::Vector3<int> dimensions;

	public:

		Ray(
			Map *m,
			sf::Vector2<int> resolution,
			sf::Vector2<int> pixel,
			sf::Vector3<float> camera_position,
			sf::Vector3<float> ray_direction
		);

		sf::Color Cast();
};
