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

412 lines
16 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.upView = SubUIManager.Open(SubUIConfig.UpView, self.luckyTurnPanel.transform, { showType = UpViewOpenType.ShowLeft })
self.mask = Util.GetGameObject(self.luckyTurnPanel,"Mask")
self.title = Util.GetGameObject(self.luckyTurnPanel,"BG/title"):GetComponent("Image")
---跑马灯位置(物品位置)
self.itemList = {}
self.itemViewList = {}
for i = 1,2 do
if not self.itemList[i] then
self.itemList[i] = {}
end
self.itemList[i].go = Util.GetGameObject(self.luckyTurnPanel, "TurnTable/ItemList"..i)
self.itemList[i].pre = Util.GetGameObject(self.luckyTurnPanel, "TurnTable/pre"..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 = newObjToParent(self.itemList[i].pre,self.itemList[i][j].pos)
self.itemList[i][j].mask = Util.GetGameObject(self.itemList[i][j].item, "bg/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 = SubUIManager.Open(SubUIConfig.ItemView, self.itemList[i][j].itemPos.transform)
self.itemList[i][j].itemView.gameObject:SetActive(false)
end
end
--拥有道具数量
self.propBtn = Util.GetGameObject(self.luckyTurnPanel,"button/Prop")
self.propImage = Util.GetGameObject(self.luckyTurnPanel, "button/Prop/PropImage"):GetComponent("Image")--道具
self.propText =Util.GetGameObject(self.luckyTurnPanel, "button/Prop/PropText"):GetComponent("Text")
-- 奖励预览
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,HELP_TYPE.LuckyTurn,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)
-- 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()
LuckyTurnTableManager.isCanGetWorldMessage=true
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][idList[2]].selectKuang.gameObject:SetActive(false)
self.itemList[2][1].selectKuang.gameObject:SetActive(false)
self.itemList[2][2].selectKuang.gameObject:SetActive(false)
else
self.itemList[2][idList[1]].selectKuang.gameObject:SetActive(false)
end
self:SetPropShow()
self:RrFreshInfo()
end)
end
curTurnPos = 1
self:SetTableTurnEffect(TableTurnType.Expedite,2,idList[1],function()
if idList[2] and idList[2] > 0 then
PopupTipPanel.ShowTip("播放一些开门的特效")
self:RefreshTreasureMaskByType(1,false)
curTurnPos = 1
self:SetTableTurnEffect(TableTurnType.Expedite,1,idList[2],function()
self:RefreshTreasureMaskByType(1,true)
x(true)
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
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(1.5)
self:SetPropShow()
self:CreatBox()
end
--赋值
function LingLongBaoJingPanel:RefreshTreasureType()
data = LingLongBaoJingManager.GetRewardList()
for k,v in pairs(data) do
self.itemList[v.typeIndex][v.address].itemView:OnOpen(false, v.reward,1,false,false,false,self.sortingOrder)
self.itemList[v.typeIndex][v.address].itemView.gameObject:SetActive(true)
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.gameObject:SetActive(false)
if self.thread then
coroutine.stop(self.thread)
self.thread=nil
end
if self.turnEffect then
self.turnEffect:Stop()
self.turnEffect = nil
end
end
---界面销毁时调用(用于子类重写)
function LingLongBaoJingPanel:OnDestroy()
for k,v in ipairs(self.itemList) do
for n,m in ipairs(v) do
SubUIManager.Close(m.itemView)
end
end
self.itemList = {}
self.spLoader:Destroy()
SubUIManager.Close(self.upView)
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:DelayMaskWithBool(true)
self.thread = coroutine.start(function()
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()
self:DelayMaskWithBool(false)
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 treasureType == 2 then
if curTurnPos == 1 or curTurnPos == 2 then
self.itemList[treasureType][#self.itemList[treasureType]].selectKuang.gameObject:SetActive(false)
self.itemList[treasureType][1].selectKuang.gameObject:SetActive(true)
self.itemList[treasureType][2].selectKuang.gameObject:SetActive(true)
else
self.itemList[treasureType][curTurnPos - 1].selectKuang.gameObject:SetActive(false)
if curTurnPos == 3 then
self.itemList[treasureType][curTurnPos - 2].selectKuang.gameObject:SetActive(false)
end
self.itemList[treasureType][curTurnPos].selectKuang.gameObject:SetActive(true)
end
else
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)
end
if isStop then
if (pos == curTurnPos) or (treasureType == 2 and ((pos == 1 and curTurnPos == 2) or (pos == 2 and curTurnPos == 1))) then--如果停到对应位置
self.turnEffect:Stop()--暂停跑马灯
if func then--回调
func()
end
end
end
if treasureType == 2 then
curTurnPos = curTurnPos == 1 and curTurnPos + 2 or curTurnPos + 1
else
curTurnPos = curTurnPos + 1
end
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 = "FFA000"
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]
self:RrFreshInfo()
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
---刷新信息
function LingLongBaoJingPanel:RrFreshInfo()
-- local actInfo = ActivityGiftManager.GetActivityInfoByType(ActivityTypeDef.lingLongBaoJing)
-- self.luckyValueNum.text = actInfo.value .."/" ..configs[#configs].Values[1][1]
--self.luckySlider.value = actInfo.value
end
---延时遮罩 1按时间
function LingLongBaoJingPanel:DelayMaskWithTime(delayTime)
self.mask.gameObject:SetActive(true)
local closeMask=Timer.New(function()
self.mask.gameObject:SetActive(false)
end,delayTime,1,true)
closeMask:Start()
end
---延时遮罩 1按bool
function LingLongBaoJingPanel:DelayMaskWithBool(b)
self.mask.gameObject:SetActive(b)
end
return LingLongBaoJingPanel