5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
187 lines
5.0 KiB
Lua
187 lines
5.0 KiB
Lua
local CharConsumableCtrl = class("CharConsumableCtrl", BaseCtrl)
|
|
CharConsumableCtrl._mapNodeConfig = {
|
|
rtItem = {
|
|
sNodeName = "rtItem_",
|
|
nCount = 10,
|
|
sCtrlName = "Game.UI.CharConsumable.CharConsumableItemCtrl"
|
|
},
|
|
btnItem = {
|
|
sNodeName = "rtItem_",
|
|
nCount = 10,
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Item"
|
|
},
|
|
TMPTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "CharacterYO_Title"
|
|
},
|
|
TMPSubTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "CharacterYO_SubTitle"
|
|
},
|
|
btnConfirm = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Confirm"
|
|
},
|
|
btnCancel = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Cancel"
|
|
},
|
|
txtBtnConfirm = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MessageBox_Confirm"
|
|
},
|
|
txtBtnCancel = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MessageBox_Cancel"
|
|
},
|
|
btnConfirmPreview = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Cancel"
|
|
},
|
|
txtBtnConfirmPreview = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MessageBox_Confirm"
|
|
}
|
|
}
|
|
CharConsumableCtrl._mapEventConfig = {}
|
|
CharConsumableCtrl._mapRedDotConfig = {}
|
|
function CharConsumableCtrl:Awake()
|
|
end
|
|
function CharConsumableCtrl:FadeIn()
|
|
end
|
|
function CharConsumableCtrl:FadeOut()
|
|
end
|
|
function CharConsumableCtrl:OnEnable()
|
|
self.nItemId = 0
|
|
self.curSelect = 0
|
|
self.bPreview = false
|
|
local tbParam = self:GetPanelParam()
|
|
if type(tbParam) == "table" then
|
|
self.nItemId = tbParam[1]
|
|
if tbParam[2] == nil then
|
|
end
|
|
self.bPreview = tbParam[2]
|
|
end
|
|
self.state = self:Refresh(self.nItemId)
|
|
if not self.state then
|
|
for i = 1, 10 do
|
|
self._mapNode.rtItem[i].gameObject:SetActive(false)
|
|
end
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.CharConsumablePanel)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
self._mapNode.btnConfirmPreview.gameObject:SetActive(self.bPreview)
|
|
self._mapNode.btnConfirm.gameObject:SetActive(not self.bPreview)
|
|
self._mapNode.btnCancel.gameObject:SetActive(not self.bPreview)
|
|
if self.bPreview then
|
|
NovaAPI.SetTMPText(self._mapNode.TMPTitle, ConfigTable.GetUIText("CharacterYO_Title_Preview"))
|
|
end
|
|
end
|
|
function CharConsumableCtrl:OnDisable()
|
|
end
|
|
function CharConsumableCtrl:OnDestroy()
|
|
end
|
|
function CharConsumableCtrl:OnRelease()
|
|
end
|
|
function CharConsumableCtrl:Refresh(nItemId)
|
|
self.curSelect = 0
|
|
self.tbChar = {}
|
|
local mapItemCfgData = ConfigTable.GetData_Item(nItemId)
|
|
if mapItemCfgData == nil then
|
|
return false
|
|
end
|
|
if mapItemCfgData.Stype ~= GameEnum.itemStype.CharacterYO then
|
|
return false
|
|
end
|
|
local mapUseCfg = decodeJson(mapItemCfgData.UseArgs)
|
|
if mapUseCfg == nil then
|
|
return false
|
|
end
|
|
for charId, _ in pairs(mapUseCfg) do
|
|
table.insert(self.tbChar, tonumber(charId))
|
|
end
|
|
local sort = function(a, b)
|
|
local mapCharCfgA = ConfigTable.GetData_Character(a)
|
|
local mapCharCfgB = ConfigTable.GetData_Character(b)
|
|
if mapCharCfgA == nil or mapCharCfgB == nil then
|
|
return mapCharCfgA ~= nil
|
|
end
|
|
if mapCharCfgA.Grade ~= mapCharCfgB.Grade then
|
|
return mapCharCfgA.Grade < mapCharCfgB.Grade
|
|
end
|
|
return a < b
|
|
end
|
|
table.sort(self.tbChar, sort)
|
|
for i = 1, 10 do
|
|
if self.tbChar[i] == nil then
|
|
self._mapNode.rtItem[i].gameObject:SetActive(false)
|
|
else
|
|
self._mapNode.rtItem[i].gameObject:SetActive(true)
|
|
self._mapNode.rtItem[i]:SetChar(self.tbChar[i])
|
|
self._mapNode.rtItem[i]:SetSelect(false)
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
function CharConsumableCtrl:OnBtnClick_Confirm()
|
|
if not self.state then
|
|
return
|
|
end
|
|
local tbItem = PlayerData.Item:GetItemSortByExpire(self.nItemId)
|
|
if #tbItem == 0 then
|
|
printError("没有可使用的道具:" .. self.nItemId)
|
|
return
|
|
end
|
|
local nChooseTid = self.tbChar[self.curSelect]
|
|
local tbUseItem = {}
|
|
if nChooseTid ~= nil then
|
|
table.insert(tbUseItem, {
|
|
Id = tbItem[1][1],
|
|
Tid = self.nItemId,
|
|
SelectTid = nChooseTid,
|
|
Qty = 1
|
|
})
|
|
else
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("CharacterSelect_NoSelectCharHint"))
|
|
return
|
|
end
|
|
local callback = function()
|
|
EventManager.Hit("ConsumableUsed")
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.CharConsumablePanel)
|
|
end
|
|
local Confirm = function()
|
|
PlayerData.Item:SendPickItemMsg(tbUseItem, callback, true)
|
|
end
|
|
local msg = {
|
|
nType = AllEnum.MessageBox.Char,
|
|
nCharId = nChooseTid,
|
|
sContent = ConfigTable.GetUIText("CharacterYO_TipContent"),
|
|
sTitle = ConfigTable.GetUIText("CharacterYO_TipTitle"),
|
|
callbackConfirm = Confirm,
|
|
bDisableSnap = false
|
|
}
|
|
EventManager.Hit(EventId.OpenMessageBox, msg)
|
|
end
|
|
function CharConsumableCtrl:OnBtnClick_Cancel()
|
|
if not self.state then
|
|
return
|
|
end
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.CharConsumablePanel)
|
|
end
|
|
function CharConsumableCtrl:OnBtnClick_Item(btn, idx)
|
|
if idx == self.curSelect or self.bPreview then
|
|
return
|
|
end
|
|
if self._mapNode.rtItem[self.curSelect] ~= nil then
|
|
self._mapNode.rtItem[self.curSelect]:SetSelect(false)
|
|
end
|
|
self.curSelect = idx
|
|
self._mapNode.rtItem[self.curSelect]:SetSelect(true)
|
|
end
|
|
return CharConsumableCtrl
|