Advertisement
jargon

// LabDemo2Js (Beta) :: "render Floor Textures.js"

Sep 14th, 2024 (edited)
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // LabDemo2Js (Beta) :: "Render Floor Textures"
  2.  
  3. // Function to map screen pixels in the floor to board coordinates and texture pixels
  4. function renderFloorTextures(canvas) {
  5.    
  6.     if (!canvas || !(canvas instanceof HTMLCanvasElement)) {
  7.         console.error('Invalid canvas element.');
  8.         return;
  9.     }
  10.  
  11.     const context = canvas.getContext('2d');
  12.    
  13.     const cosang = Math.cos(player.angle);
  14.     const sinang = Math.sin(player.angle);
  15.    
  16.     const rayDirX0 = cosang - sinang;
  17.     const rayDirY0 = sinang + cosang;
  18.     const rayDirX1 = cosang + sinang;
  19.     const rayDirY1 = sinang - cosang;
  20.  
  21.     for (let sy = YDIM / 2; sy < YDIM; sy++) {
  22.         for (let sx = 0; sx < XDIM; sx++) {
  23.            
  24.             const correctedY = sy - YDIM / 2;
  25.             const dist = player.z / correctedY;
  26.             const screenX = 2 * sx / XDIM - 1;
  27.            
  28.             const rayDirX = rayDirX0 + screenX * (rayDirX1 - rayDirX0);
  29.             const rayDirY = rayDirY0 + screenX * (rayDirY1 - rayDirY0);
  30.            
  31.             const floorX = player.x + dist * rayDirX;
  32.             const floorY = player.y + dist * rayDirY;
  33.            
  34.             const boardX = Math.floor(floorX);
  35.             const boardY = Math.floor(floorY);
  36.    
  37.             context.fillStyle = checkerBoardTile(boardX,boardY);
  38.             context.fillRect(sx, sy, 1, 1);
  39.            
  40.             /*
  41.             if (board[boardX] && board[boardX][boardY] && board[boardX][boardY][1]) {
  42.                
  43.                 const mockKey = board[boardX][boardY][1];
  44.                
  45.                 if (mockData[mockKey] && mockData[mockKey].variants[YDIM]) {
  46.                    
  47.                     const mock = mockData[mockKey].variants[YDIM];
  48.                    
  49.                     if (mock.complete) {
  50.                        
  51.                         const textureX = Math.floor((floorX - boardX) * mock.width) % mock.width;
  52.                         const textureY = Math.floor((floorY - boardY) * mock.height) % mock.height;
  53.                         context.drawImage(mock, textureX, textureY, 1, 1, sx, sy, 1, 1);
  54.                    
  55.                     } else {
  56.                        
  57.                         context.fillStyle = 'rgba(0, 0, 0, 0.5)';
  58.                         context.fillRect(sx, sy, 1, 1);
  59.                    
  60.                     }
  61.                 }
  62.             }
  63.             */
  64.         }
  65.     }
  66. }
  67.  
  68. function checkerBoardTile ( x, y ) {
  69.     switch ((x ^ y ^ 1) & 1) {
  70.         case 0:
  71.             return `rgba(0, 0, 0, 1.0)`; // Black
  72.         default:
  73.             return `rgba(255, 255, 255, 1.0)`; // White
  74.     }
  75. }
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement