249 lines
10 KiB
Lua
249 lines
10 KiB
Lua
|
local XUiFubenChallengeEMEX = XLuaUiManager.Register(XLuaUi, "UiFubenChallengeEMEX")
|
||
|
local MAX_DISPLAY_STAGE = 7
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OnAwake()
|
||
|
self:InitAutoScript()
|
||
|
self.SViewBg.gameObject:SetActive(false)
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OnStart(parent, config)
|
||
|
self.Parent = parent
|
||
|
self:Init(config)
|
||
|
self.timer = XScheduleManager.ScheduleForever(self.Refresh, 0)
|
||
|
self.PanelHover.gameObject:SetActive(false)
|
||
|
self.OrgPosition = self.PanelMapContainer.transform.localPosition
|
||
|
self.TargetPosition = self.PanelTargetFlag.transform.position
|
||
|
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL, self.UnFocus, self)
|
||
|
XEventManager.AddEventListener(XEventId.EVENT_FUBEN_REFRESH_STAGE_DATA, self.RefreshStage, self)
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OnDestroy()
|
||
|
if self.timer then
|
||
|
XScheduleManager.UnSchedule(self.timer)
|
||
|
self.timer = nil
|
||
|
end
|
||
|
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_CLOSE_FUBENSTAGEDETAIL, self.UnFocus, self)
|
||
|
XEventManager.RemoveEventListener(XEventId.EVENT_FUBEN_REFRESH_STAGE_DATA, self.RefreshStage, self)
|
||
|
end
|
||
|
|
||
|
-- auto
|
||
|
-- Automatic generation of code, forbid to edit
|
||
|
function XUiFubenChallengeEMEX:InitAutoScript()
|
||
|
self:AutoInitUi()
|
||
|
self.SpecialSoundMap = {}
|
||
|
self:AutoAddListener()
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:AutoInitUi()
|
||
|
self.PanelMapContainer = self.Transform:Find("FullScreenBackground/PanelMapContainer")
|
||
|
self.SViewBg = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewBg"):GetComponent("ScrollRect")
|
||
|
self.PanelContentBg = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewBg/Viewport/PanelContentBg")
|
||
|
self.PanelBg = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewBg/Viewport/PanelContentBg/PanelBg")
|
||
|
self.SViewStage = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage"):GetComponent("ScrollRect")
|
||
|
self.PanelContent = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent")
|
||
|
self.PanelStage = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage")
|
||
|
--self.ImgOpen = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage1/RImgOpen"):GetComponent("RawImage")
|
||
|
--self.ImgOpenA = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage2/RImgOpen"):GetComponent("RawImage")
|
||
|
--self.ImgOpenB = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage3/RImgOpen"):GetComponent("RawImage")
|
||
|
--self.ImgOpenC = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage4/RImgOpen"):GetComponent("RawImage")
|
||
|
--self.ImgOpenD = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage5/RImgOpen"):GetComponent("RawImage")
|
||
|
--self.ImgOpenE = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage6/RImgOpen"):GetComponent("RawImage")
|
||
|
--self.ImgOpenF = self.Transform:Find("FullScreenBackground/PanelMapContainer/SViewStage/Viewport/PanelContent/PanelStage/Stage7/RImgOpen"):GetComponent("RawImage")
|
||
|
self.PanelTargetFlag = self.Transform:Find("FullScreenBackground/PanelTargetFlag")
|
||
|
self.PanelHover = self.Transform:Find("FullScreenBackground/PanelHover")
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:GetAutoKey(uiNode, eventName)
|
||
|
if not uiNode then
|
||
|
return
|
||
|
end
|
||
|
return eventName .. uiNode:GetHashCode()
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:RegisterListener(uiNode, eventName, func)
|
||
|
local key = self:GetAutoKey(uiNode, eventName)
|
||
|
if not key then
|
||
|
return
|
||
|
end
|
||
|
local listener = self.AutoCreateListeners[key]
|
||
|
if listener ~= nil then
|
||
|
uiNode[eventName]:RemoveListener(listener)
|
||
|
end
|
||
|
|
||
|
if func ~= nil then
|
||
|
if type(func) ~= "function" then
|
||
|
XLog.Error("XUiFubenChallengeEMEX:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
|
||
|
end
|
||
|
|
||
|
listener = function(...)
|
||
|
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
|
||
|
func(self, ...)
|
||
|
end
|
||
|
|
||
|
uiNode[eventName]:AddListener(listener)
|
||
|
self.AutoCreateListeners[key] = listener
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:AutoAddListener()
|
||
|
self.AutoCreateListeners = {}
|
||
|
end
|
||
|
|
||
|
-- auto
|
||
|
function XUiFubenChallengeEMEX:Init(chapter)
|
||
|
self.SectionCfg = XDataCenter.FubenDailyManager.GetDailySectionByChapterId(chapter.Id)
|
||
|
local maxStage = math.min(#self.SectionCfg.StageId, MAX_DISPLAY_STAGE)
|
||
|
for i = 1, maxStage do
|
||
|
local stageId = self.SectionCfg.StageId[i]
|
||
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
|
local stageItem = self.PanelStage:Find("Stage" .. i)
|
||
|
local stageButton = stageItem:Find("Enter"):GetComponent("Button")
|
||
|
local stageLock = stageItem:Find("StageLock"):GetComponent("Button")
|
||
|
stageItem:Find("StageLock/Text"):GetComponent("Text").text = stageCfg.Name
|
||
|
stageItem:Find("StageOpen/Text"):GetComponent("Text").text = stageCfg.Name
|
||
|
local rImgOpen = stageItem:Find("RImgOpen"):GetComponent("RawImage")
|
||
|
--self:SetUiSprite(imgOpen, stageCfg.Icon)
|
||
|
rImgOpen:SetRawImage(stageCfg.Icon)
|
||
|
stageButton.interactable = true
|
||
|
stageLock.interactable = true
|
||
|
self:RegisterClickEvent(stageButton, function()
|
||
|
self:OpenDetail(stageItem, stageCfg)
|
||
|
end)
|
||
|
self:RegisterClickEvent(stageLock, function()
|
||
|
self:OpenDetail(stageItem, stageCfg)
|
||
|
end)
|
||
|
end
|
||
|
local linePanel = self.PanelStage:Find("Line")
|
||
|
local rectTransform = self.PanelContent:GetComponent("RectTransform")
|
||
|
local minX = rectTransform.sizeDelta.x
|
||
|
for i = maxStage + 1, MAX_DISPLAY_STAGE do
|
||
|
local stageItem = self.PanelStage:Find("Stage" .. i)
|
||
|
stageItem.gameObject:SetActive(false)
|
||
|
local line = linePanel:Find("Image" .. (i - 1))
|
||
|
if line then
|
||
|
line.gameObject:SetActive(false)
|
||
|
local pos = self.PanelContent.transform:InverseTransformPoint(line.transform.position)
|
||
|
if minX then
|
||
|
minX = math.min(pos.x + 150, minX)
|
||
|
else
|
||
|
minX = pos.x + 150
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
rectTransform.sizeDelta = CS.UnityEngine.Vector2(minX, rectTransform.sizeDelta.y)
|
||
|
self:RefreshStage()
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:RefreshStage()
|
||
|
local maxStage = math.min(#self.SectionCfg.StageId, MAX_DISPLAY_STAGE)
|
||
|
for i = 1, maxStage do
|
||
|
local stageId = self.SectionCfg.StageId[i]
|
||
|
local stageCfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
|
local stageItem = self.PanelStage:Find("Stage" .. i)
|
||
|
local stageLock = stageItem:Find("StageLock")
|
||
|
local stageOpen = stageItem:Find("StageOpen")
|
||
|
local enter = stageItem:Find("Enter")
|
||
|
local rImgOpen = XUiHelper.TryGetComponent(stageItem, "RImgOpen", "RawImage")
|
||
|
if stageInfo.Unlock then
|
||
|
rImgOpen:SetRawImage(stageCfg.Icon)
|
||
|
end
|
||
|
stageLock.gameObject:SetActive(not stageInfo.Unlock)
|
||
|
enter.gameObject:SetActive(stageInfo.Unlock)
|
||
|
rImgOpen.gameObject:SetActive(stageInfo.Unlock)
|
||
|
stageOpen.gameObject:SetActive(stageInfo.Unlock)
|
||
|
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OpenDetail(stageItem, stageCfg)
|
||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageCfg.StageId)
|
||
|
if stageInfo and not stageInfo.Unlock then
|
||
|
local msg = XDataCenter.FubenManager.GetFubenOpenTips(stageCfg.StageId)
|
||
|
XUiManager.TipMsg(msg)
|
||
|
return
|
||
|
end
|
||
|
self:FocusStage(stageItem)
|
||
|
if stageCfg.IsMultiplayer then
|
||
|
self:OpenMultiplayerStageDetail(stageCfg, stageInfo)
|
||
|
else
|
||
|
self.Parent:OpenPanelStageDetail(stageCfg, stageInfo)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OpenMultiplayerStageDetail(stageCfg)
|
||
|
-- XLuaUiManager.Open("UiOnLineTranscript", stageCfg)
|
||
|
XLuaUiManager.Open("UiFubenStageDetail", stageCfg)
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OnCloseStageDetail()
|
||
|
self:UnFocus()
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:OnEnterFight()
|
||
|
self:UnFocus(true)
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:FocusStage(stageItem)
|
||
|
local worldPos = stageItem.transform.position
|
||
|
local localPos = self.PanelMapContainer.transform:InverseTransformPoint(worldPos)
|
||
|
local tPos = self.PanelMapContainer.transform:InverseTransformPoint(self.TargetPosition)
|
||
|
local deltaPos = tPos - localPos
|
||
|
local lineAni = CS.UnityEngine.AnimationCurve.Linear(0, 0, 1, 1)
|
||
|
local startPos = self.PanelMapContainer.localPosition
|
||
|
self.PanelHover.gameObject:SetActive(true)
|
||
|
XUiHelper.Tween(0.3, function(t)
|
||
|
if XTool.UObjIsNil(self.PanelMapContainer) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.PanelMapContainer.localPosition = startPos + deltaPos * lineAni:Evaluate(t)
|
||
|
end, function()
|
||
|
if XTool.UObjIsNil(self.PanelMapContainer) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.PanelMapContainer.localPosition = startPos + deltaPos
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:UnFocus(immediate)
|
||
|
if immediate then
|
||
|
self.PanelMapContainer.localPosition = self.OrgPosition
|
||
|
self.PanelHover.gameObject:SetActive(false)
|
||
|
return
|
||
|
end
|
||
|
local startPos = self.PanelMapContainer.localPosition
|
||
|
local deltaPos = self.OrgPosition - startPos
|
||
|
local lineAni = CS.UnityEngine.AnimationCurve.Linear(0, 0, 1, 1)
|
||
|
XUiHelper.Tween(0.3, function(t)
|
||
|
if XTool.UObjIsNil(self.PanelMapContainer) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.PanelMapContainer.localPosition = startPos + deltaPos * lineAni:Evaluate(t)
|
||
|
end, function()
|
||
|
if XTool.UObjIsNil(self.PanelMapContainer) then
|
||
|
return
|
||
|
end
|
||
|
|
||
|
self.PanelMapContainer.localPosition = self.OrgPosition
|
||
|
self.PanelHover.gameObject:SetActive(false)
|
||
|
end)
|
||
|
end
|
||
|
|
||
|
function XUiFubenChallengeEMEX:Refresh()
|
||
|
if XTool.UObjIsNil(self.GameObject) then
|
||
|
if self.timer then
|
||
|
XScheduleManager.UnSchedule(self.timer)
|
||
|
self.timer = nil
|
||
|
end
|
||
|
return
|
||
|
end
|
||
|
self.SViewBg.horizontalNormalizedPosition = self.SViewStage.horizontalNormalizedPosition
|
||
|
self.SViewBg.verticalNormalizedPosition = self.SViewStage.verticalNormalizedPosition
|
||
|
end
|
||
|
|
||
|
return XUiFubenChallengeEMEX
|