miduo_client/Assets/ManagedResources/~Lua/Modules/Incarnation/IncarnationLottery.lua

376 lines
15 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 IncarnationLottery = {}
local sortingOrder = 0
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local artConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
local lotterySetting=ConfigManager.GetConfig(ConfigName.LotterySetting)
local privilegeConfig=ConfigManager.GetConfig(ConfigName.PrivilegeTypeConfig)
local lotterySpecialConfig = ConfigManager.GetConfig(ConfigName.LotterySpecialConfig)
local wishSoulData
function IncarnationLottery:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = IncarnationLottery })
return b
end
--初始化组件(用于子类重写)
function IncarnationLottery:InitComponent()
self.spLoader = SpriteLoader.New()
self.btnHelp= Util.GetGameObject(self.gameObject,"help")
self.helpPosition=self.btnHelp:GetComponent("RectTransform").localPosition
self.limit = Util.GetGameObject(self.gameObject,"limitdi/limit"):GetComponent("Text")
--rightUp
self.rightUp = Util.GetGameObject(self.gameObject,"rightUp")
self.btnReward = Util.GetGameObject(self.rightUp,"reward")
self.btnStore = Util.GetGameObject(self.rightUp,"store")
self.btnGift = Util.GetGameObject(self.rightUp,"gift")
self.btnGiftEffect = Util.GetGameObject(self.btnGift,"Fx_Circle 1")
self.btns = {}
for i = 1 , 2 do
self.btns[i] = {}
self.btns[i].btn = Util.GetGameObject(self.rightUp,"btn"..i)
self.btns[i].red = Util.GetGameObject(self.btns[i].btn.gameObject,"redPoint")
self.btns[i].info = Util.GetGameObject(self.btns[i].btn.gameObject,"layout/Text"):GetComponent("Text")
self.btns[i].icon = Util.GetGameObject(self.btns[i].btn.gameObject,"layout/icon"):GetComponent("Image")
self.btns[i].num = Util.GetGameObject(self.btns[i].btn.gameObject,"layout/num"):GetComponent("Text")
self.btns[i].reward = Util.GetGameObject(self.btns[i].btn.gameObject,"reward"):GetComponent("Text")
end
--center
self.center = Util.GetGameObject(self.gameObject,"center/TurnTable/itemlist")
self.icons = {}
for i = 1 , 10 do
self.icons[i] = {}
self.icons[i].go = Util.GetGameObject(self.center,"item"..i)
self.icons[i].pre = Util.GetGameObject(self.icons[i].go,"pre")
self.icons[i].kuang = Util.GetGameObject(self.icons[i].pre,"itemPos")
self.icons[i].icon = Util.GetGameObject(self.icons[i].pre,"icon"):GetComponent("Image")
self.icons[i].num = Util.GetGameObject(self.icons[i].pre,"numDi/Text"):GetComponent("Text")
end
self.updateTimes = Util.GetGameObject(self.gameObject,"updateTimes")
--self.updateTimesTip = Util.GetGameObject(self.updateTimes,"Text"):GetComponent("Text")
self.updateTimesTip1 = Util.GetGameObject(self.updateTimes,"Text1"):GetComponent("Text")
self.mask = Util.GetGameObject(self.gameObject,"mask")
self._last = 0
self._cyclesNum = 10
self.reward = {}
end
--绑定事件(用于子类重写)
function IncarnationLottery:BindEvent()
Util.AddOnceClick(self.btnHelp, function()
UIManager.OpenPanel(UIName.HelpPopup,self.actConfig.HelpId,self.helpPosition.x,self.helpPosition.y)
end)
Util.AddOnceClick(self.btnReward, function()
UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.RecrutDetail,self.actConfig.HelpId,self.actType,PRE_REWARD_POOL_TYPE.Incarnation,PRE_REWARD_POOL_TYPE.Incarnation)
end)
Util.AddOnceClick(self.btnStore, function()
JumpManager.GoJump(40049)
end)
Util.AddOnceClick(self.btnGift,function ()
JumpManager.GoJump(40050,nil,self.actId)
end)
end
--添加事件监听(用于子类重写)
function IncarnationLottery:AddListener()
end
--移除事件监听(用于子类重写)
function IncarnationLottery:RemoveListener()
end
--界面打开时调用(用于子类重写)
function IncarnationLottery:OnOpen(_activityConfig,_index,parent)
self.actConfig = _activityConfig
self.pageIndex = _index
self.parent = parent
end
function IncarnationLottery:OnSortingOrderChange(_sortingOrder)
sortingOrder = _sortingOrder or 0
Util.SetParticleSortLayer(self.btnGiftEffect, sortingOrder+1)
end
-- 打开,重新打开时回调
function IncarnationLottery:OnShow(_sortingOrder)
self.gameObject:SetActive(true)
sortingOrder = _sortingOrder
Util.SetParticleSortLayer(self.btnGiftEffect, sortingOrder+1)
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
local array = ConfigManager.GetAllConfigsDataByKey(ConfigName.LotterySetting,"ActivityId",self.actId)
self.singleRecruit = array[1]
self.tenRecruit = array[2]
self.freeTimesId=self.singleRecruit.FreeTimes
self.maxtimesId=self.singleRecruit.MaxTimes
self:contentShow()
self:refreshMagicNum()
self:refreshBtnShow()--刷新按钮显示
self.center.transform.localRotation = Quaternion.Euler(Vector3.zero)
self._last = self.center.transform.localRotation.z
self:DelayMaskWithBool(false)
self:TurnTable(1)
end
--五个魂印头像
function IncarnationLottery:contentShow()
self.reward = {}
self.rewardWeight = {}
local data = RecruitManager.GetRewardPreviewData(PRE_REWARD_POOL_TYPE.Incarnation)
for i = 1 , #self.icons do
local str1 = data[i].Reward[1].."#"..data[i].Reward[2]
self.icons[i].kuang:GetComponent("Image").sprite = self.spLoader:LoadSprite(GetQuantityImageByquality(itemConfig[data[i].Reward[1]].Quantity))
self.icons[i].icon.sprite = self.spLoader:LoadSprite(GetSpriteNameByItemId(data[i].Reward[1]))
self.icons[i].num.text = data[i].Reward[2]
self.reward[str1] = i
self.rewardWeight[str1] = data[i].WeightShow
Util.AddOnceClick(self.icons[i].kuang,function()
if itemConfig[data[i].Reward[1]].ItemType == ItemType.SelfBox then
UIManager.OpenPanel(UIName.RewardBoxPanel,nil,data[i].Reward[1])
else
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,data[i].Reward[1])
end
end)
end
end
function IncarnationLottery:refreshMagicNum()
-- self.actData = ActivityGiftManager.GetActivityTypeInfo(self.actType)
self.actData = CommonActPageManager.GetData(self.actType)
CommonActPageManager.ShowIcon(self.btnGift,self.actData.activityId)
--local d = ConfigManager.GetAllConfigsDataByKey(ConfigName.LotterySpecialConfig,"Type",self.singleRecruit.MergePool)
--self.updateTimesTip.text = string.format("<color=#cbb981>召唤<color=#%s>%s</color>次必得红色碎片</color>","ff850c",d[1].Count - self.actData.value)
local endTime = ActivityGiftManager.GetTaskEndTime(self.actType) - PlayerManager.serverTime
self.updateTimesTip1.text = string.format("<color=#cbb981>活动剩余时间:%s</color>",self:TimeToDHMS(endTime))
local timeDown=CalculateSecondsNowTo_N_OClock(0)
self.timer = Timer.New(function()
if endTime < 1 then
self.timer:Stop()
self.timer = nil
self:OnShow(sortingOrder)
return
else
self.updateTimesTip1.text = string.format("<color=#cbb981>活动剩余时间:%s</color>",self:TimeToDHMS(endTime))
end
endTime = endTime - 1
timeDown = timeDown - 1
end, 1, -1, true)
self.timer:Start()
end
function IncarnationLottery:GetSendStr(reId)
local str = ""
if lotterySetting[reId] and lotterySetting[reId].TenTimesMustGetItem and #lotterySetting[reId].TenTimesMustGetItem > 0 then
for k,v in ipairs(lotterySetting[reId].TenTimesMustGetItem) do
if str == "" then
str = str.."赠送"
else
str = str..""
end
str = str..v[2]..""..itemConfig[v[1]].Name
end
end
return str
end
function IncarnationLottery:refreshBtnShow()
local curTimes = PrivilegeManager.GetPrivilegeUsedTimes(self.maxtimesId)
self.limit.text ="今日召唤上限:"..curTimes.."/"..privilegeConfig[self.maxtimesId].Condition[1][2]
local freeTime = 0
if self.freeTimesId and self.freeTimesId > 0 then
freeTime = PrivilegeManager.GetPrivilegeRemainValue(self.freeTimesId)
RecruitManager.freeUseTimeList[self.freeTimesId]=freeTime
end
--按钮赋值
for n, m in ipairs(self.btns) do
--存在免费次数 并且 免费>=1 并且是1按钮
local isFree = freeTime >= 1 and n == 1
m.red.gameObject:SetActive(isFree)
m.icon.gameObject:SetActive(not isFree)
m.num.gameObject:SetActive(not isFree)
local itemId=0
local itemNum=0
local type = 0
if n == 1 then
type = self.singleRecruit.Id
--m.info.text = "1次"
else
type = self.tenRecruit.Id
--m.info.text = "10次"
end
local d = {}
if (isFree) then
m.info.text="免费抽取"
else
local d = RecruitManager.GetExpendData(type)
itemId=d[1]
itemNum=d[2]
m.icon.sprite = self.spLoader:LoadSprite(artConfig[itemConfig[itemId].ResourceID].Name)
m.num.text= tostring(itemNum)
end
m.reward.text = self:GetSendStr(n == 1 and self.singleRecruit.Id or self.tenRecruit.Id)
Util.AddOnceClick(m.btn,function()
if not isFree then
if BagManager.GetItemCountById(itemId) < itemNum then
PopupTipPanel.ShowTip(itemConfig[itemId].Name.."数量不足!")
return
end
end
local recrutId = n == 1 and self.singleRecruit.Id or self.tenRecruit.Id
local recrutNum = n == 1 and 1 or 10
local uiName = n == 1 and UIName.QianKunBoxBuyOnePanel or UIName.QianKunBoxBuyTenPanel
self:Recruit(recrutNum,recrutId,uiName)
end)
end
end
function IncarnationLottery:Recruit(recrutType,recrutId,uiName)
if PrivilegeManager.GetPrivilegeUsedTimes(self.maxtimesId)+recrutType>privilegeConfig[self.maxtimesId].Condition[1][2] then
PopupTipPanel.ShowTip("无法超出每日召唤次数上限!")
return
end
RecruitManager.RecruitRequest(recrutId, function(msg)
PrivilegeManager.RefreshPrivilegeUsedTimes(self.maxtimesId,recrutType)--记录抽卡次数
--先转转盘
local index = 1
local rotate = self.center.transform.localRotation
local bestIndex = 0
if recrutId == self.tenRecruit.Id then
local weight = nil
for i = 1,#msg.drop.itemlist do
local str = msg.drop.itemlist[i].itemId.."#"..msg.drop.itemlist[i].itemNum
if self.rewardWeight[str] then
if not weight then
weight = self.rewardWeight[str]
bestIndex = self.reward[str]
else
if weight > self.rewardWeight[str] then
weight = self.rewardWeight[str]
bestIndex = self.reward[str]
end
end
end
end
else
local drop = {}
drop = msg.drop.itemlist[1]
local str2 = drop.itemId.."#"..drop.itemNum
bestIndex = self.reward[drop.itemId.."#"..drop.itemNum]
end
self:TurnTable(2,bestIndex,function()
UIManager.OpenPanel(uiName, msg.drop,recrutId,{RecruitType.QianKunBoxTen,RecruitType.QianKunBoxTen})
end)
--UIManager.OpenPanel(uiName, msg.drop,recrutId,{RecruitType.QianKunBoxTen,RecruitType.QianKunBoxTen})
end,self.freeTimesId)
end
function IncarnationLottery:TurnTable(turnType,pos,fun)
if turnType == 1 then --默认旋转
self._cyclesNum = 43200 --一直循环
self:TurnEffectReset(60)
elseif turnType == 2 then --抽奖旋转 至指定位置
self:DelayMaskWithBool(true)
self._cyclesNum = 3
self:TurnEffectReset(2,true,pos,function()--当效果播放完毕后 从管理器取得数据
self:DelayMaskWithBool(false)
if fun then
fun()
end
end)
end
end
function IncarnationLottery:DelayMaskWithBool(isShow)
self.mask.gameObject:SetActive(isShow)
end
---转盘滚动特效重设 1移动速度值越小越快 2是否停止 3停止位置
function IncarnationLottery:TurnEffectReset(turnSpeed,isStop,pos,func)
local s = function()
if isStop then
SoundManager.PlaySound(SoundConfig.Audio_fangcunzhuanpan_0)
self._last = self.center.transform.localRotation.z
local a = self._cyclesNum * -360 - (10 - pos + 1) * 36;
self.tween:Kill()
self.tween = self.center.transform:DORotate(Vector3.New(0, 0, a - self._last), turnSpeed):SetEase(Ease.OutQuad):OnComplete(function()
Timer.New(function()
if func then--回调
func()
end
self.tween:Kill()
end,0.75):Start()
end)
Timer.New(function()
self._last = self.center.transform.localRotation.z
self.center.transform:DOPunchRotation(Vector3.New(0, 0, self._last - 10),2,2,0)--:SetEase(Ease.OutQuad):SetLoops(2,0)
end,turnSpeed - 0.07):Start()
else
self.tween = self.center.transform:DORotate(Vector3.New(0, 0, self._last - 360), turnSpeed,1):SetLoops(-1,0):SetEase(Ease.Linear):OnComplete(function()
end)
end
end
s()
end
--- 将一段时间转换为天时分秒
function IncarnationLottery:TimeToDHMS(second)
local day = math.floor(second / (24 * 3600))
local minute = math.floor(second / 60) % 60
local sec = math.floor(second % 60)
local hour = math.floor(math.floor(second - day * 24 * 3600 - sec - minute * 60) / 3600)
if day <= 0 and hour <= 0 then
return string.format("%s分%s秒",minute, sec)
else
return string.format("%s天%s小时",day, hour)
end
end
--界面关闭时调用(用于子类重写)
function IncarnationLottery:OnClose()
self.gameObject:SetActive(false)
if self.timer then
self.timer:Stop()
self.timer = nil
end
if self.shopView then
SubUIManager.Close(self.shopView)
end
self.shopView = nil
end
--界面销毁时调用(用于子类重写)
function IncarnationLottery:OnDestroy()
self.btns = {}
if self.shopView then
SubUIManager.Close(self.shopView)
end
self.shopView = nil
end
return IncarnationLottery