Files
Endfield-Data/LuaScripts/UI/Panels/Joystick/JoystickCtrl.lua
2025-12-02 20:37:18 +07:00

316 lines
6.9 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.Joystick
JoystickCtrl = HL.Class('JoystickCtrl', uiCtrl.UICtrl)
JoystickCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.ON_TOGGLE_DEBUG_FLY] = "OnToggleDebugFly",
[MessageConst.ON_TOGGLE_VIRTUAL_MOUSE] = 'OnToggleVirtualMouse',
[MessageConst.ON_GAME_SETTING_CHANGED] = 'OnGameSettingChanged',
[MessageConst.FORBID_SYSTEM_CHANGED] = 'OnForbidSystemChange',
}
JoystickCtrl.m_updateKey = HL.Field(HL.Number) << -1
JoystickCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
if BEYOND_DEBUG then
self:BindInputEvent(CS.Beyond.Input.KeyboardKeyCode.F5, function()
self:_ToggleHideCursor()
end, "a")
if CS.Beyond.DebugDefines.disableF5Mode then
if InputManagerInst.inHideCursorMode then
self:_ToggleHideCursor()
end
end
if DeviceInfo.usingTouch then
if InputManagerInst.inHideCursorMode then
self:_ToggleHideCursor()
end
end
end
self:BindInputPlayerAction("common_toggle_walk", function()
self:_ToggleWalk()
end)
self.view.joystick.onTouchStart:AddListener(function()
GameInstance.playerController:ProduceMoveCommand()
end)
self.view.joystick.onTouchEnd:AddListener(function()
GameInstance.playerController:ConsumeMoveCommand()
end)
self.view.joystick.onToggleAutoSprint:AddListener(function(isAutoSprint)
self:_ToggleAutoSprint(isAutoSprint)
end)
self:_UpdateWalkRunRation()
self:_UpdateMoveForbidStatus()
end
JoystickCtrl.OnShow = HL.Override() << function(self)
self:_AddRegisters()
end
JoystickCtrl.OnHide = HL.Override() << function(self)
self:_ClearRegisters()
end
JoystickCtrl.OnClose = HL.Override() << function(self)
self:_ClearRegisters()
if BEYOND_DEBUG and GameInstance.playerController.inFlyMode then
CS.Beyond.Gameplay.Core.PlayerController.ToggleFlyingMode()
end
end
JoystickCtrl.OnGameSettingChanged = HL.Method() << function(self)
self:_UpdateWalkRunRation()
end
JoystickCtrl._OnPanelInputBlocked = HL.Override(HL.Boolean) << function(self, inputEnabled)
if inputEnabled then
self:_StartCoroutine(function()
coroutine.step()
if self.view.inputGroup.groupEnabled then
self.view.joystick:CheckShouldActive()
if self.view.joystick.active then
UIManager.commonTouchPanel:DeActiveTouch(self.view.joystick.activeTouchId)
end
end
end)
end
end
JoystickCtrl._AddRegisters = HL.Method() << function(self)
self.m_updateKey = LuaUpdate:Add("Tick", function()
self:_Update()
end)
end
JoystickCtrl._ClearRegisters = HL.Method() << function(self)
GameInstance.playerController:UpdateMoveCommand(Vector2.zero)
self.m_updateKey = LuaUpdate:Remove(self.m_updateKey)
end
JoystickCtrl._ToggleHideCursor = HL.Method() << function(self)
InputManagerInst:ToggleHideCursor()
end
JoystickCtrl.m_isMoveForbid = HL.Field(HL.Boolean) << false
JoystickCtrl._Update = HL.Method() << function(self)
self:_UpdateMove()
end
JoystickCtrl._UpdateMove = HL.Method() << function(self)
if not self:CanPlayerMove() then
return
end
local dir = self.view.joystick.jsValue
if LuaSystemManager.factory.inTopView then
if InputManagerInst:GetKey(CS.Beyond.Input.KeyboardKeyCode.LeftControl) then
return
end
local spd = InputManagerInst:GetKey(CS.Beyond.Input.KeyboardKeyCode.LeftShift) and 35 or 15
LuaSystemManager.factory:MoveTopViewCamTarget(dir * spd * Time.deltaTime)
else
GameInstance.playerController:UpdateMoveCommand(dir)
end
end
JoystickCtrl._ToggleWalk = HL.Method() << function(self)
if FactoryUtils.isInTopView() then
return
end
GameInstance.playerController:ToggleWalk()
end
JoystickCtrl._ToggleAutoSprint = HL.Method(HL.Boolean) << function(self, isAutoSprint)
if not CS.Beyond.GameSetting.controllerCachedAutoSprint then
return
end
GameInstance.playerController:OnJoystickSprint(isAutoSprint)
end
JoystickCtrl._UpdateWalkRunRation = HL.Method() << function(self)
self.view.joystick.walkRation = CS.Beyond.GameSetting.controllerCachedWalkRunRatio
end
JoystickCtrl.OnForbidSystemChange = HL.Method(HL.Any) << function(self, args)
local forbidType, isForbid = unpack(args)
if forbidType == ForbidType.ForbidMove then
if isForbid then
GameInstance.playerController:UpdateMoveCommand(Vector2.zero)
end
end
self:_UpdateMoveForbidStatus()
end
JoystickCtrl.OnToggleVirtualMouse = HL.Method(HL.Table) << function(self, args)
local isActive = unpack(args)
GameInstance.player.forbidSystem:SetForbid(ForbidType.ForbidMove, "VirtualMouse", isActive);
end
JoystickCtrl._UpdateMoveForbidStatus = HL.Method() << function(self)
self.m_isMoveForbid = Utils.isForbidden(ForbidType.ForbidMove)
end
JoystickCtrl.CanPlayerMove = HL.Method().Return(HL.Boolean) << function(self)
return not self.m_isMoveForbid
end
JoystickCtrl.m_flyModeUpPressKey = HL.Field(HL.Number) << -1
JoystickCtrl.m_flyModeUpReleaseKey = HL.Field(HL.Number) << -1
JoystickCtrl.m_flyModeDownPressKey = HL.Field(HL.Number) << -1
JoystickCtrl.m_flyModeDownReleaseKey = HL.Field(HL.Number) << -1
JoystickCtrl.OnToggleDebugFly = HL.Method() << function(self)
if BEYOND_DEBUG_COMMAND then
local inFlyMode = GameInstance.playerController.inFlyMode
self:DeleteInputBinding(self.m_flyModeUpPressKey)
self:DeleteInputBinding(self.m_flyModeUpReleaseKey)
self:DeleteInputBinding(self.m_flyModeDownPressKey)
self:DeleteInputBinding(self.m_flyModeDownReleaseKey)
if inFlyMode then
self.m_flyModeDownPressKey = self:BindInputPlayerAction("common_debug_fly_down_start", function()
GameInstance.playerController:ToggleFly(-1.0, true)
end)
self.m_flyModeDownReleaseKey = self:BindInputPlayerAction("common_debug_fly_down_end", function()
GameInstance.playerController:ToggleFly(-1.0, false)
end)
self.m_flyModeUpPressKey = self:BindInputPlayerAction("common_debug_fly_up_start", function()
GameInstance.playerController:ToggleFly(1.0, true)
end)
self.m_flyModeUpReleaseKey = self:BindInputPlayerAction("common_debug_fly_up_end", function()
GameInstance.playerController:ToggleFly(1.0, false)
end)
end
Notify(MessageConst.SHOW_TOAST, inFlyMode and "角色飞行模式 开" or "角色飞行模式 关")
end
end
HL.Commit(JoystickCtrl)