Контроллер ввода, поддерживает клавиатуру и геймпады.
используется в коде как
if InputController.input_get_released("up") then trace("up");
if InputController.input_get_pressed("down") then trace("down");
if InputController.input_get("left") then trace("left");
Поддерживает переназначение кнопок ввода.
/// @description Input Controller
//Site: MidaDev.ru
//Author: Dimusikus
#macro InputController global.__InputController
_log("=================================================================================");
_log("Сосздан InputController = ");
_log("=================================================================================");
//*******************************************************************************
global.__InputController = self;
//*******************************************************************************
maxpads = gamepad_get_device_count(); //количество джойстиков
input_map = ds_map_create(); //карта закреплённых кнопок
//*******************************************************************************
for ( var _i=0; _i<maxpads; _i++ )
{ if gamepad_is_connected(_i) then
{gamepad_set_axis_deadzone(_i, 0.5);
gamepad_set_button_threshold(_i, 0.5);}
};
//*******************************************************************************
//присваивает определённуму виду действия соответствующую клавише на клавиатуке или кнопку на жостике
function input_add(_input_name, _key_button=undefined, _gamepad_button=undefined)
{ input_map[? _input_name] =
{
key : _key_button,
pad : _gamepad_button
}
}
//*******************************************************************************
//зашиваем сразу дефолтную конфигуряцию
input_add("up", [ord("W"), vk_up], gp_padu);
input_add("left", [ord("A"), vk_left], gp_padl);
input_add("down", [ord("S"), vk_down], gp_padd);
input_add("right", [ord("D"), vk_right],gp_padr);
input_add("jump", vk_space, gp_face1);
input_add("fire", vk_control,gp_face2);
input_add("shoot", vk_control,gp_face2);
input_add("menu", vk_escape, gp_select);
input_add("start", vk_enter, gp_start);
input_add("help", vk_f1, -1);
input_add("enter", vk_enter, -1);
input_add("escape",vk_escape, -1);
input_add("tab", vk_tab, -1);
input_add("end", vk_end, -1);
input_add("home", vk_home, -1);
input_add("insert",vk_insert, -1);
input_add("back", vk_backspace,-1);
//input_add("", vk_, -1);
//input_add("", vk_, -1);
//*******************************************************************************
//переопределение клавишы ввода
function input_remap(_input_name, _key_button=undefined, _gamepad_button=undefined)
{
//input_add(_input_name, _key_button, _gamepad_button)
if !is_undefined(_key_button) then input_map[? _input_name].key = _key_button;
if !is_undefined(_gamepad_button) then input_map[? _input_name].pad = _gamepad_button;
}
//*******************************************************************************
//кнопка жмакнута полностью(туда сюда)
function input_get(_inputName, _device_pad_index=99)
{ var _PADB = input_map[? _inputName].pad;
var _KEY = input_map[? _inputName].key;
//-------------------------------------------------------------------------
if is_array(_KEY) then
{ if keyboard_check(input_map[? _inputName].key[0]) then return true;
if keyboard_check(input_map[? _inputName].key[1]) then return true;
}
else{if keyboard_check(input_map[? _inputName].key) then return true;}
//-------------------------------------------------------------------------
if is_undefined(_PADB) then return;
//если индекс девайса 99 то надо пробежаться по всем жостикам в системе
if _device_pad_index>=99 then
{ for ( var _i=0; _i<maxpads; _i++ ) if (gamepad_is_connected(_i)) if gamepad_button_check(_i, _PADB) then return true; }
else return gamepad_button_check(_device_pad_index, _PADB);
return false;
}
//*******************************************************************************
//кнопка отпушшэна
function input_get_released(_inputName, _device_pad_index=99)
{ var _PADB = input_map[? _inputName].pad;
var _KEY = input_map[? _inputName].key;
//-------------------------------------------------------------------------
if is_array(_KEY) then
{ if keyboard_check_released(input_map[? _inputName].key[0]) then return true;
if keyboard_check_released(input_map[? _inputName].key[1]) then return true;
}
else{if keyboard_check_released(input_map[? _inputName].key) then return true; }
//-------------------------------------------------------------------------
//если индекс девайса 99 то надо пробежаться по всем жостикам в системе
if _device_pad_index>=99 then
{ for ( var _i=0; _i<maxpads; _i++ ) if (gamepad_is_connected(_i)) if gamepad_button_check_released(_i, _PADB) then return true; }
else return gamepad_button_check_released(_device_pad_index, _PADB);
return false;
}
//*******************************************************************************
//кнопка находится в нажатом состоянии
function input_get_pressed(_inputName, _device_pad_index=99)
{ var _PADB = input_map[? _inputName].pad;
var _KEY = input_map[? _inputName].key;
//-------------------------------------------------------------------------
if is_array(_KEY) then
{
if keyboard_check_pressed(input_map[? _inputName].key[0]) then return true;
if keyboard_check_pressed(input_map[? _inputName].key[1]) then return true;
}
else{if keyboard_check_pressed(input_map[? _inputName].key) then return true; }
//-------------------------------------------------------------------------
//если индекс девайса 99 то надо пробежаться по всем жостикам в системе
if _device_pad_index>=99 then
{ for ( var _i=0; _i<maxpads; _i++ ) if (gamepad_is_connected(_i)) if gamepad_button_check_pressed(_i, _PADB) then return true; }
else return gamepad_button_check_pressed(_device_pad_index, _PADB);
return false;
}
//*******************************************************************************
//детект любой нажатой клавиши на клавиатуре или жостике или на мышкэ
function input_get_any_released()
{
//---------------------------------------------------------
///реагирует на кнопки на жостике
for (var _i = 0; _i < maxpads; _i++)
{ if (gamepad_is_connected(i))
{ for ( var b = gp_face1; b <= gp_face4; b++ ) if ( gamepad_button_check_released( _i, b ) ) then return true;
if ( gamepad_button_check_released(_i, gp_select) ) then return true;
if ( gamepad_button_check_released(_i, gp_start) ) then return true;
}
};
//---------------------------------------------------------
///реагирует на любое нажтие на клавиатуре или на мышку левую батону
if (keyboard_check_released(vk_anykey)) or (device_mouse_check_button_released(0, mb_left)) then return true;
//отрицательный результат, жмаканий никаких нет
return false;
//---------------------------------------------------------
}
//*******************************************************************************