try this linefill func and start optimizing it
This commit is contained in:
parent
37d9e3d30e
commit
2c37784ad7
@ -114,8 +114,9 @@ end
|
||||
function _draw()
|
||||
cls(0)
|
||||
rect(bx0,by0,bx1,by1,6)
|
||||
quickzot(lx1,ly1,2,lx1-lx0,ly1-ly0,10,9,8)
|
||||
--line(lx0,ly0,lx1,ly1,2)
|
||||
--quickzot(lx1,ly1,2,lx1-lx0,ly1-ly0,10,9,8)
|
||||
linefill(lx0, ly0, lx1, ly1, 2, 9)
|
||||
line(lx0,ly0,lx1,ly1,2)
|
||||
local cmin, cmax = collides()
|
||||
if cmin then
|
||||
local dx,dy=lx1-lx0,ly1-ly0
|
||||
@ -174,6 +175,51 @@ function quickzot(x,y,r,dx,dy,hot,warm,cold)
|
||||
end
|
||||
rectfill(x-r2,y-r2,x+r2,y+r2,hot)
|
||||
end
|
||||
|
||||
-- linefill x0 y0 x1 y1 r [col]
|
||||
-- draw a thicc line
|
||||
-- https://www.lexaloffle.com/bbs/?tid=39016
|
||||
function linefill(ax,ay,bx,by,r,c)
|
||||
if(c) color(c)
|
||||
local dx,dy=bx-ax,by-ay
|
||||
-- avoid overflow
|
||||
-- credits: https://www.lexaloffle.com/bbs/?tid=28999
|
||||
local d,n = abs(dx),abs(dy)
|
||||
if (d<n) d,n=n,d
|
||||
n/=d
|
||||
d*=(n*n+1)^0.5
|
||||
if(d<0.001) return
|
||||
local ca,sa=dx/d,-dy/d
|
||||
|
||||
-- polygon points
|
||||
local s={
|
||||
{0,-r},{d,-r},{d,r},{0,r}
|
||||
}
|
||||
local u,v,spans=s[4][1],s[4][2],{}
|
||||
local x0,y0=ax+u*ca+v*sa,ay-u*sa+v*ca
|
||||
for i=1,4 do
|
||||
local u,v=s[i][1],s[i][2]
|
||||
local x1,y1=ax+u*ca+v*sa,ay-u*sa+v*ca
|
||||
local _x1,_y1=x1,y1
|
||||
if(y0>y1) x0,y0,x1,y1=x1,y1,x0,y0
|
||||
local dx=(x1-x0)/(y1-y0)
|
||||
if(y0<0) x0-=y0*dx y0=-1
|
||||
local cy0=y0\1+1
|
||||
-- sub-pix shift
|
||||
x0+=(cy0-y0)*dx
|
||||
for y=y0\1+1,min(y1\1,127) do
|
||||
-- open span?
|
||||
local span=spans[y]
|
||||
if span then
|
||||
rectfill(x0,y,span,y)
|
||||
else
|
||||
spans[y]=x0
|
||||
end
|
||||
x0+=dx
|
||||
end
|
||||
x0,y0=_x1,_y1
|
||||
end
|
||||
end
|
||||
__gfx__
|
||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
|
Loading…
x
Reference in New Issue
Block a user