miduo_client/Assets/ManagedResources/~Lua/Modules/Achievement/AchievementPanel.lua

209 lines
8.8 KiB
Lua

require("Base/BasePanel")
AchievementPanel = Inherit(BasePanel)
local this = AchievementPanel
local redPointGrid = {}--红点
local imageSprite = {
{"c_chengjiu_jiaoseanniu_1", "c_chengjiu_jiaoseanniu"},
{"c_chengjiu_wanfaanniu_1", "c_chengjiu_wanfaanniu"},
{"c_chengjiu_fubenanniu_1", "c_chengjiu_fubenanniu"},
{"c_chengjiu_teshuanniu_1", "c_chengjiu_teshuanniu"},
{"c_chengjiu_wanfaanniu_1", "c_chengjiu_wanfaanniu"}
}
local tabBtns = {}
local defaultIndex = 0
local curAllData = {}
local achievementConfig = ConfigManager.GetConfig(ConfigName.AchievementConfig)
this.UpView = nil
--初始化组件(用于子类重写)
function AchievementPanel:InitComponent()
this.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform, { showType = UpViewOpenType.ShowLeft })
self.btnBack = Util.GetGameObject(self.gameObject, "tabs/btnBack")
self.selectBtn = Util.GetGameObject(self.gameObject, "tabs/rect/grid/selectBtn")
for i = 1, LengthOfTable(imageSprite) do
tabBtns[i] = Util.GetGameObject(self.gameObject, "tabs/rect/grid/Btn (" .. i .. ")")
tabBtns[i]:GetComponent("Image").sprite = Util.LoadSprite(imageSprite[i][1])
redPointGrid[i] = Util.GetGameObject(tabBtns[i], "redPoint")
redPointGrid[i]:SetActive(false)
end
this.rewardPre = Util.GetGameObject(self.gameObject, "downLayout/AchievementGrid/rewardPre")
local v = Util.GetGameObject(self.gameObject, "downLayout/AchievementGrid/rect"):GetComponent("RectTransform").rect
this.ScrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, Util.GetGameObject(self.gameObject, "downLayout/AchievementGrid/rect").transform,
this.rewardPre, nil, Vector2.New(v.width, v.height), 1, 1, Vector2.New(0,15))
this.ScrollView.moveTween.MomentumAmount = 1
this.ScrollView.moveTween.Strength = 1
self.NoviceItemList={}--存储itemview 重复利用
end
--绑定事件(用于子类重写)
function AchievementPanel:BindEvent()
Util.AddClick(self.btnBack, function()
self:ClosePanel()
end)
for i = 1, LengthOfTable(imageSprite) do
Util.AddClick(tabBtns[i], function()
self:OnShowPanelData(i)
end)
end
--BindRedPointObject(RedPointType.Achievement_One, redPointGrid[1])
--BindRedPointObject(RedPointType.Achievement_Two, redPointGrid[2])
--BindRedPointObject(RedPointType.Achievement_Three, redPointGrid[3])
--BindRedPointObject(RedPointType.Achievement_Four, redPointGrid[4])
--BindRedPointObject(RedPointType.Achievement_Five, redPointGrid[5])
end
--添加事件监听(用于子类重写)
function AchievementPanel:AddListener()
--Game.GlobalEvent:AddEvent(GameEvent.Activity.OnActivityOpenOrClose, self.RefreshActivityBtn, self)
end
--移除事件监听(用于子类重写)
function AchievementPanel:RemoveListener()
--Game.GlobalEvent:RemoveEvent(GameEvent.Activity.OnActivityOpenOrClose, self.RefreshActivityBtn, self)
end
--界面打开时调用(用于子类重写)
function AchievementPanel:OnOpen(_defaultIndex)
defaultIndex = _defaultIndex or 0
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function AchievementPanel:OnShow()
this.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main })
if defaultIndex <= 0 then
defaultIndex = 1
defaultIndex = self:GetPriorityIndex(defaultIndex)
end
self:OnShowPanelData(defaultIndex)
self:SetSelectBtn(defaultIndex)
end
function AchievementPanel:OnSortingOrderChange()
for i, v in pairs(self.NoviceItemList) do
for j = 1, #self.NoviceItemList[i] do
self.NoviceItemList[i][j]:SetEffectLayer(self.sortingOrder)
end
end
end
function AchievementPanel:OnShowPanelData(_defaultIndex)
defaultIndex = _defaultIndex
local AllData = TaskManager.GetTypeTaskList(TaskTypeDef.Achievement)
--LogError(" ``````````` "..LengthOfTable(AllData))
curAllData = {}
for i = 1, #AllData do
if AllData[i] and achievementConfig[AllData[i].missionId] then
if achievementConfig[AllData[i].missionId].Sort == defaultIndex then
--LogError("defaultIndex "..defaultIndex.." AllData[i].missionId "..AllData[i].missionId..
-- " AllData[i].state "..AllData[i].state.." AllData[i].progress "..AllData[i].progress)
table.insert(curAllData,AllData[i])
end
end
end
self:RewardTabsSort(curAllData)
this.ScrollView:SetData(curAllData, function (index, go)
self:SingleDataShow(go, curAllData[index])
end)
self:SetSelectBtn(defaultIndex)
end
function AchievementPanel:SingleDataShow(go,rewardData)
local activityRewardGo = go
activityRewardGo:SetActive(true)
local sConFigData = achievementConfig[rewardData.missionId]
local titleText = Util.GetGameObject(activityRewardGo, "titleImage/titleText"):GetComponent("Text")
titleText.text = sConFigData.ContentsShow
local itemGroup = Util.GetGameObject(activityRewardGo, "content")
--滚动条复用重设itemview
if self.NoviceItemList[go] then
for i = 1, 4 do
self.NoviceItemList[go][i].gameObject:SetActive(false)
end
for i = 1, #sConFigData.Reward do
if self.NoviceItemList[go][i] then
self.NoviceItemList[go][i]:OnOpen(false, {sConFigData.Reward[i][1],sConFigData.Reward[i][2]}, 0.9,false,false,false,self.sortingOrder)
self.NoviceItemList[go][i].gameObject:SetActive(true)
end
end
else
self.NoviceItemList[go]={}
for i = 1, 4 do
self.NoviceItemList[go][i] = SubUIManager.Open(SubUIConfig.ItemView, itemGroup.transform)
self.NoviceItemList[go][i].gameObject:SetActive(false)
end
for i = 1, #sConFigData.Reward do
self.NoviceItemList[go][i]:OnOpen(false, {sConFigData.Reward[i][1],sConFigData.Reward[i][2]}, 0.9,false,false,false,self.sortingOrder)
self.NoviceItemList[go][i].gameObject:SetActive(true)
end
end
local lingquButton = Util.GetGameObject(activityRewardGo.gameObject, "lingquButton")
Util.GetGameObject(lingquButton.gameObject, "redPoint"):SetActive(false)
local qianwangButton = Util.GetGameObject(activityRewardGo.gameObject, "qianwangButton")
local getFinishText = Util.GetGameObject(activityRewardGo.gameObject, "getFinishText")
local getRewardProgress = Util.GetGameObject(activityRewardGo.gameObject, "getRewardProgress")
local state = rewardData.state
local value = sConFigData.Values[2][1]
lingquButton:SetActive(state == 1)
qianwangButton:SetActive(state == 0)
getFinishText:SetActive(state == 2)
getRewardProgress:SetActive(state == 0)
getRewardProgress:GetComponent("Text").text = math.abs(rewardData.progress) .."/"..math.abs(value)
Util.AddOnceClick(qianwangButton, function()
if sConFigData.Jump then
JumpManager.GoJump(sConFigData.Jump[1])
end
end)
Util.AddOnceClick(lingquButton, function()
NetManager.TakeMissionRewardRequest(TaskTypeDef.Achievement,rewardData.missionId, function(msg)
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function()
self:OnShowPanelData(defaultIndex)
end)
end)
end)
end
local sortTable = {
[1] = 2,
[2] = 0,
[0] = 1,
}
function AchievementPanel:RewardTabsSort(missions)
table.sort(missions,function(a,b)
if a.state == b.state then
return a.missionId < b.missionId
else
return sortTable[a.state] > sortTable[b.state]
end
end)
end
function AchievementPanel:SetSelectBtn(index)
self.selectBtn.transform:SetParent(tabBtns[index].transform)
self.selectBtn.transform.localScale = Vector3.one
self.selectBtn.transform.localPosition = Vector3.zero;
self.selectBtn:GetComponent("Image").sprite = Util.LoadSprite(imageSprite[index][2])
end
function AchievementPanel:GetPriorityIndex(defaultIndex)
local index = defaultIndex
for idx, operateItem in ipairs(tabBtns) do
if operateItem.activeSelf and Util.GetGameObject(operateItem, "redPoint").activeSelf then
index = idx
break
end
end
return index
end
--界面关闭时调用(用于子类重写)
function AchievementPanel:OnClose()
end
--界面销毁时调用(用于子类重写)
function AchievementPanel:OnDestroy()
--ClearRedPointObject(RedPointType.Achievement_One)
--ClearRedPointObject(RedPointType.Achievement_Two)
--ClearRedPointObject(RedPointType.Achievement_Three)
--ClearRedPointObject(RedPointType.Achievement_Four)
--ClearRedPointObject(RedPointType.Achievement_Five)
SubUIManager.Close(this.UpView)
end
return AchievementPanel