function drawRays3D() { let r,mx,my,mp,dof, rx,ry,ra,xo,yo, disT, mxfix=0,myfix=0, c="#F00"; ra = pa-DR*30; if (ra<0) { ra+=2*PI; } if (ra>2*PI) { ra-=2*PI; } for (r=0;r<60;r++) { // --- Check Horizontal Lines --- dof=0; let disH = 999999, hx=px, hy=py; let aTan = -1/Math.tan(ra); if ( ra > PI ) { // looking up ry = (Math.floor(py/64)*64); rx=(py-ry)*aTan+px; yo=-64; xo=-yo*aTan; myfix=-1; } if ( ra < PI ) { // looking down ry = Math.ceil(py/64)*64; rx=(py-ry)*aTan+px; yo= 64; xo=-yo*aTan; } if (ra === 0 || ra === PI) { // looking straight left or right rx=px; ry=py; dof=8; } while (dof<8) { mx = Math.floor(rx / 64); my = Math.round(ry / 64) + myfix; mp = my*mapX+mx; if (mp > 0 && mp PI/2 && ra < 3*(PI/2) ) { // looking left rx = Math.floor(px/64)*64; ry=(px-rx)*nTan+py; xo=-64; yo=-xo*nTan; mxfix=1; } if ( ra < PI/2 || ra > 3*(PI/2) ) { // looking right console.log("right"); rx = Math.ceil(px/64)*64; ry=(px-rx)*nTan+py; xo= 64; yo=-xo*nTan; } if (ra === 0 || ra === PI) { // looking straight up or down rx=px; ry=py; dof=8; } while (dof<8) { mx = Math.round(rx / 64) - mxfix; my = Math.floor(ry / 64); mp = my*mapX+mx; if (mp > 0 && mp2*PI) { ca-=2*PI; } disT=disT*Math.cos(ca); // fix fisheye let lineH = (mapS*320)/disT; if (lineH>320) { lineH=320; } let lineO = 160 - lineH/2; //Canvas.drawLine(r*8+530,0,r*8+530,0,c,8); Canvas.drawSquare(r*8+530,lineO,8,lineH,c); // next ray angle ra += DR; if (ra<0) { ra+=2*PI; } if (ra>2*PI) { ra-=2*PI; } } }