diff options
Diffstat (limited to 'crawl-ref/source/ray.h')
-rw-r--r-- | crawl-ref/source/ray.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/crawl-ref/source/ray.h b/crawl-ref/source/ray.h new file mode 100644 index 0000000000..0c2895574b --- /dev/null +++ b/crawl-ref/source/ray.h @@ -0,0 +1,50 @@ +/* + * File: ray.h + * Summary: Ray definition + * Written by: Linley Henzell + * + * Modified for Crawl Reference by $Author: j-p-e-g $ on $Date: 2007-09-10 11:21:32 -0700 (Mon, 10 Sep 2007) $ + * + * Change History (most recent first): + * + * <1> 7/11/07 MPC Split off from externs.h + */ + +#ifndef RAY_H +#define RAY_H + +struct ray_def +{ +public: + double accx; + double accy; + double slope; + // Quadrant 1: down-right + // Quadrant 2: down-left + // Quadrant 3: up-left + // Quadrant 4: up-right + int quadrant; + int fullray_idx; // for cycling: where did we come from? + +public: + ray_def(); + int x() const { return static_cast<int>(accx); } + int y() const { return static_cast<int>(accy); } + coord_def pos() const { return coord_def(x(), y()); } + + // returns the direction taken (0,1,2) + int advance(bool shorten = false, const coord_def *p = NULL); + int advance_through(const coord_def &point); + void advance_and_bounce(); + void regress(); + +private: + int raw_advance(); + double reflect(bool x, double oldc, double newc) const; + double reflect(double x, double c) const; + void set_reflect_point(const double oldx, const double oldy, + double *newx, double *newy, + bool blocked_x, bool blocked_y); +}; + +#endif |