Added outward-spiral tracer but did not test!
authorMartin Read <martin@blackswordsonics.com>
Mon, 23 Sep 2013 21:05:28 +0000 (22:05 +0100)
committerMartin Read <martin@blackswordsonics.com>
Mon, 23 Sep 2013 21:05:28 +0000 (22:05 +0100)
fov.c

diff --git a/fov.c b/fov.c
index dc10191..a204260 100644 (file)
--- a/fov.c
+++ b/fov.c
@@ -255,6 +255,7 @@ void resolve_radiance(Radiance *rad)
     int x;
     int i;
     int j;
+    int k;
 
     switch (rad->order)
     {
@@ -270,6 +271,66 @@ void resolve_radiance(Radiance *rad)
             }
         }
         break;
+    case Reo_spiral_out:
+        for (i = 0, j = 0, k = 0; i >= -(rad->radius); )
+        {
+            if (rad->affected[MAX_FOV_RADIUS + i][MAX_FOV_RADIUS + j])
+            {
+                rad->effect_fun(rad->centre_y + i, rad->centre_x + j, rad->pvt);
+            }
+            if ((i == 0) && (j == 0))
+            {
+                i = j = -1;
+                k = 1;
+            }
+            else if (i == -k)
+            {
+                if (j == k)
+                {
+                    ++i;
+                }
+                else
+                {
+                    ++j;
+                }
+            }
+            else if (j == k)
+            {
+                if (i == k)
+                {
+                    --j;
+                }
+                else
+                {
+                    ++i;
+                }
+            }
+            else if (i == k)
+            {
+                if (j == -k)
+                {
+                    --i;
+                }
+                else
+                {
+                    --j;
+                }
+            }
+            else if (j == -k)
+            {
+                if (i == 1 - k)
+                {
+                    ++k;
+                    i = -k;
+                    j = -k;
+                }
+                else
+                {
+                    --i;
+                }
+            }
+        }
+        break;
     default:
         print_msg("FATAL: attempt to use unimplemented radiance evaluation order %d\n", rad->order);
         abort();