xNYARLx
Member
Hello. I have problem with pad.
1. D-pad work in game when i have pad without analog stick - OK
2. When i have pad with analog stick, in game work analog stick but not work d-pad too - NO OK
3. In menu don't work d-pad and analog stick (on Polish windows only - i think only on Polish bicouse from another country people don't have this problem in menu!) - NO OK
4. Keyboard work perfectly - OK
CREATE:
STEP:
DRAW GUI:
ASYNC - SYSTEM:
1. D-pad work in game when i have pad without analog stick - OK
2. When i have pad with analog stick, in game work analog stick but not work d-pad too - NO OK
3. In menu don't work d-pad and analog stick (on Polish windows only - i think only on Polish bicouse from another country people don't have this problem in menu!) - NO OK
4. Keyboard work perfectly - OK
CREATE:
GML:
// INPUT VARS
global.input_key_left = -1;
global.input_key_right = -1;
global.input_key_up = -1;
global.input_key_down = -1;
global.input_key_x = -1;
global.input_key_z = -1;
global.input_key_dpad_left = -1;
global.input_key_dpad_right = -1;
global.input_key_dpad_up = -1;
global.input_key_dpad_down = -1;
global.input_key_fall = -1
global.input_key_dpad_left_pressed = -1;
global.input_key_dpad_right_pressed = -1;
global.input_key_dpad_up_pressed = -1;
global.input_key_dpad_down_pressed = -1;
global.input_key_enter_pressed = -1;
global.input_key_grab_pressed = -1;
global.input_key_fall_pressed = -1;
global.input_key_x_pressed = -1;
global.input_key_z_pressed = -1;
global.input_key_shift_pressed = -1;
global.input_key_d_pressed = -1;
global.input_key_ca_l_pressed = -1;
global.input_key_ca_r_pressed = -1;
global.input_key_ca_l2_pressed = -1;
global.input_key_ca_r2_pressed = -1;
global.input_key_pause_pressed = -1;
// DEFAULT [NOT IMPORTANT]
//input_index_default = "";
//input_index = "";
gamepad_connection_show = false;
gamepad_connection_show_n = 0;
gamepad_connection_y = -50;
gamepad_connection_gp_status = "Connected";
gamepad_connection_gp_index = 0;
gamepad_connection_gp_description = "gamepad description";
input_index_default = "keyboard";
input_index = input_index_default;
GML:
/// @description INPUT
switch (input_index)
{
case "keyboard":
// Check
global.input_key_left = keyboard_check(vk_left); //left | grid left
global.input_key_right = keyboard_check(vk_right); //right | grid right
global.input_key_up = keyboard_check(vk_up); //look up | grid/ladder up
global.input_key_down = keyboard_check(vk_down); //look down | grid/ladder down
global.input_key_x = keyboard_check(ord("X")); //skill
global.input_key_z = keyboard_check(ord("Z")); //spring | higher jump
global.input_key_shift = keyboard_check(vk_shift); //run
global.input_key_dpad_left = keyboard_check(vk_left); //menu navigation left
global.input_key_dpad_right = keyboard_check(vk_right); //menu navigation right
global.input_key_dpad_up = keyboard_check(vk_up); //menu navigation up
global.input_key_dpad_down = keyboard_check(vk_down); //menu navigation down
global.input_key_fall = keyboard_check(vk_down); //fall-through platforms
// Pressed
global.input_key_dpad_left_pressed = keyboard_check_pressed(vk_left); //menu navigation left pressed
global.input_key_dpad_right_pressed = keyboard_check_pressed(vk_right); //menu navigation right pressed
global.input_key_dpad_up_pressed = keyboard_check_pressed(vk_up); //menu navigation up pressed
global.input_key_dpad_down_pressed = keyboard_check_pressed(vk_down); //menu navigation down pressed
global.input_key_enter_pressed = keyboard_check_pressed(vk_enter); //pause
global.input_key_grab_pressed = keyboard_check_pressed(vk_up); //grab grid
global.input_key_fall_pressed = keyboard_check_pressed(vk_down); //fall-through platforms
global.input_key_x_pressed = keyboard_check_pressed(ord("X")); //skill
global.input_key_z_pressed = keyboard_check_pressed(ord("Z")); //jump and swim | wall jump | leave grid
global.input_key_shift_pressed = keyboard_check_pressed(vk_shift); //read sign plate
global.input_key_d_pressed = keyboard_check_pressed(ord("D")); //reload gun
global.input_key_ca_l_pressed = keyboard_check_pressed(ord("A")); //skill --
global.input_key_ca_r_pressed = keyboard_check_pressed(ord("S")); //skill ++
global.input_key_ca_l2_pressed = keyboard_check_pressed(ord("C")); //bomb
break;
case "gamepad":
for (var i=0; i<12; i+=1;)
{
if gamepad_is_connected(i)
{
// Check
global.input_key_left = gamepad_axis_value(i, gp_axislh) < 0; //left | grid left
global.input_key_right = gamepad_axis_value(i, gp_axislh) > 0; //right | grid right
global.input_key_up = gamepad_axis_value(i, gp_axislv) < 0; //look up | grid/ladder up
global.input_key_down = gamepad_axis_value(i, gp_axislv) > 0; //look down | grid/ladder down
global.input_key_x = gamepad_button_value(i, gp_face1); //shoot
global.input_key_z = gamepad_button_value(i, gp_face4); //spring | higher jump
global.input_key_shift = gamepad_button_check(i, gp_face3); //run
global.input_key_dpad_left = gamepad_button_check(i, gp_padl); //menu navigation left
global.input_key_dpad_right = gamepad_button_check(i, gp_padr); //menu navigation right
global.input_key_dpad_up = gamepad_button_check(i, gp_padu); //menu navigation up
global.input_key_dpad_down = gamepad_button_check(i, gp_padd); //menu navigation down
global.input_key_fall = gamepad_axis_value(i, gp_axislv) > 0; //fall-through platforms
// Pressed
global.input_key_dpad_left_pressed = gamepad_button_check_pressed(i, gp_padl); //menu navigation left pressed
global.input_key_dpad_right_pressed = gamepad_button_check_pressed(i, gp_padr); //menu navigation right pressed
global.input_key_dpad_up_pressed = gamepad_button_check_pressed(i, gp_padu); //menu navigation up pressed
global.input_key_dpad_down_pressed = gamepad_button_check_pressed(i, gp_padd); //menu navigation down pressed
global.input_key_enter_pressed = gamepad_button_check_pressed(i, gp_start); //pause
global.input_key_grab_pressed = gamepad_axis_value(i, gp_axislv) < 0; //grab grid and ladder
global.input_key_fall_pressed = gamepad_axis_value(i, gp_axislv) > 0; //fall-through platforms
global.input_key_x_pressed = gamepad_button_check_pressed(i, gp_face1); //shoot
global.input_key_z_pressed = gamepad_button_check_pressed(i, gp_face4); //jump and swim | wall jump | grab grid | leave grid
global.input_key_shift_pressed = gamepad_button_check_pressed(i, gp_face3); //run
global.input_key_d_pressed = gamepad_button_check_pressed(i, gp_face2); //read sign plate
global.input_key_ca_l_pressed = gamepad_button_check_pressed(i, gp_shoulderlb); //skill --
global.input_key_ca_r_pressed = gamepad_button_check_pressed(i, gp_shoulderrb); //skill ++
global.input_key_ca_l2_pressed = gamepad_button_check_pressed(i, gp_shoulderl); //bomb
global.input_key_ca_r2_pressed = gamepad_button_check_pressed(i, gp_shoulderr); //skipp tutorial
global.input_key_pause_pressed = gamepad_button_check_pressed(i, gp_select); //restart
}
}
break;
}
// HUD animation
if (gamepad_connection_show)
{
gamepad_connection_y = lerp(gamepad_connection_y, 48, 0.2);
gamepad_connection_show_n += 1;
if (gamepad_connection_show_n >= 180)
{
gamepad_connection_show_n = 0;
gamepad_connection_show = false;
}
}
else
{
gamepad_connection_y = lerp(gamepad_connection_y, -50, 0.2);
}
GML:
// draw gamepad message conection status
if (gamepad_connection_show)
{
gamepad_connection_y = lerp(gamepad_connection_y, 32, 0.2);
gamepad_connection_show_n += 1;
if (gamepad_connection_show_n >= 180)
{
gamepad_connection_show = false;
gamepad_connection_show_n = 0;
}
}
else
{
gamepad_connection_y = lerp(gamepad_connection_y, -50, 0.2);
}
// draw info
var _xx = gui_w()/2 - 80;
var _yy = gamepad_connection_y;
draw_sprite_ext(spr_hud_gamepad, 0, _xx, _yy, 1, 1, 0, c_white, 1);
draw_text(_xx+64, _yy-9, string(gamepad_connection_gp_description)+string(" (")+string(gamepad_connection_gp_index)+string(")\n")+string(gamepad_connection_gp_status));
GML:
// get gamepads (any os supports it)
switch (async_load[? "event_type"])
{
case "gamepad discovered": //a game pad has been discovered
var pad = async_load[? "pad_index"]; //get the pad index value from the async_load map
gamepad_set_axis_deadzone(pad, 0.5); //set the "deadzone" for the axis
gamepad_set_button_threshold(pad, 0.1); //set the "threshold" for the triggers
// show message and now is using the gamepad
input_index = "gamepad";
gamepad_connection_gp_status = "Connected";
gamepad_connection_gp_index = pad;
gamepad_connection_gp_description = gamepad_get_description(pad);
gamepad_connection_show = true;
break;
case "gamepad lost": //gamepad has been removed or otherwise disabled
var pad = async_load[? "pad_index"]; //get the pad index
// show message and now is using default device
input_index = input_index_default;
gamepad_connection_gp_status = "Disconnected";
gamepad_connection_gp_index = pad;
gamepad_connection_gp_description = gamepad_get_description(pad);
gamepad_connection_show = true;
break;
}
Last edited: