require("Base/BasePanel")
GuildSkillUpLvPopup = Inherit(BasePanel)
local this = GuildSkillUpLvPopup
local TabBox = require("Modules/Common/TabBox")
local _TabData={ [1] = { default = "r_hero_xuanze_002", select = "r_hero_xuanze_001", name = GuildSkillType[2] },
[2] = { default = "r_hero_xuanze_002", select = "r_hero_xuanze_001", name = GuildSkillType[1] },
[3] = { default = "r_hero_xuanze_002", select = "r_hero_xuanze_001", name = GuildSkillType[3] },
[4] = { default = "r_hero_xuanze_002", select = "r_hero_xuanze_001", name = GuildSkillType[4]},
}
local _TabFontColor = { default = Color.New(130 / 255, 128 / 255, 120 / 255, 1),
select = Color.New(243 / 255, 235 / 255, 202 / 255, 1)}
local skills = {}
local pros = {}
local materals = {}
local curIndex = 1
--界面肉盾 和 输出 交换位置
local curIndexChangeFun = {
[1] = 2,
[2] = 1,
[3] = 3,
[4] = 4,
}
local curSeletSkill = {}
local allSkillData = {}
local materialNoId = 0
local endLv = 0
local isMaxLv = true
local proInfo = {
[61] = Language[11052],
[62] = Language[11053],
[51] = Language[11054],
[52] = Language[11055],
[55] = Language[11056],
[56] = "暴伤加成",
}
local tabRedPotList = {}
local oldWarPowerValue = 0
local newWarPowerValue = 0
local oldLv
--长按升级状态
local _isClicked = false
local _isReqLvUp = false
local _isLongPress = false
this.timePressStarted = 0--监听长按事件
this.priThread = nil--协同程序播放升级属性提升值动画用
local isTriggerLongClick = false--长按是否升过级
--初始化组件(用于子类重写)
function GuildSkillUpLvPopup:InitComponent()
this.spLoader = SpriteLoader.New()
this.tabBox = Util.GetGameObject(self.gameObject, "bg/TabBox")
this.backBtn = Util.GetGameObject(self.gameObject, "bg/btnBack")
this.btnUpLv = Util.GetGameObject(self.gameObject, "bg/btnUpLv")
this.btnRest = Util.GetGameObject(self.gameObject, "bg/btnRest")
this.helpBtn = Util.GetGameObject(self.gameObject,"bg/HelpBtn")
this.helpPos = this.helpBtn:GetComponent("RectTransform").localPosition
this.titleText = Util.GetGameObject(self.gameObject,"bg/titleText"):GetComponent("Text")
this.skillAllLv = Util.GetGameObject(self.gameObject,"bg/skillAllLv"):GetComponent("Text")
this.selectImage = Util.GetGameObject(self.gameObject,"bg/skills/selectImage")
for i = 1, 6 do
skills[i] = Util.GetGameObject(self.gameObject,"bg/skills/frame ("..i..")")
pros[i] = Util.GetGameObject(self.gameObject,"bg/proScroll/grid/proVale ("..i..")")
end
this.materialGrid = Util.GetGameObject(self.gameObject,"bg/materialGrid")
for i = 1, 2 do
materals[i] = Util.GetGameObject(self.gameObject,"bg/materialGrid/needGoldText ("..i..")")
end
this.TabCtrl = TabBox.New()
this.upLvTrigger = Util.GetEventTriggerListener(this.btnUpLv)
end
--绑定事件(用于子类重写)
function GuildSkillUpLvPopup:BindEvent()
Util.AddClick(this.helpBtn,function()
UIManager.OpenPanel(UIName.HelpPopup,HELP_TYPE.GuildSkill,this.helpPos.x,this.helpPos.y)
end)
Util.AddClick(this.backBtn,function()
self:ClosePanel()
end)
Util.AddClick(this.btnUpLv,function()
if Time.realtimeSinceStartup - this.timePressStarted <= 0.4 then
this.LvUpClick(true)
end
end)
--长按升级按下状态
this._onPointerDown = function(Pointgo, data)
-- isTriggerLongClick = false
_isClicked = true
this.timePressStarted = Time.realtimeSinceStartup
oldLv = endLv
-- allAddProVal = PokemonManager.GetSinglePokemonAddProData(curPokemonData.dynamicId)
end
--长按升级抬起状态
this._onPointerUp = function(Pointgo, data)
-- LogPink("连续升级抬起请求升级 "..tostring(_isLongPress))
if _isLongPress then--and isTriggerLongClick
--连续升级抬起请求升级
-- LogPink("连续升级抬起请求升级 ")
this.LongLvUpClick(oldLv)
end
_isClicked = false
_isLongPress = false
end
this.upLvTrigger.onPointerDown = this.upLvTrigger.onPointerDown + this._onPointerDown
this.upLvTrigger.onPointerUp = this.upLvTrigger.onPointerUp + this._onPointerUp
Util.AddClick(this.btnRest,function()
if endLv <= 0 then
PopupTipPanel.ShowTip(Language[11060])
return
end
UIManager.OpenPanel(UIName.GeneralPopup,GENERAL_POPUP_TYPE.GuildSkill,
GuildSkillManager.GetResetGetDrop(curIndexChangeFun[curIndex]),curIndexChangeFun[curIndex],function()
-- CheckRedPointStatus(RedPointType.Guild_Skill)
GuildSkillManager.ResetGuildSkillData(curIndexChangeFun[curIndex])
this.OnClickTabBtn(curIndex,true)
this.RefreshTabRedPoint()
oldWarPowerValue = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
end)
end)
end
--添加事件监听(用于子类重写)
function GuildSkillUpLvPopup:AddListener()
end
--移除事件监听(用于子类重写)
function GuildSkillUpLvPopup:RemoveListener()
end
--界面打开时调用(用于子类重写)
function GuildSkillUpLvPopup:OnOpen(_curIndex)
GuildSkillManager.UpdataHeroProList = {}
curIndex = _curIndex or 1
tabRedPotList = {}
FixedUpdateBeat:Add(this.OnUpdate, self)--长按方法注册
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function GuildSkillUpLvPopup:OnShow()
this.TabCtrl:SetTabAdapter(this.TabAdapter)
this.TabCtrl:SetChangeTabCallBack(this.SwitchView)
this.TabCtrl:Init(this.tabBox, _TabData,curIndex)
oldWarPowerValue = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
end
--长按升级处理
function this.OnUpdate()
if _isClicked then
if Time.realtimeSinceStartup - this.timePressStarted > 0.4 then
_isLongPress = true
if not _isReqLvUp then
_isReqLvUp = true
this.LvUpClick(false)
end
end
end
end
-- tab节点显示自定义
function this.TabAdapter(tab, index, status)
local tabLab = Util.GetGameObject(tab, "Text")
local tabImage = Util.GetGameObject(tab,"Image")
tabImage:GetComponent("Image").sprite = this.spLoader:LoadSprite(_TabData[index][status])
tabLab:GetComponent("Text").text = _TabData[index].name
tabLab:GetComponent("Text").color = _TabFontColor[status]
Util.GetGameObject(tab, "Redpot"):SetActive(GuildSkillManager.GuildSkillRedPoint(curIndexChangeFun[index]))
if #tabRedPotList < 4 then
table.insert(tabRedPotList,Util.GetGameObject(tab, "Redpot"))
end
end
--切换视图
function this.SwitchView(index)
this.OnClickTabBtn(index)
end
function this.OnClickTabBtn(index,isNoLoadSprite)
--数据组拼
curIndex = index
GuildSkillManager.SetGuildSkillRedPlayers(curIndexChangeFun[curIndex],1)
CheckRedPointStatus(RedPointType.Guild_Skill)
isMaxLv = true
allSkillData = GuildSkillManager.GetSkillDataByType(curIndexChangeFun[curIndex])
curSeletSkill = allSkillData[1]
for i = 1, #allSkillData do
if curSeletSkill.level > allSkillData[i].level then
curSeletSkill = allSkillData[i]
isMaxLv = false
end
end
local allCurSkillConfig = ConfigManager.GetAllConfigsDataByDoubleKey(ConfigName.GuildTechnology,"Profession",curIndexChangeFun[curIndex],"TechId",curSeletSkill.id)
if isMaxLv and curSeletSkill.level ~= #allCurSkillConfig - 1 then
isMaxLv = false
end
this.ShowSkillsAndPros(isNoLoadSprite)--展示技能 展示属性
this.ShowMaterials()--展示消耗材料 及 按钮状态
end
--展示技能
function this.ShowSkillsAndPros(isNoLoadSprite)
this.titleText.text = Language[11061].._TabData[curIndex].name
local isEqualityLv,maxLv
endLv,isEqualityLv,maxLv = GuildSkillManager.GetAllGuildSkillLv(curIndexChangeFun[curIndex])
Util.SetGray(this.btnRest, endLv <= 0)
this.materialGrid:SetActive(not isMaxLv)
this.selectImage:SetActive(not isMaxLv)
if isMaxLv then
this.btnUpLv:GetComponent("Button").enabled=false
Util.GetGameObject(this.btnUpLv,"Text"):GetComponent("Text").text = Language[11062]
else
this.btnUpLv:GetComponent("Button").enabled=true
Util.GetGameObject(this.btnUpLv,"Text"):GetComponent("Text").text = Language[11063]
end
this.skillAllLv.text = Language[11064]..endLv
for i = 1, #allSkillData do
local skillGo = skills[i]
if skillGo then
if not isNoLoadSprite then
Util.GetGameObject(skillGo,"icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(allSkillData[i].config.Icon))
end
Util.GetGameObject(skillGo,"lvImage/Text"):GetComponent("Text").text = allSkillData[i].level
if isEqualityLv then
Util.SetGray(skillGo, true)
elseif allSkillData[i].level > 0 and allSkillData[i].level >= maxLv then
Util.SetGray(skillGo, false)
else
--if curSeletSkill.id == allSkillData[i].id then
-- Util.SetGray(skillGo, false)
--else
Util.SetGray(skillGo, true)
--end
end
end
local proGo = pros[i]
if proGo then
local propertyConfig = ConfigManager.GetConfigData(ConfigName.PropertyConfig, allSkillData[i].config.Values[1])
local proInfoStr = GetLanguageStrById(propertyConfig.Info)
if proInfo[propertyConfig.PropertyId] then
proInfoStr = proInfo[propertyConfig.PropertyId]
end
if curSeletSkill.id == allSkillData[i].id then
local config = ConfigManager.TryGetConfigDataByThreeKey(ConfigName.GuildTechnology,"Profession",curIndexChangeFun[curIndex],"TechId",curSeletSkill.id,"Level",curSeletSkill.level + 1)
local addValue = ""
if config then
addValue = "+"..GetPropertyFormatStrOne(propertyConfig.Style, config.Values[2] - allSkillData[i].config.Values[2])..""
end
proGo:GetComponent("Text").text = proInfoStr.. ":" .. GetPropertyFormatStrOne(propertyConfig.Style, allSkillData[i].config.Values[2]) ..addValue
else
proGo:GetComponent("Text").text = proInfoStr.. ":" .. GetPropertyFormatStrOne(propertyConfig.Style, allSkillData[i].config.Values[2])
end
end
end
end
--展示消耗材料 及 按钮状态
function this.ShowMaterials()
materialNoId = 0
this.selectImage.transform:SetParent(Util.GetGameObject(skills[curSeletSkill.id],"selectImageParent").transform)
this.selectImage.transform.localScale = Vector3.one
this.selectImage.transform.localPosition=Vector3.zero;
for i = 1, #materals do
if curSeletSkill.config.Consume then
if curSeletSkill.config.Consume[i] then
local consume = curSeletSkill.config.Consume[i]
local materalGo = materals[i]
Util.GetGameObject(materalGo,"Image"):GetComponent("Image").sprite =
this.spLoader:LoadSprite(GetResourcePath(ConfigManager.TryGetConfigData(ConfigName.ItemConfig,consume[1]).ResourceID))
materalGo:GetComponent("Text").text = PrintWanNum3(consume[2])
if BagManager.GetItemCountById(consume[1]) >= consume[2] then
materalGo:GetComponent("Text").text ="".. consume[2]..""
else
materalGo:GetComponent("Text").text ="".. consume[2]..""
if materialNoId == 0 then
materialNoId = consume[1]
end
end
else
materals[i]:SetActive(false)
end
end
end
end
function this.RefreshTabRedPoint(index)
if index then
tabRedPotList[index]:SetActive(false)
else
for i = 1, #tabRedPotList do
tabRedPotList[curIndexChangeFun[i]]:SetActive(GuildSkillManager.GuildSkillRedPoint(curIndexChangeFun[i]))
end
end
end
--长按升级结束后请求协议
function this.LongLvUpClick(oldLv)
local oldWarPower = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
NetManager.SinGleGuildSkillUpLv(curIndexChangeFun[curIndex],oldLv,endLv,function (msg)
-- GuildSkillManager.SetSkillDataLv(curIndex,curSeletSkill.id,msg.curlevel)
GuildSkillManager.LongLvUpClickBackFun(msg)
this.OnClickTabBtn(curIndex,true)
this.RefreshTabRedPoint(curIndex)
_isReqLvUp = false
newWarPowerValue = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
if oldWarPowerValue ~= newWarPowerValue then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldWarPowerValue,newValue = newWarPowerValue})
oldWarPowerValue = newWarPowerValue
end
end)
end
--升级按钮点击事件处理
function this.LvUpClick(isSingleLvUp)
--各种判断能否升级
if materialNoId > 0 then
PopupTipPanel.ShowTip(GetLanguageStrById(ConfigManager.GetConfigData(ConfigName.ItemConfig,materialNoId).Name).." "..Language[11058])
if not isSingleLvUp then
this.LongLvUpClick(oldLv)
end
_isClicked = false
_isLongPress = false
return
end
if isMaxLv then
if not isSingleLvUp then
this.LongLvUpClick(oldLv)
end
_isClicked = false
_isLongPress = false
return
end
if isSingleLvUp then
NetManager.SinGleGuildSkillUpLv(curIndexChangeFun[curIndex],endLv,endLv + 1,function(msg)
PopupTipPanel.ShowTip(Language[11059])
-- GuildSkillManager.SetSkillDataLv(msg.type,curSeletSkill.id,msg.curlevel)
GuildSkillManager.LongLvUpClickBackFun(msg)
this.OnClickTabBtn(curIndex,true)
this.RefreshTabRedPoint(curIndex)
newWarPowerValue = FormationManager.GetFormationPower(FormationTypeDef.FORMATION_NORMAL)
if oldWarPowerValue ~= newWarPowerValue then
UIManager.OpenPanel(UIName.WarPowerChangeNotifyPanelV2,{oldValue = oldWarPowerValue,newValue = newWarPowerValue})
oldWarPowerValue = newWarPowerValue
end
Game.GlobalEvent:DispatchEvent()
-- CheckRedPointStatus(RedPointType.Guild_Skill)
end)
else
--前端先扣除材料
local curUpLvConsume = curSeletSkill.config.Consume
for i = 1, #curUpLvConsume do
BagManager.HeroLvUpUpdateItemsNum(curUpLvConsume[i][1],curUpLvConsume[i][2])
end
endLv = endLv + 1
-- GuildSkillManager.SetSkillDataLv(curIndex,curSeletSkill.id,curSeletSkill.level + 1)
GuildSkillManager.LongLvUpClickBackFun({type = curIndexChangeFun[curIndex],curlevel = endLv})
this.OnClickTabBtn(curIndex,true)
this.RefreshTabRedPoint(curIndex)
Timer.New(function ()
_isReqLvUp = false
end,0.3):Start()
PopupTipPanel.ShowTip(Language[11059])
end
end
--界面关闭时调用(用于子类重写)
function GuildSkillUpLvPopup:OnClose()
tabRedPotList = {}
HeroManager.UpdateHeroPowerProfession()--也许会卡
GuildSkillManager.UpdataHeroProList = {}
FixedUpdateBeat:Remove(this.OnUpdate, self)
end
--界面销毁时调用(用于子类重写)
function GuildSkillUpLvPopup:OnDestroy()
this.spLoader:Destroy()
end
return GuildSkillUpLvPopup