494 lines
No EOL
18 KiB
Lua
494 lines
No EOL
18 KiB
Lua
local GMBoxOBJ = {}
|
||
|
||
GMBoxOBJ.__cname = "GMBoxOBJ"
|
||
|
||
local function selectListSplit(str)
|
||
local selectList = {}
|
||
local list = SL:Split(str, "|")
|
||
for i, v in ipairs(list) do
|
||
local value = SL:Split(v, "#")
|
||
local index = value[1]
|
||
selectList[tonumber(index)] = {select = SL:Split(value[2], "^"),show = SL:Split(value[3], "^")}
|
||
-- SL:dump(value,"-拆分1-")
|
||
end
|
||
return selectList
|
||
end
|
||
|
||
local function defaultSplit(str)
|
||
local default = {}
|
||
local list = SL:Split(str, "|")
|
||
for i, v in ipairs(list) do
|
||
local value = SL:Split(v, "#")
|
||
local index = tonumber(value[1]) or 0
|
||
default[index] = value
|
||
-- SL:dump(default,"-拆分2-")
|
||
end
|
||
return default
|
||
end
|
||
|
||
local function splitString(str)
|
||
local result = {}
|
||
for cmd in str.gmatch(str, "%S+") do
|
||
result[#result + 1] = cmd
|
||
end
|
||
return result
|
||
end
|
||
|
||
local function insert(cfg,data,maxLength)
|
||
maxLength = maxLength or 10
|
||
table.insert(cfg, 1, data)
|
||
local size = #cfg
|
||
if size > maxLength then
|
||
for i = size, maxLength, -1 do
|
||
cfg[i] = nil
|
||
end
|
||
end
|
||
end
|
||
|
||
GMBoxOBJ.cfg = {}
|
||
local _cfg = SL:Require("GUILayout/ssrgame/csvcfg/cfg_gm_box",true)
|
||
for _, v in ipairs(_cfg) do
|
||
GMBoxOBJ.cfg[v.page] = GMBoxOBJ.cfg[v.page] or {title = v.pageName}
|
||
GMBoxOBJ.cfg[v.page][#GMBoxOBJ.cfg[v.page] + 1] = {
|
||
page = v.page,
|
||
index = v.index,
|
||
title = v.title,
|
||
Command = v.Command,
|
||
RegisterNetMsg = v.RegisterNetMsg,
|
||
default = v.default and defaultSplit(v.default),
|
||
selectList = v.selectList and selectListSplit(v.selectList),
|
||
}
|
||
end
|
||
table.insert(GMBoxOBJ.cfg,1,{})
|
||
|
||
GMBoxOBJ.config = {}
|
||
GMBoxOBJ.config = GMBoxOBJ.cfg
|
||
|
||
function GMBoxOBJ:main()
|
||
local parent = GUI:Win_Create(self.__cname, 0, 0, 0, 0, false, false, true, false)
|
||
self._parent = parent
|
||
self.btnName = "btn_switch_%d_%d"
|
||
self.path = {[true] = "res/public/1900000657.png",[false] = "res/public/1900000656.png"}
|
||
|
||
--加载UI
|
||
GUI:LoadExport(parent, "A/GMBoxUI",function ()
|
||
self.ui = GUI:ui_delegate(parent)
|
||
|
||
--界面拖拽
|
||
GUI:Win_SetDrag(parent, self.ui.FrameLayout)
|
||
|
||
--收藏/加星数据
|
||
self.cfg[1] = {}
|
||
local jsonStr = SL:GetLocalString(self.__cname)
|
||
if jsonStr and string.len(jsonStr) > 0 then
|
||
self.cfg[1] = SL:JsonDecode(jsonStr) or {}
|
||
end
|
||
self.cfg[1].title = "我的收藏"
|
||
|
||
--收藏/加星数据增删
|
||
GUI:addOnClickEvent(self.ui.star, function()
|
||
local cfg = self.cfg[self.page1] and self.cfg[self.page1][self.page2]
|
||
if cfg then
|
||
local isStar = true
|
||
for k,v in ipairs(self.cfg[1] or {}) do
|
||
if v.page == cfg.page and v.index == cfg.index then
|
||
table.remove(self.cfg[1],k)
|
||
isStar = false
|
||
break
|
||
end
|
||
end
|
||
if isStar then
|
||
insert(self.cfg[1],cfg,50)
|
||
end
|
||
GUI:Button_loadTextureNormal(self.ui.star, self.path[isStar])
|
||
SL:ShowSystemTips(isStar and "收藏成功" or "取消收藏")
|
||
|
||
SL:scheduleOnce(self.ui.star, function ()
|
||
GUI:setTouchEnabled(self.ui.star,true)
|
||
GUI:removeAllChildren(self.ui.star)
|
||
end, 0.5)
|
||
if self.page1 == 1 then
|
||
self.page1 = nil
|
||
self:createBtn()
|
||
else
|
||
GUI:setTouchEnabled(self.ui.star,false)
|
||
GUI:setVisible(self.ui.star,false)
|
||
local posM = GUI:getPosition(self.ui.star)
|
||
--圆形进度条
|
||
local heroProgress = GUI:ProgressTimer_Create(self.ui.Panel_1, "heroProgress", posM.x, posM.y, self.path[isStar])
|
||
GUI:ProgressTimer_setPercentage(heroProgress, 0)
|
||
GUI:ProgressTimer_progressFromTo(heroProgress, 0.2, 0, 100, function ()
|
||
GUI:removeFromParent(heroProgress)
|
||
GUI:setTouchEnabled(self.ui.star,true)
|
||
GUI:setVisible(self.ui.star,true)
|
||
end)
|
||
end
|
||
end
|
||
end)
|
||
|
||
--缓存命令
|
||
local varName = self.__cname.."_cmd"
|
||
self.cmdList = {}
|
||
jsonStr = SL:GetLocalString(varName)
|
||
if jsonStr and string.len(jsonStr) > 0 then
|
||
self.cmdList = SL:JsonDecode(jsonStr) or {}
|
||
end
|
||
--发送命令
|
||
GUI:addOnClickEvent(self.ui.Button_send, function()
|
||
if self.cacheCmd then
|
||
insert(self.cmdList,self.cacheCmd)
|
||
SL:Print("-cmd-",self.cacheCmd)
|
||
SL:SendGMMsgToChat(self.cacheCmd)
|
||
GUI:TextInput_setString(self.cacheInput,"")
|
||
self.cmdIndex = nil
|
||
self.cacheCmd = nil
|
||
return
|
||
end
|
||
local cfg = self.cfg[self.page1] and self.cfg[self.page1][self.page2]
|
||
if not cfg then return end
|
||
local cmd = ""
|
||
for i, str in ipairs(self.cmd) do
|
||
str = tostring(str)
|
||
if i == 1 then
|
||
cmd = str:gsub("@", "")
|
||
else
|
||
cmd = cmd .." "..str:gsub(" ", "")
|
||
end
|
||
end
|
||
if cfg.RegisterNetMsg and self.cmd[cfg.RegisterNetMsg] then
|
||
--注册网络消息
|
||
self:RegisterNetMsg(self.cmd[cfg.RegisterNetMsg])
|
||
end
|
||
|
||
insert(self.cmdList,cmd)
|
||
self.cmdIndex = nil
|
||
self.cacheCmd = nil
|
||
SL:Print("-cmd-",cmd)
|
||
SL:SendGMMsgToChat(cmd)
|
||
end)
|
||
|
||
--关闭按钮
|
||
GUI:addOnClickEvent(self.ui.CloseButton, function()
|
||
GUI:Win_Close(self._parent)
|
||
self.cfg[1].title = nil
|
||
|
||
-- SL:SetLocalString(self.__cname, SL:JsonEncode({})) --清空收藏命令
|
||
SL:SetLocalString(self.__cname, SL:JsonEncode(self.cfg[1])) --更新收藏命令
|
||
-- SL:SetLocalString(varName, SL:JsonEncode({})) --清空收藏命令
|
||
SL:SetLocalString(varName, SL:JsonEncode(self.cmdList)) --更新缓存命令
|
||
end)
|
||
|
||
--隐藏模板组件
|
||
GUI:setVisible(self.ui.template_1,false)
|
||
GUI:setVisible(self.ui.template_2,false)
|
||
GUI:setVisible(self.ui.template_Command,false)
|
||
|
||
--创建滚动条
|
||
GUI:SetScrollViewVerticalBar(self.ui.FrameLayout, {
|
||
bgPic = "res/private/gui_edit/scroll/line.png", -- 背景图
|
||
barPic = "res/private/gui_edit/scroll/p.png", -- 滑动按钮图片
|
||
Arr1PicN = "res/private/gui_edit/scroll/t.png", -- 上(正常图)
|
||
Arr1PicP = "res/private/gui_edit/scroll/t_1.png", -- 上(按下图)可不传
|
||
Arr2PicN = "res/private/gui_edit/scroll/b.png", -- 下(正常图)
|
||
Arr2PicP = "res/private/gui_edit/scroll/b_1.png", -- 下(按下图)可不传
|
||
default = 0, -- 进度条值(默认是0)
|
||
x = 303, -- 进度条坐标 x
|
||
y = 5, -- 进度条坐标 y
|
||
list = self.ui.ListView_2 -- 滚动的容器 list
|
||
})
|
||
|
||
--创建右侧title
|
||
local scrollText = GUI:ScrollText_Create(self.ui.Panel_1, "scrollTitle", 183, 413, 340, 14, "#FFFFFF", "")
|
||
GUI:ScrollText_setHorizontalAlignment(scrollText, 2)
|
||
GUI:ScrollText_enableOutline(scrollText, "#111111", 1)
|
||
GUI:setAnchorPoint(scrollText, 0.5, 0.5)
|
||
|
||
--创建输入框
|
||
self:createInput()
|
||
|
||
--创建页签按钮
|
||
self:createBtn()
|
||
end)
|
||
end
|
||
|
||
--网络消息
|
||
function GMBoxOBJ:RegisterNetMsg(msgID)
|
||
SL:RegisterLuaNetMsg(tonumber(msgID), function (_msgID, p1, p2, p3, msgData)
|
||
SL:Print("接收到网络消息",_msgID, p1, p2, p3, msgData)
|
||
end,self._parent)
|
||
end
|
||
|
||
--创建输入框
|
||
function GMBoxOBJ:createInput()
|
||
--搜索框
|
||
local Input = GUI:TextInput_Create(self.ui.Image_Input_bg, "Input_select", 0, 2.00, 156.00 + 64, 25.00, 15)
|
||
self.selectInput = Input
|
||
GUI:TextInput_setString(Input,"")
|
||
GUI:TextInput_setPlaceHolder(Input, "请输入搜索内容")
|
||
GUI:TextInput_setFontColor(Input, "#ffffff")
|
||
GUI:setTouchEnabled(Input, true)
|
||
GUI:TextInput_setInputMode(Input,6)
|
||
|
||
--搜索按钮
|
||
GUI:addOnClickEvent(self.ui.selectButton, function()
|
||
local key = GUI:TextInput_getString(self.selectInput)
|
||
local cfg = {}
|
||
for _, var in ipairs(self.config) do
|
||
local temp_c = {}
|
||
for _, v in ipairs(var) do
|
||
if string.find(v.title,key) then
|
||
temp_c[#temp_c + 1] = v
|
||
end
|
||
end
|
||
if next(temp_c) then
|
||
cfg[#cfg + 1] = temp_c
|
||
cfg[#cfg].title = var.title
|
||
end
|
||
end
|
||
if next(cfg) then
|
||
self.page1 = nil
|
||
self.cfg = cfg
|
||
self:createBtn()
|
||
else
|
||
SL:ShowSystemTips("搜索失败~")
|
||
end
|
||
end)
|
||
|
||
--缓存命令输入框
|
||
Input = GUI:TextInput_Create(self.ui.Image_sendInput_bg, "Input_cache", 0, 2.00, 156.00 + 64 + 70, 25.00, 15)
|
||
self.cacheInput = Input
|
||
GUI:TextInput_setString(Input,"")
|
||
GUI:TextInput_setPlaceHolder(Input, "")
|
||
GUI:TextInput_setFontColor(Input, "#ffffff")
|
||
GUI:setTouchEnabled(Input, true)
|
||
GUI:TextInput_setInputMode(Input,6)
|
||
GUI:TextInput_closeInput(Input)
|
||
GUI:TextInput_addOnEvent(Input, function(sender)
|
||
self.cmdIndex = nil
|
||
self.cacheCmd = nil
|
||
GUI:TextInput_setString(sender,"")
|
||
|
||
if not next(self.cmdList) then return end
|
||
|
||
local posM = GUI:getWorldPosition(sender)
|
||
if not posM then return end
|
||
posM.y = posM.y + 35 + #self.cmdList * 30
|
||
SL:OpenSelectListUI(self.cmdList, posM, 283, 30, function (change)
|
||
if self.cmdList[change] then
|
||
self.cacheCmd = self.cmdList[change]
|
||
GUI:TextInput_setString(self.cacheInput, "@"..self.cmdList[change])
|
||
end
|
||
end)
|
||
end)
|
||
|
||
--缓存命令按钮
|
||
GUI:addOnClickEvent(self.ui.Button_input_5, function()
|
||
if not next(self.cmdList) then return end
|
||
self.cmdIndex = self.cmdIndex and self.cmdIndex + 1 or 1
|
||
if not self.cmdList[self.cmdIndex] then
|
||
self.cmdIndex = 1
|
||
end
|
||
self.cacheCmd = self.cmdList[self.cmdIndex]
|
||
GUI:TextInput_setString(self.cacheInput,"@"..self.cacheCmd)
|
||
end)
|
||
end
|
||
|
||
--获取配置信息
|
||
---@param hierarchy number 层级
|
||
function GMBoxOBJ:getConfig(hierarchy)
|
||
if hierarchy == 1 then
|
||
return self.cfg or {}
|
||
elseif hierarchy == 2 then
|
||
return self.cfg[self.page1] or {}
|
||
end
|
||
end
|
||
|
||
--页签创建
|
||
---@param hierarchy? number 层级
|
||
---@param page? number 页数
|
||
function GMBoxOBJ:createBtn(hierarchy,page)
|
||
hierarchy = hierarchy or 1
|
||
page = page or 1
|
||
local listView = self.ui["ListView_"..hierarchy]
|
||
if not listView then return end
|
||
GUI:removeAllChildren(listView)
|
||
GUI:setVisible(self.ui.Panel_1,false)
|
||
self.ui = GUI:ui_delegate(self._parent)
|
||
--克隆按钮
|
||
for i,cfg in ipairs(self:getConfig(hierarchy) or {}) do
|
||
local ui_item = GUI:Clone(self.ui["template_"..hierarchy])
|
||
GUI:setVisible(ui_item,true)
|
||
GUI:ListView_pushBackCustomItem(listView, ui_item)
|
||
GUI:setName(ui_item,"btn_switch_"..hierarchy.."_"..i)
|
||
GUI:addOnClickEvent(ui_item, function()
|
||
self:updatePageBtn(hierarchy,i)
|
||
end)
|
||
if hierarchy == 1 then
|
||
GUI:Button_setTitleText(ui_item, cfg.title or "其他")
|
||
else
|
||
local scrollText = GUI:ScrollText_Create(ui_item, "scrollText", 80, 15, 150, 12, "#FFFFFF", cfg.title or "未命名")
|
||
GUI:ScrollText_setHorizontalAlignment(scrollText, 2)
|
||
GUI:ScrollText_enableOutline(scrollText, "#111111", 1)
|
||
GUI:setAnchorPoint(scrollText, 0.5, 0.5)
|
||
end
|
||
if i == page then
|
||
self:updatePageBtn(hierarchy, page)
|
||
end
|
||
end
|
||
end
|
||
|
||
--页签点击
|
||
---@param hierarchy number 层级
|
||
---@param tag number 页数
|
||
function GMBoxOBJ:updatePageBtn(hierarchy,tag)
|
||
local listView = self.ui["ListView_"..hierarchy]
|
||
local page = self["page"..hierarchy]
|
||
--上一次选择按钮
|
||
if page then
|
||
local ui_item = self.ui[self.btnName:format(hierarchy,page)]
|
||
if ui_item then
|
||
GUI:Button_setBrightEx(ui_item, true)
|
||
GUI:Button_setTitleColor(ui_item, "#D2B48C")
|
||
end
|
||
end
|
||
|
||
if tag == page then return end
|
||
|
||
--这一次选择按钮
|
||
self["page"..hierarchy] = tag
|
||
local ui_item = GUI:getChildByName(listView, self.btnName:format(hierarchy,tag))
|
||
if ui_item then
|
||
GUI:Button_setBrightEx(ui_item, false)
|
||
GUI:Button_setTitleColor(ui_item, "#F7E6C6")
|
||
end
|
||
|
||
--是否还有下一层,没有就更新右侧UI
|
||
hierarchy = hierarchy + 1
|
||
if self.ui["ListView_"..hierarchy] then
|
||
self["page"..hierarchy] = nil
|
||
self:createBtn(hierarchy)
|
||
else
|
||
self:updateDescUI()
|
||
end
|
||
end
|
||
|
||
--更新右侧UI
|
||
function GMBoxOBJ:updateDescUI()
|
||
local cfg = self.cfg[self.page1] and self.cfg[self.page1][self.page2]
|
||
if not cfg then return end
|
||
--更新右侧收藏/加星
|
||
local bool = false
|
||
if self.page1 == 1 then
|
||
bool = true
|
||
else
|
||
for _,v in ipairs(self.cfg[1]) do
|
||
if v.page == cfg.page and v.index == cfg.index then
|
||
bool = true
|
||
break
|
||
end
|
||
end
|
||
end
|
||
GUI:Button_loadTextureNormal(self.ui.star, self.path[bool])
|
||
|
||
GUI:setVisible(self.ui.Panel_1,true)
|
||
GUI:ScrollText_setString(self.ui.scrollTitle,cfg.title)
|
||
|
||
GUI:removeAllChildren(self.ui.Layout_RichText)
|
||
local richText = GUI:RichText_Create(self.ui.Layout_RichText, "richText", 0, 15, ("<u><a href='%s'>%s</a></u>"):format(cfg.Command,cfg.Command), 9999, 14, "#f8e6c6", 0, function(...)
|
||
SL:SetMetaValue("CLIPBOARD_TEXT", cfg.Command)
|
||
SL:ShowSystemTips("复制成功")
|
||
end)
|
||
GUI:setAnchorPoint(richText, 0, 0.5)
|
||
|
||
GUI:removeAllChildren(self.ui.Layout_Command)
|
||
local cmds = splitString(cfg.Command)
|
||
self.cmd = {}
|
||
if #cmds == 1 then
|
||
self.cmd[1] = cmds[1]
|
||
local size = GUI:getContentSize(self.ui.Layout_Command)
|
||
richText = GUI:RichText_Create(self.ui.Layout_Command, "richText", size.width/2, size.height/2, "*温馨提示本指令无需参数。请直接点击确定按钮执行*", 9999, 14, "#f8e6c6")
|
||
GUI:setAnchorPoint(richText, 0.5, 0.5)
|
||
else
|
||
for i = 1, #cmds do
|
||
self.cmd[i] = cmds[i]
|
||
if i > 1 then
|
||
self.cmd[i] = ""
|
||
local ui_item = GUI:Clone(self.ui.template_Command)
|
||
GUI:setVisible(ui_item,true)
|
||
GUI:setName(ui_item,"command_"..i - 1)
|
||
GUI:addChild(self.ui.Layout_Command, ui_item)
|
||
GUI:Win_SetParam(ui_item, i)
|
||
|
||
local handle = GUI:getChildByName(ui_item, "Layout_RichText2")
|
||
if handle then
|
||
local size = GUI:getContentSize(handle)
|
||
richText = GUI:RichText_Create(handle, "rich"..i, 60 + 85, size.height/2+5, cmds[i] ..":", 9999, 16, "#f8e6c6")
|
||
GUI:setAnchorPoint(richText, 1, 0.5)
|
||
end
|
||
|
||
local Input = GUI:TextInput_Create(ui_item, "Input_demo"..i, 50 + 85.6, 2.00, 156.00, 25.00, 15)
|
||
local str = ""
|
||
if cfg.default and cfg.default[i] then
|
||
local default = cfg.default[i]
|
||
if default[3] then
|
||
str = SL:GetMetaValue(default[3])
|
||
else
|
||
str = default[2] or ""
|
||
end
|
||
Input.isFirstCilck = true
|
||
end
|
||
self.cmd[i] = str
|
||
GUI:Win_SetParam(Input,i)
|
||
GUI:TextInput_setString(Input,str)
|
||
GUI:TextInput_setPlaceHolder(Input, "请输入")
|
||
GUI:TextInput_setFontColor(Input, "#ffffff")
|
||
GUI:setTouchEnabled(Input, true)
|
||
GUI:TextInput_setInputMode(Input,6)
|
||
GUI:TextInput_addOnEvent(Input, function(sender)
|
||
if sender.isFirstCilck then
|
||
GUI:TextInput_setString(sender,"")
|
||
Input.isFirstCilck = false
|
||
return
|
||
end
|
||
self.cmd[i] = GUI:TextInput_getString(sender)
|
||
end)
|
||
local Button_List = GUI:getChildByName(ui_item, "Button_List")
|
||
|
||
local bool = cfg.selectList and cfg.selectList[i]
|
||
GUI:setVisible(Button_List,bool and true or false)
|
||
GUI:setTouchEnabled(Input, not bool and true or false)
|
||
if bool then
|
||
local select = bool and cfg.selectList[i].select
|
||
local show = bool and cfg.selectList[i].show
|
||
--下拉框
|
||
GUI:Win_SetParam(Button_List,i)
|
||
GUI:addOnClickEvent(Button_List, function(send)
|
||
local posM = GUI:getWorldPosition(send)
|
||
if not posM then return end
|
||
posM.x = posM.x - 158
|
||
SL:OpenSelectListUI(show, posM, 150, 30, function (change)
|
||
if select[change] then
|
||
self.cmd[i] = select[change]
|
||
GUI:TextInput_setString(Input, select[change])
|
||
end
|
||
end)
|
||
end)
|
||
end
|
||
end
|
||
end
|
||
GUI:UserUILayout(self.ui.Layout_Command, {
|
||
dir=1,
|
||
addDir=2,
|
||
interval=1,
|
||
gap = {y=10},
|
||
sortfunc = function (lists)
|
||
table.sort(lists, function (a, b)
|
||
return GUI:Win_GetParam(a) < GUI:Win_GetParam(b)
|
||
end)
|
||
end
|
||
})
|
||
end
|
||
end
|
||
|
||
|
||
GMBoxOBJ:main() |