daily pastebin goal
67%
SHARE
TWEET

scr_platformer_move

niccolofavari Feb 13th, 2018 (edited) 151 Never
Upgrade to PRO!
ENDING IN00days00hours00mins00secs
  1. /**********************
  2.   Horizontal Movement
  3.  **********************/
  4. if xVel != 0
  5. {
  6.     xVelSub    += xVel;
  7.     vxNew       = round(xVelSub);
  8.     xVelSub    -= vxNew;
  9.     xdir        = sign(vxNew)
  10.     xprev        = x
  11.    
  12.    
  13.     // Avoid moving subpixel sprite if colliding with wall
  14.     instance_deactivate_object(obj_slope) // Don't consider slopes
  15.     if collision_rectangle(bbox_left + sign(xVel), bbox_top, bbox_right + sign(xVel), bbox_bottom, obj_solid, true, true)
  16.     {
  17.         xVel        = 0
  18.         xVelSub     = 0
  19.         vxNew       = 0
  20.     }
  21.     instance_activate_object(obj_slope)
  22.    
  23.    
  24.    
  25.     // Horizontal
  26.     repeat(abs(vxNew))
  27.     {
  28.         // In case of horizontal collision
  29.         if collision_rectangle(bbox_left + xdir, bbox_top, bbox_right + xdir, bbox_bottom, obj_solid, true, true)
  30.         {
  31.             // If it's a slope up
  32.             if !collision_rectangle(bbox_left + xdir, bbox_top - 1, bbox_right + xdir, bbox_bottom - 1, obj_solid, true, true)
  33.             {
  34.                 y--         // Move Up
  35.                 x += xdir   // Move Ahead
  36.             }
  37.             // If it's not a slope
  38.             else
  39.             {
  40.                 xVelSub = 0
  41.                 xVel = 0    // Stop completely
  42.                 break       // Stop repeating. We're still.
  43.             }
  44.         }
  45.         // If there is no obstacle ahead
  46.         else
  47.         {
  48.             // In case it's a slope down
  49.             if (yVel >= 0) && !collision_rectangle(bbox_left + xdir, bbox_top + 1, bbox_right + xdir, bbox_bottom + 1, obj_solid, true, true) && collision_rectangle(bbox_left + xdir, bbox_top + 2, bbox_right + xdir, bbox_bottom + 2, obj_solid, true, true)
  50.             {
  51.                 y++         // Move Down
  52.             }
  53.             // Move ahead then
  54.             x += xdir
  55.         }
  56.     }
  57. }
  58.  
  59. /**********************
  60.   Vertical Movement
  61.  **********************/
  62. if yVel != 0
  63. {
  64.     yVelSub    += yVel;
  65.     vyNew       = round(yVelSub);
  66.     yVelSub    -= vyNew;
  67.     ydir        = sign(vyNew)
  68.     yprev       = y
  69.     // Going Down
  70.     if ydir == 1
  71.     {
  72.         for (y = y; y < yprev + vyNew; y++)
  73.         {
  74.             if collision_rectangle(bbox_left, bbox_bottom + 1, bbox_right, bbox_bottom + 1, obj_solid, true, true)
  75.             {
  76.                 yVel = 0
  77.                 yVelSub = 0
  78.                 break
  79.          
  80.             }
  81.         }
  82.      }
  83.      else if ydir == -1
  84.      {
  85.         for (y = y; y > yprev + vyNew; y--)
  86.         {
  87.             var ceiling = collision_rectangle(bbox_left, bbox_top - 1, bbox_right, bbox_top - 1, obj_solid, true, true)
  88.  
  89.             if ceiling > 0
  90.             {
  91.                 yVel = 0
  92.                 yVelSub = 0
  93.                 break
  94.             }
  95.         }
  96.     }
  97. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top