I'm remaking bevels from classic ROBLOX using UnionAsync and when I run the script, I get the -25 CSG error. Here is the code:
local bevel_size = 0.05
local inlet = bevel_size
local plugin = {}
function plugin:Negate(objects)
local negates = {}
for i, v in ipairs(objects) do
-- _, _ = pcall(function()
local thing = Instance.new("NegateOperation", nil)
thing.CFrame = v.CFrame
thing.Size = v.Mesh.Scale -- v.Size
v:Destroy()
table.insert(negates, #negates + 1, thing)
-- end)
end
return negates
end
function plugin:Union(objects)
local otherObjects = {}
local union
for i, v in ipairs(objects) do
if i >= 2 then
table.insert(otherObjects, #otherObjects + 1, v)
end
end
local success, response = pcall(function()
union = objects[1]:UnionAsync(otherObjects)
end)
if not success then
warn(response)
end
return union
end
function bevel(s)
local name = s.Name
--[[if s:IsA'UnionOperation' then
local composition = plugin:Separate{s}
for index, obj in next, composition do
composition[index] = bevel(obj)
end
return plugin:Union(composition)
elseif s:IsA'NegateOperation' then
s = unpack(plugin:Negate{s})
s = bevel(s)
s = unpack(plugin:Negate{s})
return s
else]]
if s:IsA'Part' then
-- Edges
local edges = {}
for x=-1,1,2 do
for y=-1,1,2 do
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(x/2, y/2, 0)) * CFrame.Angles(0, 0, math.pi/4)
local l = s.Size * Vector3.new(0, 0, 1) + Vector3.new(inlet, inlet, 0)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
part.Parent = workspace print('prot',part.Rotation)
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
end
for z=-1,1,2 do
for y=-1,1,2 do
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(0, y/2, z/2)) * CFrame.Angles(math.pi/4, 0, 0)
local l = s.Size * Vector3.new(1, 0, 0) + Vector3.new(0, inlet, inlet)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
end
for z=-1,1,2 do
for x=-1,1,2 do
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(x/2, 0, z/2)) * CFrame.Angles(0, math.pi/4, 0)
local l = s.Size * Vector3.new(0, 1, 0) + Vector3.new(inlet, 0, inlet)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
end
s = s:UnionAsync(edges) -- plugin:Union{s, unpack(edges)}
s.Name = name
s.UsePartColor = true
return s
elseif s:IsA'WedgePart' then
-- Edges
local edges = {}
for x=-1,1,2 do
for y=-1,-1 do
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(x/2, y/2, 0)) * CFrame.Angles(0, 0, math.pi/4)
local l = s.Size * Vector3.new(0, 0, 1) + Vector3.new(inlet, inlet, 0)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
part.Parent = workspace
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
end
for z=-1,1,2 do
for y=-1,1,2 do
if not (z==-1 and y==1) then
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(0, y/2, z/2)) * CFrame.Angles(math.pi/4, 0, 0)
local l = s.Size * Vector3.new(1, 0, 0) + Vector3.new(0, inlet, inlet)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
end
end
for z=1,1 do
for x=-1,1,2 do
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(x/2, 0, z/2)) * CFrame.Angles(0, math.pi/4, 0)
local l = s.Size * Vector3.new(0, 1, 0) + Vector3.new(inlet, 0, inlet)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
end
for v=-1,1,2 do
local p = s.CFrame * CFrame.new(s.Size*Vector3.new(v/2, 0, 0)) * CFrame.Angles(-math.atan(s.Size.y/s.Size.z), 0, math.pi/4)
local l = Vector3.new(inlet, inlet, s.Size.x+s.Size.y+s.Size.z)
local part = Instance.new'Part'
part.FormFactor = 'Custom'
part.BrickColor = s.BrickColor
part.CFrame = p
part.Size = Vector3.new(1,1,1)
local mesh = Instance.new'BlockMesh'
mesh.Parent = part
mesh.Scale = l
local neg = unpack(plugin:Negate{part})
if neg then table.insert(edges, neg) end
end
s = s:UnionAsync(edges) -- plugin:Union{s, unpack(edges)}
s.Name = name
s.UsePartColor = true
return s
end
end
for i, v in ipairs(workspace:GetDescendants()) do
local parent = v.Parent
local beveled = bevel(v)
if beveled then
beveled.Parent = parent
end
end
Help with this would be appreciated.
