From d2ec1b39dfb265f92a29dc634a0a3ea0a8b66b06 Mon Sep 17 00:00:00 2001 From: Kistaro Windrider Date: Sun, 1 Jun 2025 20:38:56 -0700 Subject: [PATCH] Show approximation of contact zone --- collisiontest.p8 | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/collisiontest.p8 b/collisiontest.p8 index f85eb69..381e5aa 100644 --- a/collisiontest.p8 +++ b/collisiontest.p8 @@ -23,7 +23,7 @@ function collides() -- x if ldx==0 then local lx=lx0 -- which ==lx1 - if (lx=bx1) return false + if (lx=bx1) return nil else local tx0=(bx0-lx0)/ldx local tx1=(bx1-lx0)/ldx @@ -34,7 +34,7 @@ function collides() if ldy==0 then local ly=ly0 -- which ==ly1 - if (ly=by1) return false + if (ly=by1) return nil else local ty0=(by0-ly0)/ldy local ty1=(by1-ly0)/ldy @@ -43,7 +43,8 @@ function collides() tmax=min(tmax,max(ty0,ty1)) end - return tmax>=tmin + if (tmax < tmin) return nil + return tmin,tmax end @@ -73,7 +74,7 @@ function _to_halfopen(x0,x1) end function _update60() - local t=time()/4 + local t=time()/16 local bx0_=_bounce_screen(t*1) local by0_=_bounce_screen(t*2) @@ -117,11 +118,19 @@ end function _draw() cls(0) rect(bx0,by0,bx1,by1,6) - local lc=2 - if collides() then - lc=8 + line(lx0,ly0,lx1,ly1,2) + local cmin, cmax = collides() + if cmin then + local dx,dy=lx1-lx0,ly1-ly0 + line(lx0 + dx*cmin, + ly0 + dy*cmin, + lx0 + dx*cmax, + ly0 + dy*cmax, + 8) + pset(lx0 + dx*cmin, + ly0 + dy*cmin, + 10) end - line(lx0,ly0,lx1,ly1,lc) pset(last_mx,last_my,7) end