SemiMetalAlchemist icon

Updated GL Movement

SemiMetalAlchemist | PRO | 03/12/18 07:10:01 PM UTC | 0 ⭐ | 10203 👁️ | Never ⏰ | []
Game Maker |

0 B

|

None

|

0 👍

/

0 👎

//UPDATE INPUT
 
input_left = keyboard_check(vk_left) or keyboard_check(ord("A"));
input_right = keyboard_check(vk_right) or keyboard_check(ord("D"));
input_up = keyboard_check(vk_up) or keyboard_check(ord("W"));
input_down = keyboard_check(vk_down) or keyboard_check(ord("S"));
input_walk = keyboard_check(vk_control) ;
input_run = keyboard_check(vk_shift);
 
//ALTER SPEED
if (input_walk or input_run) {
    spd = abs((input_walk * w_spd) - (input_run * r_spd));
}   else    {
        spd = n_spd;
}
 
 
 
//Gamepad Movement
 
var ix = gamepad_axis_value(input_device, gp_axislh);
var iy = gamepad_axis_value(input_device, gp_axislv);
 
var dx = abs(ix)*ix * spd;
var dy = abs(iy)*iy * spd;
 
var l = 0;
if (ix != 0 or iy != 0) {
    l = sqrt(ix*ix + iy*iy);
}
 
 
//RESET MOVE VARIABLES
moveX = 0;
moveY = 0;
 
 
 
//INTENDED MOVEMENT
moveY = (input_down - input_up) * spd           //Had a major error with this, may have to play around with it
if (moveY == 0){ moveX = (input_right - input_left) * spd;  }    
 
moveX = (input_right - input_left) * spd        //This fixed the error but I'm not sure if I need to ammend it
if (moveX == 0){ moveY = (input_down - input_up) * spd; }  //This might make it worse
 
//GET DIRECTION PLAYER IS FACING
if(moveX != 0) {
    switch(sign(moveX)){
        case 1: facing = dir.right; break;
        case -1: facing = dir.left; break;
    }
} else if(moveY != 0){
    switch(sign(moveY)){
        case 1: facing = dir.down; break;
        case -1: facing = dir.up; break;
    }
} else {
    facing = -1;
}
    
 
 
//COLLISION CHECKS
//horizontal check
if(moveX != 0) {
    var collisionH = instance_place(x+moveX, y, obj_collision);
    if(collisionH != noone and collisionH.collideable){
        repeat(abs(moveX)){
        if(!place_meeting(x+sign(moveX), y, obj_collision)){
            x += sign(moveX);
            }   else { break;   }
        }
        moveX = 0;
    }
}
 
//vertical check
if(moveY !=0) {
    var collisionV = instance_place(x, y+moveY, obj_collision);
    if(collisionV != noone and collisionV.collideable){
        repeat(abs(moveY)){
        if(!place_meeting(x, y+sign(moveY), obj_collision)){
            y += sign(moveY);
            }   else {
                break;
            }
        }
        moveY = 0;
    }
}
 
//APPLY MOVEMENT
x += moveX;
y += moveY;
 
//Objects
var inst = instance_place(x,y, obj_transitions);
if( inst !=noone and facing == inst.playerFacingBefore){
        with(obj_game) {
            if(!doTransition) {
                spawnRoom = inst.TargetRoom;
                spawnX = inst.targetX;
                spawnY = inst.targetY;
                spawnPlayerFacing = inst.playerFacingAfter;
                doTransition = true;
            }
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎