405 lines
13 KiB
Lua
405 lines
13 KiB
Lua
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl = HL.Class('WikiDetailBaseCtrl', uiCtrl.UICtrl)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.s_messages = HL.StaticField(HL.Table) << {
|
|
|
|
}
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.m_wikiEntryShowData = HL.Field(HL.Table)
|
|
|
|
|
|
WikiDetailBaseCtrl.m_wikiGroupShowDataList = HL.Field(HL.Table)
|
|
|
|
|
|
WikiDetailBaseCtrl.m_itemTipsPosInfo = HL.Field(HL.Table)
|
|
|
|
|
|
WikiDetailBaseCtrl.m_needHideModel = HL.Field(HL.Boolean) << true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
|
|
self:_InitController()
|
|
|
|
|
|
local args = arg
|
|
self.m_wikiEntryShowData = args.wikiEntryShowData
|
|
self.m_wikiGroupShowDataList = args.wikiGroupShowDataList
|
|
|
|
self.m_itemTipsPosInfo = {
|
|
tipsPosType = UIConst.UI_TIPS_POS_TYPE.LeftTop,
|
|
isSideTips = false,
|
|
}
|
|
if self.view.right and self.view.right.itemTipsNode then
|
|
self.m_itemTipsPosInfo.tipsPosTransform = self.view.right.itemTipsNode
|
|
end
|
|
|
|
if self.view.prtsBtn then
|
|
self.view.prtsBtn.btn.onClick:AddListener(function()
|
|
PhaseManager:GoToPhase(PhaseId.PRTSStoryCollDetail, {
|
|
id = self.m_wikiEntryShowData.wikiEntryData.prtsId,
|
|
isFirstLvId = false,
|
|
})
|
|
end)
|
|
end
|
|
|
|
self:_RefreshLeft()
|
|
self:_RefreshCenter()
|
|
self:_RefreshRight()
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.OnClose = HL.Override() << function(self)
|
|
if self.m_phase then
|
|
self.m_phase:DestroyModel()
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.OnShow = HL.Override() << function(self)
|
|
if self.m_phase then
|
|
self.m_phase:ActiveModelRotateRoot(true)
|
|
if self.m_phase.m_currentWikiDetailArgs and
|
|
self.m_phase.m_currentWikiDetailArgs.wikiEntryShowData.wikiEntryData.id ~= self.m_wikiEntryShowData.wikiEntryData.id then
|
|
self:Refresh(self.m_phase.m_currentWikiDetailArgs)
|
|
end
|
|
end
|
|
self.m_needHideModel = true
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.OnHide = HL.Override() << function(self)
|
|
if self.m_needHideModel and self.m_phase then
|
|
self.m_phase:ActiveModelRotateRoot(false)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._OnPhaseItemBind = HL.Override() << function(self)
|
|
|
|
self:_RefreshTop()
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.GetPanelId = HL.Virtual().Return(HL.Number) << function(self)
|
|
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._RefreshTop = HL.Virtual() << function(self)
|
|
|
|
local wikiTopArgs = {
|
|
phase = self.m_phase,
|
|
panelId = self:GetPanelId(),
|
|
categoryType = self.m_wikiEntryShowData.wikiCategoryType,
|
|
wikiEntryShowData = self.m_wikiEntryShowData
|
|
}
|
|
self.view.top:InitWikiTop(wikiTopArgs)
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._RefreshCenter = HL.Virtual() << function(self)
|
|
|
|
local args = {
|
|
wikiEntryShowData = self.m_wikiEntryShowData,
|
|
onDetailBtnClick = function()
|
|
self:PlayAnimationOutWithCallback(function()
|
|
self.m_needHideModel = false
|
|
self.m_phase:CreatePhasePanelItem(PanelId.WikiModelShow, self.m_wikiEntryShowData)
|
|
end)
|
|
end
|
|
}
|
|
self.view.wikiItemInfo:InitWikiItemInfo(args)
|
|
if self.view.prtsBtn then
|
|
local prtsId = self.m_wikiEntryShowData.wikiEntryData.prtsId
|
|
if not string.isEmpty(prtsId) then
|
|
local _, prtsData = Tables.prtsAllItem:TryGetValue(prtsId)
|
|
if prtsData then
|
|
self.view.prtsBtn.titleTxt.text = prtsData.name
|
|
end
|
|
end
|
|
self.view.prtsBtn.gameObject:SetActive(Utils.isSystemUnlocked(GEnums.UnlockSystemType.PRTS) and
|
|
not string.isEmpty(prtsId) and GameInstance.player.prts:IsPrtsUnlocked(prtsId))
|
|
end
|
|
end
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._RefreshLeft = HL.Virtual() << function(self)
|
|
|
|
local wikiGroupItemListArgs = {
|
|
isInitHidden = true,
|
|
wikiGroupShowDataList = self.m_wikiGroupShowDataList,
|
|
onItemClicked = function(wikiEntryShowData)
|
|
self.m_wikiEntryShowData = wikiEntryShowData
|
|
self.m_phase.m_currentWikiDetailArgs = {
|
|
categoryType = self.m_wikiEntryShowData.wikiCategoryType,
|
|
wikiEntryShowData = self.m_wikiEntryShowData,
|
|
wikiGroupShowDataList = self.m_wikiGroupShowDataList
|
|
}
|
|
self:_RefreshTop()
|
|
self:_RefreshCenter()
|
|
self:_RefreshRight()
|
|
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
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._RefreshRight = HL.Virtual() << function(self)
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.Refresh = HL.Method(HL.Table) << function(self, args)
|
|
if self.view.right.naviGroup then
|
|
self.view.right.naviGroup:ManuallyStopFocus()
|
|
if self.view.left.gameObject.activeSelf then
|
|
self.view.left:_OnCloseBtnClicked(true)
|
|
end
|
|
end
|
|
self.m_wikiEntryShowData = args.wikiEntryShowData
|
|
self.m_wikiGroupShowDataList = args.wikiGroupShowDataList
|
|
|
|
self:_RefreshTop()
|
|
self:_RefreshCenter()
|
|
self:_RefreshRight()
|
|
end
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl.m_closeItemTipsBindingId = HL.Field(HL.Number) << -1
|
|
|
|
|
|
WikiDetailBaseCtrl.m_currentNaviCraftCellView = HL.Field(HL.Table)
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._InitController = HL.Virtual() << function(self)
|
|
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
|
|
if self.view.right.naviGroup then
|
|
self.view.right.naviGroup.onIsFocusedChange:AddListener(function(isFocused)
|
|
self.view.right.controllerFocusHintNode.gameObject:SetActive(not isFocused)
|
|
if not isFocused then
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
end
|
|
end)
|
|
end
|
|
UIUtils.bindHyperlinkPopup(self, "wiki_detail_right", self.view.inputGroup.groupId)
|
|
if self.view.selectableNaviGroup then
|
|
self.view.selectableNaviGroup:NaviToThisGroup()
|
|
end
|
|
if self.view.right.inputGroup then
|
|
self.m_closeItemTipsBindingId = self:BindInputPlayerAction("common_cancel_no_hint", function()
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
InputManagerInst:ToggleBinding(self.m_closeItemTipsBindingId, false)
|
|
end, self.view.right.inputGroup.groupId)
|
|
InputManagerInst:ToggleBinding(self.m_closeItemTipsBindingId, false)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._InitItemObtainWaysController = HL.Method(HL.Userdata).Return(CS.UnityEngine.UI.Selectable, CS.Beyond.UI.UISelectableNaviGroup) << function(self, itemObtainWaysForWiki)
|
|
local lastCraftFirstSelectable = nil
|
|
local lastNaviGroup = nil
|
|
for i = 1, itemObtainWaysForWiki.m_obtainCells:GetCount() do
|
|
local obtainCell = itemObtainWaysForWiki.m_obtainCells:GetItem(i)
|
|
obtainCell.normalNode.button.onIsNaviTargetChanged = function(isTarget)
|
|
if isTarget then
|
|
self.view.right.scrollRect:ScrollToNaviTarget(obtainCell.normalNode.button)
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
end
|
|
end
|
|
obtainCell.normalNode.button.useExplicitNaviSelect = true
|
|
if lastCraftFirstSelectable then
|
|
obtainCell.normalNode.button.banExplicitOnUp = false
|
|
obtainCell.normalNode.button:SetExplicitSelectOnUp(lastCraftFirstSelectable)
|
|
lastCraftFirstSelectable.useExplicitNaviSelect = true
|
|
lastCraftFirstSelectable.banExplicitOnLeft = true
|
|
lastCraftFirstSelectable.banExplicitOnRight = true
|
|
lastCraftFirstSelectable.banExplicitOnUp = true
|
|
lastCraftFirstSelectable.banExplicitOnDown = false
|
|
lastCraftFirstSelectable:SetExplicitSelectOnDown(obtainCell.normalNode.button)
|
|
else
|
|
obtainCell.normalNode.button.banExplicitOnUp = true
|
|
end
|
|
local firstItemSelectable
|
|
for j = 1, obtainCell.craftCells:GetCount() do
|
|
local craftCell = obtainCell.craftCells:GetItem(j)
|
|
craftCell.pinKeyHint.gameObject:SetActive(false)
|
|
if DeviceInfo.usingController then
|
|
InputManagerInst:ToggleBinding(craftCell.pinBtn.view.pinToggle.toggleBindingId, false)
|
|
end
|
|
for k = 1, craftCell.itemCells:GetCount() do
|
|
local itemCell = craftCell.itemCells:GetItem(k)
|
|
local selectable = itemCell.view.button
|
|
selectable.useExplicitNaviSelect = false
|
|
selectable.onIsNaviTargetChanged = function(isTarget)
|
|
self:_OnRightItemIsNaviTargetChanged(isTarget, selectable, craftCell)
|
|
end
|
|
if firstItemSelectable == nil then
|
|
firstItemSelectable = selectable
|
|
end
|
|
if k == 1 then
|
|
lastCraftFirstSelectable = selectable
|
|
end
|
|
end
|
|
craftCell.selectableNaviGroup.naviPartnerOnDown:Clear()
|
|
lastNaviGroup = craftCell.selectableNaviGroup
|
|
end
|
|
if firstItemSelectable then
|
|
obtainCell.normalNode.button.banExplicitOnDown = false
|
|
obtainCell.normalNode.button:SetExplicitSelectOnDown(firstItemSelectable)
|
|
firstItemSelectable.useExplicitNaviSelect = true
|
|
firstItemSelectable.banExplicitOnLeft = true
|
|
firstItemSelectable.banExplicitOnRight = true
|
|
firstItemSelectable.banExplicitOnDown = true
|
|
firstItemSelectable.banExplicitOnUp = false
|
|
firstItemSelectable:SetExplicitSelectOnUp(obtainCell.normalNode.button)
|
|
else
|
|
obtainCell.normalNode.button.banExplicitOnDown = true
|
|
end
|
|
end
|
|
itemObtainWaysForWiki.view.emptyNode.button.onIsNaviTargetChanged = function(isTarget)
|
|
if isTarget then
|
|
self.view.right.scrollRect:ScrollToNaviTarget(itemObtainWaysForWiki.view.emptyNode.button)
|
|
Notify(MessageConst.HIDE_ITEM_TIPS)
|
|
end
|
|
end
|
|
itemObtainWaysForWiki.view.selectableNaviGroup.naviPartnerOnDown:Clear()
|
|
if not lastNaviGroup then
|
|
lastNaviGroup = itemObtainWaysForWiki.view.selectableNaviGroup
|
|
end
|
|
return lastCraftFirstSelectable, lastNaviGroup
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._OnRightItemIsNaviTargetChanged = HL.Method(HL.Boolean, HL.Userdata, HL.Opt(HL.Table)) << function(self, isTarget, selectable, craftCellView)
|
|
if not DeviceInfo.usingController then
|
|
return
|
|
end
|
|
local isItemTipsShown = UIManager:IsShow(PanelId.ItemTips)
|
|
if craftCellView and not isItemTipsShown and craftCellView.pinBtn.gameObject.activeSelf then
|
|
InputManagerInst:ToggleBinding(craftCellView.pinBtn.view.pinToggle.toggleBindingId, isTarget)
|
|
craftCellView.pinKeyHint.gameObject:SetActive(isTarget)
|
|
end
|
|
if isTarget then
|
|
if self.view.right.scrollRect then
|
|
self.view.right.scrollRect:ScrollToNaviTarget(selectable)
|
|
end
|
|
if isItemTipsShown then
|
|
selectable.onClick:Invoke(nil)
|
|
InputManagerInst:ToggleBinding(selectable.hoverConfirmBindingId, false)
|
|
InputManagerInst:ToggleBinding(self.view.right.naviGroup.StopFocusBindingId, false)
|
|
end
|
|
end
|
|
self.m_itemTipsPosInfo.isSideTips = UIManager:IsShow(PanelId.ItemTips)
|
|
self.m_currentNaviCraftCellView = isTarget and craftCellView or nil
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
WikiDetailBaseCtrl._OnClickRightItemCell = HL.Method(HL.Userdata, HL.Opt(HL.Table)) << function(self, cell, craftCellView)
|
|
self.m_itemTipsPosInfo.isSideTips = true
|
|
cell:ShowTips(nil, function()
|
|
if not DeviceInfo.usingController or self.m_isClosed then
|
|
return
|
|
end
|
|
if not UIManager:IsShow(PanelId.ItemTips) then
|
|
if InputManagerInst.controllerNaviManager.curTarget == cell.view.button then
|
|
InputManagerInst:ToggleBinding(cell.view.button.hoverConfirmBindingId, true)
|
|
end
|
|
InputManagerInst:ToggleBinding(self.view.right.naviGroup.StopFocusBindingId, true)
|
|
InputManagerInst:ToggleBinding(self.m_closeItemTipsBindingId, false)
|
|
end
|
|
if self.m_currentNaviCraftCellView then
|
|
if self.m_currentNaviCraftCellView.pinBtn.gameObject.activeSelf then
|
|
InputManagerInst:ToggleBinding(self.m_currentNaviCraftCellView.pinBtn.view.pinToggle.toggleBindingId, true)
|
|
self.m_currentNaviCraftCellView.pinKeyHint.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
self.m_itemTipsPosInfo.isSideTips = false
|
|
local isItemTipsShown = UIManager:IsShow(PanelId.ItemTips)
|
|
if not isItemTipsShown and InputManagerInst.controllerNaviManager.curTarget == cell.view.button then
|
|
cell:_OnHoverChange(true)
|
|
end
|
|
end)
|
|
if DeviceInfo.usingController then
|
|
InputManagerInst:ToggleBinding(cell.view.button.hoverConfirmBindingId, false)
|
|
InputManagerInst:ToggleBinding(self.m_closeItemTipsBindingId, true)
|
|
InputManagerInst:ToggleBinding(self.view.right.naviGroup.StopFocusBindingId, false)
|
|
if craftCellView then
|
|
InputManagerInst:ToggleBinding(craftCellView.pinBtn.view.pinToggle.toggleBindingId, false)
|
|
craftCellView.pinKeyHint.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
|
|
HL.Commit(WikiDetailBaseCtrl) |