From c91cd134a1333e89ffddceb0b4a3d21c961f4fd5 Mon Sep 17 00:00:00 2001 From: Tim Vaughan Date: Thu, 23 Feb 2023 16:07:08 +0100 Subject: [PATCH] Unions and differences now take arrays as arguments. --- Operations.lua | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/Operations.lua b/Operations.lua index 617916d..db9b9a7 100644 --- a/Operations.lua +++ b/Operations.lua @@ -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 -- 2.20.1