#include "new_key_dialog_view.lua" GamepadLayout = {} ActionsMetainfo = { ["none"] = { locKey = "", isRemappable = false }, ["left"] = { locKey = "loc@MOVE_LEFT", isRemappable = false }, ["right"] = { locKey = "loc@MOVE_RIGHT", isRemappable = false }, ["up"] = { locKey = "loc@MOVE_FORWARD", isRemappable = false }, ["down"] = { locKey = "loc@MOVE_BACKWARD", isRemappable = false }, ["flashlight"] = { locKey = "loc@FLASHLIGHT", isRemappable = true }, ["interact"] = { locKey = "loc@INTERACT", isRemappable = true }, ["jump"] = { locKey = "loc@JUMP", isRemappable = true }, ["crouch"] = { locKey = "loc@CROUCH", isRemappable = true }, ["usetool"] = { locKey = "loc@HIT_SHOW_THROW", isRemappable = true }, ["grab"] = { locKey = "loc@GRAB", isRemappable = true }, ["vehicle_action"] = { locKey = "loc@ACTION", isRemappable = true }, ["vehicle_raise"] = { locKey = "loc@RAISE", isRemappable = true }, ["vehicle_lower"] = { locKey = "loc@LOWER", isRemappable = true }, ["handbrake"] = { locKey = "loc@UI_HUD_INFO_HANDBRAKE", isRemappable = true }, ["map"] = { locKey = "loc@MAP", isRemappable = false }, ["pause"] = { locKey = "loc@PAUSE", isRemappable = false }, ["scroll_up"] = { locKey = "loc@CHANGE_TOOL", isRemappable = false, exLocKey = { player = "loc@CHANGE_TOOL", driving = "loc@CAMERA_IN", menu = "loc@UI_TEXT_SCROLL"} }, ["scroll_down"] = { locKey = "loc@CHANGE_TOOL", isRemappable = false, exLocKey = { player = "loc@CHANGE_TOOL", driving = "loc@CAMERA_OUT", menu = "loc@UI_TEXT_SCROLL"} }, ["tool_group_prev"] = { locKey = "loc@CHANGE_TOOL", isRemappable = false }, ["tool_group_next"] = { locKey = "loc@CHANGE_TOOL", isRemappable = false }, ["lmb"] = { locKey = "loc@LMB", isRemappable = true }, ["mmb"] = { locKey = "loc@MMB", isRemappable = true }, ["rmb"] = { locKey = "loc@RMB", isRemappable = true }, ["camerax"] = { locKey = "[FIXME]CameraX", isRemappable = false }, ["cameray"] = { locKey = "[FIXME]CameraY", isRemappable = false }, ["mousex"] = { locKey = "[FIXME]MouseX", isRemappable = false }, ["mousey"] = { locKey = "[FIXME]MouseY", isRemappable = false }, -- We have extra keys, but we do not want show them in layout --["extra0"] = { locKey = "[FIXME]Extra0", isRemappable = false }, --["extra1"] = { locKey = "[FIXME]Extra1", isRemappable = false }, --["extra2"] = { locKey = "[FIXME]Extra2", isRemappable = false }, --["extra3"] = { locKey = "[FIXME]Extra3", isRemappable = false }, --["extra4"] = { locKey = "[FIXME]Extra4", isRemappable = false }, --["extra5"] = { locKey = "[FIXME]Extra5", isRemappable = false }, --["extra6"] = { locKey = "[FIXME]Extra6", isRemappable = false }, ["photomode"] = { locKey = "loc@UI_TEXT_PHOTO_MODE", isRemappable = false }, ["menu_left"] = { locKey = "loc@MENU_LEFT", isRemappable = false }, ["menu_right"] = { locKey = "loc@MENU_RIGHT", isRemappable = false }, ["menu_up"] = { locKey = "loc@MENU_UP", isRemappable = false }, ["menu_down"] = { locKey = "loc@MENU_DOWN", isRemappable = false }, ["menu_next"] = { locKey = "loc@MENU_NEXT", isRemappable = false }, ["menu_prev"] = { locKey = "loc@MENU_PREV", isRemappable = false }, ["menu_accept"] = { locKey = "loc@MENU_ACCEPT", isRemappable = false }, ["menu_cancel"] = { locKey = "loc@MENU_CANCEL", isRemappable = false }, ["active_mods"] = { locKey = "loc@ACTIVE_MODS", isRemappable = false }, ["zoom"] = { locKey = "loc@ZOOM_IN_OUT", isRemappable = true }, --special actions ["move"] = { locKey = "loc@MOVEMENT", isRemappable = false}, ["camera"] = {locKey = "loc@LOOK_AROUND", isRemappable = false}, ["steer"] = { locKey = "loc@STEER", isRemappable = false}, ["point_of_view"] = { locKey = "loc@PoV", isRemappable = false} } ButtonsMetainfo = { ["gamepad_dpad_left"] = { isIconLeft = false, isRemappable = false }, ["gamepad_dpad_right"] = { isIconLeft = false, isRemappable = false }, ["gamepad_dpad_up"] = { isIconLeft = false, isRemappable = false }, ["gamepad_dpad_down"] = { isIconLeft = false, isRemappable = false }, ["gamepad_button_b"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_a"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_y"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_x"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_l1"] = { isIconLeft = false, isRemappable = true }, ["gamepad_button_l2"] = { isIconLeft = false, isRemappable = true }, ["gamepad_button_l3"] = { isIconLeft = false, isRemappable = true }, ["gamepad_button_r1"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_r2"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_r3"] = { isIconLeft = true, isRemappable = true }, ["gamepad_button_back"] = { isIconLeft = false, isRemappable = false }, ["gamepad_button_menu"] = { isIconLeft = true, isRemappable = false }, ["gamepad_button_share"] = { isIconLeft = false, isRemappable = false }, ["gamepad_left_stick"] = { isIconLeft = false, isRemappable = false }, ["gamepad_right_stick"] = { isIconLeft = true, isRemappable = false } } ListOfMappings = {} function gpLayoutOnLanguageChanged(langId) -- force update selected tab GamepadLayout.onLayoutTabChanged(GamepadLayout.indexOfTab(GamepadLayout.selectedTab)) end function gamepad_layout_logic_init() GamepadLayout.dialogLabel = IsRunningOnXbox() and "loc@UI_GP_LAYOUT_XBOX" or "loc@UI_GP_LAYOUT" GamepadLayout.hint = {} GamepadLayout.tabs = { { name = "player", locKey = "loc@UI_GP_LAYOUT_PLAYER", selected = true }, { name = "driving", locKey = "loc@UI_GP_LAYOUT_DRIVING", selected = false }, { name = "menu", locKey = "loc@UI_GP_LAYOUT_MENU", selected = false }, } GamepadLayout.selectedTab = GamepadLayout.tabs[1] GamepadLayout.indexOfTab = function(tab) for i=1,#GamepadLayout.tabs do if tab.name == GamepadLayout.tabs[i].name then return i end end return 0 end GamepadLayout.dropDownState = { isOpened = false, values = {}, selectedIdx = 1, initialized = false, wasOpened = false, isClosing = false, wasClosed = true, action = "", srcButtons = {}, onSelectionChanged = function(self, idx) end, onClosed = function(self) local prefix = "options.input.gamepad.bindings" local mode = GamepadLayout.selectedTab.name local currentButton = GetButtonsByAction(mode, self.action)[1] local currentButtonKey = prefix .. "." .. mode .. "." .. currentButton local currentButtonAction = GetString(currentButtonKey) local newButton = self.srcButtons[self.selectedIdx] local newButtonKey = prefix .. "." .. mode .. "." .. newButton local newButtonAction = GetString(newButtonKey) -- swap buttons for actions SetString(currentButtonKey, newButtonAction) SetString(newButtonKey, currentButtonAction) GamepadLayout.onLayoutTabChanged(GamepadLayout.indexOfTab(GamepadLayout.selectedTab)) end } GamepadLayout.onResetRequested = function() Command("options.input.gamepad.resettodefault") GamepadLayout.onLayoutTabChanged(GamepadLayout.indexOfTab(GamepadLayout.selectedTab)) end RegisterListenerTo(UI_EVENT_LANGUAGE_CHANGED, "gpLayoutOnLanguageChanged") end gamepad_layout_logic_init()