From 2c37784ad7b0234ec2fcb3c6c90662413ebabeb1 Mon Sep 17 00:00:00 2001 From: Kistaro Windrider Date: Sun, 8 Jun 2025 14:35:49 -0700 Subject: [PATCH] try this linefill func and start optimizing it --- collisiontest.p8 | 50 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/collisiontest.p8 b/collisiontest.p8 index 39b47f1..16b5691 100644 --- a/collisiontest.p8 +++ b/collisiontest.p8 @@ -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 (dy1) 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