miduo_client/Assets/ManagedResources/~Lua/Modules/RoleInfo/RoleSkinPanel.lua

244 lines
8.2 KiB
Lua
Raw Normal View History

2021-04-21 13:12:04 +08:00
require("Base/BasePanel")
2020-11-03 15:17:48 +08:00
RoleSkinPanel = Inherit(BasePanel)
local this = RoleSkinPanel
local porpertyConfigs = ConfigManager.GetConfig(ConfigName.PropertyConfig)
local artResConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
local skinPres = {}
local porpertys = {}
local curHeroData = {}
2020-11-10 10:23:55 +08:00
local curSkinId = 0
2020-11-03 15:17:48 +08:00
local parent = {}
2020-11-10 10:23:55 +08:00
local skins = {}
function RoleSkinPanel:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = RoleSkinPanel })
return b
end
function RoleSkinPanel:InitComponent()
2021-04-21 13:12:04 +08:00
this.spLoader = SpriteLoader.New()
this.skinPre = Util.GetGameObject(self.gameObject,"skinPre")
this.Select = Util.GetGameObject(self.gameObject,"selectLight")
this.skinGrid = Util.GetGameObject(self.gameObject,"scroll/skinGrid")
2020-11-03 15:17:48 +08:00
for i = 1, this.skinGrid.transform.childCount do
2020-11-05 18:26:38 +08:00
skinPres[i] = {}
skinPres[i].obj = this.skinGrid.transform:GetChild(i - 1)
skinPres[i].data = nil
2020-11-03 15:17:48 +08:00
end
end
function RoleSkinPanel:BindEvent()
end
2020-11-05 18:26:38 +08:00
--添加事件监听(用于子类重写)
function RoleSkinPanel:AddListener()
2020-11-14 14:16:10 +08:00
2020-11-05 18:26:38 +08:00
end
--移除事件监听(用于子类重写)
function RoleSkinPanel:RemoveListener()
2020-11-14 14:16:10 +08:00
2020-11-05 18:26:38 +08:00
end
2020-11-10 10:23:55 +08:00
this.UpdateShow = this:OnShow()
2020-11-03 15:17:48 +08:00
function RoleSkinPanel:OnShow()
self.gameObject:SetActive(true)
end
function RoleSkinPanel:SetData(_sortinglayer,_parent,_curHerodata,_isUpZhen,_heroDatas)
2020-11-03 17:27:32 +08:00
curHeroData = _curHerodata
parent = _parent
2020-11-10 10:23:55 +08:00
curSkinId = curHeroData.skinId
2020-11-03 15:17:48 +08:00
local configs = ConfigManager.GetAllConfigsDataByKey(ConfigName.HeroSkin,"HeroId",curHeroData.id)
2020-11-06 16:11:37 +08:00
local tempskins = {}
2020-11-03 15:17:48 +08:00
for i = 1 ,#configs do
--LogGreen("configs[i].Type:"..configs[i].Type)
2021-06-03 10:59:54 +08:00
if not tempskins[configs[i].Type] and configs[i].Show == 1 then
2020-11-06 16:11:37 +08:00
tempskins[configs[i].Type] = configs[i]
2020-11-03 15:17:48 +08:00
end
end
2020-11-10 10:23:55 +08:00
skins = {}
2020-11-06 16:11:37 +08:00
for i,v in pairs(tempskins) do
table.insert(skins,v)
end
table.sort(skins,function(a,b)
if a.Type == b.Type then
return a.Id < b.Id
else
return a.Type < b.Type
end
end)
2020-11-10 10:23:55 +08:00
this:UpdateView()
this:ShowTime()
end
function RoleSkinPanel:UpdateView()
2020-11-05 18:26:38 +08:00
for k,v in pairs(skinPres) do
v.obj.gameObject:SetActive(false)
v.data = nil
2020-11-03 15:17:48 +08:00
end
local index = 1
2020-11-06 16:11:37 +08:00
for i,v in ipairs(skins) do
2020-11-03 15:17:48 +08:00
if not skinPres[index] then
2020-11-05 18:26:38 +08:00
skinPres[index] = {}
end
if not skinPres[index].obj then
skinPres[index].obj = newObjToParent(this.skinPre,this.skinGrid)
2020-11-03 15:17:48 +08:00
end
2020-11-05 18:26:38 +08:00
skinPres[index].data = v
--LogGreen("v.Type:"..v.Type)
2020-11-05 18:26:38 +08:00
skinPres[index].obj.gameObject:SetActive(true)
self:SetSingleData(skinPres[index].obj,v)
2020-11-03 15:17:48 +08:00
index = index + 1
end
end
function RoleSkinPanel:SetSingleData(go,data)
--LogGreen("皮肤Id"..data.Type)
2020-11-03 15:17:48 +08:00
local icon = Util.GetGameObject(go,"skinIcon"):GetComponent("Image")
local lock = Util.GetGameObject(go,"skinState/Off")
local infoPre = Util.GetGameObject(go,"skinInfo/infoPre")
local infoGrid = Util.GetGameObject(go,"skinInfo/grid")
local skinName = Util.GetGameObject(go,"skinName/name"):GetComponent("Text")
2021-01-26 17:08:39 +08:00
skinName.text = GetLanguageStrById(data.ReadingName)
2020-11-06 20:36:38 +08:00
if data.IsDefault == 1 then
2021-03-02 16:53:12 +08:00
skinName.text = Language[11828]
2020-11-06 20:36:38 +08:00
end
--icon.sprite = this.spLoader:LoadSprite(artResConfig[data.Painting].Name)
2020-11-03 15:17:48 +08:00
if not porpertys then
porpertys = {}
end
if not porpertys[go] then
porpertys[go] = {}
end
for i = 1, infoGrid.transform.childCount do
porpertys[go][i] = infoGrid.transform:GetChild(i - 1)
porpertys[go][i].gameObject:SetActive(false)
end
if HeroSkinManager.IsExist(data.Type) or data.IsDefault == 1 then
if data.MonomerProperty and #data.MonomerProperty > 0 then
for i = 1, #data.MonomerProperty do
if not porpertys[go][i] then
porpertys[go][i] = newObjToParent(infoPre,infoGrid)
end
porpertys[go][i].gameObject:SetActive(true)
local tempProData = porpertyConfigs[data.MonomerProperty[i][1]]
2021-01-26 17:08:39 +08:00
Util.GetGameObject(porpertys[go][i],"info"):GetComponent("Text").text = GetLanguageStrById(tempProData.Info) .. "+" ..GetPropertyFormatStr(tempProData.Style,data.MonomerProperty[i][2])
2020-11-03 15:17:48 +08:00
porpertys[go][i]:GetComponent("Button").enabled = false
end
end
lock.gameObject:SetActive(false)
else
if not porpertys[go][1] then
porpertys[go][1] = newObjToParent(infoPre,infoGrid)
end
porpertys[go][1].gameObject:SetActive(true)
2021-01-26 17:08:39 +08:00
porpertys[go][1]:GetComponent("Button").enabled = true
2021-03-02 16:53:12 +08:00
Util.GetGameObject(porpertys[go][1],"info"):GetComponent("Text").text = Language[11829]
2020-11-03 15:17:48 +08:00
Util.AddOnceClick(porpertys[go][1].gameObject,function()
2020-11-05 16:02:49 +08:00
UIManager.OpenPanel(UIName.RewardItemSingleShowPopup, data.Id,function() end)
2020-11-03 15:17:48 +08:00
end)
lock.gameObject:SetActive(true)
end
if data.Type == curHeroData.skinId or (curHeroData.skinId == 0 and data.IsDefault == 1) then
2020-11-05 18:26:38 +08:00
this.Select.transform:SetParent(Util.GetGameObject(go,"skinState").transform)
this.Select:GetComponent("RectTransform").localPosition = Vector3.zero
2020-11-05 16:02:49 +08:00
end
Util.AddOnceClick(go.gameObject,function()
local skinId = data.IsDefault == 1 and 0 or data.Type
this:BtnAction(skinId,data)
end)
end
function RoleSkinPanel:BtnAction(skinId,data)
2020-11-10 10:23:55 +08:00
if skinId == curSkinId then
2020-11-05 16:02:49 +08:00
return
end
2020-11-10 10:23:55 +08:00
curSkinId = skinId
2020-11-05 16:02:49 +08:00
if HeroSkinManager.IsExist(skinId) or skinId == 0 then
NetManager.ChangeHeroSkin(curHeroData.dynamicId,skinId,function()
HeroManager.ChangeSkinId(curHeroData.dynamicId,skinId)
local tempdata = HeroManager.GetSingleHeroData(curHeroData.dynamicId)
2020-11-06 20:36:38 +08:00
parent:ChangeCurentHeroSkinLive()
2021-03-02 16:53:12 +08:00
PopupTipPanel.ShowTip(Language[11830])
2020-11-10 10:23:55 +08:00
this:UpdateView()
2020-11-03 15:17:48 +08:00
end)
2020-11-05 16:02:49 +08:00
else
2020-11-06 20:36:38 +08:00
parent:ChangeCurentHeroSkinLive(data)
2021-03-02 16:53:12 +08:00
PopupTipPanel.ShowTip(Language[11831])
2020-11-03 15:17:48 +08:00
end
2020-11-05 18:26:38 +08:00
end
2020-11-05 16:02:49 +08:00
function RoleSkinPanel:ShowTime()
2020-11-05 18:26:38 +08:00
if this.timer then
this.timer:Stop()
this.timer = nil
end
this.timer = Timer.New(function()
for k,v in pairs(skinPres) do
if v.data then
Util.GetGameObject(v.obj,"skinTime"):SetActive(true)
local skindata = HeroSkinManager.GetSkins(v.data.Type)
if v.data.IsDefault == 1 or not skindata then
Util.GetGameObject(v.obj,"skinTime"):SetActive(false)
2020-11-06 20:36:38 +08:00
elseif skindata.overTime < 0 then
Util.GetGameObject(v.obj,"skinTime"):SetActive(false)
2020-11-05 18:26:38 +08:00
else
local time = skindata.overTime
if time < 0 then
2020-11-06 20:36:38 +08:00
Util.GetGameObject(v.obj,"skinTime"):SetActive(false)
2020-11-05 18:26:38 +08:00
else
time = this:TimeToFormat(time)
Util.GetGameObject(v.obj,"skinTime/time"):GetComponent("Text").text = time
end
end
end
end
end,1,-1,true)
this.timer:Start()
end
function RoleSkinPanel:TimeToFormat(time)
local day = math.floor(time / (24 * 3600))
local minute = math.floor(time / 60) % 60
local sec = time % 60
local hour = math.floor(math.floor(time - day * 24 * 3600 - sec - minute * 60) / 3600)
if day > 0 then
2021-03-02 16:53:12 +08:00
return string.format(Language[11832],day)
2020-11-05 18:26:38 +08:00
elseif hour > 0 then
2021-03-02 16:53:12 +08:00
return string.format(Language[11833],hour)
2020-11-05 18:26:38 +08:00
elseif minute > 0 then
2021-03-02 16:53:12 +08:00
return string.format(Language[11834],minute)
2020-11-05 18:26:38 +08:00
else
2021-03-02 16:53:12 +08:00
return string.format(Language[11834],1)
2020-11-05 18:26:38 +08:00
end
2020-11-03 15:17:48 +08:00
end
2020-11-05 16:02:49 +08:00
2020-11-05 18:26:38 +08:00
2020-11-03 15:17:48 +08:00
function RoleSkinPanel:OnHide()
self.gameObject:SetActive(false)
2020-11-03 15:17:48 +08:00
end
function RoleSkinPanel:OnClose()
skinPres = {}
porpertys = {}
curHeroData = {}
if this.timer then
this.timer:Stop()
this.timer = nil
end
2020-11-03 15:17:48 +08:00
end
function RoleSkinPanel:OnDestroy()
2021-04-21 13:12:04 +08:00
this.spLoader:Destroy()
2020-11-03 15:17:48 +08:00
skinPres = {}
porpertys = {}
curHeroData = {}
2020-11-05 18:26:38 +08:00
if this.timer then
this.timer:Stop()
this.timer = nil
end
2020-11-03 15:17:48 +08:00
end
return RoleSkinPanel