summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/ray.h
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/ray.h')
-rw-r--r--crawl-ref/source/ray.h50
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