08b515afd9
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
269 lines
8.1 KiB
Lua
269 lines
8.1 KiB
Lua
local SoldierAttrData = require("GameCore.Data.DataClass.Soldier.SoldierAttrData")
|
|
local SoldierTechPreviewCtrl = class("SoldierTechPreviewCtrl", BaseCtrl)
|
|
SoldierTechPreviewCtrl._mapNodeConfig = {
|
|
goTechPreview = {},
|
|
goBlur = {},
|
|
aniWindow = {
|
|
sNodeName = "goTechPreview",
|
|
sComponentName = "Animator"
|
|
},
|
|
btnCloseBig = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
btnClose = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Close"
|
|
},
|
|
txtTechPreviewWindowTitle = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_Tech_Preview_Title"
|
|
},
|
|
goEffectScroll = {},
|
|
txtEmpty = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "Soldier_Tech_Preview_Empty"
|
|
},
|
|
goPropertyItem = {},
|
|
goPropertyList = {},
|
|
goTechDescItem = {},
|
|
goTechDescList = {}
|
|
}
|
|
SoldierTechPreviewCtrl._mapEventConfig = {}
|
|
SoldierTechPreviewCtrl._mapRedDotConfig = {}
|
|
local _FormatValue = function(nValue, bPercent)
|
|
if bPercent then
|
|
return tostring(clearFloat(nValue * 100)) .. "%"
|
|
end
|
|
return tostring(clearFloat(nValue))
|
|
end
|
|
local _tbAttrEffectMeta = {
|
|
[GameEnum.SoldierClientEffect.AmendAttr] = {nOrder = 1, bForcePercent = false},
|
|
[GameEnum.SoldierClientEffect.BaseAmendAttr] = {nOrder = 2, bForcePercent = false},
|
|
[GameEnum.SoldierClientEffect.PercentAmendAttr] = {nOrder = 3, bForcePercent = true},
|
|
[GameEnum.SoldierClientEffect.BasePercentAmendAttr] = {nOrder = 4, bForcePercent = true}
|
|
}
|
|
local _DescOfAttr = function(sKey)
|
|
local d = CacheTable.GetData("_AttributeDesc", sKey)
|
|
if d == nil then
|
|
return nil
|
|
end
|
|
return d.Icon, d.Desc, d.isPercent
|
|
end
|
|
local _DescOfBattle = function(eType)
|
|
local d = AllEnum.SoldierTechBattleEffect[eType]
|
|
if d == nil then
|
|
return nil
|
|
end
|
|
return d.sIcon, d.sLanguageId and ConfigTable.GetUIText(d.sLanguageId) or "", false
|
|
end
|
|
local _CollectAttrItems = function(tbAttr)
|
|
local tbList = {}
|
|
if tbAttr == nil then
|
|
return tbList
|
|
end
|
|
local tbShowAttrKey = SoldierAttrData.GetShowAttrKey()
|
|
for eType, tbSub in pairs(tbAttr) do
|
|
local meta = _tbAttrEffectMeta[eType]
|
|
if meta ~= nil then
|
|
for sKey, nValue in pairs(tbSub) do
|
|
local nShowIndex = tbShowAttrKey[sKey]
|
|
if nShowIndex ~= nil then
|
|
local sIcon, sName, bDescPercent = _DescOfAttr(sKey)
|
|
if sIcon ~= nil then
|
|
if eType == GameEnum.SoldierClientEffect.PercentAmendAttr or eType == GameEnum.SoldierClientEffect.BasePercentAmendAttr then
|
|
nValue = nValue / 100
|
|
end
|
|
table.insert(tbList, {
|
|
sIcon = sIcon,
|
|
sName = sName,
|
|
sValue = _FormatValue(nValue, meta.bForcePercent or bDescPercent),
|
|
nShowIndex = nShowIndex,
|
|
nOrder = meta.nOrder
|
|
})
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
table.sort(tbList, function(a, b)
|
|
if a.nShowIndex ~= b.nShowIndex then
|
|
return a.nShowIndex < b.nShowIndex
|
|
end
|
|
return a.nOrder < b.nOrder
|
|
end)
|
|
return tbList
|
|
end
|
|
local _CollectBattleItems = function(tbBattleAttr)
|
|
local tbList = {}
|
|
if tbBattleAttr == nil then
|
|
return tbList
|
|
end
|
|
for eType, nValue in pairs(tbBattleAttr) do
|
|
local sIcon, sName = _DescOfBattle(eType)
|
|
if sIcon ~= nil then
|
|
table.insert(tbList, {
|
|
sIcon = sIcon,
|
|
sName = sName,
|
|
sValue = _FormatValue(nValue, true),
|
|
eType = eType
|
|
})
|
|
end
|
|
end
|
|
table.sort(tbList, function(a, b)
|
|
return a.eType < b.eType
|
|
end)
|
|
return tbList
|
|
end
|
|
local _BuildPropertyList = function(tbPreview)
|
|
local tbList = {}
|
|
if tbPreview == nil then
|
|
return tbList
|
|
end
|
|
for _, v in ipairs(_CollectAttrItems(tbPreview.tbAttr)) do
|
|
table.insert(tbList, v)
|
|
end
|
|
for _, v in ipairs(_CollectBattleItems(tbPreview.tbBattleAttr)) do
|
|
table.insert(tbList, v)
|
|
end
|
|
return tbList
|
|
end
|
|
function SoldierTechPreviewCtrl:_ClearPropertyList()
|
|
self._tbPropertyList = self._tbPropertyList or {}
|
|
self._tbHidePropertyList = self._tbHidePropertyList or {}
|
|
for _, ctrl in ipairs(self._tbPropertyList) do
|
|
ctrl.gameObject:SetActive(false)
|
|
table.insert(self._tbHidePropertyList, ctrl)
|
|
end
|
|
self._tbPropertyList = {}
|
|
end
|
|
function SoldierTechPreviewCtrl:_ClearTechDescList()
|
|
self._tbTechDescList = self._tbTechDescList or {}
|
|
self._tbHideTechDescList = self._tbHideTechDescList or {}
|
|
for _, ctrl in ipairs(self._tbTechDescList) do
|
|
ctrl.gameObject:SetActive(false)
|
|
table.insert(self._tbHideTechDescList, ctrl)
|
|
end
|
|
self._tbTechDescList = {}
|
|
end
|
|
function SoldierTechPreviewCtrl:_AcquirePropertyItem()
|
|
local nHide = #self._tbHidePropertyList
|
|
if 0 < nHide then
|
|
local ctrl = self._tbHidePropertyList[nHide]
|
|
table.remove(self._tbHidePropertyList, nHide)
|
|
ctrl.gameObject:SetActive(true)
|
|
return ctrl
|
|
end
|
|
local goObj = instantiate(self._mapNode.goPropertyItem, self._mapNode.goPropertyList.transform)
|
|
goObj:SetActive(true)
|
|
return self:BindCtrlByNode(goObj, "Game.UI.Soldier.Technology.SoldierTechPreviewPropertyItemCtrl")
|
|
end
|
|
function SoldierTechPreviewCtrl:_AcquireTechDescItem()
|
|
local nHide = #self._tbHideTechDescList
|
|
if 0 < nHide then
|
|
local ctrl = self._tbHideTechDescList[nHide]
|
|
table.remove(self._tbHideTechDescList, nHide)
|
|
ctrl.gameObject:SetActive(true)
|
|
return ctrl
|
|
end
|
|
local goObj = instantiate(self._mapNode.goTechDescItem, self._mapNode.goTechDescList.transform)
|
|
goObj:SetActive(true)
|
|
return self:BindCtrlByNode(goObj, "Game.UI.Soldier.Technology.SoldierTechPreviewTechDescItemCtrl")
|
|
end
|
|
function SoldierTechPreviewCtrl:Refresh()
|
|
local tbPreview = PlayerData.SoldierData:GetActiveNodePreview()
|
|
local tbProperty = _BuildPropertyList(tbPreview)
|
|
local tbCore = tbPreview and tbPreview.tbCore or {}
|
|
self:_ClearPropertyList()
|
|
self:_ClearTechDescList()
|
|
for _, mapData in ipairs(tbProperty) do
|
|
local ctrl = self:_AcquirePropertyItem()
|
|
ctrl:Refresh(mapData.sIcon, mapData.sName, mapData.sValue)
|
|
table.insert(self._tbPropertyList, ctrl)
|
|
end
|
|
for _, nId in ipairs(tbCore) do
|
|
local ctrl = self:_AcquireTechDescItem()
|
|
ctrl:Refresh(nId)
|
|
table.insert(self._tbTechDescList, ctrl)
|
|
end
|
|
local bHasContent = 0 < #tbProperty or 0 < #tbCore
|
|
self._mapNode.goEffectScroll:SetActive(bHasContent)
|
|
self._mapNode.txtEmpty.gameObject:SetActive(not bHasContent)
|
|
end
|
|
function SoldierTechPreviewCtrl:PlayInAni()
|
|
if self._mapNode.aniWindow ~= nil then
|
|
self._mapNode.aniWindow:Play("t_window_04_t_in")
|
|
end
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
|
|
end
|
|
function SoldierTechPreviewCtrl:PlayOutAni(callback)
|
|
if self._mapNode.aniWindow ~= nil then
|
|
self._mapNode.aniWindow:Play("t_window_04_t_out")
|
|
end
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
|
|
self:AddTimer(1, 0.2, callback, true, true, true)
|
|
end
|
|
function SoldierTechPreviewCtrl:Close()
|
|
local callback = function()
|
|
EventManager.Hit(EventId.ClosePanel, PanelId.SoldierTechPreviewPanel)
|
|
end
|
|
self:PlayOutAni(callback)
|
|
end
|
|
function SoldierTechPreviewCtrl:ClearCtrl()
|
|
if self._tbPropertyList then
|
|
for k, v in pairs(self._tbPropertyList) do
|
|
self:UnbindCtrlByNode(v)
|
|
self._tbPropertyList[k] = nil
|
|
end
|
|
end
|
|
if self._tbHidePropertyList then
|
|
for k, v in pairs(self._tbHidePropertyList) do
|
|
self:UnbindCtrlByNode(v)
|
|
self._tbHidePropertyList[k] = nil
|
|
end
|
|
end
|
|
if self._tbTechDescList then
|
|
for k, v in pairs(self._tbTechDescList) do
|
|
self:UnbindCtrlByNode(v)
|
|
self._tbTechDescList[k] = nil
|
|
end
|
|
end
|
|
if self._tbHideTechDescList then
|
|
for k, v in pairs(self._tbHideTechDescList) do
|
|
self:UnbindCtrlByNode(v)
|
|
self._tbHideTechDescList[k] = nil
|
|
end
|
|
end
|
|
delChildren(self._mapNode.goPropertyList.transform)
|
|
delChildren(self._mapNode.goTechDescList.transform)
|
|
end
|
|
function SoldierTechPreviewCtrl:Awake()
|
|
self._tbPropertyList = {}
|
|
self._tbHidePropertyList = {}
|
|
self._tbTechDescList = {}
|
|
self._tbHideTechDescList = {}
|
|
end
|
|
function SoldierTechPreviewCtrl:OnEnable()
|
|
self._mapNode.goBlur:SetActive(false)
|
|
self._mapNode.goTechPreview:SetActive(false)
|
|
self._mapNode.goPropertyItem:SetActive(false)
|
|
self._mapNode.goTechDescItem:SetActive(false)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
self._mapNode.goBlur:SetActive(true)
|
|
self._mapNode.goTechPreview:SetActive(true)
|
|
self:Refresh()
|
|
self:PlayInAni()
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
function SoldierTechPreviewCtrl:OnDisable()
|
|
self:ClearCtrl()
|
|
end
|
|
function SoldierTechPreviewCtrl:OnDestroy()
|
|
end
|
|
function SoldierTechPreviewCtrl:OnBtnClick_Close()
|
|
self:Close()
|
|
end
|
|
return SoldierTechPreviewCtrl
|