try this linefill func and start optimizing it
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user