miduo_client/Assets/ManagedResources/~Lua/Modules/Common/Pool/Item/PlayerHead.lua

109 lines
3.3 KiB
Lua

local PoolItemBase = require("Modules/Common/Pool/PoolItemBase")
local PlayerHead = quick_class("PlayerHead", PoolItemBase)
-- 对象创建时回调(只会调用一次)
function PlayerHead:OnCreate()
self.spLoader = SpriteLoader.New()
self.icon = Util.GetGameObject(self.gameObject, "icon")
self.frame = Util.GetGameObject(self.gameObject, "frame")
self.lvRoot = Util.GetGameObject(self.gameObject, "lvRoot")
self.lv = Util.GetGameObject(self.gameObject, "lvRoot/lv")
self.orderLayer = 0
self.effectScale = 1
self.effectScaleFix = 1
end
-- 对象使用时回调(会重复调用)
function PlayerHead:OnUse()
self:Reset()
end
-- 对象回收时回调(会重复调用)
function PlayerHead:OnRecycle()
end
-- 对象销毁时回调(只会调用一次)
function PlayerHead:OnDestroy()
self.spLoader:Destroy()
end
-- 设置头像
function PlayerHead:SetHead(headId)
self.icon:SetActive(true)
self.icon:GetComponent("Image").sprite = GetPlayerHeadSprite(self.spLoader, headId)
end
-- 设置头像框
function PlayerHead:SetFrame(frameId)
self.frame:SetActive(true)
self.frame:GetComponent("Image").sprite = GetPlayerHeadFrameSprite(self.spLoader, frameId)
-- 检测特效
self:UnLoadFrameEffect()
self:LoadFrameEffect(frameId)
end
function PlayerHead:SetEffectScale(scale)
if self.frameEffect then
local targetScale = scale/self.effectScale
self.effectScale = scale
Util.SetParticleScale(self.frameEffect, targetScale)
end
end
-- 头像框特效相关
function PlayerHead:LoadFrameEffect(frameId)
local name, scale, pos = GetPlayerHeadFrameEffect(frameId)
if name then
self.frameEffectName = name
self.frameEffect = poolManager:LoadAsset(self.frameEffectName, PoolManager.AssetType.GameObject)
self.frameEffect.transform:SetParent(self.frame.transform)
self.frameEffect.transform.localPosition = pos
self.frameEffect.transform.localScale = Vector3.one
self.effectScaleFix = scale
Util.SetParticleScale(self.frameEffect, scale) -- 还原修正大小
end
end
function PlayerHead:UnLoadFrameEffect()
if self.frameEffectName and self.frameEffect then
-- 重置层级
self:SetLayer(0)
self:SetEffectScale(1)
Util.SetParticleScale(self.frameEffect, 1/self.effectScaleFix) -- 还原修正大小
poolManager:UnLoadAsset(self.frameEffectName, self.frameEffect, PoolManager.AssetType.GameObject)
self.frameEffectName = nil
self.frameEffect = nil
end
end
function PlayerHead:SetLayer(orderLayer)
if not orderLayer then return end
if self.frameEffect then
Util.AddParticleSortLayer(self.frameEffect, orderLayer - self.orderLayer)
self.orderLayer = orderLayer
end
end
-- 设置等级
function PlayerHead:SetLevel(level)
self.lvRoot:SetActive(true)
self.lv:GetComponent("Text").text = level
end
-- 设置等级
function PlayerHead:SetGray(isGray)
Util.SetGray(self.gameObject, isGray)
if self.frameEffect then
self.frameEffect:SetActive(not isGray)
end
end
--
function PlayerHead:Reset()
Util.SetGray(self.gameObject, false)
self.icon:SetActive(false)
self.frame:SetActive(false)
self.lvRoot:SetActive(false)
-- 卸载头像框特效
self:UnLoadFrameEffect()
end
return PlayerHead