require("Base/BasePanel") SacredTreePanel = Inherit(BasePanel) local treeLevelConfig = ConfigManager.GetConfig(ConfigName.GodHoodTreeLevel) local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig) local artConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig) local attriConfig = ConfigManager.GetConfigDataByKey(ConfigName.GodHoodTreeSetting,"Id",0) local orginLayer = 0 local curTreeLevel = 0 local length = 0 local t = 3 --用来区分长按和点击的临界值 local COLOR = { [1] = "#529764FF", [2] = "#6398c9FF", [3] = "#9358bdFF", [4] = "#fcb24eFF", [5] = "#FF0000", } local Trans = { [1] = 5, [2] = 4, [3] = 3, [4] = 2, [5] = 1, } function SacredTreePanel:InitComponent() self.spLoader = SpriteLoader.New() --button self.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform, { showType = UpViewOpenType.ShowLeft }) self.backBtn = Util.GetGameObject(self.transform, "backBtn") self.helpBtn = Util.GetGameObject(self.transform, "helpBtn") self.helpPos = self.helpBtn:GetComponent("RectTransform").localPosition self.attriBtn = Util.GetGameObject(self.transform, "attriBtn") self.attriNum = Util.GetGameObject(self.attriBtn, "num"):GetComponent("Text") self.treeLevel = Util.GetGameObject(self.transform, "bg/level"):GetComponent("Text") --btn self.bottom = Util.GetGameObject(self.transform, "bottom") self.upgradeBtn = Util.GetGameObject(self.bottom, "upgradeBtn") self.treeRed = Util.GetGameObject(self.upgradeBtn, "redPoint") self.upGrade = Util.GetGameObject(self.upgradeBtn, "Text"):GetComponent("Text") --tips self.tips = Util.GetGameObject(self.bottom, "tips") self.needIcon = Util.GetGameObject(self.tips, "Image"):GetComponent("Image") self.needNum = Util.GetGameObject(self.tips, "num"):GetComponent("Text") --详细信息部分 self.attriDetail = Util.GetGameObject(self.transform, "attriDetail") self.title = Util.GetGameObject(self.attriDetail, "Grid/Top/Title"):GetComponent("Text") self.btnChange = Util.GetGameObject(self.attriDetail, "Grid/Top/btnChange") self.attriGrid = Util.GetGameObject(self.attriDetail, "Grid/Attributions") self.attriPre = Util.GetGameObject(self.attriGrid, "attriPre") self.jtBtn = Util.GetGameObject(self.transform, "jtBtn") self.jtImg = Util.GetGameObject(self.jtBtn, "Image") self.attriList = {} self.bool = true--箭头按钮 self.playAni = false--箭头按钮 self.selectMask = Util.GetGameObject(self.transform, "Mask") self.selectGrid = Util.GetGameObject(self.selectMask, "selectGrid") self.selectList = {} for i = 1, 5 do self.selectList[i] = {} self.selectList[i].btn1 = Util.GetGameObject(self.selectMask, "selectGrid/Pre ("..i..")/Image") self.selectList[i].btn2 = Util.GetGameObject(self.selectMask, "selectGrid/Pre ("..i..")/Text") self.selectList[i].select = Util.GetGameObject(self.selectMask, "selectGrid/Pre ("..i..")/Select") self.selectList[i].select:SetActive(false) end --特效加长按 self.UI_effect_RecruitPanel_particle = Util.GetGameObject(self.transform, "UI_effect_RecruitPanel_particle") self.trigger = Util.GetEventTriggerListener(self.upgradeBtn) 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 length = LengthOfTable(SacredTreeManager.SacredtreeLevelConfig) self.itemNum = curTreeLevel >=length and 0 or BagManager.GetTotalItemNum(treeLevelConfig[curTreeLevel].LvupCost[1]) self.isPressed = false self.num = 0 self.numCount = 0 end function SacredTreePanel:OnPointerDown1(go, data) if curTreeLevel >= length then PopupTipPanel.ShowTip("神树已达最大等级~") return end if self.itemNum < treeLevelConfig[curTreeLevel].LvupCost[2] then PopupTipPanel.ShowTip(string.format("%s不足!",itemConfig[treeLevelConfig[curTreeLevel].LvupCost[1]].Name)) return end self.isPressed = true end function SacredTreePanel:OnPointerUp1(go,data) if self.isPressed then self.isPressed = false self:Refresh(true) end end function SacredTreePanel:OnUpdate() if self.isPressed then if self.numCount >= t and self.numCount/t >= 1 then self.isShortPress = false self:Refresh(false) else self.isShortPress = true end self.numCount = self.numCount + 1 end end function SacredTreePanel:Refresh(isSend) if isSend then self.isPressed = false if self.isShortPress then self.num = 1 BagManager.HeroLvUpUpdateItemsNum(treeLevelConfig[curTreeLevel].LvupCost[1],treeLevelConfig[curTreeLevel].LvupCost[2]) self.itemNum = BagManager.GetTotalItemNum(treeLevelConfig[curTreeLevel].LvupCost[1]) local oldPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL) SacredTreeManager.treeLevel = SacredTreeManager.treeLevel + 1 curTreeLevel = curTreeLevel + 1 EquipTreasureManager.ChangeTreeLv() local herodata = FormationManager.GetFormationByID(FormationTypeDef.FORMATION_NORMAL) for k,v in pairs(herodata.teamHeroInfos) do HeroPropManager.SetDirtyByType(v.heroId, Hero_Prop_Type.EquipTreasure) end -- 重新计算宝物评分 EquipTreasureManager.SetAllTreasureDirty() SacredTreeManager.OnPowerChange(oldPower) end self.isShortPress = false self.numCount = 0 self:RequestDonate(self.num) else self.num = self.num + 1 BagManager.HeroLvUpUpdateItemsNum(treeLevelConfig[curTreeLevel].LvupCost[1],treeLevelConfig[curTreeLevel].LvupCost[2]) self.itemNum = BagManager.GetTotalItemNum(treeLevelConfig[curTreeLevel].LvupCost[1]) if curTreeLevel == 0 then PopupTipPanel.ShowTip("成功解锁神树~") end SacredTreeManager.treeLevel = SacredTreeManager.treeLevel + 1 curTreeLevel = curTreeLevel + 1 local oldPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL) EquipTreasureManager.ChangeTreeLv() local herodata = FormationManager.GetFormationByID(FormationTypeDef.FORMATION_NORMAL) for k,v in pairs(herodata.teamHeroInfos) do HeroPropManager.SetDirtyByType(v.heroId, Hero_Prop_Type.EquipTreasure) end -- 重新计算宝物评分 EquipTreasureManager.SetAllTreasureDirty() SacredTreeManager.OnPowerChange(oldPower) self:OnShow() if curTreeLevel >= length then self.isPressed = false self:Refresh(true) return end if self.itemNum < treeLevelConfig[curTreeLevel].LvupCost[2] then self.isPressed = false self:Refresh(true) return end end end function SacredTreePanel:RequestDonate(num) NetManager.UpgradeGodTreeRequest(num,function () self.num = 0 self:OnShow() end) end function SacredTreePanel:BindEvent() Util.AddClick(self.backBtn, function() self:ClosePanel() end) Util.AddClick(self.helpBtn, function() UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.SacredTree,self.helpPos.x,self.helpPos.y) end) Util.AddClick(self.attriBtn, function() UIManager.OpenPanel(UIName.GeneralBigPopup,GENERAL_POPUP_TYPE.ShenYingShuXing) end) Util.AddClick(self.jtBtn, function() self.bool = not self.bool self:ResetDetailPos() end) Util.AddClick(self.btnChange, function() local length = self.bool and SacredTreeManager.CulAttri()*50 - 700 or #attriConfig.PropertyUnlcokLevels*50 - 700 if SacredTreeManager.CulAttri() == 0 then length = #attriConfig.PropertyUnlcokLevels*50 - 700 end self.selectGrid:GetComponent("RectTransform").localPosition = Vector3.New(0,length,0) self.selectMask:SetActive(true) PlayUIAnim(self.selectGrid) end) for i = 1, 5 do Util.AddClick(self.selectList[i].btn1, function() -- LogRed(self.selectIndex.." "..i) if Trans[i] == self.selectIndex then return end for j = 1, 5 do self.selectList[j].select:SetActive(false) end self.selectList[i].select:SetActive(true) self.selectIndex = Trans[i] PlayerPrefs.SetInt(PlayerManager.uid.."SacredQualitySelect",Trans[i]) self.selectMask:SetActive(false) for index, value in ipairs(self.attriList) do value.transform:DORotate(Vector3.New(90,0,0),0.3):OnComplete(function () self.playAni = true self:SetAttriDetail() end) end end) Util.AddClick(self.selectList[i].btn2, function() -- LogRed(self.selectIndex.." "..i) if Trans[i] == self.selectIndex then return end for j = 1, 5 do self.selectList[j].select:SetActive(false) end self.selectList[i].select:SetActive(true) self.selectIndex = Trans[i] PlayerPrefs.SetInt(PlayerManager.uid.."SacredQualitySelect",Trans[i]) self.selectMask:SetActive(false) for index, value in ipairs(self.attriList) do value.transform:DORotate(Vector3.New(90,0,0),0.3):OnComplete(function () self.playAni = true self:SetAttriDetail() end) end end) end Util.AddClick(self.selectMask, function() self.selectMask:SetActive(false) if PlayerPrefs.GetInt(PlayerManager.uid.."SacredQualitySelect") == self.selectIndex then return end for index, value in ipairs(self.attriList) do value.transform:DORotate(Vector3.New(90,0,0),0.3):OnComplete(function () self.playAni = true self:SetAttriDetail() end) end end) BindRedPointObject(RedPointType.Sacred,self.treeRed) FixedUpdateBeat:Add(self.OnUpdate, self)--长按方法注册 end function SacredTreePanel:OnSortingOrderChange() Util.SetParticleSortLayer(self.UI_effect_RecruitPanel_particle, self.sortingOrder + 1) orginLayer = self.sortingOrder end --添加事件监听(用于子类重写) function SacredTreePanel:AddListener() end --移除事件监听(用于子类重写) function SacredTreePanel:RemoveListener() end function SacredTreePanel:OnOpen() self.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.SacredTree}) if PlayerPrefs.GetInt(PlayerManager.uid.."SacredQualitySelect") == 0 then PlayerPrefs.SetInt(PlayerManager.uid.."SacredQualitySelect",5) end self.selectIndex = PlayerPrefs.GetInt(PlayerManager.uid.."SacredQualitySelect") end function SacredTreePanel:OnShow() Util.SetParticleSortLayer(self.UI_effect_RecruitPanel_particle, self.sortingOrder + 1) self.playAni = false CheckRedPointStatus(RedPointType.Sacred) self.treeRed:SetActive(SacredTreeManager.CheckRedPoint()) curTreeLevel = SacredTreeManager.treeLevel self.itemNum = curTreeLevel >=length and 0 or BagManager.GetTotalItemNum(treeLevelConfig[curTreeLevel].LvupCost[1]) local str1,str2 Util.SetGray(self.upgradeBtn,curTreeLevel >= length) if curTreeLevel > 0 and curTreeLevel < length then str1 = string.format(GetLanguageStrById("等级:%s"),curTreeLevel) str2 = Language[11063] elseif curTreeLevel >= length then str1 = string.format(GetLanguageStrById("等级:%s"),length) str2 = "等级已满" elseif curTreeLevel <= 0 then str1 = "未解锁" str2 = "解 锁" end self.treeLevel.text = str1 self.upGrade.text = str2 if curTreeLevel < length then local needId = treeLevelConfig[curTreeLevel].LvupCost[1] local needCost = treeLevelConfig[curTreeLevel].LvupCost[2] self.needIcon.sprite = self.spLoader:LoadSprite(artConfig[itemConfig[treeLevelConfig[curTreeLevel].LvupCost[1]].ResourceID].Name) self.needNum.text = treeLevelConfig[curTreeLevel].LvupCost[2] if BagManager.GetTotalItemNum(needId) < needCost then self.needNum.text = ""..treeLevelConfig[curTreeLevel].LvupCost[2].."" end else self.needIcon.gameObject:SetActive(curTreeLevel < length) self.needNum.gameObject:SetActive(curTreeLevel < length) end self.attriNum.text = SacredTreeManager.CulAttri().."/"..#attriConfig.PropertyUnlcokLevels --设置中间属性 self:SetAttriDetail() self:ResetDetailPos() end function SacredTreePanel:SetAttriDetail() local curSelectIndex = self.selectIndex -- if curTreeLevel <= 0 then -- self.attriDetail:SetActive(false) -- self.selectMask:SetActive(false) -- self.jtBtn:SetActive(false) -- else self.attriDetail:SetActive(true) self.selectMask:SetActive(true) self.jtBtn:SetActive(false) --self.jtBtn:SetActive(SacredTreeManager.CulAttri() > 0 and SacredTreeManager.CulAttri() < #attriConfig.PropertyUnlcokLevels ) -- self.title.text = GetStringByEquipQua(curSelectIndex+1,QualityNameDef[curSelectIndex+1].."宝物神应属性") self.title.text = string.format("%s宝物神应属性",COLOR[curSelectIndex],QualityNameDef[curSelectIndex+1]) local data = SacredTreeManager.GetAttriDetail(curSelectIndex) for index, value in ipairs(data) do local go = self.attriList[index] if not go then go = newObjToParent(self.attriPre,self.attriGrid.transform) self.attriList[index] = go go:SetActive(true) end if self.playAni then PlayUIAnim(go) else go.transform.rotation=Vector3.New(0,0,0) end Util.GetGameObject(go,"curAttri"):GetComponent("Text").text = value.text1 Util.GetGameObject(go,"nextAttri"):GetComponent("Text").text = value.text2 end self:InitDetailPos() --end end function SacredTreePanel:InitDetailPos() self.selectMask:SetActive(false) self.selectList[Trans[self.selectIndex]].select:SetActive(true) local rotation = self.bool and Vector3.zero or Vector3.New(179,0,0) local length = self.bool and 170 + SacredTreeManager.CulAttri()*50 or 170 + #attriConfig.PropertyUnlcokLevels*50 if SacredTreeManager.CulAttri() == 0 then length = 170 + #attriConfig.PropertyUnlcokLevels*50 end self.jtImg:GetComponent("RectTransform").rotation = Quaternion.Euler(rotation) self.attriDetail:GetComponent("RectTransform").sizeDelta = Vector3(0,length,0) end function SacredTreePanel:ResetDetailPos() self.bool=false local length = self.bool and 170 + SacredTreeManager.CulAttri()*50 or 170 + #attriConfig.PropertyUnlcokLevels*50 local size = Vector2.New(1080,length) local rotation = self.bool and 0 or 179 self.attriDetail.transform:DOSizeDelta(size, 0.8) self.jtImg.transform:DORotateQuaternion(Quaternion.Euler(Vector3.New(rotation,0,0)),0.8) end function SacredTreePanel:OnClose() orginLayer = 0 -- body end function SacredTreePanel:OnDestroy() self.attriList = {} FixedUpdateBeat:Remove(self.OnUpdate, self) SubUIManager.Close(self.UpView) self.spLoader:Destroy() ClearRedPointObject(RedPointType.Sacred,self.treeRed) end return SacredTreePanel