Unions and differences now take arrays as arguments.
authorTim Vaughan <timv@ughan.xyz>
Thu, 23 Feb 2023 15:07:08 +0000 (16:07 +0100)
committerTim Vaughan <timv@ughan.xyz>
Thu, 23 Feb 2023 15:07:08 +0000 (16:07 +0100)
Operations.lua

index 617916d..db9b9a7 100644 (file)
@@ -1,25 +1,32 @@
 -- Package of geometric operations on SDF objects
 
-local function union(s1, s2)
+local function union(sdfs)
    return function (location)
-      local p1 = s1(location)
-      local p2 = s2(location)
+      local p = sdfs[1](location)
+      local pp = nil
 
-      if p1.dist < p2.dist then
-         return {dist = p1.dist, texture = p1.texture}
-      else
-         return {dist = p2.dist, texture = p2.texture}
+      for i=2,#sdfs do
+         pp = sdfs[i](location)
+         if pp.dist < p.dist then
+            p = pp
+         end
       end
+
+      return p
    end
 end
 
-local function diff(s1, s2)
+local function diff(sdfs)
    return function (location)
-      local p1 = s1(location)
-      local p2 = s2(location)
+      local p = sdfs[1](location)
+      local pp = nil
 
-      return {dist = math.max(p1.dist, -p2.dist),
-              texture = p1.texture}
+      for i=2,#sdfs do
+         pp = sdfs[i](location)
+         p.dist = math.max(p.dist, -pp.dist)
+      end
+      
+      return p
    end
 end