skip iterations if transparency not enabled

This commit is contained in:
BuckarooBanzay 2024-06-06 13:41:59 +02:00
parent b7202d2ec2
commit d806872d47
2 changed files with 7 additions and 6 deletions

View File

@ -40,7 +40,7 @@ function isogen.get_cube_position(center_x, center_y, cube_len, _, pos)
return x, y
end
function isogen.probe_position(min, max, pos, ipos, list, get_node)
function isogen.probe_position(min, max, pos, ipos, list, get_node, skip_alpha)
while vector.in_area(pos, min, max) do
local node = get_node(pos)
local color = isogen.get_color(node)
@ -59,8 +59,8 @@ function isogen.probe_position(min, max, pos, ipos, list, get_node)
node = node
})
if not color.a or color.a == 255 then
-- solid color
if not color.a or color.a == 255 or skip_alpha then
-- solid color or skip-param set
break
end
end

View File

@ -33,25 +33,26 @@ function isogen.draw(pos1, pos2, opts)
local ipos = vector.new(1, -1, 1)
local list = {}
local skip_alpha = not opts.enable_transparency
-- top layer
for x=min.x, max.x do
for z=min.z, max.z do
isogen.probe_position(min, max, vector.new(x, max.y, z), ipos, list, opts.get_node)
isogen.probe_position(min, max, vector.new(x, max.y, z), ipos, list, opts.get_node, skip_alpha)
end
end
-- left layer (without top stride)
for x=min.x, max.x do
for y=min.y, max.y-1 do
isogen.probe_position(min, max, vector.new(x, y, min.z), ipos, list, opts.get_node)
isogen.probe_position(min, max, vector.new(x, y, min.z), ipos, list, opts.get_node, skip_alpha)
end
end
-- right layer (without top and left stride)
for z=min.z+1, max.z do
for y=min.y, max.y-1 do
isogen.probe_position(min, max, vector.new(min.x, y, z), ipos, list, opts.get_node)
isogen.probe_position(min, max, vector.new(min.x, y, z), ipos, list, opts.get_node, skip_alpha)
end
end