require("Base/BasePanel")
FindFairyPopup = Inherit(BasePanel)
local this = FindFairyPopup
this.type = nil --当前面板弹窗类型
this.playerScrollHead = {}
--滚动条头像
--积分奖励按钮图片
local StateImageName = {
"r_hero_button_001",
"r_hero_button_003",
"r_renwu_yiwancheng_001"
}
local CurType
---东海寻仙通用弹窗
--初始化组件(用于子类重写)
function FindFairyPopup:InitComponent()
this.panel = Util.GetGameObject(self.gameObject, "Panel")
this.backBtn = Util.GetGameObject(this.panel, "BackBtn")
this.title = Util.GetGameObject(this.panel, "Title"):GetComponent("Text")
this.info = Util.GetGameObject(this.panel, "Info"):GetComponent("Text")
this.scrollRoot = Util.GetGameObject(this.panel, "ScrollRoot")
this.noneImage = Util.GetGameObject(this.panel, "NoneImage")
this.findFairyRoot = Util.GetGameObject(this.scrollRoot, "FindFairyRoot")
this.scoreRewardRoot = Util.GetGameObject(this.scrollRoot, "ScoreRewardRoot")
this.bigRankRoot = Util.GetGameObject(this.scrollRoot, "BigRankRoot")
this.curScoreRankRoot = Util.GetGameObject(this.scrollRoot, "CurScoreRankRoot")
this.curScoreRankScroll = Util.GetGameObject(this.scrollRoot, "CurScoreRankRoot/Scroll")
this.bigRankList = {}
--每次打开清理下重新加载
FindFairyManager.rankRewardData = {}
FindFairyManager.SetRankRewardData()
for i = 1, #FindFairyManager.rankRewardData do
this.bigRankList[i] = Util.GetGameObject(this.bigRankRoot, "Rect/BigRankPre" .. i)
end
--积分奖励item
this.scoreItemList = {}
--排名大奖item
this.bigItemList = {}
--寻仙榜滚动条预设
this.findFairyPre = Util.GetGameObject(this.scrollRoot, "FindFairyPre")
--积分奖励滚动条预设
this.scoreRewardPre = Util.GetGameObject(this.scrollRoot, "ScoreRewardPre")
--本期排名预设
this.curScoreRankPre = Util.GetGameObject(this.scrollRoot, "CurScoreRankPre")
--寻仙榜碎片item列表
this.heroItemList = {}
end
--绑定事件(用于子类重写)
function FindFairyPopup:BindEvent()
Util.AddClick(
this.backBtn,
function()
local view = require("Modules/FindFairy/View/FindFairy_MainView")
view.curRewardRootMask.enabled = true
self:ClosePanel()
end
)
end
--添加事件监听(用于子类重写)
function FindFairyPopup:AddListener()
end
--移除事件监听(用于子类重写)
function FindFairyPopup:RemoveListener()
end
--界面打开时调用(用于子类重写)
function FindFairyPopup:OnOpen(...)
local args = {...}
this.type = args[1]
this.SetView(args[1])
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function FindFairyPopup:OnShow()
end
--重设层级
function FindFairyPopup:OnSortingOrderChange()
this.sortingOrder = self.sortingOrder
end
--界面关闭时调用(用于子类重写)
function FindFairyPopup:OnClose()
this.playerScrollHead = {}
this.noneImage:SetActive(false)
this.CloseView(CurType)
end
--界面销毁时调用(用于子类重写)
function FindFairyPopup:OnDestroy()
this.findFairyScrollView = nil
this.scoreRewardScrollView = nil
this.bigRankScrollView = nil
this.curScoreRankScrollView = nil
end
--设置显示
function this.SetView(type)
CurType = type
this.info.gameObject:SetActive(this.type == FIND_FAIRY_POPUP_TYPE.FindFairyRecord)
this.findFairyRoot:SetActive(this.type == FIND_FAIRY_POPUP_TYPE.FindFairyRecord)
this.scoreRewardRoot:SetActive(this.type == FIND_FAIRY_POPUP_TYPE.ScoreReward)
this.bigRankRoot:SetActive(this.type == FIND_FAIRY_POPUP_TYPE.BigRank)
this.curScoreRankRoot:SetActive(this.type == FIND_FAIRY_POPUP_TYPE.CurScoreRank)
if CurType == FIND_FAIRY_POPUP_TYPE.FindFairyRecord then
this.title.text = Language[10628]
if not this.findFairyScrollView then
this.findFairyScrollView =
SubUIManager.Open(
SubUIConfig.ScrollCycleView,
this.findFairyRoot.transform,
this.findFairyPre,
nil,
Vector2.New(this.findFairyRoot.transform.rect.width, this.findFairyRoot.transform.rect.height),
1,
1,
Vector2.New(0, 20)
)
this.findFairyScrollView.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, 0)
this.findFairyScrollView.moveTween.MomentumAmount = 1
this.findFairyScrollView.moveTween.Strength = 2
end
NetManager.RequestRankInfo(RANK_TYPE.FINDFAIRY_RECORD,function(msg)
--msg.myRankInfo.param2 --猎妖师ID
this.noneImage:SetActive(#msg.ranks == 0)
this.findFairyScrollView:SetData(msg.ranks,function(index, root)
this.FindFairyRecordShow(root, msg.ranks[index])
end)
this.findFairyScrollView:SetIndex(1)
end, ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy))
elseif CurType == FIND_FAIRY_POPUP_TYPE.ScoreReward then
this.title.text = Language[10629]
this.noneImage:SetActive(false)
local data = FindFairyManager.GetBtnDataState(ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy))
if not this.scoreRewardScrollView then
this.scoreRewardScrollView =
SubUIManager.Open(
SubUIConfig.ScrollCycleView,
this.scoreRewardRoot.transform,
this.scoreRewardPre,
nil,
Vector2.New(this.scrollRoot.transform.rect.width, this.scrollRoot.transform.rect.height),
1,
1,
Vector2.New(0, 20)
)
this.scoreRewardScrollView.moveTween.MomentumAmount = 1
this.scoreRewardScrollView.moveTween.Strength = 2
end
this.scoreRewardScrollView:SetData(
data,
function(index, root)
this.ScoreRewardShow(root, data[index])
end
)
this.scoreRewardScrollView:SetIndex(1)
elseif CurType == FIND_FAIRY_POPUP_TYPE.BigRank then
this.title.text = Language[10630]
this.noneImage:SetActive(false)
Util.GetGameObject(this.bigRankRoot, "Rect"):GetComponent("RectTransform"):DOAnchorPosY(-546.5, 0)
for i = 1, #FindFairyManager.rankRewardData do
this.BigRankRewardShow(this.bigRankList[i], FindFairyManager.rankRewardData[i], i)
end
elseif CurType == FIND_FAIRY_POPUP_TYPE.CurScoreRank then
this.title.text = Language[10631]
if not this.curScoreRankScrollView then
this.curScoreRankScrollView =
SubUIManager.Open(
SubUIConfig.ScrollCycleView,
this.curScoreRankScroll.transform,
this.curScoreRankPre,
nil,
Vector2.New(this.curScoreRankScroll.transform.rect.width, this.curScoreRankScroll.transform.rect.height),
1,
1,
Vector2.New(0, 10)
)
this.curScoreRankScrollView.moveTween.MomentumAmount = 1
this.curScoreRankScrollView.moveTween.Strength = 2
end
NetManager.RequestRankInfo(10,function(msg)
this.noneImage:SetActive(#msg.ranks == 0)
this.CurMyScoreRankShow(msg.myRankInfo)
this.curScoreRankScrollView:SetData(msg.ranks,function(index, root)
this.CurScoreRankShow(root, msg.ranks[index], msg.myRankInfo.rank)
end)
end,ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy))
end
end
function this.CloseView(type)
CurType = type
if CurType == FIND_FAIRY_POPUP_TYPE.BigRank then
if this.liveNode then
poolManager:UnLoadLive(this.liveName, this.liveNode)
this.liveName = nil
end
elseif CurType == FIND_FAIRY_POPUP_TYPE.ScoreReward then
Game.GlobalEvent:DispatchEvent(GameEvent.FindFairy.RefreshRedPoint)
end
end
--寻仙榜(记录条)
function this.FindFairyRecordShow(root, data)
local click = Util.GetGameObject(root, "Click")
local playerHead = Util.GetGameObject(root, "PlayerHead")
local playerName = Util.GetGameObject(root, "PlayerName"):GetComponent("Text")
local guild = Util.GetGameObject(root, "GuildBg")
local guildIcon = Util.GetGameObject(root, "GuildBg/GuildIcon"):GetComponent("Image")
local guildName = Util.GetGameObject(root, "GuildName"):GetComponent("Text")
local heroHead = Util.GetGameObject(root, "HeroHead")
--:GetComponent("Image")
local info = Util.GetGameObject(root, "Info"):GetComponent("Text")
Util.AddOnceClick(
click,
function()
UIManager.OpenPanel(UIName.PlayerInfoPopup, data.uid)
end
)
if not this.playerScrollHead[root] then
this.playerScrollHead[root] = CommonPool.CreateNode(POOL_ITEM_TYPE.PLAYER_HEAD, playerHead)
end
this.playerScrollHead[root]:Reset()
this.playerScrollHead[root]:SetHead(data.head)
this.playerScrollHead[root]:SetFrame(data.headFrame)
this.playerScrollHead[root]:SetLevel(data.level)
this.playerScrollHead[root]:SetScale(Vector3.one * 0.7)
this.playerScrollHead[root]:SetLayer(this.sortingOrder)
this.playerScrollHead[root]:SetEffectScale(0.8)
playerName.text = data.userName
guild.gameObject:SetActive(data.guildName ~= "")
if data.guildName == "" then
guildName.text = Language[10632]
guildName.gameObject:GetComponent("RectTransform"):DOAnchorPosX(-63.75, 0)
else
guildName.text = Language[10633] .. data.guildName
guildName.gameObject:GetComponent("RectTransform"):DOAnchorPosX(0, 0)
local logoName = GuildManager.GetLogoResName(data.icon)
guildIcon.sprite = Util.LoadSprite(logoName)
end
FindFairyManager.ResetItemView(
root,
heroHead.transform,
this.heroItemList,
1,
0.8,
this.sortingOrder,
true,
data.rankInfo.param2,
data.rankInfo.param3
)
info.text = FindFairyManager.TimeStampToDateStr(data.rankInfo.param1)
end
--积分奖励显示 1各滚动条obj 2数据(数据结构:[1]={data[1],data[2],data[3]} //data1为领取状态,1为已领取,0为未领取或未达成;data2为当前积分;data3为当前任务id)
function this.ScoreRewardShow(root, data)
local rewardRoot = Util.GetGameObject(root, "RewardRoot").transform
local info = Util.GetGameObject(root, "Info"):GetComponent("Text")
local stateBtn = Util.GetGameObject(root, "StateBtn")
local stateImage = Util.GetGameObject(root, "StateBtn"):GetComponent("Image")
local stateText = Util.GetGameObject(root, "StateBtn/Text"):GetComponent("Text")
local config = ConfigManager.GetConfigData(ConfigName.ActivityRewardConfig, data.missionId)
info.text = Language[10634] .. config.Values[1][1] .. Language[10635]
FindFairyManager.ResetItemView(root, rewardRoot, this.scoreItemList, 4, 1, this.sortingOrder, false, config.Reward)
stateBtn:GetComponent("Button").interactable = data.value >= config.Values[1][1] and data.state == 0
if data.value >= config.Values[1][1] then
if data.state == 0 then
stateImage.sprite = Util.LoadSprite(StateImageName[1])
stateText.text = Language[10018]
else
stateImage.sprite = Util.LoadSprite(StateImageName[2])
stateText.text = Language[10101]
end
stateBtn:GetComponent("Animator").enabled = true
stateBtn:GetComponent("RectTransform").localScale = Vector2.one
stateImage.type = "Simple"
stateText.color = Color.New(23 / 255, 35 / 255, 42 / 255, 1)
else
stateBtn:GetComponent("Animator").enabled = false
stateBtn:GetComponent("RectTransform").localScale = Vector2.one * 0.8
stateImage.sprite = Util.LoadSprite(StateImageName[3])
stateImage.type = "Sliced"
stateText.text = Language[10303]
stateText.color = Color.New(172 / 255, 172 / 255, 170 / 255, 1)
end
Util.AddOnceClick(
stateBtn,
function()
NetManager.GetActivityRewardRequest(
data.missionId,
FindFairyManager.GetCurActivityId(),
function(drop)
UIManager.OpenPanel(UIName.RewardItemPopup, drop, 1)
this.SetView(FIND_FAIRY_POPUP_TYPE.ScoreReward)
end
)
end
)
end
--排名大奖显示
function this.BigRankRewardShow(root, data, index)
root.gameObject:SetActive(true)
if index == 1 then
--local curActivityId=ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy)--静态立绘
--local staticLiveId=FindFairyManager.GetHeroData(curActivityId).Painting
--liveImage.sprite=Util.LoadSprite(ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig,staticLiveId).Name)
--立绘特殊处理
local liveImage = Util.GetGameObject(root, "LiveMask/LiveRoot")
local curActivityId = ActivityGiftManager.IsActivityTypeOpen(ActivityTypeDef.FindFairy)
local heroData = FindFairyManager.GetHeroData(curActivityId)
if this.liveNode then
poolManager:UnLoadLive(this.liveName, this.liveNode)
this.liveName = nil
end
local artData = ConfigManager.GetConfigData(ConfigName.ArtResourcesConfig, heroData.Live)
this.liveName = artData.Name
this.liveNode =
poolManager:LoadLive(this.liveName, liveImage.transform, Vector3.one * heroData.Scale, Vector3.one)
else
-- elseif index > 1 and index <= 3 then
-- local info = Util.GetGameObject(root, "Info"):GetComponent("Text")
-- info.text = "第" .. index .. "名大奖"
-- elseif index >= 4 then
-- local info = Util.GetGameObject(root, "Info"):GetComponent("Text")
-- if data.MaxRank == -1 then
-- info.text = "第200+名大奖"
-- else
-- info.text =
-- "第" .. data.MinRank .. "至" .. data.MaxRank .. "名大奖"
-- end
local info = Util.GetGameObject(root, "Info"):GetComponent("Text")
if data.MinRank == data.MaxRank then
info.text = Language[10636] .. index .. Language[10637]
else
if data.MaxRank == -1 then
info.text = Language[10638]
else
info.text =
Language[10636] .. data.MinRank .. Language[10639] .. data.MaxRank .. Language[10637]
end
end
end
--奖励物品根节点
local rewardRoot = Util.GetGameObject(root, "RewardRoot").transform
FindFairyManager.ResetItemView(
root,
rewardRoot,
this.bigItemList,
4,
0.9,
this.sortingOrder,
false,
data.RankingReward
)
end
--本期寻仙积分排名显示
function this.CurMyScoreRankShow(data)
local myRankNum = tonumber(data.rank)
local myScoreNum = tonumber(data.param1)
local myRank = Util.GetGameObject(this.curScoreRankRoot, "MyRank/MyRank"):GetComponent("Text")
local myScore = Util.GetGameObject(this.curScoreRankRoot, "MyRank/MyScore"):GetComponent("Text")
if myRankNum == -1 then
myRank.text = Language[10271]
myScore.text = Language[10640]
else
myRank.text = Language[10103] .. myRankNum
myScore.text = Language[10641] .. myScoreNum
end
end
function this.CurScoreRankShow(root, data, myRank)
local selfBg = Util.GetGameObject(root, "SelfBG"):GetComponent("Image")
local rankImage = Util.GetGameObject(root, "RankImage"):GetComponent("Image")
local rankText = Util.GetGameObject(root, "RankText"):GetComponent("Text")
local head = Util.GetGameObject(root, "Head")
local name = Util.GetGameObject(root, "Name"):GetComponent("Text")
local gate = Util.GetGameObject(root, "Gate"):GetComponent("Text")
local force = Util.GetGameObject(root, "Force"):GetComponent("Text")
selfBg.enabled = myRank == data.rankInfo.rank
rankImage.sprite = SetRankNumFrame(data.rankInfo.rank)
rankText.text = data.rankInfo.rank > 3 and data.rankInfo.rank or ""
if not this.playerScrollHead[root] then
this.playerScrollHead[root] = CommonPool.CreateNode(POOL_ITEM_TYPE.PLAYER_HEAD, head)
end
this.playerScrollHead[root]:Reset()
this.playerScrollHead[root]:SetHead(data.head)
this.playerScrollHead[root]:SetFrame(data.headFrame)
this.playerScrollHead[root]:SetLevel(data.level)
this.playerScrollHead[root]:SetScale(Vector3.one * 0.7)
this.playerScrollHead[root]:SetLayer(this.sortingOrder)
this.playerScrollHead[root]:SetEffectScale(0.8)
name.text = data.userName
gate.text = data.rankInfo.param1
force.text = data.force
end
return FindFairyPopup