Перейти к содержимому

Геймпады

IMPORTANT

Статус: Поддерживается
Минимальная версия: 1.4

Скриптовые экспорты

На данный момент имеется экспорт всех существующих кнопок из SDL3 и движка.

gamepad_keys

ID кнопкиКнопка на XboxКнопка на PlayStationЗаметки
BUTTON_AA
BUTTON_BB
BUTTON_XX
BUTTON_YY
BUTTON_BACKBackСенсорная панель
BUTTON_GUIDEЛоготип XboxPS
BUTTON_STARTStartOptions
BUTTON_LSTICKLSL3
BUTTON_RSTICKRSR3
BUTTON_LSHOULDERLBL1
BUTTON_RSHOULDERRBR1
BUTTON_DPAD_UPD-Pad вверхD-Pad вверх
BUTTON_DPAD_DOWND-Pad внизD-Pad вниз
BUTTON_DPAD_LEFTD-Pad влевоD-Pad влево
BUTTON_DPAD_RIGHTD-Pad вправоD-Pad вправо
BUTTON_LSTICK_UPLS вверхL3 вверхЛевый стик вверх
BUTTON_LSTICK_DOWNLS внизL3 внизЛевый стик вниз
BUTTON_LSTICK_LEFTLS влевоL3 влевоЛевый стик влево
BUTTON_LSTICK_RIGHTLS вправоL3 вправоЛевый стик вправо
BUTTON_RSTICK_UPRS вверхR3 вверхПравый стик вверх
BUTTON_RSTICK_DOWNRS внизR3 внизПравый стик вниз
BUTTON_RSTICK_LEFTRS влевоR3 влевоПравый стик влево
BUTTON_RSTICK_RIGHTRS вправоR3 вправоПравый стик вправо

Также имеются вспомогательные функции:

lua
void gamepad_feedback(float left, float right, float time) -- Вибрация геймпада
bool any_binded_key_for_action_pressed_c(int action_id) -- Произведено ли действие с геймпада или нет

Скриптовые и движковые функции

На данный момент имеются следующие функции в движке:

c
// IInputReceiver
void IR_GamepadKeyPress(int key); // key - Нажимаемая клавиша.
void IR_GamepadKeyRelease(int key); // key - Отжимаемая клавиша.
void IR_GamepadKeyHold(int key); // key - Зажимаемая клавиша.

void IR_GamepadUpdateStick(int key, Fvector2 value); // key - Тип стика 
                                                     // (0 - левый стик, 1 - правый стик, 2 - триггеры), 
                                                     // value - Значения x, y 
                                                     // (в случае с триггерами: x - сила нажатия на левый триггер
                                                     // y - сила нажатия на правый триггер), 
// CUIWindow
bool OnGamepadKeyAction(int key, EUIMessages gamepad_action); // key - Нажимаемая клавиша, 
                                                              // gamepad_action - Действие в окне.

bool OnGamepadKeyHold(int key); // key - Зажимаемая клавиша

bool OnGamepadStickAction(int key, Fvector2 value, EUIMessages gamepad_action); // key - Тип стика 
                                                                                // (0 - левый стик, 1 - правый стик, 2 - триггеры), 
                                                                                // value - Значения x, y 
                                                                                // (в случае с триггерами: x - сила нажатия на левый триггер
                                                                                // y - сила нажатия на правый триггер), 
                                                                                // gamepad_action - Действие в окне.

и в скриптах:

lua
bool CUIScriptWnd:OnGamepadKey(int id, int gamepad_action) -- id - нажатая клавиша, gamepad_action - действие внутри окна (CUIWindow)
bool CUIScriptWnd:OnGamepadKeyHold(int id) -- id - нажатая клавиша
bool CUIScriptWnd:OnGamepadStick(int key, Fvector2 value, int gamepad_action) -- key - тип стика (0 - левый стик, 1 - правый стик, 2 - триггеры), value - значения X и Y, gamepad_action - действие внутри окна (CUIWindow)

Легенда (CUIGamepadLegend)

Отдельный класс, базирующийся на CUIStackPanel. Отличается тем, что автоматически скрывается при вводе с мыши/клавиатуры, а также имеет автоматический подгон текста по ширине.

Пример реализации в XML:

xml
        <!-- Параметры идентичные, за исключением отсутствия режима 
             (всегда стоит горизонтальный по центру) -->
	<gamepad_legend x="0" y="724" width="1024" height="30" spacing="5">
		<!-- Текст, идущий после кнопки. Обычный CUIStatic с автоподгоном по ширине. Может содержать в себе иконку -->
		<auto_static x="0" y="0" width="22" height="30">
			<text font="graffiti19" vert_align="c">ui_mm_back</text>
		</auto_static>
	</gamepad_legend>

Пример реализации в Lua:

Init:

lua
	self.gamepad_legend = xml:InitGamepadLegend("gamepad_legend", self)

Update:

lua
	if self.gamepad_legend then
		local text_select		= self:GetStatic("gp_select")	
		if text_select then
			if self.shniaga:GetPage() ~= CUIMMShniaga.epi_new_game then
				text_select:SetTextST("ui_mm_select")
			else
				text_select:SetTextST("ui_mm_select_difficulty")
			end
		end
	end

Опубликовано под лицензией MIT.