summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/ray.cc
diff options
context:
space:
mode:
authorRobert Vollmert <rvollmert@gmx.net>2009-11-03 13:30:43 +0100
committerRobert Vollmert <rvollmert@gmx.net>2009-11-03 15:27:27 +0100
commita836385ed0270fa2e5f440236259407f4ed9c43c (patch)
treed38a3fdac166d207f3ba9175de3c4a33475bcfa2 /crawl-ref/source/ray.cc
parentccf8d8af59e39c6f9699662a31c8105a1b79ae36 (diff)
downloadcrawl-ref-a836385ed0270fa2e5f440236259407f4ed9c43c.tar.gz
crawl-ref-a836385ed0270fa2e5f440236259407f4ed9c43c.zip
Split _mirror into point and direction parts.
Diffstat (limited to 'crawl-ref/source/ray.cc')
-rw-r--r--crawl-ref/source/ray.cc32
1 files changed, 22 insertions, 10 deletions
diff --git a/crawl-ref/source/ray.cc b/crawl-ref/source/ray.cc
index 6418386a61..1917baf9b8 100644
--- a/crawl-ref/source/ray.cc
+++ b/crawl-ref/source/ray.cc
@@ -154,19 +154,31 @@ bool ray_def::advance()
return (!on_corner);
}
-static geom::ray _mirror(const geom::ray &rorig, const coord_def &side)
+static geom::vector _mirror_pt(const geom::vector &vorig, const coord_def &side)
{
- geom::ray r = rorig;
+ geom::vector v = vorig;
if (side.x == -1)
- {
- r.start.x = 1.0 - r.start.x;
- r.dir.x = -r.dir.x;
- }
+ v.x = 1.0 - v.x;
if (side.y == -1)
- {
- r.start.y = 1.0 - r.start.y;
- r.dir.y = -r.dir.y;
- }
+ v.y = 1.0 - v.y;
+ return (v);
+}
+
+static geom::vector _mirror_dir(const geom::vector &vorig, const coord_def &side)
+{
+ geom::vector v = vorig;
+ if (side.x == -1)
+ v.x = -v.x;
+ if (side.y == -1)
+ v.y = -v.y;
+ return (v);
+}
+
+static geom::ray _mirror(const geom::ray &rorig, const coord_def &side)
+{
+ geom::ray r;
+ r.start = _mirror_pt(rorig.start, side);
+ r.dir = _mirror_dir(rorig.dir, side);
return (r);
}