miduo_client/Assets/ManagedResources/~Lua/Modules/Likability/HeroLikeAbilityPanel.lua

549 lines
21 KiB
Lua

require("Base/BasePanel")
HeroLikeAbilityPanel = Inherit(BasePanel)
local beginV3
local endV3
local distance
local curHeroData,curHeroPosition,herosDatas,leftHeroData,rightHeroData
local curindex,lastindex,nextindex = 0,0,0
local t = 5
local curselectId = 0
local oldLv = -1
function HeroLikeAbilityPanel:InitComponent()
self.spLoader = SpriteLoader.New()
self.btnBack = Util.GetGameObject(self.transform, "btnBack")
self.curObj= Util.GetGameObject(self.transform, "curObj")
self.leftObj= Util.GetGameObject(self.transform, "leftObj")
self.rightObj= Util.GetGameObject(self.transform, "rightObj")
self.curLiveObj = nil
self.leftLiveObj = nil
self.rightLiveObj = nil
self.leftBtn = Util.GetGameObject(self.transform, "leftBtn/GameObject")
self.rightBtn = Util.GetGameObject(self.transform, "rightBtn/GameObject")
self.dragView = SubUIManager.Open(SubUIConfig.DragView, self.gameObject.transform)
self.dragView.transform:SetSiblingIndex(1)
self.trigger=Util.GetEventTriggerListener(self.dragView.gameObject)
self.OnBeginDrag = function(Pointgo, data)
beginV3 = self.curLiveObj.transform.anchoredPosition
end
self.OnDrag = function(Pointgo, data)
distance = Vector2.Distance(beginV3,self.curLiveObj.transform.anchoredPosition)
end
self.OnEndDrag = function(Pointgo, data)
endV3 = self.curLiveObj.transform.anchoredPosition
if distance>250 and endV3.x<0 then
self:RightBtnOnClick()
elseif distance>250 and endV3.x>0 then
self:LeftBtnOnClick()
else
local pos = curHeroData.Position
self.curLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector2.New(pos[1], pos[2]), 0.5, false):SetEase(Ease.Linear)
end
distance=0
end
self.trigger.onBeginDrag = self.trigger.onBeginDrag + self.OnBeginDrag
self.trigger.onDrag = self.trigger.onDrag + self.OnDrag
self.trigger.onEndDrag = self.trigger.onEndDrag + self.OnEndDrag
self.pos = Util.GetGameObject(self.transform, "Pos/PosImage"):GetComponent("Image")
self.name = Util.GetGameObject(self.transform, "Pos/PosText"):GetComponent("Text")
self.icon = Util.GetGameObject(self.transform, "likeability/icon"):GetComponent("Image")
self.effect = Util.GetGameObject(self.icon.transform, "fx_haogandu_shengjitexiao")
self.effect.gameObject:SetActive(false)
self.lvText = Util.GetGameObject(self.icon.transform, "lv"):GetComponent("Text")
self.progress = Util.GetGameObject(self.transform, "likeability/di/progress"):GetComponent("Image")
self.progressText = Util.GetGameObject(self.transform, "likeability/progressText"):GetComponent("Text")
self.lookBtn = Util.GetGameObject(self.transform, "likeability/lookBtn")
self.grid = Util.GetGameObject(self.transform, "gift/scroll/grid")
self.itemPre = Util.GetGameObject(self.transform, "gift/itemPre")
self.select = Util.GetGameObject(self.transform, "gift/select")
self.remainTimes = Util.GetGameObject(self.transform, "remainTimes"):GetComponent("Text")
self.remainTimes.gameObject:SetActive(false)
self.giveBtn = Util.GetGameObject(self.transform, "giveBtn")
self.trigger = Util.GetEventTriggerListener(self.giveBtn)
self.popup = Util.GetGameObject(self.giveBtn, "Image")
self.popupText = Util.GetGameObject(self.popup, "Text"):GetComponent("Text")
self.OnPointerDo = function(go, data)
self:OnPointerDown1(go, data)
end
self.OnPointerUp = function(go, data)
self:OnPointerUp1(go,data)
end
self.trigger.onPointerDown = self.trigger.onPointerDown + self.OnPointerDo
self.trigger.onPointerUp = self.trigger.onPointerUp + self.OnPointerUp
FixedUpdateBeat:Add(self.OnUpdate, self)--长按方法注册
self.itemList = {}
self.itemListNum = {}
self.proGrid2Pos = self.grid:GetComponent("RectTransform").anchoredPosition
end
function HeroLikeAbilityPanel:BindEvent()
Util.AddClick(self.dragView.gameObject, function()
local SkeletonGraphic = self.curLiveObj:GetComponent("SkeletonGraphic")
SkeletonGraphic.AnimationState:SetAnimation(0, "touch", false)
end)
Util.AddClick(self.btnBack, function()
oldLv = -1
self:ClosePanel()
end)
--左切换按钮
Util.AddClick(self.leftBtn, function()
oldLv = -1
self.effect.gameObject:SetActive(false)
self:LeftBtnOnClick()
end)
--右切换按钮
Util.AddClick(self.rightBtn, function()
oldLv = -1
self.effect.gameObject:SetActive(false)
self:RightBtnOnClick()
end)
--查看
Util.AddClick(self.lookBtn, function()
UIManager.OpenPanel(UIName.RoleLikeabilityPopup,curHeroData)
end)
end
--添加事件监听(用于子类重写)
function HeroLikeAbilityPanel:AddListener()
end
--移除事件监听(用于子类重写)
function HeroLikeAbilityPanel:RemoveListener()
end
function HeroLikeAbilityPanel:OnSortingOrderChange()
Util.SetParticleSortLayer(self.effect,self.sortingOrder + 1)
end
function HeroLikeAbilityPanel:OnOpen(...)
local args = {...}
curHeroData = args[1]
herosDatas = LikabilityManager.heroDatas
for i = 1,#herosDatas do
if herosDatas[i].Id == curHeroData.Id then
curindex = i
break
end
end
end
--界面打开时调用(用于子类重写)
function HeroLikeAbilityPanel:OnShow()
if self.curLiveObj then
poolManager:UnLoadLive(self.curLiveObj.name, self.curLiveObj)
self.curLiveObj = nil
end
if self.leftLiveObj then
poolManager:UnLoadLive(self.leftLiveObj.name, self.leftLiveObj)
self.leftLiveObj = nil
end
if self.rightLiveObj then
poolManager:UnLoadLive(self.rightLiveObj.name, self.rightLiveObj)
self.rightLiveObj = nil
end
self:SetHeroLiveData()
self:UpdateHeroInfoData(0)
Util.SetParticleSortLayer(self.effect,self.sortingOrder + 1)
self.effect.gameObject:SetActive(false)
if #herosDatas < 2 then
self.leftBtn.transform.parent.gameObject:SetActive(false)
self.rightBtn.transform.parent.gameObject:SetActive(false)
else
self.leftBtn.transform.parent.gameObject:SetActive(true)
self.rightBtn.transform.parent.gameObject:SetActive(true)
end
end
function HeroLikeAbilityPanel:UpdateHeroInfoData(isChange)
self.value,self.lv,self.totalNum = LikabilityManager.GetTotalHeroLikeLv(curHeroData.Id)
if oldLv ~= -1 and oldLv ~= self.lv then
self.effect.gameObject:SetActive(false)
self.effect.gameObject:SetActive(true)
end
oldLv = self.lv
self.lvText.text = self.lv
if LikabilityManager.CheckIsMaxLv(curHeroData.Id) then
self.progress.fillAmount = 1
self.progressText.text = "好感度最佳"
else
self.progress.fillAmount = self.value/self.totalNum
self.progressText.text = string.format("%s/%s",self.value,self.totalNum)
end
self.remainTimes.text = 0
self.pos.sprite = self.spLoader:LoadSprite(GetProStrImageByProNum(curHeroData.PropertyName))
self.name.text = curHeroData.ReadingName
self:UpdateItemList(isChange)
end
function HeroLikeAbilityPanel:UpdateItemList(isChange)
if isChange == 0 then
self.itemListNum = {}
self.items = LikabilityManager.GetAllItemsData(curHeroData.PropertyName)
for i = 1,math.max(#self.items,#self.itemList) do
if not self.items[i] then
self.itemList[i].data = nil
self.itemList[i].pre.gameObject:SetActive(false)
else
if not self.itemListNum[self.items[i].id] then
self.itemListNum[self.items[i].id] = self.items[i].num
end
if not self.itemList[i] then
self.itemList[i] = {}
self.itemList[i].pre = newObjToParent(self.itemPre,self.grid)
self.itemList[i].pre.name = "itemPre"..i
self.itemList[i].go = SubUIManager.Open(SubUIConfig.ItemView,self.itemList[i].pre.transform)
self.itemList[i].go.frameBtn:GetComponent("Button").enabled = false
end
self.itemList[i].data = self.items[i]
self.itemList[i].pre.gameObject:SetActive(true)
self.itemList[i].go:OnOpen(false,{self.items[i].id,self.items[i].num},1,false,false,false,self.sortingOrder)
self:SetGray(self.items[i].id,i)
Util.AddOnceClick(self.itemList[i].pre, function()
if self.itemListNum[self.itemList[i].data.id] > 0 then
curselectId = self.itemList[i].data.id
self:SetSelectKuang(false)
else
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,self.itemList[i].data.id)
end
end)
Util.AddLongPressClick(self.itemList[i].pre, function()
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,self.itemList[i].data.id)
end, 0.5)
end
end
self.grid:GetComponent("RectTransform").anchoredPosition = self.proGrid2Pos
self:SetcurSelectId()
else
self:RefreshTimes()
end
end
function HeroLikeAbilityPanel:RefreshTimes()
for i = 1,#self.itemList do
if self.itemList[i].data.id == curselectId then
self.itemList[i].go:OnOpen(false,{curselectId,self.itemListNum[curselectId]},1,false,false,false,self.sortingOrder)
self:SetGray(self.itemList[i].data.id,i)
break
end
end
end
function HeroLikeAbilityPanel:SetGray(id,index)
if self.itemListNum[id] and self.itemListNum[id] < 1 then
Util.SetGray(self.itemList[index].pre.gameObject,true)
else
Util.SetGray(self.itemList[index].pre.gameObject,false)
end
end
function HeroLikeAbilityPanel:SetcurSelectId()
local oldId = curselectId
curselectId = 0
for k,v in ipairs(self.items) do
if (v.property == curHeroData.PropertyName or v.property == 0) and self.itemListNum[v.id] > 0 then
curselectId = v.id
break
end
end
self:SetSelectKuang(true)
end
function HeroLikeAbilityPanel:SetSelectKuang(isMove)
if curselectId < 1 then
self.select.gameObject:SetActive(false)
self.popup:SetActive(false)
else
if isMove then
self.grid:GetComponent("RectTransform").anchoredPosition = self.proGrid2Pos
end
Util.SetGray(self.select,false)
self.select.gameObject:SetActive(true)
for i = 1,#self.itemList do
if self.itemList[i].data.id == curselectId then
self.select.transform:SetParent(self.itemList[i].pre.transform)
break
end
end
self.select.transform.localPosition = Vector3.New(-7.5,3.5)
self.popup:SetActive(true)
LogError("curheroData.id=="..curHeroData.Id)
self.popupText.text = string.format( "好感度+%s",LikabilityManager.GetCurItemValue(curHeroData.Id,curselectId,1))
end
end
function HeroLikeAbilityPanel:OnPointerDown1(go, data)
if self.isGiving then
PopupTipPanel.ShowTip("正在赠送中")
return
end
self.effect.gameObject:SetActive(false)
self.num = 0
self.numCount = 0
if LikabilityManager.CheckIsMaxLv(curHeroData.Id) then
PopupTipPanel.ShowTip("英雄好感度已达最佳,无需更多赠予~")
return
end
if not curselectId or not self.itemListNum[curselectId] then
PopupTipPanel.ShowTip("礼物数量不足,无法赠予~")
return
end
if self.itemListNum[curselectId] < 1 then
PopupTipPanel.ShowTip("礼物数量不足,无法赠予~")
return
end
self.isPressed = true
self.isShortPress = true
self.isGiving = true
end
function HeroLikeAbilityPanel:OnPointerUp1(go, data)
if self.isPressed then
self.isPressed = false
self:Refresh(true)
end
end
function HeroLikeAbilityPanel:OnUpdate()
if self.isPressed then
if self.numCount < t then
self.isShortPress = true
else
self.isShortPress = false
if self.numCount%t == 0 then
self:Refresh(false)
end
end
self.numCount = self.numCount + 1
end
end
function HeroLikeAbilityPanel:Refresh(isSend)
if isSend then
self.isPressed = false
if self.isShortPress then
self.num = 1
self.itemListNum[curselectId] = self.itemListNum[curselectId] - 1
LikabilityManager.UpdatelSingleHeroData(curHeroData.Id,curselectId,1)
end
self.isShortPress = false
self.numCount = 0
self:RequestDonate(self.num)
else
self.num = self.num + 1
self.itemListNum[curselectId] = self.itemListNum[curselectId] - 1
LikabilityManager.UpdatelSingleHeroData(curHeroData.Id,curselectId,1)
self:UpdateHeroInfoData(1)
if LikabilityManager.CheckIsMaxLv(curHeroData.Id) then
self.isPressed = false
self:Refresh(true)
return
end
if self.itemListNum[curselectId] < 1 then
self.isPressed = false
PopupTipPanel.ShowTip("礼物数量不足,无法赠予~")
self:Refresh(true)
return
end
end
end
function HeroLikeAbilityPanel:RequestDonate(num)
NetManager.HeroUpLikableRequest(curHeroData.Id,curselectId,num,function()
self:UpdateHeroInfoData(1)
if self.itemListNum[curselectId] < 1 then
self:SetcurSelectId()
end
self.isGiving = false
local SkeletonGraphic = self.curLiveObj:GetComponent("SkeletonGraphic")
SkeletonGraphic.AnimationState:SetAnimation(0, "touch", false)
CheckRedPointStatus(RedPointType.LikeabilityRed)
end)
end
function HeroLikeAbilityPanel:SetHeroLiveData()
if curindex <= 1 then
lastindex = #herosDatas
else
lastindex = curindex - 1
end
leftHeroData = herosDatas[lastindex]
if curindex >= #herosDatas then
nextindex = 1
else
nextindex = curindex + 1
end
rightHeroData = herosDatas[nextindex]
--加载当前英雄的立绘
self.leftLiveObj = self:LoadHerolive1(leftHeroData,self.leftObj)
self.rightLiveObj = self:LoadHerolive1(rightHeroData,self.rightObj)
self.curLiveObj = self:LoadHerolive1(curHeroData,self.curObj)
if self.curLiveObj then
self.dragView.gameObject:SetActive(true)
self.dragView:SetDragGO(self.curLiveObj)
else
self.dragView.gameObject:SetActive(false)
end
end
function HeroLikeAbilityPanel:LoadHerolive1(_heroData, _objPoint)
--TODO:动态加载立绘
local icon = GetResourcePath(_heroData.Live)
local testLive = poolManager:LoadLive(GetResourcePath(_heroData.Live), _objPoint.transform,
Vector3.one * _heroData.Scale, Vector3.New(_heroData.Position[1], _heroData.Position[2], 0))
SetHEeroLiveToward(testLive,_heroData.Toward)
local SkeletonGraphic = testLive:GetComponent("SkeletonGraphic")
local idle = function() SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true) end
SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete + idle
poolManager:SetLiveClearCall(_heroData.Live, testLive, function ()
SkeletonGraphic.AnimationState.Complete = SkeletonGraphic.AnimationState.Complete - idle
end)
return testLive
end
--右切换按钮点击
function HeroLikeAbilityPanel:RightBtnOnClick()
curselectId = 0
-- 英雄长按赠送时不再进行切换操作
if self.isGiving then
return
end
if self.isRightOrLeft == false then
return
end
self.isRightOrLeft = false
if self.leftLiveObj then
poolManager:UnLoadLive(self.leftLiveObj.name, self.leftLiveObj)
self.leftLiveObj = nil
end
self.curLiveObj.transform:SetParent(self.leftObj.transform)
self.curLiveObj:GetComponent("SkeletonGraphic"):DOFade(0, 0.2)
self.curLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector2.New(curHeroData.Position[1],curHeroData.Position[2]), 0.5, false):SetEase(Ease.Linear)
self.rightLiveObj.transform:SetParent(self.curObj.transform)
self.rightLiveObj:GetComponent("RectTransform").anchoredPosition = Vector2.New(rightHeroData.Position[1]+200,rightHeroData.Position[2])
self.rightLiveObj:GetComponent("SkeletonGraphic"):DOFade(0, 0)
self.rightLiveObj:GetComponent("SkeletonGraphic"):DOFade(1, 0.3):SetDelay(0.2)
self.rightLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector2.New(rightHeroData.Position[1],rightHeroData.Position[2]), 0.3, false):SetDelay(0.2):OnComplete(function ()
lastindex = curindex
leftHeroData = herosDatas[lastindex]
curindex = nextindex
curHeroData = herosDatas[curindex]
if curindex >= #herosDatas then
nextindex = 1
else
nextindex = curindex + 1
end
rightHeroData = herosDatas[nextindex]
self.leftLiveObj = self.curLiveObj
self.curLiveObj = self.rightLiveObj
self.rightLiveObj = HeroManager.LoadHerolive1(rightHeroData,self.rightObj)
SetHEeroLiveToward(self.rightLiveObj,rightHeroData.Toward)
local SkeletonGraphic = self.curLiveObj:GetComponent("SkeletonGraphic")
SkeletonGraphic.AnimationState:SetAnimation(0, "touch", false)
if self.curLiveObj then
self.dragView.gameObject:SetActive(true)
self.dragView:SetDragGO(self.curLiveObj)
else
self.dragView.gameObject:SetActive(false)
end
self:UpdateHeroInfoData(0)
self.isRightOrLeft = true
end):SetEase(Ease.Linear)
--self:SetPanelBg(curHeroData.heroConfig)
end
--左切换按钮点击
function HeroLikeAbilityPanel:LeftBtnOnClick()
curselectId = 0
-- 英雄长按赠送时不再进行切换操作
if self.isGiving then
return
end
if self.isRightOrLeft == false then
return
end
self.isRightOrLeft = false
if self.rightLiveObj then
poolManager:UnLoadLive(self.rightLiveObj.name, self.rightLiveObj)
self.rightLiveObj = nil
end
self.curLiveObj.transform:SetParent(self.rightObj.transform)
self.curLiveObj:GetComponent("SkeletonGraphic"):DOFade(0, 0.2)
self.curLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector2.New(curHeroData.Position[1],curHeroData.Position[2]), 0.5, false):SetEase(Ease.Linear)
self.leftLiveObj.transform:SetParent(self.curObj.transform)
self.leftLiveObj:GetComponent("RectTransform").anchoredPosition = Vector2.New(leftHeroData.Position[1]-200,leftHeroData.Position[2])
self.leftLiveObj:GetComponent("SkeletonGraphic"):DOFade(0, 0)
self.leftLiveObj:GetComponent("SkeletonGraphic"):DOFade(1, 0.3):SetDelay(0.2)
self.leftLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector2.New(leftHeroData.Position[1],leftHeroData.Position[2]), 0.3, false):SetDelay(0.2):OnComplete(function ()
nextindex = curindex
rightHeroData = herosDatas[nextindex]
curindex = lastindex
curHeroData = herosDatas[curindex]
if curindex <= 1 then
lastindex = #herosDatas
else
lastindex = curindex - 1
end
leftHeroData = herosDatas[lastindex]
self.rightLiveObj = self.curLiveObj
self.curLiveObj = self.leftLiveObj
self.leftLiveObj = HeroManager.LoadHerolive1(leftHeroData,self.leftObj)
SetHEeroLiveToward(self.leftLiveObj,rightHeroData.Toward)
local SkeletonGraphic = self.curLiveObj:GetComponent("SkeletonGraphic")
SkeletonGraphic.AnimationState:SetAnimation(0, "touch", false)
if self.curLiveObj then
self.dragView.gameObject:SetActive(true)
self.dragView:SetDragGO(self.curLiveObj)
else
self.dragView.gameObject:SetActive(false)
end
self:UpdateHeroInfoData(0)
self.isRightOrLeft = true
end):SetEase(Ease.Linear)
--self:SetPanelBg(curHeroData.heroConfig)
end
--界面关闭时调用(用于子类重写)
function HeroLikeAbilityPanel:OnClose()
self.effect.gameObject:SetActive(false)
if self.curLiveObj then
poolManager:UnLoadLive(self.curLiveObj.name, self.curLiveObj)
self.curLiveObj = nil
end
if self.leftLiveObj then
poolManager:UnLoadLive(self.leftLiveObj.name, self.leftLiveObj)
self.leftLiveObj = nil
end
if self.rightLiveObj then
poolManager:UnLoadLive(self.rightLiveObj.name, self.rightLiveObj)
self.rightLiveObj = nil
end
curselectId = 0
end
--界面销毁时调用(用于子类重写)
function HeroLikeAbilityPanel:OnDestroy()
FixedUpdateBeat:Remove(self.OnUpdate, self)
self.itemListNum = {}
self.itemList = {}
--self.grid:GetComponent("RectTransform").anchoredPosition = self.proGrid2Pos
end
return HeroLikeAbilityPanel