/// player movement
var hinput = keyboard_check(vk_right) - keyboard_check(vk_left);
var up_release = keyboard_check_released(vk_up);
// flip sprite
if hinput = 1 { image_xscale = 1.6}
if hinput = -1 { image_xscale = -1.6}
// alow sprite to reset
sprite_reset = false;
if hinput != 0 {
hspeed_ += hinput*acceleration;
hspeed_ = clamp(hspeed_, -max_hspeed, max_hspeed);
} else {
hspeed_ = lerp(hspeed_, 0, friction_);
}
/// jump code
if !place_meeting(x, y+3, obj_solid) {
vspeed_ += grav;
// control jump hight
if (up_release && vspeed_ < -6) {
vspeed_ = -3;
}
// air jump
if (air_jump > 0) && keyboard_check_pressed(vk_up) {
vspeed_ = jump_height
air_jump -= 1;
}
} else {
if keyboard_check_pressed(vk_up) {
vspeed_ = jump_height;
}
}
//check if on ground
if place_meeting(x, y+3, obj_solid) {
air_jump = 1;
}
/// solid
if place_meeting(x+hspeed_, y, obj_solid) {
while !place_meeting(x+sign(hspeed_), y, obj_solid) {
x += sign(hspeed_);
}
hspeed_ = 0;
}
x += hspeed_;
if place_meeting(x, y+vspeed_, obj_solid) {
while !place_meeting(x, y+sign(vspeed_), obj_solid) {
y+=sign(vspeed_);
}
vspeed_ = 0;
}
y += vspeed_;