330 lines
9.6 KiB
Lua
330 lines
9.6 KiB
Lua
|
|
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
local PANEL_ID = PanelId.WikiWeaponPreview
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl = HL.Class('WikiWeaponPreviewCtrl', uiCtrl.UICtrl)
|
|
|
|
local WeaponState = {
|
|
Init = 1,
|
|
Max = 2,
|
|
Gem = 3,
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
|
|
}
|
|
|
|
|
|
WikiWeaponPreviewCtrl.m_wikiEntryShowData = HL.Field(HL.Table)
|
|
|
|
|
|
WikiWeaponPreviewCtrl.m_wikiGroupShowDataList = HL.Field(HL.Table)
|
|
|
|
|
|
WikiWeaponPreviewCtrl.m_curWeaponState = HL.Field(HL.Number) << 0
|
|
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self:_ProcessArg(arg)
|
|
self:_InitAction()
|
|
self:_InitController()
|
|
self:_RefreshLeft()
|
|
self:_RefreshCenter()
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl.OnShow = HL.Override() << function(self)
|
|
self:_RefreshModel()
|
|
self:_PlayDecoAnim()
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl.OnHide = HL.Override() << function(self)
|
|
if self.m_phase then
|
|
self.m_phase:ActiveModelRotateRoot(false)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl.OnClose = HL.Override() << function (self)
|
|
if self.m_phase then
|
|
self.m_phase:DestroyModel()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._OnPhaseItemBind = HL.Override() << function(self)
|
|
|
|
self:_RefreshModel(true)
|
|
self.m_phase:PlayBgAnim("wiki_plane_toweapon_in")
|
|
self:_PlayDecoAnim()
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._OnPlayAnimationOut = HL.Override() << function(self)
|
|
WikiWeaponPreviewCtrl.Super._OnPlayAnimationOut(self)
|
|
self.m_phase:PlayBgAnim("wiki_plane_toweapon_out")
|
|
end
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._ProcessArg = HL.Method(HL.Table) << function(self, arg)
|
|
|
|
local detailArgs = {
|
|
categoryType = WikiConst.EWikiCategoryType.Weapon,
|
|
wikiEntryShowData = WikiUtils.getWikiEntryShowData(arg.weaponId, WikiConst.EWikiCategoryType.Weapon),
|
|
wikiGroupShowDataList = {},
|
|
}
|
|
if #arg.weaponGroups == 0 then
|
|
self.view.expandListBtn.gameObject:SetActive(false)
|
|
end
|
|
|
|
for _, weaponGroupData in pairs(arg.weaponGroups) do
|
|
|
|
local wikiGroupShowData = {
|
|
wikiCategoryType = WikiConst.EWikiCategoryType.Weapon,
|
|
customTitle = weaponGroupData.title,
|
|
wikiEntryShowDataList = {},
|
|
}
|
|
for _, weaponId in ipairs(weaponGroupData.weaponIds) do
|
|
local wikiEntryShowData = WikiUtils.getWikiEntryShowData(weaponId, WikiConst.EWikiCategoryType.Weapon)
|
|
if wikiEntryShowData then
|
|
local _, itemData = Tables.itemTable:TryGetValue(weaponId)
|
|
if itemData then
|
|
wikiEntryShowData.itemData = itemData
|
|
wikiEntryShowData.rarity = itemData.rarity
|
|
end
|
|
table.insert(wikiGroupShowData.wikiEntryShowDataList, wikiEntryShowData)
|
|
table.sort(wikiGroupShowData.wikiEntryShowDataList, Utils.genSortFunction({ "rarity" }, false))
|
|
end
|
|
end
|
|
table.insert(detailArgs.wikiGroupShowDataList, wikiGroupShowData)
|
|
end
|
|
self.m_wikiEntryShowData = detailArgs.wikiEntryShowData
|
|
self.m_wikiGroupShowDataList = detailArgs.wikiGroupShowDataList
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._InitAction = HL.Method() << function(self)
|
|
self.view.topNode.btnClose.onClick:AddListener(function()
|
|
PhaseManager:PopPhase(PhaseId.Wiki)
|
|
end)
|
|
self.view.topNode.stateToggle:InitCommonToggleGroup({
|
|
toggleDataList = {
|
|
{ name = Language.ui_CharInfo_init },
|
|
{ name = Language.ui_CharInfo_max_level },
|
|
{ name = Language.ui_WikiWeapon_gem_equiped },
|
|
},
|
|
onToggleIsOn = function(index)
|
|
self:_RefreshWeaponState(index, true)
|
|
end,
|
|
defaultIndex = 3,
|
|
defaultNotCall = true,
|
|
})
|
|
self:_RefreshWeaponState(WeaponState.Gem, false)
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._RefreshWeaponState = HL.Method(HL.Number, HL.Opt(HL.Boolean)) << function(self, weaponState, playAnim)
|
|
if self.m_curWeaponState == weaponState then
|
|
return
|
|
end
|
|
self.m_curWeaponState = weaponState
|
|
if playAnim then
|
|
self.view.right.recipeNodeAnimWrapper:PlayOutAnimation(function()
|
|
self:_RefreshModel()
|
|
self:_RefreshRight()
|
|
self.view.right.recipeNodeAnimWrapper:PlayInAnimation()
|
|
end)
|
|
else
|
|
self:_RefreshModel()
|
|
self:_RefreshRight()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._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_curWeaponState ~= WeaponState.Init,
|
|
isWeaponGemMax = self.m_curWeaponState == WeaponState.Gem,
|
|
playInAnim = playInAnim,
|
|
})
|
|
self.m_phase:ActiveEntryVirtualCamera(true)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._RefreshLeft = HL.Method() << function(self)
|
|
|
|
local wikiGroupItemListArgs = {
|
|
isPreviewMode = true,
|
|
isInitHidden = true,
|
|
wikiGroupShowDataList = self.m_wikiGroupShowDataList,
|
|
onItemClicked = function(wikiEntryShowData)
|
|
self.m_wikiEntryShowData = wikiEntryShowData
|
|
self:_RefreshCenter()
|
|
self:_RefreshRight(true)
|
|
end,
|
|
onGetSelectedEntryShowData = function()
|
|
return self.m_wikiEntryShowData
|
|
end,
|
|
btnExpandList = self.view.expandListBtn,
|
|
btnClose = self.view.btnEmpty,
|
|
wikiItemInfo = self.view.wikiItemInfo,
|
|
}
|
|
self.view.left:InitWikiGroupItemList(wikiGroupItemListArgs)
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._RefreshCenter = HL.Method() << function(self)
|
|
|
|
local args = {
|
|
wikiEntryShowData = self.m_wikiEntryShowData,
|
|
onDetailBtnClick = function()
|
|
self:PlayAnimationOutWithCallback(function()
|
|
self.m_phase:CreatePhasePanelItem(PanelId.WikiModelShow, self.m_wikiEntryShowData)
|
|
end)
|
|
end
|
|
}
|
|
self.view.wikiItemInfo:InitWikiItemInfo(args)
|
|
self.view.wikiItemInfo.view.animationWrapper:PlayInAnimation()
|
|
self:_RefreshModel()
|
|
end
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._RefreshRight = HL.Method(HL.Opt(HL.Boolean)) << function(self, playAnim)
|
|
if playAnim then
|
|
self.view.right.recipeNodeAnimWrapper:PlayOutAnimation(function()
|
|
self:_RefreshWeaponShowInfo(self:_GetWeaponShowData(self.m_curWeaponState))
|
|
self.view.right.recipeNodeAnimWrapper:PlayInAnimation()
|
|
end)
|
|
else
|
|
self:_RefreshWeaponShowInfo(self:_GetWeaponShowData(self.m_curWeaponState))
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._GetWeaponShowData = HL.Method(HL.Number).Return(HL.Table) << function(self, weaponState)
|
|
local templateId = self.m_wikiEntryShowData.wikiEntryData.refItemId
|
|
local maxLevel, initMaxLevel, breakThroughCount, maxBreakthroughLevel, maxRefineLevel = 0, 0, 0, 0, 0
|
|
|
|
local _, weaponBasicData = Tables.weaponBasicTable:TryGetValue(templateId)
|
|
|
|
if weaponBasicData then
|
|
maxLevel = weaponBasicData.maxLv
|
|
local _, weaponBreakThroughDetailList = Tables.weaponBreakThroughTemplateTable:TryGetValue(weaponBasicData.breakthroughTemplateId)
|
|
if weaponBreakThroughDetailList then
|
|
breakThroughCount = #weaponBreakThroughDetailList.list
|
|
if breakThroughCount > 1 then
|
|
initMaxLevel = weaponBreakThroughDetailList.list[1].breakthroughLv
|
|
maxBreakthroughLevel = breakThroughCount - 1
|
|
end
|
|
end
|
|
local _, weaponTalentDetailList = Tables.weaponTalentTemplateTable:TryGetValue(weaponBasicData.talentTemplateId)
|
|
if weaponTalentDetailList then
|
|
maxRefineLevel = #weaponTalentDetailList.list
|
|
end
|
|
end
|
|
|
|
local isMaxLevel = weaponState ~= WeaponState.Init
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._RefreshWeaponShowInfo = HL.Method(HL.Table) << function(self, weaponShowData)
|
|
local view = self.view.right
|
|
local isMax = weaponShowData.level == weaponShowData.maxLevel
|
|
local isGemMax = self.m_curWeaponState == WeaponState.Gem
|
|
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, isGemMax)
|
|
view.potentialStar:InitWeaponPotentialStar(weaponShowData.refineLevel)
|
|
view.potentialStar.view.breakthroughBg.gameObject:SetActive(not isMax)
|
|
|
|
local gemInst
|
|
if self.m_curWeaponState == WeaponState.Gem then
|
|
gemInst = CS.Beyond.Gameplay.InventorySystem.CreateWeaponPerfectGemInst(weaponShowData.templateId)
|
|
end
|
|
view.weaponGemSlimNode:InitWeaponGemSlimeNodeByInst(gemInst)
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._InitController = HL.Virtual() << function(self)
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
|
|
UIUtils.bindHyperlinkPopup(self, "wiki_detail_right", self.view.inputGroup.groupId)
|
|
end
|
|
|
|
|
|
|
|
WikiWeaponPreviewCtrl._PlayDecoAnim = HL.Method() << function(self)
|
|
if self.m_phase then
|
|
self.m_phase:PlayDecoAnim("wiki_uideco_grouptoweaponpanel")
|
|
end
|
|
end
|
|
|
|
HL.Commit(WikiWeaponPreviewCtrl)
|