miduo_client/Assets/ManagedResources/~Lua/Modules/TailsManSoul/TailsManSouPanel.lua

419 lines
18 KiB
Lua

require("Base/BasePanel")
TailsManSouPanel = Inherit(BasePanel)
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
local this = TailsManSouPanel
local redPointList = {}
local tabsRedpoints = {}
local tabs = {}
local tabsImg = { "r_hero_huo 1_zh", "r_hero_feng 1_zh", "r_hero_shui 1_zh", "r_hero_dadi 1_zh" }
local special = ConfigManager.GetConfigData(ConfigName.SpecialConfig, 177)
local pro = tonumber(special.Value) / 100
-- Tab管理器
local TabBox = require("Modules/Common/TabBox")
local tabData = {
[1] = { --金色
default = "r_hero_xuanze_002",
lock = "r_hero_xuanze_002",
select = "r_hero_xuanze_001",
tabName = Language[10202],
rpType = RedPointType.tailsmanSoul_gold,
quality = 5
},
[2] = { --红色
default = "r_hero_xuanze_002",
lock = "r_hero_xuanze_002",
select = "r_hero_xuanze_001",
tabName = Language[10203],
rpType = RedPointType.tailsmanSoul_red,
quality = 6
},
[3] = { --白金
default = "r_hero_xuanze_002",
lock = "r_hero_xuanze_002",
select = "r_hero_xuanze_001",
tabName = Language[12896],
rpType = RedPointType.tailsmanSoul_whiteGold,
bg = "t_tianshumijuan_lingshouditu",
quality = 7
},
}
local curData = {}
local curPage = 1
local proId = 1
local addLv = 0
--初始化组件(用于子类重写)
function TailsManSouPanel:InitComponent()
this.spLoader = SpriteLoader.New()
self.itemPreList = {}
self.bg = Util.GetGameObject(self.gameObject, "bg"):GetComponent("Image")
--self.tabbox = Util.GetGameObject(self.gameObject,"bg/tabbox")
self.btnBack = Util.GetGameObject(self.gameObject, "bg/btnBack")
self.selectBtn = Util.GetGameObject(self.gameObject, "bg/Tabs/selectBtn")
self.fetterItem = Util.GetGameObject(self.gameObject, "fetterItem")
local grid = Util.GetGameObject(self.gameObject, "bg/fetterGrid")
local v21 = grid.transform.rect
self.scroll = SubUIManager.Open(SubUIConfig.ScrollCycleView, grid.transform, self.fetterItem, nil,
Vector2.New(v21.width, v21.height), 1, 1, Vector2.New(0, 25))
self.scroll.moveTween.MomentumAmount = 1
self.scroll.moveTween.Strength = 2
self.empty = Util.GetGameObject(self.gameObject, "bg/NoneImage")
self.addBtn = Util.GetGameObject(self.gameObject, "bg/add")
self.starAddBtn = Util.GetGameObject(self.gameObject, "bg/starAdd")
self.starAddBtn:SetActive(false)
self.UpView = SubUIManager.Open(SubUIConfig.UpView, self.gameObject.transform)
self.effectJin = Util.GetGameObject(self.gameObject, "bg/effect/UI_effect_RecruitPanel_particle_jin")
self.effectHong = Util.GetGameObject(self.gameObject, "bg/effect/UI_effect_RecruitPanel_particle_hong")
for i = 1, 5 do
tabs[i] = Util.GetGameObject(self.transform, "bg/Tabs/grid/Btn" .. i)
tabsRedpoints[i] = Util.GetGameObject(tabs[i], "redpoint")
--local name =Util.GetGameObject(tabs[i], "Text"):GetComponent("Text")
--name.text = PropertyType[i]
if tabsImg[i] then
Util.GetGameObject(tabs[i], "Image"):GetComponent("Image").sprite = self.spLoader:LoadSprite(tabsImg[i])
end
end
end
--绑定事件(用于子类重写)
function TailsManSouPanel:BindEvent()
BindRedPointObject(RedPointType.tailsmanSoul_gold, tabsRedpoints[1].gameObject)
BindRedPointObject(RedPointType.tailsmanSoul_red, tabsRedpoints[2].gameObject)
BindRedPointObject(RedPointType.tailsmanSoul_whiteGold, tabsRedpoints[3].gameObject)
BindRedPointObject(RedPointType.tailsmanSoul_blue, tabsRedpoints[4].gameObject)
BindRedPointObject(RedPointType.tailsmanSoul_whiteBlue, tabsRedpoints[5].gameObject)
for i = 1, 5 do
Util.AddClick(tabs[i], function()
if i == proId then
return
end
proId = i
self:SetSelectBtn()
curData = TailsManSoulManager.GetTailsmanSoulDatasByPro(proId)
self:RefreshData()
end)
end
Util.AddClick(self.btnBack, function()
curPage = 1
self:ClosePanel()
end)
Util.AddClick(self.addBtn, function()
local li = TailsManSoulManager.GetTailsmanTotalPro()
local li2 = TailsManSoulManager.GetTailsmanTotalProNoAdd()
if not li or #li < 1 then
PopupTipPanel.ShowTip(Language[12897])
return
end
local s = function(data, data2)
local lis1 = {}
for k, v in pairs(data) do
table.insert(lis1,
{
str = string.format(Language[12898], GetLanguageStrById(propertyConfig[k].Info),
GetPropertyFormatStr(propertyConfig[k].Style, v),
GetPropertyFormatStr(propertyConfig[k].Style, v - data2[k]), addLv * pro),
sort = propertyConfig
[k].SortId
})
end
table.sort(lis1, function(a, b)
return a.sort < b.sort
end)
local list2 = {}
for i = 1, #lis1 do
table.insert(list2, lis1[i].str)
end
return list2
end
local data = {}
local singData = {}
singData.title = Language[12899]
singData.pro = s(li, li2)
singData.tip = ""
table.insert(data, singData)
-- for i = 1 ,#data do
-- LogGreen("data[i]:"..data[i].title.." #pro:"..#data[i].pro)
-- for k,v in ipairs(data[i].pro) do
-- LogGreen("data[i]:"..v)
-- end
-- end
UIManager.OpenPanel(UIName.GeneralBigPopup, GENERAL_POPUP_TYPE.IncarnationDes2, data)
-- local li = TailsManSoulManager.GetTailsmanTotalPro()
-- local li2 = {}
-- for k,v in pairs(li) do
-- if propertyConfig[k].Style == 1 then
-- li2[k] = v
-- elseif propertyConfig[k].Style == 2 then
-- li2[k] = v/100
-- end
-- end
-- UIManager.OpenPanel(UIName.RoleProInfoPopup,li2,nil,false,nil)
end)
Util.AddClick(self.starAddBtn, function()
local data = {}
local singData = {}
singData.title = Language[12900]
singData.pro = {}
local star = TailsManSoulManager.GetTotalStar()
local s = function(skillList, starNum)
local proStr = ""
for k, v in ipairs(skillList) do
if proStr == "" then
proStr = string.format("%s+%s", string.gsub(propertyConfig[v[1]].Info, Language[12901], ""),
GetPropertyFormatStr(propertyConfig[v[1]].Style, v[2]))
else
proStr = proStr ..
string.format(",%s+%s", string.gsub(propertyConfig[v[1]].Info, Language[12901], ""),
GetPropertyFormatStr(propertyConfig[v[1]].Style, v[2]))
end
end
local str = ""
local color = "B9AC97"
if star >= starNum then
color = "00FF00"
end
str = string.format(Language[12902], color, star, starNum, proStr)
return str
end
for k, v in ConfigPairs(ConfigManager.GetConfig(ConfigName.TrumpStar)) do
local str = s(v.PropListShow, v.StarNum)
table.insert(singData.pro, str)
end
table.insert(data, singData)
UIManager.OpenPanel(UIName.GeneralBigPopup, GENERAL_POPUP_TYPE.ShenHunShuXing, data)
end)
-- self.tabBox = TabBox.New()
-- self.tabBox:SetTabAdapter(self.SetTabAdapter)
-- self.tabBox:SetTabIsLockCheck(self.TabIsLockCheck)
-- self.tabBox:SetChangeTabCallBack(self.SetChangeTabCallBack)
end
function TailsManSouPanel:RefreshList(istop, isAnim)
self.datas = IncarnationManager.GetItemDataListByPro(proId)
self.scroll:ForeachItemGO(function(index, go)
go.gameObject:SetActive(false)
end)
if not self.datas or #self.datas < 1 then
self.empty.gameObject:SetActive(true)
self.scroll.gameObject:SetActive(false)
else
self.empty.gameObject:SetActive(false)
self.scroll.gameObject:SetActive(true)
self.scroll:SetData(self.datas, function(index, go)
self:SetSingleData(go, self.datas[index], index)
end, istop, isAnim)
end
end
function TailsManSouPanel:SetSelectBtn()
self.selectBtn.transform:SetParent(tabs[proId].transform)
self.selectBtn:GetComponent("RectTransform").localPosition = Vector3.zero
self.selectBtn.transform:SetAsFirstSibling()
end
-- function TailsManSouPanel.SetTabAdapter(newTab, index, status)
-- local img = Util.GetGameObject(newTab.gameObject,"img"):GetComponent("Image")
-- local redpot = Util.GetGameObject(newTab.gameObject,"redpot")
-- local tabName = Util.GetGameObject(newTab.gameObject,"Text"):GetComponent("Text")
-- local lock = Util.GetGameObject(newTab.gameObject,"lock")
-- if tabs[index].rpType > 0 then
-- if redPointList[tabs[index].rpType] then
-- ClearRedPointObject(tabs[index].rpType,redPointList[tabs[index].rpType])
-- end
-- BindRedPointObject(tabs[index].rpType,redpot)
-- redPointList[tabs[index].rpType] = redpot
-- end
-- img.sprite = this.spLoader:LoadSprite(tabs[index][status])
-- tabName.text = tabs[index].tabName
-- if status == "lock" then
-- lock.gameObject:SetActive(true)
-- else
-- lock.gameObject:SetActive(false)
-- end
-- newTab.gameObject:SetActive(true)
-- end
-- function TailsManSouPanel.TabIsLockCheck(index)
-- return false
-- end
-- function TailsManSouPanel.SetChangeTabCallBack(index)
-- if curPage == index then
-- return
-- end
-- curPage = index
-- this:OnShow(self)
-- end
--添加事件监听(用于子类重写)
function TailsManSouPanel:AddListener()
end
--移除事件监听(用于子类重写)
function TailsManSouPanel:RemoveListener()
end
--界面打开时调用(用于子类重写)
function TailsManSouPanel:OnOpen(...)
local args = { ... }
curPage = args[1] or 2
end
--界面打开或者重新打开后,界面刷新时调用(用于子类重写)
function TailsManSouPanel:OnShow()
self.UpView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main })
--self.tabBox:Init(self.tabbox.gameObject, tabs, curPage)
curData = TailsManSoulManager.GetTailsmanSoulDatasByPro(proId)
self:RefreshData()
addLv = 0
for i = 1, 5 do
local curData = TailsManSoulManager.GetTailsmanSoulDatasByPro(i)
for j = 1, #curData do
--LogError("curData.lv=========="..curData[j].lv)
if curData[j].lv > 0 then
addLv = addLv + curData[j].lv
end
end
end
self.effectJin.gameObject:SetActive(tabData[curPage].quality == 5)
self.effectHong.gameObject:SetActive(tabData[curPage].quality == 6)
Util.SetParticleSortLayer(self.effectJin.gameObject, self.sortingOrder + 1)
Util.SetParticleSortLayer(self.effectHong.gameObject, self.sortingOrder + 1)
CheckRedPointStatus(RedPointType.tailsmanSoul_gold)
CheckRedPointStatus(RedPointType.tailsmanSoul_red)
CheckRedPointStatus(RedPointType.tailsmanSoul_whiteGold)
CheckRedPointStatus(RedPointType.tailsmanSoul_blue)
CheckRedPointStatus(RedPointType.tailsmanSoul_whiteBlue)
end
function TailsManSouPanel:RefreshData()
self:SetSelectBtn()
self.scroll:ForeachItemGO(function(index, go)
go.gameObject:SetActive(false)
end)
if not curData or #curData < 1 then
self.empty.gameObject:SetActive(true)
self.scroll.gameObject:SetActive(false)
else
self.empty.gameObject:SetActive(false)
self.scroll.gameObject:SetActive(true)
self.scroll:SetData(curData, function(index, go)
self:SetSingleData(go, curData[index], index)
end)
self.scroll:SetIndex(1)
end
end
function TailsManSouPanel:SetSingleData(go, data, index)
if not self.itemPreList[go] then
self.itemPreList[go] = {}
self.itemPreList[go].obj = Util.GetGameObject(go, "go")
--self.itemPreList[go].effect = Util.GetGameObject(self.itemPreList[go].obj,"ui-fabao")
self.itemPreList[go].bg = Util.GetGameObject(self.itemPreList[go].obj, "bg"):GetComponent("Image") --根据品质变化的图片 f_fabaojuling_zhujiemianbaijin f_fabaojuling_zhujiemianhong f_fabaojuling_zhujiemianjin
--self.itemPreList[go].tip = Util.GetGameObject(self.itemPreList[go].bg.transform,"slider/tip"):GetComponent("Image") --根据品质变化的图片 f_fabaojuling_zhujiemianbaijin f_fabaojuling_zhujiemianhong f_fabaojuling_zhujiemianjin
self.itemPreList[go].mask1 = Util.GetGameObject(self.itemPreList[go].bg.transform, "slider/mask1"):GetComponent(
"Image") --根据品质变化的图片 f_fabaojuling_zhujiemianbaijin f_fabaojuling_zhujiemianhong f_fabaojuling_zhujiemianjin
self.itemPreList[go].mask2 = Util.GetGameObject(self.itemPreList[go].bg.transform, "slider/mask2"):GetComponent(
"Image") --根据品质变化的图片 f_fabaojuling_zhujiemianbaijin f_fabaojuling_zhujiemianhong f_fabaojuling_zhujiemianjin
self.itemPreList[go].nameText = Util.GetGameObject(self.itemPreList[go].obj, "bg/nameDi"):GetComponent("Image") --名字图片 根据表读取
self.itemPreList[go].slider = Util.GetGameObject(self.itemPreList[go].obj, "bg/slider"):GetComponent("Slider")
self.itemPreList[go].progress = Util.GetGameObject(self.itemPreList[go].slider.transform, "progress")
:GetComponent("Text")
self.itemPreList[go].red = Util.GetGameObject(self.itemPreList[go].bg.transform, "red")
self.itemPreList[go].iconList = {}
for i = 1, 4 do
self.itemPreList[go].iconList[i] = {}
self.itemPreList[go].iconList[i].go = Util.GetGameObject(self.itemPreList[go].bg.transform,
"compGrid/iconDi" .. i)
self.itemPreList[go].iconList[i].icon = Util.GetGameObject(self.itemPreList[go].iconList[i].go.transform,
"icon"):GetComponent("Image")
self.itemPreList[go].iconList[i].effecthong = Util.GetGameObject(self.itemPreList[go].iconList[i].go,
"UI_Effect_Kuang_HongSe")
self.itemPreList[go].iconList[i].effectjin = Util.GetGameObject(self.itemPreList[go].iconList[i].go,
"UI_Effect_Kuang_JinSe")
end
end
self.itemPreList[go].data = data
if not data then
go.gameObject:SetActive(false)
return
end
go.gameObject:SetActive(true)
self.itemPreList[go].bg.sprite = this.spLoader:LoadSprite(GetTailsmanSoulDiImage[self.itemPreList[go].data.quality]
.bg)
--self.itemPreList[go].tip.sprite = this.spLoader:LoadSprite(GetTailsmanSoulDiImage[self.itemPreList[go].data.quality].tip)
self.itemPreList[go].mask1.sprite = this.spLoader:LoadSprite("f_fabaojuling_huawenbaijin")
self.itemPreList[go].mask2.sprite = this.spLoader:LoadSprite("f_fabaojuling_huawenbaijin")
self.itemPreList[go].nameText.sprite = this.spLoader:LoadSprite(GetResourcePath(self.itemPreList[go].data.icon))
self.itemPreList[go].slider.value = self.itemPreList[go].data.lv / self.itemPreList[go].data.maxLv
self.itemPreList[go].progress.text = self.itemPreList[go].data.lv .. "/" .. self.itemPreList[go].data.maxLv
self.itemPreList[go].red.gameObject:SetActive(self:CheckRedPoint(self.itemPreList[go].data.trumpList))
--self.itemPreList[go].effect:SetActive(self.itemPreList[go].data.quality == 6)
for i = 1, math.max(#data.trumpList, #self.itemPreList[go].iconList) do
if not data.trumpList[i] then
self.itemPreList[go].iconList[i].go.gameObject:SetActive(false)
else
self.itemPreList[go].iconList[i].go.gameObject:SetActive(true)
self.itemPreList[go].iconList[i].icon.sprite = this.spLoader:LoadSprite(GetResourcePath(data.trumpList[i]
.config.Icon))
end
self.itemPreList[go].iconList[i].effecthong.gameObject:SetActive(data.trumpList[i].config.Quality == 6)
self.itemPreList[go].iconList[i].effectjin.gameObject:SetActive(data.trumpList[i].config.Quality == 5)
end
Util.SetParticleSortLayer(go, self.sortingOrder + 1)
--Util.SetParticleSortLayer(self.itemPreList[go].effect,self.sortingOrder + 1)
Util.AddOnceClick(go, function()
UIManager.OpenPanel(UIName.TailsmanSoulMainPanel, self.itemPreList[go].data.id)
end)
end
function TailsManSouPanel:CheckRedPoint(data)
for k, v in pairs(data) do
local costId, num = TailsManSoulManager.GetTailsmanCost(v.id, v.lv)
if num and num > 0 then
if BagManager.GetItemCountById(costId) >= num then
return true
end
end
end
return false
end
--界面层级发生改变(用于子类重写)
function TailsManSouPanel:OnSortingOrderChange()
for k, v in pairs(self.itemPreList) do
Util.SetParticleSortLayer(k, self.sortingOrder + 1)
end
Util.SetParticleSortLayer(self.effectJin.gameObject, self.sortingOrder + 1)
Util.SetParticleSortLayer(self.effectHong.gameObject, self.sortingOrder + 1)
end
--界面关闭时调用(用于子类重写)
function TailsManSouPanel:OnClose()
end
--界面销毁时调用(用于子类重写)
function TailsManSouPanel:OnDestroy()
proId = 1
this.spLoader:Destroy()
for k, v in pairs(redPointList) do
ClearRedPointObject(k, v)
end
SubUIManager.Close(self.scroll)
self.itemPreList = {}
redPointList = {}
SubUIManager.Close(self.UpView)
curPage = 1
ClearRedPointObject(RedPointType.tailsmanSoul_gold, tabsRedpoints[1].gameObject)
ClearRedPointObject(RedPointType.tailsmanSoul_red, tabsRedpoints[2].gameObject)
ClearRedPointObject(RedPointType.tailsmanSoul_whiteGold, tabsRedpoints[3].gameObject)
ClearRedPointObject(RedPointType.tailsmanSoul_blue, tabsRedpoints[4].gameObject)
ClearRedPointObject(RedPointType.tailsmanSoul_whiteBlue, tabsRedpoints[5].gameObject)
end
return TailsManSouPanel