Advertisement
Guest User

Untitled

a guest
Mar 11th, 2018
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.94 KB | None | 0 0
  1.  
  2. int mapsizex = 20;
  3. int mapsizey = 20;
  4. float xintersect, yintersect;
  5. float [] xintersects = new float[mapsizex+10];
  6. float [] yintersects = new float[mapsizey+10];
  7. int[][] playfield = new int[mapsizex+5][mapsizey+5];
  8. float xhit1, xhit2, yhit1, yhit2, height1, height2, dist;
  9. int fov = 90;
  10. float degrees = 0;
  11. boolean view = false;
  12. player player1;
  13.  
  14. void setup() {
  15.   size (800, 600);
  16.   for (int i = 1; i < mapsizex+1; i++) {
  17.     playfield[i][1] = 1;
  18.     playfield[1][i] = 1;
  19.     playfield[mapsizex][i] = 1;
  20.     playfield[i][mapsizey] = 1;
  21.     playfield[i][2] = 1;
  22.     playfield[2][i] = 1;
  23.     playfield[mapsizex-1][i] = 1;
  24.     playfield[i][mapsizey-1] = 1;
  25.   }
  26.   for (int i = 1; i < 5; i++) {
  27.     playfield[i][5] = 1;
  28.     playfield[7][5+i] = 1;
  29.     playfield[i][15] = 2;
  30.     playfield[12][5+i] = 4;
  31.     playfield[i][11] = 3;
  32.     playfield[2][9+i] = 1;
  33.   }
  34.   player1 = new player(10, 10.5, 145.001);
  35.   player1.xpos+= 0.1*sin(radians(player1.direction));
  36.   player1.ypos+= 0.1*cos(radians(player1.direction));
  37.   player1.modifyvdirection(0);
  38. }
  39.  
  40. boolean [] keys = new boolean[256];
  41. boolean [] lastKeys = new boolean[256];
  42.  
  43. PVector hitFwd = new PVector(0,0);
  44. PVector hitRev = new PVector(0,0);
  45. void keyPressed() {
  46.   int rawKey = key;
  47.   if (rawKey < 256) {
  48.     if ((rawKey>64)&&(rawKey<91)) rawKey+=32;
  49.     keys[rawKey] = true;
  50.   }
  51. }
  52.  
  53. void keyReleased() {
  54.   int rawKey = key;
  55.   if (rawKey < 256) {
  56.     if ((rawKey>64)&&(rawKey<91)) rawKey+=32;
  57.     keys[rawKey] = false;
  58.   }
  59. }
  60.  
  61. float turnSpeed = 2.0;
  62. float moveSpeed = 0.1;
  63. float minWallDist = 0.2;
  64.  
  65. void draw() {
  66.   background(0);
  67.   stroke(255);
  68.  
  69.   if (keys['v'] && !lastKeys['v']) view = !view;
  70.  
  71.   if (keys['a']) player1.modifydirection(turnSpeed);
  72.   if (keys['d']) player1.modifydirection(-turnSpeed);
  73.  
  74.   int mov = 0;
  75.   PVector hitLoc = new PVector(0,0);
  76.   if (keys['w']) {
  77.     hitLoc = hitFwd;
  78.     mov = 1;
  79.   }
  80.   if (keys['s']) {
  81.     hitLoc = hitRev;
  82.     mov = -1;
  83.   }
  84.  
  85.   float radians = (player1.direction/360.0) * -TWO_PI + HALF_PI;
  86.   PVector requestedMove = new PVector(mov*moveSpeed, 0).rotate(radians);
  87.  
  88.   //Collision detection
  89.   PVector playerLoc = new PVector( player1.xpos, player1.ypos);
  90.   float dist = (playerLoc.copy().add(requestedMove)).dist(hitLoc);
  91.   float distInv = 1.0 - dist/minWallDist;
  92.   if (dist < minWallDist) {
  93.     requestedMove.mult(-distInv);
  94.   }
  95.  
  96.   player1.xpos += requestedMove.x;
  97.   player1.ypos += requestedMove.y;
  98.  
  99.  
  100.   ellipseMode(CENTER);
  101.   if (!view) {
  102.     for (int j = 1; j < mapsizex+1; j++) {
  103.       for ( int i = 1; i < mapsizey+1; i++) {
  104.         fill(playfield[j][i]*63);
  105.         rect(j*30-30, i*30-30, 30, 30);
  106.       }
  107.     }
  108.     ellipse(player1.xpos*30-30, player1.ypos*30-30, 10, 10);
  109.     line (player1.xpos*30-30, player1.ypos*30-30, player1.xpos*30-30+500*sin(radians(player1.direction)), player1.ypos*30-30+500*cos(radians(player1.direction)));
  110.   } else {
  111.  
  112.     fill (64, 128, 255);
  113.     rect(0, 0, 800, 300);
  114.   }
  115.  
  116.   for (int i = 450; i > -450; i--) {
  117.     degrees = i/16.0;
  118.     player1.modifyvdirection(degrees);  
  119.  
  120.     calculateintersects();
  121.     if (view) {
  122.       dist = cos(radians(degrees))*sqrt((player1.xpos-xhit1)*(player1.xpos-xhit1)+(player1.ypos-yhit1)*(player1.ypos-yhit1));
  123.       stroke(int(255/(dist/2)));
  124.       if (dist < 2) {
  125.         stroke(255);
  126.         line(400-i, 0, 400-i, 600.0);
  127.       } else {
  128.         line(400-i, 300-(600.0/dist)*height1, 400-i, 300+600.0/dist);
  129.       }
  130.     } else {
  131.       stroke(0, 255, 255);
  132.       ellipse(xhit1*30-30, yhit1*30-30, 3, 3);
  133.       if (i==0) {
  134.         hitFwd = new PVector(xhit1, yhit1);
  135.         ellipse(xhit1*30-30, yhit1*30-30, 6, 6);
  136.       }
  137.     }
  138.   }
  139.   lastKeys = keys.clone();
  140. }
  141.  
  142. void calculateintersects() {
  143.   if (((player1.vdirection >= 0) && (player1.vdirection < 90)) || ((player1.vdirection >= 270) && (player1.vdirection < 360))) {
  144.     xintersect = player1.xpos+(1-player1.dypos())*tan(radians(player1.vdirection));
  145.   } else {
  146.     xintersect = player1.xpos-(player1.dypos())*tan(radians(player1.vdirection));
  147.   }
  148.   if ((player1.vdirection >= 0) && (player1.vdirection < 180)) {
  149.     yintersect = player1.ypos+(1-player1.dxpos())/tan(radians(player1.vdirection));
  150.   } else {
  151.     yintersect = player1.ypos-(player1.dxpos())/tan(radians(player1.vdirection));
  152.   }
  153.  
  154.  
  155.   for (int i = 0; i <= mapsizex; i++) {
  156.     if ((player1.vdirection > 90) && (player1.vdirection < 270)) {
  157.       xintersects[i] = player1.xpos+(xintersect-player1.xpos)/player1.dypos()*(player1.dypos()+i);
  158.       if (xintersects[i]<0) {
  159.         yhit1 = -100;
  160.         break;
  161.       }
  162.       if (xintersects[i]>mapsizex) {
  163.  
  164.         yhit1 = 100;
  165.         break;
  166.       }
  167.       if (playfield[int(xintersects[i])][int(player1.ypos-player1.dypos()-i-1)]>0) {
  168.         xhit1 = xintersects[i];
  169.         yhit1 = player1.ypos-player1.dypos()-i;
  170.         height1 = playfield[int(xintersects[i])][int(player1.ypos-player1.dypos()-i-1)];
  171.         break;
  172.       }
  173.     } else {
  174.       xintersects[i]=player1.xpos+(xintersect-player1.xpos)/(1-player1.dypos())*(1-player1.dypos()+i);
  175.  
  176.       if (xintersects[i]>mapsizex) {
  177.         yhit1 = 100;
  178.         break;
  179.       }
  180.       if (xintersects[i]<0) {
  181.         yhit1 = -100;
  182.         break;
  183.       }
  184.       if (playfield[int(xintersects[i])][int(player1.ypos-player1.dypos()+i+1)]>0) {
  185.         xhit1 = xintersects[i];
  186.         yhit1 = player1.ypos-player1.dypos()+i+1;
  187.         height1 = playfield[int(xintersects[i])][int(player1.ypos-player1.dypos()+i+1)];
  188.         break;
  189.       }
  190.     }
  191.   }
  192.  
  193.   for (int i = 0; i <= mapsizey; i++) {
  194.     if ((player1.vdirection > 0) && (player1.vdirection < 180)) {
  195.       yintersects[i] = player1.ypos+(yintersect-player1.ypos)/(1-player1.dxpos())*(1-player1.dxpos()+i);
  196.  
  197.       if (yintersects[i]<0) {
  198.         xhit2 = -100;
  199.         break;
  200.       }
  201.       if (yintersects[i]>mapsizey) {
  202.         xhit2 = 100;
  203.         break;
  204.       }
  205.  
  206.       if (playfield[int(player1.xpos-player1.dxpos()+i+1)][int(yintersects[i])]>0) {
  207.         xhit2 = player1.xpos-player1.dxpos()+i+1;
  208.         yhit2 = yintersects[i];
  209.         height2 = playfield[int(player1.xpos-player1.dxpos()+i+1)][int(yintersects[i])];
  210.         break;
  211.       }
  212.     } else {
  213.       yintersects[i] = player1.ypos+(yintersect-player1.ypos)/player1.dxpos()*(player1.dxpos()+i);
  214.       if (yintersects[i]<0) {
  215.         xhit2 = -100;
  216.         break;
  217.       }
  218.       if (yintersects[i]>mapsizey) {
  219.         xhit2 = 100;
  220.         break;
  221.       }
  222.  
  223.       if (playfield[int(player1.xpos-player1.dxpos()-i-1)][int(yintersects[i])]>0) {
  224.         xhit2 = player1.xpos-player1.dxpos()-i;
  225.         yhit2 = yintersects[i];
  226.         height2 = playfield[int(player1.xpos-player1.dxpos()-i-1)][int(yintersects[i])];
  227.         break;
  228.       }
  229.     }
  230.   }
  231.  
  232.   if (((player1.xpos-xhit2)*(player1.xpos-xhit2)+(player1.ypos-yhit2)*(player1.ypos-yhit2))<(player1.xpos-xhit1)*(player1.xpos-xhit1)+(player1.ypos-yhit1)*(player1.ypos-yhit1)) {
  233.     xhit1 = xhit2;
  234.     yhit1 = yhit2;
  235.     height1 = height2;
  236.   }
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement