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