try this linefill func and start optimizing it
This commit is contained in:
parent
37d9e3d30e
commit
2c37784ad7
@ -114,8 +114,9 @@ end
|
|||||||
function _draw()
|
function _draw()
|
||||||
cls(0)
|
cls(0)
|
||||||
rect(bx0,by0,bx1,by1,6)
|
rect(bx0,by0,bx1,by1,6)
|
||||||
quickzot(lx1,ly1,2,lx1-lx0,ly1-ly0,10,9,8)
|
--quickzot(lx1,ly1,2,lx1-lx0,ly1-ly0,10,9,8)
|
||||||
--line(lx0,ly0,lx1,ly1,2)
|
linefill(lx0, ly0, lx1, ly1, 2, 9)
|
||||||
|
line(lx0,ly0,lx1,ly1,2)
|
||||||
local cmin, cmax = collides()
|
local cmin, cmax = collides()
|
||||||
if cmin then
|
if cmin then
|
||||||
local dx,dy=lx1-lx0,ly1-ly0
|
local dx,dy=lx1-lx0,ly1-ly0
|
||||||
@ -174,6 +175,51 @@ function quickzot(x,y,r,dx,dy,hot,warm,cold)
|
|||||||
end
|
end
|
||||||
rectfill(x-r2,y-r2,x+r2,y+r2,hot)
|
rectfill(x-r2,y-r2,x+r2,y+r2,hot)
|
||||||
end
|
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__
|
__gfx__
|
||||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||||
|
Loading…
x
Reference in New Issue
Block a user