Advertisement
Pinkishu

Untitled

Oct 15th, 2014
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         getTiles: function(x,y,width,height)
  2.         {
  3.             var ret = [];
  4.             this.level.layers.forEach(function(layer)
  5.             {
  6.                 for(var mX = x; mX < width + x; mX++)
  7.                 {
  8.                     for(var mY = y; mY < height + y; mY++)
  9.                     {
  10.                         ret.push(layer.layer.data[mY][mX]);
  11.                     }
  12.                 }
  13.             },this);
  14.             return ret;
  15.         },
  16.  
  17.  
  18.  
  19.         update: function()
  20.         {
  21.             var dt = this.game.time.elapsed / 1000;
  22.             if( this.paused ) { return; }
  23.  
  24.             var pSpeed = 10;
  25.             var move = [0,0];
  26.             var moved = [0,0];
  27.             var newDir = -1;
  28.             var mSpeed = pSpeed * dt;
  29.             var slideX = 0;
  30.             var slideY = 0;
  31.  
  32.             var keys = [this.cursors.up,this.cursors.right,this.cursors.down,this.cursors.left];
  33.             function vecx(dir) { if(dir === 1) { return  1; } else if(dir === 3) { return -1; } else { return 0; } }
  34.             function vecy(dir) { if(dir === 0) { return -1; } else if(dir === 2) { return  1; } else { return 0; } }
  35.  
  36.             for(var key = 0; key < keys.length; key++)
  37.             {
  38.                 if( keys[key].isDown )
  39.                 {
  40.                     move[0] += vecx(key) * mSpeed;
  41.                     move[1] += vecy(key) * mSpeed;
  42.                 }
  43.             }
  44.  
  45.  
  46.             var playerTileSize = [ this.player.worldWidth , this.player.worldHeight ];
  47.  
  48.             for(var m = 0; m < move.length; m++)
  49.             {
  50.                 if( move[m] === 0 ) { continue; }
  51.  
  52.                 // Mod for direction
  53.                 var mod = ( move[m] < 0 ? -1 : 1 );
  54.  
  55.                 // nm is index of the other element in move array
  56.                 var nm = ( m === 0 ? 1 : 0 );
  57.  
  58.                 // set which attribute of the tiles to check to see if they are collidable
  59.                 var collCheck = "";
  60.                 if( m === 0 ) { collCheck = (mod === -1 ? "collideRight" : "collideLeft"); }
  61.                 else { collCheck = (mod === -1 ? "collideDown" : "collideUp" ); }
  62.  
  63.                 // help variable to know which axis to use
  64.                 var axis = ( m === 0 ? "x" : "y" );
  65.  
  66.                 // more help variables, Tile = floored so its in tile coordinates
  67.                 var playerPos = [ this.player.worldX + moved[0], this.player.worldY + moved[1] ];
  68.                 var playerCenter = [this.player.worldX + moved[0] + this.player.worldWidth / 2, this.player.worldY + moved[1] + this.player.worldHeight / 2];
  69.                 var playerTile = [Math.floor(this.player.worldX + moved[0]), Math.floor(this.player.worldY + moved[1])];
  70.                 var playerEnd = [   this.player.worldX + moved[0] + playerTileSize[0] - ( (this.player.WorldX + moved[0]) % 1 === 0 ? 1 : 0 ),
  71.                                     this.player.worldY + moved[1] + playerTileSize[1] - ( (this.player.WorldY + moved[1]) % 1 === 0 ? 1 : 0 ) ];
  72.                 var playerTileEnd = [ Math.floor(playerEnd[0]), Math.floor(playerEnd[1]) ];
  73.  
  74.                 var movedPlayerTile = [ this.player.worldX + moved[0], this.player.worldY + moved[1] ];
  75.                 movedPlayerTile[m] += move[m];
  76.                 movedPlayerTile = [  ];
  77.  
  78.                 var movedPlayerTileEnd = [ playerEnd[0] + moved[0], playerEnd[1] + moved[1] ];
  79.                 movedPlayerTileEnd[m] += move[m];
  80.                 movedPlayerTileEnd = [ Math.floor(movedPlayerTileEnd[0]), Math.floor(movedPlayerTileEnd[1]) ];
  81.  
  82.                 // Our start is at the right side of the player, except if we move left, then it is the left side
  83.                 var start = playerEnd[m];
  84.                 if( mod === -1 ) { start = playerPos[m]; }
  85.                 // our end is the start with the movement added
  86.                 var end = start + move[m];
  87.  
  88.                 // put start and end into tile coordinates
  89.                 var tileStart = Math.floor(start);
  90.                 var tileEnd = Math.floor(end);
  91.                 // measure distance in tiles
  92.                 var tileSteps = Math.abs(tileStart - tileEnd) + 1;
  93.  
  94.                 var collided = false;
  95.                 for(var step = 1; step < tileSteps; step++)
  96.                 {
  97.                     // help variable, the tile we want to check is start + step tiles into the movement direction
  98.                     var helpStart = [ playerTile[0], playerTile[1] ];
  99.                     helpStart[m] = tileStart + mod * step;
  100.  
  101.                     // set the size of the check on the direction we aren't moving in
  102.                     var checkSize = [ 1, 1 ];
  103.                     checkSize[nm] = playerTileEnd[nm] - playerTile[nm] + 1;
  104.  
  105.                     var tiles = this.getTiles( helpStart[0], helpStart[1], checkSize[0], checkSize[1] );
  106.                     var collide = tiles.some(function(tile)
  107.                     {
  108.                         if(tile[collCheck])
  109.                         {
  110.                             move[m] = tile[axis] - playerPos[m];
  111.                             if( mod === 1 ) { move[m] -= playerTileSize[m]; }
  112.                             else { move[m]++; }
  113.                             return true;
  114.                         }
  115.                         return false;
  116.                     },this);
  117.  
  118.                     if(collide)
  119.                     {
  120.                         collided = true;
  121.                         break;
  122.                     }
  123.                 }
  124.  
  125.                 moved[m] = move[m];
  126.             }
  127.  
  128.             if(moved[0] < 0)
  129.             {
  130.                 newDir = 3;
  131.             }
  132.             else if(moved[0] > 0)
  133.             {
  134.                 newDir = 1;
  135.             }
  136.             if(moved[1] < 0)
  137.             {
  138.                 newDir = 0;
  139.             }
  140.             else if(moved[1] > 0)
  141.             {
  142.                 newDir = 2;
  143.             }
  144.             this.player.worldX += moved[0];
  145.             this.player.worldY += moved[1];
  146.             if(newDir !== this.player.dir)
  147.             {
  148.                 this.player.dir = newDir;
  149.             }
  150.         },
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement