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 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, "effect") 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/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.giveBtn = Util.GetGameObject(self.transform, "giveBtn") self.trigger = Util.GetEventTriggerListener(self.giveBtn) 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 = {} end function HeroLikeAbilityPanel:OnPointerDown1(go, data) self.effect.gameObject:SetActive(false) self.num = 0 self.numCount = 0 if LikabilityManager.CheckIsMaxLv(curHeroData.Id) then PopupTipPanel.ShowTip("神将好感度已达最佳,无需更多赠予~") return end if LikabilityManager.GetRemainTimes() < 1 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.SetRemainTimes(1,-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.SetRemainTimes(1,-1) LikabilityManager.UpdatelSingleHeroData(curHeroData.Id,curselectId,1) self:UpdateHeroInfoData(true) if LikabilityManager.CheckIsMaxLv(curHeroData.Id) then self.isPressed = false self:Refresh(true) return end if self.itemListNum[curselectId] < 1 then self.isPressed = false self:Refresh(true) return end if LikabilityManager.GetRemainTimes() < 1 then self.isPressed = false self:Refresh(true) return end end end function HeroLikeAbilityPanel:RequestDonate(num) NetManager.HeroUpLikableRequest(curHeroData.Id,curselectId,num,function() self:UpdateHeroInfoData() self.isGiving = false self.effect.gameObject:SetActive(false) local SkeletonGraphic = self.curLiveObj:GetComponent("SkeletonGraphic") SkeletonGraphic.AnimationState:SetAnimation(0, "touch", false) end) 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() self:ClosePanel() end) --左切换按钮 Util.AddClick(self.leftBtn, function() self:LeftBtnOnClick() end) --右切换按钮 Util.AddClick(self.rightBtn, function() self:RightBtnOnClick() end) --查看 Util.AddClick(self.lookBtn, function() UIManager.OpenPanel(UIName.RoleLikeabilityPopup,curHeroData) end) -- --查看 -- Util.AddClick(self.giveBtn, function() -- self.effect.gameObject:SetActive(false) -- self.num = 0 -- self.numCount = 0 -- LogGreen(curselectId) -- if LikabilityManager.CheckIsMaxLv(curHeroData.Id) then -- PopupTipPanel.ShowTip("神将好感度最达最佳,无需更多赠予~") -- return -- end -- if LikabilityManager.GetRemainTimes() < 1 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.isShortPress = true -- self:Refresh(true) -- end) end --添加事件监听(用于子类重写) function HeroLikeAbilityPanel:AddListener() Game.GlobalEvent:AddEvent(GameEvent.LikeAbility.RefreshRemainTimes,self.RefreshTimes,self) end --移除事件监听(用于子类重写) function HeroLikeAbilityPanel:RemoveListener() Game.GlobalEvent:RemoveEvent(GameEvent.LikeAbility.RefreshRemainTimes,self.RefreshTimes,self) end function HeroLikeAbilityPanel:RefreshTimes() self.remainTimes.text = string.format("今日剩余次数:%s次",LikabilityManager.GetRemainTimes()) 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() 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) 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 = string.format("今日剩余次数:%s次",LikabilityManager.GetRemainTimes()) self.pos.sprite = self.spLoader:LoadSprite(GetProStrImageByProNum(curHeroData.PropertyName)) self.name.text = curHeroData.ReadingName self:UpdateItemList(isChange) end function HeroLikeAbilityPanel:UpdateItemList(isChange) local items = LikabilityManager.GetAllItemsData() local newid = 0 local par = nil for i = 1,math.max(#items,#self.itemList) do if not items[i] then self.itemList[i].pre.gameObject:SetActive(false) else if not self.itemListNum[items[i].id] then self.itemListNum[items[i].id] = 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 self.itemList[i].data = items[i] end self.itemList[i].pre.gameObject:SetActive(true) self.itemList[i].go:OnOpen(false,{items[i].id,items[i].num},1.1,false,false,false,self.sortingOrder) if items[i].num < 1 then Util.SetGray(self.itemList[i].pre.gameObject,true) else Util.SetGray(self.itemList[i].pre.gameObject,false) if newid < 1 then newid = items[i].id end if not par then par = self.itemList[i].pre end end Util.AddOnceClick(self.itemList[i].pre, function() if items[i].num > 0 then curselectId = items[i].id self:SetSelectKuang(self.itemList[i].pre) end end) Util.AddLongPressClick(self.itemList[i].pre, function() UIManager.OpenPanel(UIName.RewardItemSingleShowPopup,items[i].id) end, 0.5) end end if newid < 1 then self.select.gameObject:SetActive(false) elseif curselectId ~= newid and (not self.itemListNum[curselectId] or self.itemListNum[curselectId] < 1) and not isChange then curselectId = newid self:SetSelectKuang(par) elseif self.itemListNum[curselectId] and self.itemListNum[curselectId] > 0 then for i = 1,#self.itemList do if self.itemList[i] and self.itemList[i].data and self.itemList[i].data.id == curselectId then self:SetSelectKuang(self.itemList[i].pre) break end end end end function HeroLikeAbilityPanel:SetSelectKuang(par) self.select.gameObject:SetActive(true) self.select.transform:SetParent(par.transform) self.select.transform.localPosition = Vector3.zero 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)) 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("RectTransform"):DOAnchorPos(Vector3.New(curHeroData.Position[1],curHeroData.Position[2],0), 0.5, false):SetEase(Ease.Linear) self.rightLiveObj.transform:SetParent(self.curObj.transform) self.rightLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector3.New(rightHeroData.Position[1],rightHeroData.Position[2],0), 0.5, false):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) 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() 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("RectTransform"):DOAnchorPos(Vector3.New(curHeroData.Position[1],curHeroData.Position[2],0), 0.5, false):SetEase(Ease.Linear) self.leftLiveObj.transform:SetParent(self.curObj.transform) self.leftLiveObj:GetComponent("RectTransform"):DOAnchorPos(Vector3.New(leftHeroData.Position[1],leftHeroData.Position[2],0), 0.5, false):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) 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() self.isRightOrLeft = true end):SetEase(Ease.Linear) --self:SetPanelBg(curHeroData.heroConfig) end --界面关闭时调用(用于子类重写) function HeroLikeAbilityPanel:OnClose() 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 = {} end return HeroLikeAbilityPanel