miduo_client/Assets/ManagedResources/~Lua/Modules/linglongbaojing/LingLongBaoJingPanel.lua

512 lines
22 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

local LingLongBaoJingPanel = {}
local data = {}
---转盘旋转类型
local TableTurnType={
Normal=1,--默认旋转
Expedite=2,--加快旋转
}
local curTurnPos=1 --当前位置
local sortingOrder = 0
function LingLongBaoJingPanel:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = LingLongBaoJingPanel })
return b
end
local a,b,c,d
local configs
---初始化组件(用于子类重写)
function LingLongBaoJingPanel:InitComponent(gameObject)
self.spLoader = SpriteLoader.New()
self.luckyTurnPanel = Util.GetGameObject(self.gameObject,"Panel")
self.mask = Util.GetGameObject(self.luckyTurnPanel,"TurnTable/Mask")
self.time = Util.GetGameObject(self.luckyTurnPanel,"time"):GetComponent("Text")
self.firstLayer = Util.GetGameObject(self.luckyTurnPanel,"firstLayer"):GetComponent("Canvas")
self.secondLayer = Util.GetGameObject(self.luckyTurnPanel,"turnpanelWai"):GetComponent("Canvas")
self.thirtyLayer = Util.GetGameObject(self.luckyTurnPanel,"TurnTable"):GetComponent("Canvas")
self.forthLayer = Util.GetGameObject(self.luckyTurnPanel,"forthLayer"):GetComponent("Canvas")
self.fx_linglongbaojing_changzhu = Util.GetGameObject(self.firstLayer.transform,"fx_linglongbaojing_changzhu")
self.fx_linglongbaojing_changzhu.gameObject:SetActive(true)
self.fx_linglongbaojing_long = Util.GetGameObject(self.forthLayer.transform,"fx_linglongbaojing_long")
self.fx_linglongbaojing_long.gameObject:SetActive(false)
self.fx_linglongbaojing_chuxian = Util.GetGameObject(self.forthLayer.transform,"fx_linglongbaojing_chuxian")
self.fx_linglongbaojing_chuxian.gameObject:SetActive(false)
self.fx_linglongbaojing_longchuxian = Util.GetGameObject(self.forthLayer.transform,"fx_linglongbaojing_longchuxian")
self.fx_linglongbaojing_longchuxian.gameObject:SetActive(false)
---跑马灯位置(物品位置)
self.itemList = {}
for i = 1,2 do
if not self.itemList[i] then
self.itemList[i] = {}
end
self.itemList[i].go = Util.GetGameObject(self.luckyTurnPanel, "ItemList"..i)
for j = 1,self.itemList[i].go.transform.childCount do
if not self.itemList[i][j] then
self.itemList[i][j] = {}
end
self.itemList[i][j].pos = Util.GetGameObject(self.itemList[i].go, "item"..j)
self.itemList[i][j].item = Util.GetGameObject(self.itemList[i][j].pos, "pre")
local effect = nil
effect = Util.GetGameObject(self.itemList[i][j].item, "fx_linglongbaojing_waiquanchufacangzhu")
if not effect then
effect = Util.GetGameObject(self.itemList[i][j].item, "fx_linglongbaojing_chouzhonglongtou")
end
self.itemList[i][j].effect = effect
if self.itemList[i][j].effect then
self.itemList[i][j].effect.gameObject:SetActive(false)
end
self.itemList[i][j].mask = Util.GetGameObject(self.itemList[i][j].item, "mask")
self.itemList[i][j].itemPos = Util.GetGameObject(self.itemList[i][j].item, "itemPos")
self.itemList[i][j].get = Util.GetGameObject(self.itemList[i][j].item, "get")
self.itemList[i][j].selectKuang = Util.GetGameObject(self.itemList[i][j].item, "selectKuang")
self.itemList[i][j].selectKuang.gameObject:SetActive(false)
self.itemList[i][j].itemView = Util.GetGameObject(self.itemList[i][j].itemPos, "icon"):GetComponent("Image")--道具
self.itemList[i][j].numDi = Util.GetGameObject(self.itemList[i][j].item, "numDi")
self.itemList[i][j].num = Util.GetGameObject(self.itemList[i][j].item, "Text"):GetComponent("Text")
end
end
--拥有道具数量
self.propBtn = Util.GetGameObject(self.thirtyLayer.transform,"Prop")
self.propImage = Util.GetGameObject(self.propBtn, "PropImage"):GetComponent("Image")--道具
self.propText =Util.GetGameObject(self.propBtn, "PropText"):GetComponent("Text")
self.fx_linglongbaojing_kaiqi = Util.GetGameObject(self.propBtn,"fx_linglongbaojing_kaiqi")
self.fx_linglongbaojing_kaiqi.gameObject:SetActive(false)
-- 奖励预览
self.btnPreview = Util.GetGameObject(self.gameObject, "button/previewBtn")
self.helpBtn = Util.GetGameObject(self.luckyTurnPanel,"button/helpBtn")
self.helpPosition = Util.GetGameObject(self.luckyTurnPanel,"BG/helpPos"):GetComponent("RectTransform").localPosition
-- self.slider = Util.GetGameObject(self.luckyTurnPanel,"Slider")
-- self.luckyValueNum = Util.GetGameObject(self.slider, "LuckyValue/LuckyValueNum"):GetComponent("Text")--幸运值
-- self.luckySlider = Util.GetGameObject(self.slider, "LuckySlider"):GetComponent("Slider")
-- self.rewardBoxList={}--奖励盒
-- self.rewardBox=Util.GetGameObject(self.slider,"RewardBox")
-- for i=1,5 do
-- if not self.rewardBoxList[i] then
-- self.rewardBoxList[i] = {}
-- end
-- self.rewardBoxList[i].go=Util.GetGameObject(self.rewardBox,"Item"..i)
-- self.rewardBoxList[i].icon =Util.GetGameObject(self.rewardBoxList[i].go,"icon"):GetComponent("Image")--幸运值
-- self.rewardBoxList[i].value =Util.GetGameObject(self.rewardBoxList[i].go,"Value"):GetComponent("Text")--幸运值
-- self.rewardBoxList[i].redPoint=Util.GetGameObject(self.rewardBoxList[i].go,"redPoint")
-- self.rewardBoxList[i].Num=Util.GetGameObject(self.rewardBoxList[i].go,"Num/Text"):GetComponent("Text")--幸运值
-- end
-- self.itemRewardList = {}
local config = ConfigManager.GetConfigData(ConfigName.SpecialConfig,117)
local strs = string.split(config.Value,"|")
self.costId = tonumber(strs[1])
strs = string.split(strs[2],"#")
a = tonumber(strs[1])
b = tonumber(strs[2])
c = tonumber(strs[3])
d = tonumber(strs[4])
end
---绑定事件(用于子类重写)
function LingLongBaoJingPanel:BindEvent()
--帮助按钮
Util.AddClick(self.helpBtn,function()
--Log("==YSP==点击帮助按钮")
UIManager.OpenPanel(UIName.HelpPopup,self.actConfig.HelpId,self.helpPosition.x,self.helpPosition.y)
end)
Util.AddClick(self.btnPreview, function()
UIManager.OpenPanel(UIName.RewardPreviewPopup,PRE_REWARD_POOL_TYPE.LINGLONG)
end)
Util.AddClick(self.propBtn, function()
if not self.enough then
PopupTipPanel.ShowTip("道具不足")
return
end
LingLongBaoJingManager.QiMenDunJiaDrawRequest(self.actId,function(idList,drop)
if not idList[1] then
PopupTipPanel.ShowTip("转盘奖励出错了")
return
end
self:DelayMaskWithBool(true)
self.fx_linglongbaojing_kaiqi.gameObject:SetActive(true)
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_kaiqi_002)
-- local drop = {}
-- drop.itemlist = {}
-- local idList = {1,1}
local x = function(isGetBigReward)
LingLongBaoJingManager.SetDataListState(idList)
local tempData = {}
for i = 1,#idList do
table.insert(tempData,data[idList[i]])
end
self:RefreshTreasureTypeState(0,tempData)
UIManager.OpenPanel(UIName.RewardItemPopup,drop,1,function()
if isGetBigReward then
if LingLongBaoJingManager.IsAllGet() then
LingLongBaoJingManager.SetDataListState(nil,1)
self:RefreshTreasureTypeState(1)
end
LingLongBaoJingManager.SetDataListState(nil,2)
self:RefreshTreasureTypeState(2)
self.itemList[1][data[idList[2]].address].selectKuang.gameObject:SetActive(false)
self.itemList[2][data[idList[1]].address].selectKuang.gameObject:SetActive(false)
else
self.itemList[2][data[idList[1]].address].selectKuang.gameObject:SetActive(false)
end
self:SetPropShow()
self.fx_linglongbaojing_kaiqi.gameObject:SetActive(false)
self.itemList[2][1].effect.gameObject:SetActive(false)
self.fx_linglongbaojing_longchuxian.gameObject:SetActive(false)
for i = 1,#self.itemList[1] do
self.itemList[1][i].effect.gameObject:SetActive(false)
end
self:DelayMaskWithBool(false)
end)
end
curTurnPos = 1
self:SetTableTurnEffect(TableTurnType.Expedite,2,data[idList[1]].address,function()
if idList[2] and idList[2] > 0 then
--PopupTipPanel.ShowTip("播放一些开门的特效")
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_longmengezi_004)
self.Btncoroutine = coroutine.start(function()
self.itemList[2][1].effect.gameObject:SetActive(true)
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_longsaoguang_006)
coroutine.wait(1)
self.fx_linglongbaojing_longchuxian.gameObject:SetActive(true)
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_longpanxuan_005)
coroutine.wait(1)
self:RefreshTreasureMaskByType(1,false)
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_waiquandianliang_008)
for i = 1,#self.itemList[1] do
self.itemList[1][i].effect.gameObject:SetActive(true)
end
coroutine.wait(1)
curTurnPos = 1
self:SetTableTurnEffect(TableTurnType.Expedite,1,data[idList[2]].address,function()
self:RefreshTreasureMaskByType(1,true)
x(true)
end)
end)
else
x(false)
end
end)
end)
end)
end
---添加事件监听(用于子类重写)
function LingLongBaoJingPanel:AddListener()
end
---移除事件监听(用于子类重写)
function LingLongBaoJingPanel:RemoveListener()
end
--界面打开时调用(用于子类重写)
function LingLongBaoJingPanel:OnOpen(_activityConfig,_index,parent)
self.actConfig = _activityConfig
self.pageIndex = _index
self.parent = parent
end
function LingLongBaoJingPanel:OnSortingOrderChange(_sortingOrder)
self.sortingOrder = _sortingOrder
self:SetLayer()
end
-- 打开,重新打开时回调
function LingLongBaoJingPanel:OnShow(_sortingOrder)
--self.parent.tabbox.gameObject:SetActive(false)
self.gameObject:SetActive(true)
self.sortingOrder = _sortingOrder
self.actId = self.actConfig.ActId
self.actType = self.actConfig.ActiveType > 0 and self.actConfig.ActiveType or self.actConfig.FunType
if self.actConfig.IfBack == 1 then
if self.actConfig.ActiveType > 0 then
local id = ActivityGiftManager.IsActivityTypeOpen(self.actConfig.ActiveType)
if id and id > 0 then
self.actId = id
local config = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.ActivityGroups,"PageType",self.actConfig.PageType,"ActiveType",self.actConfig.ActiveType,"ActId",id)
if config then
self.actConfig = config
end
end
end
end
self.turnEffect = Timer.New()
self:RefreshTreasureType()
self:DelayMaskWithTime(0.5)
self:SetPropShow()
--self:CreatBox()
self:SetTime()
self:SetLayer()
self.fx_linglongbaojing_chuxian.gameObject:SetActive(true)
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_gaoguang_huaban_001)
Timer.New(function()
self.fx_linglongbaojing_long.gameObject:SetActive(true)
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_lianhuaxiazhui_003)
end,0.5):Start()
end
function LingLongBaoJingPanel:SetLayer()
self.firstLayer.overrideSorting = true
self.firstLayer.sortingOrder = self.sortingOrder
self.secondLayer.overrideSorting = true
self.secondLayer.sortingOrder = self.sortingOrder + 1
self.thirtyLayer.overrideSorting = true
self.thirtyLayer.sortingOrder = self.sortingOrder + 2
self.forthLayer.overrideSorting = true
self.forthLayer.sortingOrder = self.sortingOrder + 3
Util.SetParticleSortLayer(self.fx_linglongbaojing_changzhu,self.sortingOrder)
Util.SetParticleSortLayer(self.fx_linglongbaojing_long,self.sortingOrder + 3)
Util.SetParticleSortLayer(self.fx_linglongbaojing_chuxian,self.sortingOrder + 3)
Util.SetParticleSortLayer(self.fx_linglongbaojing_longchuxian,self.sortingOrder + 3)
Util.SetParticleSortLayer(self.fx_linglongbaojing_kaiqi,self.sortingOrder + 2)
for i = 1,#self.itemList do
for j = 1,#self.itemList[i] do
if self.itemList[i][j].effect then
Util.SetParticleSortLayer(self.itemList[i][j].effect,self.sortingOrder + i)
end
end
end
end
function LingLongBaoJingPanel:SetTime()
if self.timer then
self.timer:Stop()
self.timer = nil
end
local time = ActivityGiftManager.GetTaskEndTime(ActivityTypeDef.lingLongBaoJing)
local remainTime = time - GetTimeStamp()
self.time.text = "活动倒计时:"..TimeToDHMS(remainTime)
self.timer = Timer.New(function()
remainTime = remainTime - 1
self.time.text = "活动倒计时:"..TimeToDHMS(remainTime)
if remainTime <= 0 then
self:ClosePanel()
end
end,1,-1,false)
self.timer:Start()
end
--赋值
function LingLongBaoJingPanel:RefreshTreasureType()
data = LingLongBaoJingManager.GetRewardList()
for k,v in pairs(data) do
local config = ConfigManager.GetConfigData(ConfigName.ItemConfig,v.reward[1])
if v.typeIndex == 2 and v.address == 1 then
else
self.itemList[v.typeIndex][v.address].itemView.sprite = Util.LoadSprite(GetSpriteNameByItemId(v.reward[1]))
end
if config.ItemType ~= ItemType.Hero and config.ItemType ~= ItemType.linglongbaojingkaimen then
self.itemList[v.typeIndex][v.address].numDi.gameObject:SetActive(true)
self.itemList[v.typeIndex][v.address].num.text = v.reward[2]
else
self.itemList[v.typeIndex][v.address].numDi.gameObject:SetActive(false)
end
Util.AddOnceClick(self.itemList[v.typeIndex][v.address].itemPos.gameObject, function()
if config.ItemType == ItemType.Hero then
UIManager.OpenPanel(UIName.RoleGetInfoPopup, false, v.reward[1], 5)
elseif config.ItemType == ItemType.linglongbaojingkaimen then
else
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,v.reward[1])
end
end)
self:RefreshTreasureTypeState(0,data)
end
self:RefreshTreasureMaskByType(1,true)
self:RefreshTreasureMaskByType(2,false)
end
--刷新状态
function LingLongBaoJingPanel:RefreshTreasureTypeState(typeIndex,_data)
--只重置_data
local tempData = {}
if typeIndex == 0 then
tempData = _data
--重置typeIndex对应的圈
else
data = LingLongBaoJingManager.GetRewardList()
tempData = data
end
for k,v in pairs(tempData) do
if (v.typeIndex == typeIndex) or typeIndex == 0 then
if v.state == 0 then
self.itemList[v.typeIndex][v.address].get.gameObject:SetActive(false)
else
self.itemList[v.typeIndex][v.address].get.gameObject:SetActive(true)
end
end
end
end
--外圈遮罩设置
function LingLongBaoJingPanel:RefreshTreasureMaskByType(typeIndex,value)
for k,v in pairs(data) do
if v.typeIndex == typeIndex then
self.itemList[v.typeIndex][v.address].mask.gameObject:SetActive(value)
end
end
end
---界面关闭时调用(用于子类重写)
function LingLongBaoJingPanel:OnClose()
--self.parent.tabbox.gameObject:SetActive(true)
self.fx_linglongbaojing_long.gameObject:SetActive(false)
self.fx_linglongbaojing_chuxian.gameObject:SetActive(false)
self.gameObject:SetActive(false)
if self.thread then
coroutine.stop(self.thread)
self.thread=nil
end
if self.Btncoroutine then
coroutine.stop(self.Btncoroutine)
self.Btncoroutine=nil
end
if self.turnEffect then
self.turnEffect:Stop()
self.turnEffect = nil
end
if self.timer then
self.timer:Stop()
self.timer = nil
end
end
---界面销毁时调用(用于子类重写)
function LingLongBaoJingPanel:OnDestroy()
self.itemList = {}
self.spLoader:Destroy()
end
---设置转盘滚动 1旋转类型 2探宝类型 3服务器给的探宝后位置
function LingLongBaoJingPanel:SetTableTurnEffect(turnType,treasureType,pos,func)
if turnType==TableTurnType.Normal then --默认旋转
self:TurnEffectReset(0.5,treasureType)
self.turnEffect:Start()
elseif turnType==TableTurnType.Expedite then --抽奖旋转 至指定位置
self.thread = coroutine.start(function()
coroutine.wait(1)--2
self:TurnEffectReset(0.05,treasureType)
coroutine.wait(2)--2
self:TurnEffectReset(0.2,treasureType)
coroutine.wait(0.8)--0.8
self:TurnEffectReset(0.4,treasureType,true,pos,function()--当效果播放完毕后 从管理器取得数据
local timer=Timer.New(function()
if func then
func()
end
end,0.5,1,true)
timer:Start()
end)
end)
end
end
---转盘滚动特效重设 1移动速度值越小越快 2是否停止 3停止位置
function LingLongBaoJingPanel:TurnEffectReset(turnSpeed,treasureType,isStop,pos,func)
self.turnEffect:Reset(function()
if curTurnPos > #self.itemList[treasureType] then
curTurnPos = 1
end
if curTurnPos == 1 then
self.itemList[treasureType][#self.itemList[treasureType]].selectKuang.gameObject:SetActive(false)
else
self.itemList[treasureType][curTurnPos - 1].selectKuang.gameObject:SetActive(false)
end
self.itemList[treasureType][curTurnPos].selectKuang.gameObject:SetActive(true)
if treasureType == 2 then
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_neiquanlunge_007)
else
SoundManager.PlaySound(SoundConfig.Audio_linglongbaojing_waiquanlunge_009)
end
if isStop then
if pos == curTurnPos then--如果停到对应位置
self.turnEffect:Stop()--暂停跑马灯
if func then--回调
func()
end
end
end
curTurnPos = curTurnPos + 1
end,turnSpeed,-1,true)
self.turnEffect:Start()
end
---设置道具拥有显示 1道具id 2探宝类型
function LingLongBaoJingPanel:SetPropShow()
self.propImage.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(self.costId))
local count = BagManager.GetItemCountById(self.costId)
local singleCount = (a * 1^3 + b * 1^2 + c * 1 ^1 + d * 1^0)
local color
if singleCount <= count then
self.enough = true
color = "283B41"
else
self.enough = false
color = "FF0000"
end
self.propText.text = string.format("<color=#%s>×%s</color>",color,singleCount)
end
-- function LingLongBaoJingPanel:CreatBox()
-- self:RefreshLuckyValue()
-- end
-- ---刷新幸运值
-- function LingLongBaoJingPanel:RefreshLuckyValue()
-- configs = ConfigManager.GetAllConfigsDataByKey(ConfigName.ActivityRewardConfig,"ActivityId",self.actId)
-- local list = {}
-- for k,v in ipairs(configs) do
-- table.insert(list,v.Values[1][1])
-- end
-- table.sort(list,function(a,b) return a < b end)
-- local pos = self:CalutePos1(self.rewardBox,list)
-- for i = 1,5 do
-- local v3 = self.rewardBoxList[i].go:GetComponent("RectTransform").anchoredPosition3D
-- v3.x = pos[i]
-- self.rewardBoxList[i].go:GetComponent("RectTransform").anchoredPosition3D = v3
-- self.rewardBoxList[i].value.text = configs[i].Values[1][1]
-- self.rewardBoxList[i].redPoint.gameObject:SetActive(false)
-- if i < 5 then
-- self.rewardBoxList[i].Num.text = configs[i].Reward[1][2]
-- self.rewardBoxList[i].icon.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(configs[i].Reward[1][1]))
-- end
-- end
-- self.luckySlider.minValue = 0
-- self.luckySlider.maxValue = configs[#configs].Values[1][1]
-- end
-- function LingLongBaoJingPanel:CalutePos1(parent,list)
-- local pos = {}
-- local wi = parent.transform.rect.width
-- for i = 1,#list do
-- local pos1 = wi *(list[i]/list[#list])
-- table.insert(pos,pos1)
-- end
-- return pos
-- end
---延时遮罩 1按时间
function LingLongBaoJingPanel:DelayMaskWithTime(delayTime)
self.mask.gameObject:SetActive(true)
self.parent.mask.gameObject:SetActive(true)
local closeMask=Timer.New(function()
self.mask.gameObject:SetActive(false)
self.parent.mask.gameObject:SetActive(false)
end,delayTime,1,true)
closeMask:Start()
end
---延时遮罩 1按bool
function LingLongBaoJingPanel:DelayMaskWithBool(b)
self.mask.gameObject:SetActive(b)
self.parent.mask.gameObject:SetActive(b)
end
return LingLongBaoJingPanel