#ifndef SHARED_RAY_DDA #define SHARED_RAY_DDA 1 #pragma once #include "shared/types.hh" namespace world { class Dimension; } // namespace world namespace world { class RayDDA final { public: RayDDA(void) = default; explicit RayDDA(const Dimension* dimension, const chunk_pos& start_chunk, const glm::fvec3& start_fpos, const glm::fvec3& direction); explicit RayDDA(const Dimension& dimension, const chunk_pos& start_chunk, const glm::fvec3& start_fpos, const glm::fvec3& direction); void reset(const Dimension* dimension, const chunk_pos& start_chunk, const glm::fvec3& start_fpos, const glm::fvec3& direction); void reset(const Dimension& dimension, const chunk_pos& start_chunk, const glm::fvec3& start_fpos, const glm::fvec3& direction); voxel_id step(void); public: const Dimension* dimension; chunk_pos start_chunk; glm::fvec3 start_fpos; glm::fvec3 direction; glm::fvec3 delta_dist; glm::fvec3 side_dist; voxel_pos vstep; double distance; voxel_pos vnormal; voxel_pos vpos; }; } // namespace world #endif // SHARED_RAY_DDA