Files
Endfield-Data/LuaScripts/UI/Panels/LuaConsole/LuaConsoleCtrl.lua
2026-01-31 21:42:01 +07:00

260 lines
6.7 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.LuaConsole
LuaConsoleCtrl = HL.Class('LuaConsoleCtrl', uiCtrl.UICtrl)
LuaConsoleCtrl.s_messages = HL.StaticField(HL.Table) << {
}
LuaConsoleCtrl.s_globalBindingGroupId = HL.StaticField(HL.Number) << -1
LuaConsoleCtrl.m_executeInputStrList = HL.Field(HL.Table)
LuaConsoleCtrl.m_getLogCellFunc = HL.Field(HL.Function)
LuaConsoleCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self.view.closeButton.onClick:AddListener(function()
self:Hide()
end)
self.view.inputField.onValidateInput = function(input, charIndex, addedChar)
return self:_ValidateInput(addedChar)
end
self.view.confirmButton.onClick:AddListener(function()
self:_TryExecute()
end)
self:BindInputEvent(CS.Beyond.Input.KeyboardKeyCode.Return, function()
self:_TryExecute()
end)
self:BindInputEvent(CS.Beyond.Input.KeyboardKeyCode.KeypadEnter, function()
self:_TryExecute()
end)
self.view.confirmAndCloseButton.onClick:AddListener(function()
self:_TryExecute()
self:Hide()
end)
self.m_getLogCellFunc = UIUtils.genCachedCellFunction(self.view.radioTextList)
self.view.logList.onUpdateCell:AddListener(function(obj, csIndex)
local cell = self.m_getLogCellFunc(obj)
self:_OnRefreshLogCell(cell, LuaIndex(csIndex))
end)
self.view.clearButton.onClick:AddListener(function()
self:_ClearLog()
end)
self:_ClearLog()
end
LuaConsoleCtrl.Init = HL.StaticMethod() << function()
if not (BEYOND_DEBUG_COMMAND or BEYOND_DEBUG) then
return
end
logger.info("LuaConsoleCtrl.Init")
LuaConsoleCtrl.s_globalBindingGroupId = InputManagerInst:CreateGroup(-1)
UIUtils.bindInputEvent(CS.Beyond.Input.KeyboardKeyCode.BackQuote, function()
LuaConsoleCtrl.ToggleSelf()
end, "a", InputTimingType.OnClick, LuaConsoleCtrl.s_globalBindingGroupId)
UIUtils.bindInputEvent(CS.Beyond.Input.KeyboardKeyCode.R, function()
LuaConsoleCtrl.RefreshScripts()
end, "a", InputTimingType.OnClick, LuaConsoleCtrl.s_globalBindingGroupId)
UIUtils.bindInputEvent(CS.Beyond.Input.KeyboardKeyCode.I, function()
CS.Beyond.UI.UIText.CopyUITextContent()
end, "a", InputTimingType.OnClick, LuaConsoleCtrl.s_globalBindingGroupId)
_G.UI = UIManager
_G.UC = {}
setmetatable(_G.UC, {
__index = function(_, k)
return UIManager.cfgs[k].ctrl
end
})
end
LuaConsoleCtrl.OnDisposeLuaEnv = HL.StaticMethod() << function()
if not (BEYOND_DEBUG_COMMAND or BEYOND_DEBUG) then
return
end
InputManagerInst:DeleteGroup(LuaConsoleCtrl.s_globalBindingGroupId)
end
LuaConsoleCtrl.ToggleSelf = HL.StaticMethod() << function()
if UIManager:IsShow(PANEL_ID) then
UIManager:Hide(PANEL_ID)
else
LuaConsoleCtrl.AutoOpen(PANEL_ID, nil, true)
UIManager:SetTopOrder(PANEL_ID)
end
end
LuaConsoleCtrl.RefreshScripts = HL.StaticMethod() << function()
Notify(MessageConst.SHOW_TOAST, "刷新Lua脚本……")
refreshScripts()
logger.info("开始进行刷新Lua后处理……")
RedDotManager:UpdateConfigs()
logger.info("刷新Lua后处理结束")
end
LuaConsoleCtrl.DevOnlyTogglePanel = HL.StaticMethod(HL.Table) << function(args)
local panelName, isShow = unpack(args)
if isShow then
UIManager:Show(PanelId[panelName])
else
UIManager:Hide(PanelId[panelName])
end
end
LuaConsoleCtrl.OnShow = HL.Override() << function(self)
self.view.inputField:ActivateInputField()
end
LuaConsoleCtrl._ClearLog = HL.Method() << function(self)
self.m_executeInputStrList = {}
self.view.logList:UpdateCount(0)
end
LuaConsoleCtrl._ValidateInput = HL.Method(HL.Number).Return(HL.Any) << function(self, addedChar)
if addedChar == 10 then
if not Input.GetKey(Unity.KeyCode.LeftShift) and not Input.GetKey(Unity.KeyCode.RightShift) then
return ""
end
end
return addedChar
end
LuaConsoleCtrl._TryExecute = HL.Method() << function(self)
if not self:IsShow() or Input.GetKey(Unity.KeyCode.LeftShift) or Input.GetKey(Unity.KeyCode.RightShift) then
return
end
local str = string.trim(self.view.inputField.text)
if str == "" then
return
end
CS.Beyond.Lua.LuaCypher.DisableDoStringCypher()
local logs = Utils.printDoString(str)
CS.Beyond.Lua.LuaCypher.EnableDoStringCypher()
local newContent = table.concat(logs or {})
newContent = string.gsub(newContent, "\r\n", "\n")
newContent = string.gsub(newContent, "\r", "\n")
newContent = (#self.m_executeInputStrList + 1) .. ". " .. newContent
table.insert(self.m_executeInputStrList, 1, {
inputText = str,
contentText = newContent,
})
self.view.logList:UpdateCount(#self.m_executeInputStrList)
self.view.inputField:ActivateInputField()
end
LuaConsoleCtrl._OnRefreshLogCell = HL.Method(HL.Any, HL.Number) << function(self, cell, luaIndex)
local data = self.m_executeInputStrList[luaIndex]
cell.logTxt.text = data.contentText
cell.reInputBtn.onClick:RemoveAllListeners()
cell.reInputBtn.onClick:AddListener(function()
self.view.inputField.text = data.inputText
end)
cell.reExecuteBtn.onClick:RemoveAllListeners()
cell.reExecuteBtn.onClick:AddListener(function()
self.view.inputField.text = data.inputText
self:_TryExecute()
end)
cell.reExecuteAndCloseBtn.onClick:RemoveAllListeners()
cell.reExecuteAndCloseBtn.onClick:AddListener(function()
self.view.inputField.text = data.inputText
self:_TryExecute()
self:Hide()
end)
end
LuaConsoleCtrl.OnLuaDebugSocketMessage = HL.StaticMethod(HL.Table) << function(arg)
local socketMgr, str = unpack(arg)
local logs = Utils.printDoString(str)
local newContent = table.concat(logs or {})
newContent = string.gsub(newContent, "\n", "\r\n")
socketMgr:SendString("---------------------------------------------------------------------------------------------------\r\n")
socketMgr:SendString(newContent)
socketMgr:SendString("---------------------------------------------------------------------------------------------------\r\n\r\n>")
end
LuaConsoleCtrl.SyncClientRemoteTask = HL.StaticMethod(HL.Table) << function(arg)
local content, callback = unpack(arg)
logger.info("LuaConsoleCtrl.SyncClientRemoteTask:\n", content)
local logs = Utils.printDoString(content, true)
local result = table.concat(logs or {})
logger.info("LuaConsoleCtrl.SyncClientRemoteTask Finish:\n", result)
callback(result)
end
HL.Commit(LuaConsoleCtrl)