local ToInt32 = CS.System.Convert.ToInt32 local XInputManager = CS.XInputManager local XCursorHelper = CS.XPc.XCursorHelper local CSUnityEngineObjectInstantiate = CS.UnityEngine.Object.Instantiate local XUiBtnKeyItem = require("XUi/XUiSet/ChildItem/XUiBtnKeyItem") local XUiNotCustomKeyItem = require("XUi/XUiSet/ChildItem/XUiNotCustomKeyItem") local XUiOneKeyCustomKeyItem = require("XUi/XUiSet/ChildItem/XUiOneKeyCustomKeyItem") local XUiNotCustomKeyItemHandle = require("XUi/XUiSet/ChildItem/XUiNotCustomKeyItemHandle") local XUiPanelFightSet = require("XUi/XUiSet/XUiPanelFightSet") local XUiPanelFightSetPc = XClass(XUiPanelFightSet, "XUiPanelFightSetPc") local GrayColor = XUiHelper.Hexcolor2Color("CFCFCF"); function XUiPanelFightSetPc:Ctor(ui, uiRoot) local isPc = XDataCenter.UiPcManager.IsPc() self.PanelJoystick.gameObject:SetActiveEx(not isPc) self.PanelSwitch.gameObject:SetActiveEx(not isPc) if self.KeyboardText then self.KeyboardText.gameObject:SetActiveEx(isPc) end local btnTouchName = isPc and "UiSetPCBtnTabTouchName" or "UiSetBtnTabTouchName" self.BtnTabTouch:SetName(XUiHelper.GetText(btnTouchName)) if not isPc then local gameControllerPos = self.BtnTabGameController.transform.localPosition local keyboardPos = self.BtnTabKeyboard.transform.localPosition self.BtnTabGameController.transform.localPosition = keyboardPos self.BtnTabKeyboard.transform.localPosition = gameControllerPos end end function XUiPanelFightSetPc:InitDrdSort() if self.IsInitDrdSort then return end self.KeyboardDrdSort:ClearOptions() self.ControllerDrdSort:ClearOptions() local CsDropdown = CS.UnityEngine.UI.Dropdown for _, operationType in ipairs(self.OperationTypeList) do local op = CsDropdown.OptionData() op.text = XSetConfigs.GetOperationTypeStr(operationType) self.KeyboardDrdSort.options:Add(op) self.ControllerDrdSort.options:Add(op) end local firstIndex = 1 self.KeyboardDrdSelectIndex = firstIndex self.KeyboardDrdSort.onValueChanged:AddListener(function() local CSArrayIndexToLuaTableIndex = function(index) return index + 1 end self:OnKeyboardDrdSortClick(CSArrayIndexToLuaTableIndex(self.KeyboardDrdSort.value)) end) self.ControllerDrdSelectIndex = firstIndex self.ControllerDrdSort.onValueChanged:AddListener(function() local CSArrayIndexToLuaTableIndex = function(index) return index + 1 end self:OnControllerDrdSortClick(CSArrayIndexToLuaTableIndex(self.ControllerDrdSort.value)) end) local operationType = self.OperationTypeList[firstIndex] local firstOptionStr = XSetConfigs.GetOperationTypeStr(operationType) self.KeyboardDrdSort.captionText.text = firstOptionStr self.ControllerDrdSort.captionText.text = firstOptionStr self.IsInitDrdSort = true end function XUiPanelFightSetPc:OnControllerDrdSortClick(index) if self.ControllerDrdSelectIndex == index then return end self.ControllerDrdSelectIndex = index self:UpdatePanel() end function XUiPanelFightSetPc:OnKeyboardDrdSortClick(index) if self.KeyboardDrdSelectIndex == index then return end self.KeyboardDrdSelectIndex = index self:UpdatePanel() end function XUiPanelFightSetPc:SetJoypadKeyIcon(value) self.PanelJoypadKeyIcon.gameObject:SetActiveEx(value) if value then self.KeyTipBg.color = GrayColor else self.KeyTipBg.color = CS.UnityEngine.Color.white end end function XUiPanelFightSetPc:GetCurOperationType() if self.CurPageType == self.PageType.GameController then return self.OperationTypeList[self.ControllerDrdSelectIndex] elseif self.CurPageType == self.PageType.Keyboard then return self.OperationTypeList[self.KeyboardDrdSelectIndex] end end function XUiPanelFightSetPc:GetDefaultIndex() return XDataCenter.UiPcManager.IsPc() and self.PageType.Keyboard or self.PageType.Touch end function XUiPanelFightSetPc:RefreshKeyboardPanel() if XDataCenter.UiPcManager.IsPc() then self.PanelKeyboardSet.gameObject:SetActiveEx(true) else self.Super.RefreshKeyboardPanel(self) end end function XUiPanelFightSetPc:UpdatePanel() if self.CurPageType == self.PageType.Touch then self.UiRoot.BtnDefault.gameObject:SetActiveEx(true) elseif self.CurPageType == self.PageType.GameController then local enableInputJoystick = XInputManager.EnableInputJoystick self.UiRoot.BtnDefault.gameObject:SetActiveEx(enableInputJoystick) self.UiRoot.BtnSave.gameObject:SetActiveEx(enableInputJoystick) self.PanelGameControlOperationType.gameObject:SetActiveEx(enableInputJoystick) self:InitControllerPanel(false) elseif self.CurPageType == self.PageType.Keyboard then local enableInputKeyboard = XInputManager.EnableInputKeyboard self.UiRoot.BtnDefault.gameObject:SetActiveEx(enableInputKeyboard) self.UiRoot.BtnSave.gameObject:SetActiveEx(enableInputKeyboard) self.PanelKeyboardOperationType.gameObject:SetActiveEx(enableInputKeyboard) self:InitKeyboardPanel() end self:ShowSubPanel(self.CurPageType) end function XUiPanelFightSetPc:ResetToDefault() if self.CurPageType == self.PageType.Touch then self.DynamicJoystick = XSetConfigs.DefaultDynamicJoystick self.JoystickGroup:SelectIndex(self.DynamicJoystick + 1) elseif self.CurPageType == self.PageType.GameController then self:ResetToDefaultTips(function() XInputManager.DefaultKeysSetting(self:GetCurOperationType(), self:GetCurKeySetType()) XInputManager.DefaultCameraMoveSensitivitySetting(self:GetCurKeySetType()) self.SliderCameraMoveSensitivityPc.value = self:GetCameraMoveSensitivity() XCursorHelper.SetDefaultSensitivity() self.CursorMoveSensitivity.value = self:GetCursorMoveSensitivity() self:InitControllerPanel(true) end) elseif self.CurPageType == self.PageType.Keyboard then self:ResetToDefaultTips(function() XInputManager.DefaultKeysSetting(self:GetCurOperationType(), CS.KeySetType.Keyboard) XInputManager.DefaultCameraMoveSensitivitySetting(CS.KeySetType.Keyboard) self:InitKeyboardPanel(true) end) end end function XUiPanelFightSetPc:ResetToDefaultTips(callFunc) XUiManager.DialogTip(nil, XUiHelper.GetText("DefaultKeyCodesTip"), nil, nil, callFunc) end function XUiPanelFightSetPc:IsSameKeySet(keySetTypes) if XTool.IsTableEmpty(keySetTypes) then return true end local curKeySetType = ToInt32(self:GetCurKeySetType()) for _, keySetType in ipairs(keySetTypes) do if curKeySetType == keySetType then return true end end return false end function XUiPanelFightSetPc:InitControllerPanel(resetTextOnly) self:InitDrdSort() local curOperationType = self:GetCurOperationType() self.CtrlKeyItemList = self.CtrlKeyItemList or {} local list = XSetConfigs.GetControllerMapCfg() for id, v in ipairs(list) do local grid = self.CtrlKeyItemList[id] if curOperationType ~= v.OperationType or not self:IsSameKeySet(v.KeySetTypes) then self:SetGridActive(grid, false) goto CONTINUE end if v.Type == XSetConfigs.ControllerSetItemType.SetButton then local keyCodeType = CS.XInputManager.GetKeyCodeTypeByInt(v.OperationKey, curOperationType) if keyCodeType == XSetConfigs.KeyCodeType.NotCustom then grid = grid or XUiNotCustomKeyItemHandle.New(CSUnityEngineObjectInstantiate(self.NotCustomKeyItemHandle, self.ControllerSetContent), self.UiRoot) else grid = grid or XUiBtnKeyItem.New(CSUnityEngineObjectInstantiate(self.BtnKeyItem, self.ControllerSetContent), self.UiRoot) end grid:SetKeySetType(self:GetCurKeySetType()) grid:Refresh(v, handler(self, self.EditKey), resetTextOnly, curOperationType) elseif v.Type == XSetConfigs.ControllerSetItemType.Section then grid = grid or CSUnityEngineObjectInstantiate(self.TxtSection, self.ControllerSetContent) local txtTitle = grid:Find("TxtTitle"):GetComponent("Text") txtTitle.text = v.Title elseif v.Type == XSetConfigs.ControllerSetItemType.Slider then if not grid then if v.OperationType == 1 then self.GridSlider:SetParent(self.ControllerSetContent, false) XUiHelper.RegisterSliderChangeEvent(self, self.SliderCameraMoveSensitivity, function(_, value) if self:GetCameraMoveSensitivity() == value then return end self:SetCameraMoveSensitivity(value) end) grid = grid or self.GridSlider elseif v.OperationType == 4 then self.VirtualCursorPC:SetParent(self.ControllerSetContent, false) XUiHelper.RegisterSliderChangeEvent(self, self.CursorMoveSensitivity, function(_, value) self:SetCursorMoveSensitivity(value) end) grid = grid or self.VirtualCursorPC end end end self.SliderCameraMoveSensitivity.value = self:GetCameraMoveSensitivity() self.CursorMoveSensitivity.value = self:GetCursorMoveSensitivity() self:SetGridActive(grid, true) self.CtrlKeyItemList[id] = grid :: CONTINUE :: end self.BtnKeyItem.gameObject:SetActiveEx(false) end function XUiPanelFightSetPc:InitKeyboardPanel(resetTextOnly) self:InitDrdSort() local curOperationType = self:GetCurOperationType() self._KeyboardGridList = self._KeyboardGridList or {} local list = XSetConfigs.GetControllerMapCfg() for id, item in ipairs(list) do local grid = self._KeyboardGridList[id] if curOperationType ~= item.OperationType or not self:IsSameKeySet(item.KeySetTypes) then self:SetGridActive(grid, false) goto CONTINUE end if item.Type == XSetConfigs.ControllerSetItemType.SetButton then local keyCodeType = CS.XInputManager.GetKeyCodeTypeByInt(item.OperationKey, self:GetCurOperationType()) if keyCodeType == XSetConfigs.KeyCodeType.NotCustom then grid = grid or XUiNotCustomKeyItem.New(CSUnityEngineObjectInstantiate(self.NotCustomKeyItem, self.KeyboardSetContent), self.UiRoot) elseif keyCodeType == XSetConfigs.KeyCodeType.OneKeyCustom or keyCodeType == XSetConfigs.KeyCodeType.KeyMouseCustom or keyCodeType == XSetConfigs.KeyCodeType.SingleKey or keyCodeType == XSetConfigs.KeyCodeType.Default then grid = grid or XUiOneKeyCustomKeyItem.New(CSUnityEngineObjectInstantiate(self.OneKeyCustomKeyItem, self.KeyboardSetContent), self.UiRoot) -- elseif keyCodeType == XSetConfigs.KeyCodeType.Default then -- grid = XUiBtnKeyItem.New(CSUnityEngineObjectInstantiate(self.BtnKeyItem, self.KeyboardSetContent), self.UiRoot) end grid:SetKeySetType(CS.KeySetType.Keyboard) grid:Refresh(item, handler(self, self.EditKey), resetTextOnly, curOperationType) elseif item.Type == XSetConfigs.ControllerSetItemType.Section then grid = grid or CSUnityEngineObjectInstantiate(self.TxtSection, self.KeyboardSetContent) local txtTitle = grid:Find("TxtTitle"):GetComponent("Text") txtTitle.text = item.Title elseif item.Type == XSetConfigs.ControllerSetItemType.Slider then if not grid then self.GridSliderPC:SetParent(self.KeyboardSetContent, false) XUiHelper.RegisterSliderChangeEvent(self, self.SliderCameraMoveSensitivityPc, function(_, value) if value == self:GetCameraMoveSensitivity() then return end self:SetCameraMoveSensitivity(value) end) end self.SliderCameraMoveSensitivityPc.value = self:GetCameraMoveSensitivity() grid = grid or self.GridSliderPC end self:SetGridActive(grid, true) self._KeyboardGridList[id] = grid :: CONTINUE :: end self.BtnKeyItem.gameObject:SetActiveEx(false) self.KeyboardPanelInit = true end function XUiPanelFightSetPc:SetGridActive(grid, enable) local gameObject = (grid) and (grid.GameObject or grid.gameObject) if not gameObject then return end gameObject:SetActiveEx(enable) end function XUiPanelFightSetPc:SetEnableInputKeyboard(value) XInputManager.SetEnableInputKeyboard(value) end function XUiPanelFightSetPc:RefreshGridList(curKeySetType, blockTip) if not curKeySetType then return end local gridList if curKeySetType == CS.KeySetType.Xbox or curKeySetType == CS.KeySetType.Ps then gridList = self.CtrlKeyItemList elseif curKeySetType == CS.KeySetType.Keyboard then gridList = self._KeyboardGridList end if gridList then for _, v in pairs(gridList) do if v.SetKeySetType then v:SetKeySetType(self:GetCurKeySetType()) end if v.Refresh then v:Refresh(nil, nil, true) end end end if blockTip then return end XUiManager.TipSuccess(XUiHelper.GetText("SetJoyStickSuccess")) end function XUiPanelFightSetPc:EditKey(keyCode, targetItem, pressKeyIndex) if not pressKeyIndex then pressKeyIndex = XSetConfigs.PressKeyIndex.One end local curOperationType = self:GetCurOperationType() XInputManager.EndEdit() self:SetJoypadKeyIcon(false) local cb = function(isConflict) self.CurSelectBtn = nil self.CurSelectKey = nil targetItem:Refresh() self:ShowSetKeyTip(false) if isConflict then local curKeySetType = self:GetCurKeySetType() local keyCurrent = CS.XInputManager.GetConflictKey1() local keyConflict = CS.XInputManager.GetConflictKey2() local textKeyCurrent = XSetConfigs.GetControllerKeyText(keyCurrent) local textKeyConflict = XSetConfigs.GetControllerKeyText(keyConflict) if textKeyCurrent and textKeyConflict then XUiManager.DialogTip( nil, XUiHelper.ReplaceTextNewLine(XUiHelper.GetText("SetKeyConflict", textKeyConflict, textKeyCurrent)), XUiManager.DialogType.Normal, function() CS.XInputManager.ClearConflictKey() end, function() CS.XInputManager.SwapConflictKey(curKeySetType, pressKeyIndex, curOperationType) self:RefreshGridList(curKeySetType) end ) end end end self.TxtInput.text = CS.XTextManager.GetText("SetInputStart") self.TxtFunction.text = targetItem.Data.Title XInputManager.StartEditKey(self:GetCurKeySetType(), keyCode, pressKeyIndex, cb, curOperationType) self:ShowSetKeyTip(true) self.CurSelectBtn = targetItem self.CurSelectKey = keyCode end function XUiPanelFightSetPc:CheckDataIsChange() local changed = self.Super.CheckDataIsChange(self) changed = XCursorHelper.IsCursorSensitivityChanged() or changed return changed; end function XUiPanelFightSetPc:SaveChange() self.Super.SaveChange(self); XCursorHelper.SaveSensitivityChange(); end function XUiPanelFightSetPc:CancelChange() self.Super.CancelChange(self); XCursorHelper.RevertSensitivity(); end function XUiPanelFightSetPc:SetCursorMoveSensitivity(value) XCursorHelper.PreSetCursorMoveSensitivity(value) end function XUiPanelFightSetPc:GetCursorMoveSensitivity() return XCursorHelper.CursorMoveSensitivity end return XUiPanelFightSetPc