Files
Endfield-Data/LuaScripts/UI/Panels/WikiWeapon/WikiWeaponCtrl.lua
2025-12-02 20:37:18 +07:00

181 lines
5.1 KiB
Lua

local wikiDetailBaseCtrl = require_ex('UI/Panels/WikiDetailBase/WikiDetailBaseCtrl')
local PANEL_ID = PanelId.WikiWeapon
WikiWeaponCtrl = HL.Class('WikiWeaponCtrl', wikiDetailBaseCtrl.WikiDetailBaseCtrl)
WikiWeaponCtrl.OnShow = HL.Override() << function(self)
WikiWeaponCtrl.Super.OnShow(self)
self:_RefreshModel()
self:_PlayBgDecoAnim()
end
WikiWeaponCtrl._OnPlayAnimationOut = HL.Override() << function(self)
WikiWeaponCtrl.Super._OnPlayAnimationOut(self)
self.m_phase:PlayBgAnim("wiki_plane_toweapon_out")
end
WikiWeaponCtrl.GetPanelId = HL.Override().Return(HL.Number) << function(self)
return PANEL_ID
end
WikiWeaponCtrl._OnPhaseItemBind = HL.Override() << function(self)
WikiWeaponCtrl.Super._OnPhaseItemBind(self)
self:_RefreshModel(true)
self:_PlayBgDecoAnim()
end
WikiWeaponCtrl._RefreshCenter = HL.Override() << function(self)
WikiWeaponCtrl.Super._RefreshCenter(self)
self:_RefreshModel()
end
WikiWeaponCtrl.m_isShowWeaponMaxInfo = HL.Field(HL.Boolean) << false
WikiWeaponCtrl.m_isBtnAttrInited = HL.Field(HL.Boolean) << false
WikiWeaponCtrl._RefreshRight = HL.Override() << function(self)
if not self.m_isBtnAttrInited then
self.m_isBtnAttrInited = true
self.view.right.btnToggle.onClick:AddListener(function()
self.view.right.recipeNodeAnimWrapper:PlayOutAnimation(function()
self.m_isShowWeaponMaxInfo = not self.m_isShowWeaponMaxInfo
self:_RefreshModel()
self:_RefreshRight()
self.view.right.recipeNodeAnimWrapper:PlayInAnimation()
end)
end)
end
self:_RefreshWeaponShowInfo(self:_GetWeaponShowData(self.m_isShowWeaponMaxInfo))
end
WikiWeaponCtrl._RefreshModel = HL.Method(HL.Opt(HL.Boolean)) << function(self, playInAnim)
if self.m_phase then
self.m_phase:ShowModel(self.m_wikiEntryShowData, {
isWeaponRefinedMax = self.m_isShowWeaponMaxInfo,
isWeaponGemMax = self.m_isShowWeaponMaxInfo,
playInAnim = playInAnim,
})
self.m_phase:ActiveEntryVirtualCamera(true)
end
end
WikiWeaponCtrl._GetWeaponShowData = HL.Method(HL.Boolean).Return(HL.Table) << function(self, isMaxLevel)
local templateId = self.m_wikiEntryShowData.wikiEntryData.refItemId
local hasValue
local weaponBasicData
local weaponBreakThroughDetailList
local weaponTalentDetailList
local maxLevel, initMaxLevel, breakThroughCount, maxBreakthroughLevel, maxRefineLevel = 0, 0, 0, 0, 0
hasValue, weaponBasicData = Tables.weaponBasicTable:TryGetValue(templateId)
if hasValue then
maxLevel = weaponBasicData.maxLv
hasValue, weaponBreakThroughDetailList = Tables.weaponBreakThroughTemplateTable:TryGetValue(weaponBasicData.breakthroughTemplateId)
if hasValue then
breakThroughCount = #weaponBreakThroughDetailList.list
if breakThroughCount > 1 then
initMaxLevel = weaponBreakThroughDetailList.list[1].breakthroughLv
maxBreakthroughLevel = breakThroughCount - 1
end
end
hasValue, weaponTalentDetailList = Tables.weaponTalentTemplateTable:TryGetValue(weaponBasicData.talentTemplateId)
if hasValue then
maxRefineLevel = #weaponTalentDetailList.list
end
end
local weaponShowData = {
templateId = templateId,
level = isMaxLevel and maxLevel or 1,
maxLevel = isMaxLevel and maxLevel or initMaxLevel,
breakthroughLevel = isMaxLevel and maxBreakthroughLevel or 0,
maxBreakthroughLevel = maxBreakthroughLevel,
refineLevel = isMaxLevel and maxRefineLevel or 0,
}
return weaponShowData
end
WikiWeaponCtrl._RefreshWeaponShowInfo = HL.Method(HL.Table) << function(self, weaponShowData)
local view = self.view.right
local isMax = weaponShowData.level == weaponShowData.maxLevel
view.txtArr.text = isMax and Language.LUA_WIKI_WEAPON_MAX_ATTR or Language.LUA_WIKI_WEAPON_INIT_ATTR
view.levelText.text = tostring(weaponShowData.level)
view.maxText.text = string.format("/%d", weaponShowData.maxLevel)
view.levelBreakNode:InitLevelBreakNodeSimple(weaponShowData.breakthroughLevel, weaponShowData.maxBreakthroughLevel, false)
view.weaponAttributeNode:InitWeaponAttributeNodeByTemplateId(weaponShowData.templateId, isMax)
view.weaponSkillNode:InitWeaponSkillNodeByTemplateId(weaponShowData.templateId, weaponShowData.breakthroughLevel,
weaponShowData.refineLevel, isMax)
view.potentialStar:InitWeaponPotentialStar(weaponShowData.refineLevel)
view.potentialStar.view.breakthroughBg.gameObject:SetActive(not isMax)
view.btnSkill.onClick:RemoveAllListeners()
view.btnSkill.onClick:AddListener(function()
self.m_phase:CreateOrShowPhasePanelItem(PanelId.WikiWeaponSkill, self.m_wikiEntryShowData)
end)
end
WikiWeaponCtrl._PlayBgDecoAnim = HL.Method() << function(self)
if self.m_phase then
self.m_phase:PlayBgAnim("wiki_plane_toweapon_in")
self.m_phase:PlayDecoAnim("wiki_uideco_grouptoweaponpanel")
end
end
HL.Commit(WikiWeaponCtrl)