SemiMetalAlchemist

Updated GL Movement

Mar 12th, 2018
736
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //UPDATE INPUT
  2.  
  3. input_left = keyboard_check(vk_left) or keyboard_check(ord("A"));
  4. input_right = keyboard_check(vk_right) or keyboard_check(ord("D"));
  5. input_up = keyboard_check(vk_up) or keyboard_check(ord("W"));
  6. input_down = keyboard_check(vk_down) or keyboard_check(ord("S"));
  7. input_walk = keyboard_check(vk_control) ;
  8. input_run = keyboard_check(vk_shift);
  9.  
  10. //ALTER SPEED
  11. if (input_walk or input_run) {
  12.     spd = abs((input_walk * w_spd) - (input_run * r_spd));
  13. }   else    {
  14.         spd = n_spd;
  15. }
  16.  
  17.  
  18.  
  19. //Gamepad Movement
  20.  
  21. var ix = gamepad_axis_value(input_device, gp_axislh);
  22. var iy = gamepad_axis_value(input_device, gp_axislv);
  23.  
  24. var dx = abs(ix)*ix * spd;
  25. var dy = abs(iy)*iy * spd;
  26.  
  27. var l = 0;
  28. if (ix != 0 or iy != 0) {
  29.     l = sqrt(ix*ix + iy*iy);
  30. }
  31.  
  32.  
  33. //RESET MOVE VARIABLES
  34. moveX = 0;
  35. moveY = 0;
  36.  
  37.  
  38.  
  39. //INTENDED MOVEMENT
  40. moveY = (input_down - input_up) * spd           //Had a major error with this, may have to play around with it
  41. if (moveY == 0){ moveX = (input_right - input_left) * spd;  }    
  42.  
  43. moveX = (input_right - input_left) * spd        //This fixed the error but I'm not sure if I need to ammend it
  44. if (moveX == 0){ moveY = (input_down - input_up) * spd; }  //This might make it worse
  45.  
  46. //GET DIRECTION PLAYER IS FACING
  47. if(moveX != 0) {
  48.     switch(sign(moveX)){
  49.         case 1: facing = dir.right; break;
  50.         case -1: facing = dir.left; break;
  51.     }
  52. } else if(moveY != 0){
  53.     switch(sign(moveY)){
  54.         case 1: facing = dir.down; break;
  55.         case -1: facing = dir.up; break;
  56.     }
  57. } else {
  58.     facing = -1;
  59. }
  60.    
  61.  
  62.  
  63. //COLLISION CHECKS
  64. //horizontal check
  65. if(moveX != 0) {
  66.     var collisionH = instance_place(x+moveX, y, obj_collision);
  67.     if(collisionH != noone and collisionH.collideable){
  68.         repeat(abs(moveX)){
  69.         if(!place_meeting(x+sign(moveX), y, obj_collision)){
  70.             x += sign(moveX);
  71.             }   else { break;   }
  72.         }
  73.         moveX = 0;
  74.     }
  75. }
  76.  
  77. //vertical check
  78. if(moveY !=0) {
  79.     var collisionV = instance_place(x, y+moveY, obj_collision);
  80.     if(collisionV != noone and collisionV.collideable){
  81.         repeat(abs(moveY)){
  82.         if(!place_meeting(x, y+sign(moveY), obj_collision)){
  83.             y += sign(moveY);
  84.             }   else {
  85.                 break;
  86.             }
  87.         }
  88.         moveY = 0;
  89.     }
  90. }
  91.  
  92. //APPLY MOVEMENT
  93. x += moveX;
  94. y += moveY;
  95.  
  96. //Objects
  97. var inst = instance_place(x,y, obj_transitions);
  98. if( inst !=noone and facing == inst.playerFacingBefore){
  99.         with(obj_game) {
  100.             if(!doTransition) {
  101.                 spawnRoom = inst.TargetRoom;
  102.                 spawnX = inst.targetX;
  103.                 spawnY = inst.targetY;
  104.                 spawnPlayerFacing = inst.playerFacingAfter;
  105.                 doTransition = true;
  106.             }
  107.     }
  108. }
Advertisement