Files
StellaSora_DataLua/lua/game/ui/settings/settingskeyboardctrl.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

219 lines
6.5 KiB
Lua

local SettingsKeyboardCtrl = class("SettingsKeyboardCtrl", BaseCtrl)
local InputManager = CS.InputManager
local MouseName = {
leftButton = 1,
rightButton = 2,
middleButton = 3,
backButton = 4,
forwardButton = 5
}
SettingsKeyboardCtrl._mapNodeConfig = {
txtPageTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard"
},
txtBindingTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard_Binding"
},
OptionBinding = {
nCount = 8,
sCtrlName = "Game.UI.Settings.OptionKeyboardBindingCtrl"
},
OptionBindingMove = {
nCount = 4,
sCtrlName = "Game.UI.Settings.OptionKeyboardBindingCtrl"
},
txtBtnReset = {sComponentName = "TMP_Text", sLanguageId = "Reset"},
btnReset = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reset"
},
txtBindTitle1 = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard_BindingGroup1"
},
txtBindTitle2 = {
sComponentName = "TMP_Text",
sLanguageId = "Settings_Keyboard_BindingGroup2"
},
txtOptionTitleBack = {
sComponentName = "TMP_Text",
sLanguageId = "Action_Back"
},
txtKeyboardBack = {sComponentName = "TMP_Text"}
}
SettingsKeyboardCtrl._mapEventConfig = {}
function SettingsKeyboardCtrl:RefreshText()
for i = 1, 4 do
self._mapNode.OptionBindingMove[i]:SetText(ConfigTable.GetUIText("Action_" .. self._panel.Move[i]))
end
for i = 1, 8 do
self._mapNode.OptionBinding[i]:SetText(ConfigTable.GetUIText("Action_" .. self._panel.Action[i]))
end
NovaAPI.SetTMPText(self._mapNode.txtKeyboardBack, "Esc")
end
function SettingsKeyboardCtrl:Init()
if self.bInit then
return
end
self.bInit = true
self:LoadSetting()
end
function SettingsKeyboardCtrl:Quit()
if not self.bInit then
return
end
end
function SettingsKeyboardCtrl:LoadSetting()
self._panel.mapKeyboardBind = {}
for _, v in ipairs(self._panel.Action) do
local bHas, tbControl = InputManager.Instance:GetInputActionConfig(v)
if bHas then
if tbControl.Count ~= 3 then
printError("input config数量不为3,缺失配置")
return
end
self._panel.mapKeyboardBind[v] = {}
for i = 0, tbControl.Count - 1 do
local mapControl = tbControl[i]
local bEmpty = not mapControl.isKeyboard and not mapControl.isMouse and not mapControl.isGamepad
if mapControl.isKeyboard or mapControl.isMouse or bEmpty then
self._panel.mapKeyboardBind[v][i] = {
name = mapControl.name,
displayName = mapControl.displayName
}
end
end
end
end
local bHorizontal, tbHorizontal = InputManager.Instance:GetInputActionConfig("Horizontal")
if bHorizontal then
if tbHorizontal.Count ~= 7 then
printError("input config数量不为7,缺失配置")
return
end
self._panel.mapKeyboardBind.Right = {}
self._panel.mapKeyboardBind.Left = {}
local nPositiveIndex, nNegativeIndex = 1, 1
for i = 0, tbHorizontal.Count - 1 do
local mapControl = tbHorizontal[i]
local bEmpty = not mapControl.isKeyboard and not mapControl.isMouse and not mapControl.isGamepad
if mapControl.isKeyboard or mapControl.isMouse or bEmpty then
if mapControl.isPositive then
self._panel.mapKeyboardBind.Right[nPositiveIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nPositiveIndex = nPositiveIndex + 1
elseif mapControl.isNegative then
self._panel.mapKeyboardBind.Left[nNegativeIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nNegativeIndex = nNegativeIndex + 1
end
end
end
end
local bVertical, tbVertical = InputManager.Instance:GetInputActionConfig("Vertical")
if bVertical then
if tbVertical.Count ~= 7 then
printError("input config数量不为7,缺失配置")
return
end
self._panel.mapKeyboardBind.Up = {}
self._panel.mapKeyboardBind.Down = {}
local nPositiveIndex, nNegativeIndex = 1, 1
for i = 0, tbVertical.Count - 1 do
local mapControl = tbVertical[i]
local bEmpty = not mapControl.isKeyboard and not mapControl.isMouse and not mapControl.isGamepad
if mapControl.isKeyboard or mapControl.isMouse or bEmpty then
if mapControl.isPositive then
self._panel.mapKeyboardBind.Up[nPositiveIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nPositiveIndex = nPositiveIndex + 1
elseif mapControl.isNegative then
self._panel.mapKeyboardBind.Down[nNegativeIndex] = {
name = mapControl.name,
displayName = mapControl.displayName
}
nNegativeIndex = nNegativeIndex + 1
end
end
end
end
self:RefreshOption()
end
function SettingsKeyboardCtrl:RefreshOption()
for i = 1, 4 do
local sAction = self._panel.Move[i]
self._mapNode.OptionBindingMove[i]:Init(sAction)
end
for i = 1, 8 do
local sAction = self._panel.Action[i]
self._mapNode.OptionBinding[i]:Init(sAction)
end
end
function SettingsKeyboardCtrl:SaveSetting()
local device = function(sAction, nIndex)
local mapInput = self._panel.mapKeyboardBind[sAction][nIndex]
if mapInput.name == "" then
return ""
end
local bMouse = MouseName[mapInput.name] ~= nil
local sPre = bMouse and "<Mouse>/" or "<Keyboard>/"
return sPre .. mapInput.name
end
for _, v in ipairs(self._panel.Action) do
for i = 1, 2 do
InputManager.Instance:OverrideButtonBinding(v, i, device(v, i))
if v == "Fire1" then
InputManager.Instance:OverrideButtonBinding("Fire3", i, device(v, i))
end
end
end
for i = 1, 2 do
InputManager.Instance:OverrideButtonBinding("Horizontal", i * 3, device("Right", i))
InputManager.Instance:OverrideButtonBinding("Horizontal", i * 3 - 1, device("Left", i))
InputManager.Instance:OverrideButtonBinding("Vertical", i * 3, device("Up", i))
InputManager.Instance:OverrideButtonBinding("Vertical", i * 3 - 1, device("Down", i))
end
end
function SettingsKeyboardCtrl:Awake()
self.bInit = false
self:RefreshText()
end
function SettingsKeyboardCtrl:OnEnable()
end
function SettingsKeyboardCtrl:OnDisable()
if not self.bInit then
return
end
self:SaveSetting()
end
function SettingsKeyboardCtrl:OnDestroy()
end
function SettingsKeyboardCtrl:OnBtnClick_Reset()
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("Settings_Tip_Reset"),
callbackConfirm = function()
local nUID = PlayerData.Base:GetPlayerId()
InputManager.Instance:ResetBindingOverrides(nUID)
self:LoadSetting()
local mapMsg = {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = ConfigTable.GetUIText("Settings_KeyReset")
}
EventManager.Hit(EventId.OpenMessageBox, mapMsg)
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
return SettingsKeyboardCtrl