PGRData/Script/matrix/xui/xuitheatre/XUiSelectableEventNodePanel.lua

87 lines
No EOL
2.8 KiB
Lua

--######################## XUiSelectableEventNodePanel ########################
local XUiSelectableEventNodePanel = XClass(nil, "XUiSelectableEventNodePanel")
function XUiSelectableEventNodePanel:Ctor(ui, rootUi)
XUiHelper.InitUiClass(self, ui)
-- XASelectableEventNode
self.Node = nil
self.RootUi = rootUi
-- 当前选择
self.CurrentIndex = -1
end
-- node : XASelectableEventNode
function XUiSelectableEventNodePanel:SetData(node)
self.Node = node
-- 事件描述
self.TxtDesc.text = node:GetDesc()
-- 刷新选项
self:RefreshOptions()
self.BtnOK:SetNameByGroup(0, node:GetBtnConfirmText())
XUiHelper.RegisterClickEvent(self, self.BtnOK, self.OnBtnOKClicked)
end
function XUiSelectableEventNodePanel:OnBtnOKClicked()
if self.CurrentIndex <= 0 then
XUiManager.TipErrorWithKey("TheatreNotSelectItem")
return
end
self.Node:RequestTriggerNode(function(newEventNode)
self.RootUi:RefreshNode(newEventNode)
end, self.Node:GetSelectableItems()[self.CurrentIndex]:GetOptionId())
end
function XUiSelectableEventNodePanel:RefreshOptions()
self.BtnOption.gameObject:SetActiveEx(false)
local child
local childCount = self.PanelOption.transform.childCount
for i = 0, childCount - 1 do
child = self.PanelOption.transform:GetChild(i)
child.gameObject:SetActiveEx(false)
end
local items = self.Node:GetSelectableItems()
local button, item
local buttons = {}
local count = nil
for i = 1, #items do
if i > childCount then
child = XUiHelper.Instantiate(self.BtnOption, self.PanelOption.transform)
else
child = self.PanelOption.transform:GetChild(i - 1)
end
child.gameObject:SetActiveEx(true)
button = child:GetComponent("XUiButton")
table.insert(buttons, button)
item = items[i]
-- 描述1
button:SetNameByGroup(0, item:GetDesc())
-- 描述2
button:SetNameByGroup(1, item:GetDownDesc())
-- 图标数量
count = item:GetItemCount()
button:SetNameByGroup(2, count)
button:SetButtonState(CS.UiButtonState.Normal)
for i = 3, 5 do
button.ImageList[i].gameObject:SetActiveEx(count ~= nil)
end
-- 图标
local iconPath = item:GetIcon()
for i = 0, button.RawImageList.Count - 1 do
button.RawImageList[i].gameObject:SetActiveEx(iconPath ~= nil)
end
for i = 0, 2 do
button.ImageList[i].gameObject:SetActiveEx(iconPath ~= nil)
end
if iconPath ~= nil then
button:SetRawImage(item:GetIcon())
end
end
self.PanelOption:Init(buttons, function(index)
self.CurrentIndex = index
end)
if #buttons > 0 then
self.PanelOption:SelectIndex(1)
end
end
return XUiSelectableEventNodePanel