c1_lua/lua/app/bf/unity/uiprefab_object.lua
2023-06-05 16:23:55 +08:00

895 lines
24 KiB
Lua

local BaseObject = require "app/bf/unity/base_object"
local EffectObject = require "app/bf/unity/effect_object"
local CharacterObject = require "app/bf/unity/character_object"
local UISpineObject = require "app/bf/unity/ui_spine_object"
local MeshSpineObject = require "app/bf/unity/mesh_spine_object"
local UIPrefabObject = class("UIPrefabObject", BaseObject)
local BF_PREFAB_HELPER = GConst.TYPEOF_UNITY_CLASS.BF_PREFAB_HELPER
local BF_UI_TOUCH_EVENT = GConst.TYPEOF_UNITY_CLASS.BF_UI_TOUCH_EVENT
local BF_UI_DRAG_EVENT = GConst.TYPEOF_UNITY_CLASS.BF_UI_DRAG_EVENT
local BF_UI_CELL_DRAG_EVNET = GConst.TYPEOF_UNITY_CLASS.BF_UI_CELL_DRAG_EVENT
local UI_MASKABLE_GRAPHIC = GConst.TYPEOF_UNITY_CLASS.UI_MASKABLE_GRAPHIC
local LANGUAGE_ATLAS_PATH = "assets/arts/language/%s/sprites/%s/%s.asset"
local LANGUAGE_SPRITE_PATH = "assets/arts/language/%s/sprites/%s/%s.png"
local DELAULT_LONG_PRESS_TIME = 0.5
local Vector2 = BF.Vector2(0, 0)
local Color4 = BF.Color(0, 0, 0, 0)
local hash = GFunc.hash
local CHILDMAP_METATABLE = {
__index = function(t, k)
if rawget(t, k) == nil then
local v = rawget(t, hash(k))
if v then
rawset(t, k, v)
end
return v
end
return rawget(t, k)
end
}
local function _createDefaultChildObject(self, index, gameObject)
local child = UIPrefabObject:create()
child:initWithPrefabHelper(self.prefabHelper, index, gameObject)
return child
end
local function _createUIChildObject(self, index, gameObject)
local child = UIPrefabObject:create()
child:initWithPrefab(nil, gameObject)
child:initPrefabHelper()
return child
end
local function _createEffectChildObject(self, index, gameObject)
local child = EffectObject:create()
child:initWithPrefab(nil, gameObject)
return child
end
local function _createSpineUIChildObject(self, index, gameObject)
local child = UISpineObject:create()
child:initWithPrefab(nil, gameObject)
child:getAnimationState()
local skeletonGraphic = child:getSkeletonGraphic()
skeletonGraphic:Initialize(false)
skeletonGraphic.raycastTarget = false
return child
end
local function _createSpineMeshChildObject(self, index, gameObject)
local child = MeshSpineObject:create()
child:initWithPrefab(nil, gameObject)
child:getAnimationState()
local skeletonAnimation = child:getSkeletonAnimation()
skeletonAnimation:Initialize(false)
return child
end
local function _createCharacterChildObject(self, index, gameObject)
local child = CharacterObject:create()
child:initWithPrefab(nil, gameObject)
return child
end
UIPrefabObject.createChildObject = {
[GConst.GAME_OBJECT_TYPE.DEFAULT] = _createDefaultChildObject,
[GConst.GAME_OBJECT_TYPE.UI_OBJECT] = _createUIChildObject,
[GConst.GAME_OBJECT_TYPE.EFFECT_OBJECT] = _createEffectChildObject,
[GConst.GAME_OBJECT_TYPE.MODEL_OBJECT] = _createDefaultChildObject,
[GConst.GAME_OBJECT_TYPE.CHARACTER_OBJECT] = _createCharacterChildObject,
[GConst.GAME_OBJECT_TYPE.TIMELINE_OBJECT] = _createDefaultChildObject,
[GConst.GAME_OBJECT_TYPE.SPINE_UI_OBJECT] = _createSpineUIChildObject,
[GConst.GAME_OBJECT_TYPE.SPINE_MESH_OBJECT] = _createSpineMeshChildObject,
}
function UIPrefabObject:initWithPrefabHelper(prefabHelper, index, gameObject)
if self.prefabHelper == nil then
self.prefabHelper = prefabHelper
self.objectIndex = index
self.gameObject = gameObject
end
end
function UIPrefabObject:initPrefabHelper()
if self.gameObject == nil then
return
end
self.prefabHelper = self.gameObject:GetComponent(BF_PREFAB_HELPER)
if self.prefabHelper then
self.objectIndex = self.prefabHelper:GetRootPrefabIndex()
end
end
function UIPrefabObject:getPrefabHelper()
return self.prefabHelper
end
function UIPrefabObject:genAllChildren(isRegenerate)
local childMap
if self.isGenChildren then
if isRegenerate then
childMap = {}
for k, child in ipairs(self.childList) do
local name = child:getName()
if name ~= "" and childMap[name] == nil then
childMap[name] = child
end
end
else
return self.childMap
end
else
self.isGenChildren = true
childMap = {}
if self.prefabHelper then
local childNum = self.prefabHelper:GetListCount()
for i = 0, childNum do
if i ~= self.objectIndex then
local gameObject = self.prefabHelper:GetGameObjectByIndex(i)
local objectType = self.prefabHelper:GetObjectTypeByIndex(i)
local hashName = self.prefabHelper:GetHashNameByIndex(i)
local func = self.createChildObject[objectType] or _createDefaultChildObject
local child = func(self, i, gameObject)
child:setName(hashName)
child:setAdmin(self)
if childMap[hashName] == nil then
childMap[hashName] = child
end
table.insert(self.childList, child)
end
end
end
end
setmetatable(childMap, CHILDMAP_METATABLE)
self.childMap = childMap
return childMap
end
function UIPrefabObject:getChildrenMap()
return self.childMap
end
function UIPrefabObject:getGameObject()
if self.gameObject == nil and self.objectIndex then
self.gameObject = self.prefabHelper:GetGameObjectByIndex(self.objectIndex)
end
return self.gameObject
end
function UIPrefabObject:setAnchoredPositionX(x)
if self.prefabHelper then
self.prefabHelper:SetAnchoredPositionX(self.objectIndex, x)
else
BaseObject.setAnchoredPositionX(self, x)
end
end
function UIPrefabObject:setAnchoredPositionY(y)
if self.prefabHelper then
self.prefabHelper:SetAnchoredPositionY(self.objectIndex, y)
else
BaseObject.setAnchoredPositionY(self, y)
end
end
function UIPrefabObject:setAnchoredPosition(x, y)
if self.prefabHelper then
self.prefabHelper:SetAnchoredPosition(self.objectIndex, x, y)
else
BaseObject.setAnchoredPosition(self, x, y)
end
end
function UIPrefabObject:fastGetAnchoredPosition()
if self.prefabHelper then
self.prefabHelper:CacheAnchoredPosition(self.objectIndex)
return self.prefabHelper.PositionX, self.prefabHelper.PositionY
else
local anchoredPosition = self:getTransform().anchoredPosition
return anchoredPosition.x, anchoredPosition.y
end
end
function UIPrefabObject:fastGetAnchoredPositionX()
if self.prefabHelper then
self.prefabHelper:CacheAnchoredPosition(self.objectIndex)
return self.prefabHelper.PositionX
else
local anchoredPosition = self:getTransform().anchoredPosition
return anchoredPosition.x
end
end
function UIPrefabObject:fastGetAnchoredPositionY()
if self.prefabHelper then
self.prefabHelper:CacheAnchoredPosition(self.objectIndex)
return self.prefabHelper.PositionY
else
local anchoredPosition = self:getTransform().anchoredPosition
return anchoredPosition.y
end
end
function UIPrefabObject:getAnchoredPosition()
if self.prefabHelper then
return self.prefabHelper:GetAnchoredPosition(self.objectIndex)
else
return BaseObject.getAnchoredPosition(self)
end
end
function UIPrefabObject:addAnchoredPosition(x, y)
if self.prefabHelper then
self.prefabHelper:AddAnchoredPosition(self.objectIndex, x, y)
else
BaseObject.addAnchoredPosition(self, x, y)
end
end
function UIPrefabObject:setAnchorMin(x, y)
if self.prefabHelper then
self.prefabHelper:SetAnchorMin(self.objectIndex, x, y)
end
end
function UIPrefabObject:setAnchorMax(x, y)
if self.prefabHelper then
self.prefabHelper:SetAnchorMax(self.objectIndex, x, y)
end
end
function UIPrefabObject:setSizeDelta(x, y)
if self.prefabHelper then
self.prefabHelper:SetSizeDelta(self.objectIndex, x, y)
else
BaseObject.setSizeDelta(self, x, y)
end
end
function UIPrefabObject:setSizeDeltaX(x)
if self.prefabHelper then
self.prefabHelper:SetSizeDeltaX(self.objectIndex, x)
else
BaseObject.setSizeDeltaX(self, x)
end
end
function UIPrefabObject:setSizeDeltaY(y)
if self.prefabHelper then
self.prefabHelper:SetSizeDeltaY(self.objectIndex, y)
else
BaseObject.setSizeDeltaY(self, y)
end
end
function UIPrefabObject:addSizeDelta(x, y)
if self.prefabHelper then
self.prefabHelper:AddSizeDelta(self.objectIndex, x, y)
else
BaseObject.addSizeDelta(self, x, y)
end
end
function UIPrefabObject:getSizeDelta()
if self.prefabHelper then
return self.prefabHelper:GetSizeDelta(self.objectIndex)
else
return BaseObject.getSizeDelta(self)
end
end
function UIPrefabObject:fastGetSizeDelta()
if self.prefabHelper then
self.prefabHelper:CacheSizeDelt(self.objectIndex)
return self.prefabHelper.PositionX, self.prefabHelper.PositionY
else
local sizeDelta = self:getSizeDelta()
return sizeDelta.x, sizeDelta.y
end
end
function UIPrefabObject:fastGetSizeDeltaY()
if self.prefabHelper then
self.prefabHelper:CacheSizeDelt(self.objectIndex)
return self.prefabHelper.PositionY
else
local sizeDelta = self:getSizeDelta()
return sizeDelta.y
end
end
function UIPrefabObject:getRectWidth()
if self.prefabHelper then
return self.prefabHelper:GetRectWidth(self.objectIndex)
else
local transform = self:getTransform()
return transform.rect.width
end
end
function UIPrefabObject:getRectHeight()
if self.prefabHelper then
return self.prefabHelper:GetRectHeight(self.objectIndex)
else
local transform = self:getTransform()
return transform.rect.height
end
end
function UIPrefabObject:setPosition(x, y, z)
if self.prefabHelper then
self.prefabHelper:SetPosition(self.objectIndex, x, y, z)
else
BaseObject.setPosition(self, x, y, z)
end
end
function UIPrefabObject:addPosition(x, y, z)
if self.prefabHelper then
self.prefabHelper:AddPosition(self.objectIndex, x, y, z)
else
BaseObject.addPosition(self, x, y, z)
end
end
function UIPrefabObject:setLocalPosition(x, y, z)
if self.prefabHelper then
self.prefabHelper:SetLocalPosition(self.objectIndex, x, y, z)
else
BaseObject.setLocalPosition(self, x, y, z)
end
end
function UIPrefabObject:setLocalPositionX(x)
if self.prefabHelper then
self.prefabHelper:SetLocalPositionX(self.objectIndex, x)
else
BaseObject.setLocalPositionX(self, x)
end
end
function UIPrefabObject:setLocalPositionY(y)
if self.prefabHelper then
self.prefabHelper:SetLocalPositionY(self.objectIndex, y)
else
BaseObject.setLocalPositionY(self, y)
end
end
function UIPrefabObject:addLocalPosition(x, y, z)
if self.prefabHelper then
self.prefabHelper:AddLocalPosition(self.objectIndex, x, y, z)
else
BaseObject.addLocalPosition(self, x, y, z)
end
end
function UIPrefabObject:fastGetLocalPosition()
if self.prefabHelper then
self.prefabHelper:CacheLocalPosition(self.objectIndex)
return self.prefabHelper.PositionX, self.prefabHelper.PositionY, self.prefabHelper.PositionZ
else
local position = self:getTransform().localPosition
return position.x, position.y, position.z
end
end
function UIPrefabObject:getlocalRotationZ()
if self.prefabHelper then
return self.prefabHelper:GetlocalRotationZ(self.objectIndex)
else
return 0
end
end
function UIPrefabObject:setOffsetMin(x, y)
if self.prefabHelper then
self.prefabHelper:SetOffsetMin(self.objectIndex, x, y)
else
local transform = self:getTransform()
Vector2.x = x
Vector2.y = y
transform.offsetMin = Vector2
end
end
function UIPrefabObject:setOffsetMax(x, y)
if self.prefabHelper then
self.prefabHelper:SetOffsetMax(self.objectIndex, x, y)
else
local transform = self:getTransform()
Vector2.x = x
Vector2.y = y
transform.offsetMax = Vector2
end
end
function UIPrefabObject:setVisible(visible, scale)
if visible then
scale = scale or 1
self:setLocalScale(scale, scale, scale)
else
self:setLocalScale(0, 0, 0)
end
end
function UIPrefabObject:setLocalScale(x, y, z)
if self.prefabHelper then
self.prefabHelper:SetLocalScale(self.objectIndex, x, y, z)
else
BaseObject.setLocalScale(self, x, y, z)
end
end
function UIPrefabObject:fastGetLocalScale()
if self.prefabHelper then
self.prefabHelper:CacheLocalScale(self.objectIndex)
return self.prefabHelper.PositionX, self.prefabHelper.PositionY, self.prefabHelper.PositionZ
else
local localScale = self:getTransform().localScale
return localScale.x, localScale.y, localScale.z
end
end
function UIPrefabObject:addLocalScale(x, y, z)
if self.prefabHelper then
self.prefabHelper:AddLocalScale(self.objectIndex, x, y, z)
else
BaseObject.addLocalScale(self, x, y, z)
end
end
function UIPrefabObject:setEulerAngles(x, y, z)
if self.prefabHelper then
self.prefabHelper:SetEulerAngles(self.objectIndex, x, y, z)
else
BaseObject.setEulerAngles(self, x, y, z)
end
end
function UIPrefabObject:addEulerAngles(x, y, z)
if self.prefabHelper then
self.prefabHelper:AddEulerAngles(self.objectIndex, x, y, z)
else
BaseObject.addEulerAngles(self, x, y, z)
end
end
function UIPrefabObject:setLocalEulerAngles(x, y, z)
if self.prefabHelper then
self.prefabHelper:SetLocalEulerAngles(self.objectIndex, x, y, z)
else
BaseObject.setLocalEulerAngles(self, x, y, z)
end
end
function UIPrefabObject:addLocalEulerAngles(x, y, z)
if self.prefabHelper then
self.prefabHelper:AddLocalEulerAngles(self.objectIndex, x, y, z)
else
BaseObject.addLocalEulerAngles(self, x, y, z)
end
end
--cell配合scrollrect使用监听滑动方向
function UIPrefabObject:addCellDragListener(func, bindSlideType)
self._addTouchFlag = true
local eventListener = self:getComponent(BF_UI_CELL_DRAG_EVNET)
if eventListener == nil then
eventListener = self:addComponent(BF_UI_CELL_DRAG_EVNET)
end
self._touchEventCallback = func
eventListener:AddTouchEventListener(function(eventType, x, y)
self:_onCellDragEvent(eventType, x, y)
end, bindSlideType)
end
function UIPrefabObject:_onCellDragEvent(eventType, x, y)
if self._touchEventCallback then
self._touchEventCallback(eventType, x, y)
end
self:_handleLongPressEvent(eventType, x, y)
end
function UIPrefabObject:addDragListener(func)
self._addTouchFlag = true
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener == nil then
eventListener = self:addComponent(BF_UI_DRAG_EVENT)
end
self._touchEventCallback = func
eventListener:AddTouchEventListener(function(eventType, x, y)
self:_onDragEvent(eventType, x, y)
end)
end
function UIPrefabObject:_onDragEvent(eventType, x, y)
if self._touchEventCallback then
self._touchEventCallback(eventType, x, y)
end
self:_handleLongPressEvent(eventType, x, y)
end
function UIPrefabObject:addTouchListener(func)
self._addTouchFlag = true
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener == nil then
eventListener = self:addComponent(BF_UI_TOUCH_EVENT)
end
self._touchEventCallback = func
eventListener:AddTouchEventListener(function(eventType, x, y)
self:_onTouchEvent(eventType, x, y)
end)
end
function UIPrefabObject:_onTouchEvent(eventType, x, y)
if self._touchEventCallback then
self._touchEventCallback(eventType, x, y)
end
self:_handleLongPressEvent(eventType, x, y)
end
function UIPrefabObject:addClickListener(func, clickSound)
self._addTouchFlag = true
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener == nil then
eventListener = self:addComponent(BF_UI_TOUCH_EVENT)
end
self._touchEventCallback = func
eventListener:AddTouchEventListener(function(eventType, x, y)
self:_onClickEvent(eventType, x, y, clickSound)
end)
end
function UIPrefabObject:_onClickEvent(eventType, x, y, clickSound)
if self._touchEventCallback and eventType == GConst.TOUCH_EVENT.UP_INSIDE then
if self.isShowClickAnimation == nil then
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener then
self.isShowClickAnimation = eventListener:GetShowClickAnimation()
end
end
if self.isShowClickAnimation then
clickSound = clickSound or GConst.CLICK_SOUND.NORMAL
local audioPath = AudioManager.CLICK_ID[clickSound]
if audioPath then
AudioManager:playEffect(audioPath)
end
end
self._touchEventCallback(eventType, x, y)
end
self:_handleLongPressEvent(eventType, x, y)
end
function UIPrefabObject:addLongPressListener(func, time)
self._addTouchFlag = true
self._longPressTime = time or DELAULT_LONG_PRESS_TIME
self._longPressCallback = func
if self._touchEventCallback == nil then
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener == nil then
eventListener = self:addComponent(BF_UI_TOUCH_EVENT)
end
eventListener:AddTouchEventListener(function(eventType, x, y)
self:_onTouchEvent(eventType, x, y)
end)
end
end
function UIPrefabObject:_handleLongPressEvent(eventType, x, y)
if self._longPressCallback then
if eventType == GConst.TOUCH_EVENT.DOWN then
if self._longPressSchedulerId then
self:unscheduleGlobal(self._longPressSchedulerId)
end
self._longPressSchedulerId = self:performWithDelayGlobal(function()
self._longPressSchedulerId = nil
if self._longPressCallback then
self._longPressCallback()
end
end, self._longPressTime)
elseif eventType ~= GConst.TOUCH_EVENT.DRAG then
if self._longPressSchedulerId then
self:unscheduleGlobal(self._longPressSchedulerId)
self._longPressSchedulerId = nil
end
end
end
end
function UIPrefabObject:removeTouchListener()
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener then
eventListener:RemoveEventListener()
end
self._addTouchFlag = false
self._longPressTime = nil
self._longPressCallback = nil
end
function UIPrefabObject:removeClickListener()
self:removeTouchListener()
end
function UIPrefabObject:checkHrefLink(x, y)
local uiCamera = UIManager:getUICameraComponent()
local textCom = self:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
local hrefId = CS.TMPro.TMP_TextUtilities.FindIntersectingLink(textCom, CS.UnityEngine.Vector3(x, y, 0), uiCamera)
return hrefId
end
function UIPrefabObject:setClickAnimation(enable)
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener then
self.isShowClickAnimation = enable
eventListener:SetShowClickAnimation(enable)
end
end
function UIPrefabObject:stopClickAnimation()
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener then
eventListener:StopTouchAnimation()
end
end
function UIPrefabObject:setTouchEnable(enable)
local maskableGraphic = self:getComponent(UI_MASKABLE_GRAPHIC)
if maskableGraphic then
maskableGraphic.raycastTarget = enable
end
local eventListener = self:getComponent(BF_UI_TOUCH_EVENT)
if eventListener then
eventListener:SetTouchEnable(enable)
end
end
function UIPrefabObject:setLanguageSprite(atlasName, spriteName, callback, com)
if string.isEmptyOrNil(atlasName) then
Logger.logError("atlasName 为空!!")
return
end
local languageName = I18N:getCurLanguage()
local name = spriteName .. "_" .. languageName
local path, _ = string.gsub(atlasName, "/atlas/", "/textures/")
local spritePath = string.sub(path, 1, -7) .. "/" .. name .. ".png"
if not ResourceManager:containsAsset(spritePath) then
languageName = I18N:getFallbackLanguage()
name = spriteName .. "_" .. languageName
spritePath = string.sub(path, 1, -7) .. "/" .. name .. ".png"
if not ResourceManager:containsAsset(spritePath) then
Logger.logError("fallback language " .. languageName .. " 不包含 " .. spritePath)
return
end
end
self:setSprite(atlasName, name, callback, com)
end
function UIPrefabObject:setSprite(atlasPath, spriteName, callback, com)
self:setSpriteHash(atlasPath, hash(spriteName), callback, com)
end
function UIPrefabObject:setSpriteHash(atlasPath, spriteHashName, callback, com)
com = com or self:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE) or self:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER)
if not com then
return
end
if not self.resMap then
self.resMap = {}
end
if not self.resMap[atlasPath] then
TextureManager:loadAtlas(self, atlasPath, function(path, assets)
if self.resMap[atlasPath] then
TextureManager:unloadAtlas(atlasPath)
else
self.resMap[atlasPath] = assets
end
local sprite = assets:GetSprite(spriteHashName)
if sprite then
com.sprite = sprite
else
com.sprite = nil
Logger.logError("图集%s丢失精灵", atlasPath)
end
if callback then
callback(com)
end
end)
else
local sprite = self.resMap[atlasPath]:GetSprite(spriteHashName)
if sprite then
com.sprite = sprite
if callback then
callback(com)
end
else
com.sprite = nil
Logger.logError("图集%s丢失精灵", atlasPath)
end
end
end
function UIPrefabObject:setTexture(texturePath, callback)
local rawImage = self:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_RAW_IMAGE)
if not rawImage then
return
end
if not self.resMap then
self.resMap = {}
end
if self.resMap[texturePath] then
rawImage.texture = self.resMap[texturePath]
if callback then
callback(rawImage)
end
else
TextureManager:loadTextureAsync(self, texturePath,function (assetsPath, texture)
if self.resMap[assetsPath] then
TextureManager:unLoadTexture(texturePath)
else
self.resMap[assetsPath] = texture
end
rawImage.texture = texture
if callback then
callback(rawImage)
end
end)
end
end
function UIPrefabObject:setText(value, component)
--其他textcompnent在外部获取
component = component or self:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO)
if component then
component.text = value
else
Logger.logWarning("can't find text component!")
end
end
function UIPrefabObject:addRedPoint(offsetX, offsetY, scale, iconName, count, native)
if not self.redPoint then
if not self.loadRpOver then
self.loadRpOver = true
UIPrefabManager:loadUIWidgetAsync("assets/prefabs/ui/common/red_point_cell.prefab", self, function(prefabObject)
self.redPoint = prefabObject
prefabObject:initPrefabHelper()
local uiMap = prefabObject:genAllChildren()
self.redPoint:setAnchoredPosition(offsetX or 0, offsetY or 0)
self.redPoint:setLocalScale(scale, scale, scale)
iconName = iconName or "common_point"
self.redPoint:setSprite(GConst.ATLAS_PATH.COMMON, iconName)
GFunc.getShakeSeq(self.redPoint, false, scale, true)
if native then
self.redPoint:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end
self.redPointCountTx = uiMap["red_point_cell.count_tx"]
if count then
self.redPointCountTx:setText(count)
else
self.redPointCountTx:setText("")
end
end)
end
else
iconName = iconName or "common_point"
self.redPoint:setSprite(GConst.ATLAS_PATH.COMMON, iconName)
self.redPoint:setAnchoredPosition(offsetX or 0, offsetY or 0)
self.redPoint:setActive(true)
if native then
self.redPoint:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE):SetNativeSize()
end
if self.redPointCountTx then
if count then
self.redPointCountTx:setText(count)
else
self.redPointCountTx:setText("")
end
end
end
end
function UIPrefabObject:removeRedPoint()
if self.redPoint then
self.redPoint:setActive(false)
end
end
function UIPrefabObject:addAdPoint(offsetX, offsetY, scale)
if not self.adPoint then
if not self.loadAdOver then
self.loadAdOver = true
UIPrefabManager:loadUIWidgetAsync("assets/prefabs/ui/common/ad_point_cell.prefab", self, function(prefabObject)
self.adPoint = prefabObject
prefabObject:initPrefabHelper()
self.adPoint:setAnchoredPosition(offsetX or 0, offsetY or 0)
GFunc.setAdsSprite(self.adPoint)
self.adPoint:setLocalScale(scale, scale, scale)
end)
end
else
GFunc.setAdsSprite(self.adPoint)
self.adPoint:setAnchoredPosition(offsetX or 0, offsetY or 0)
self.adPoint:setActive(true)
end
end
function UIPrefabObject:removeAdPoint()
if self.adPoint then
self.adPoint:setActive(false)
end
end
function UIPrefabObject:setGraphicFlip(horizontal, vertical)
local component = self:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_GRAPHIC_FLIP)
if component then
component.horizontal = horizontal or false
component.vertical = vertical or false
else
Logger.logWarning("can't find BF_GRAPHIC_FLIP component!")
end
end
function UIPrefabObject:onDestroy()
if self.resMap then
for assetPath, _ in pairs(self.resMap) do
ResourceManager:unload(assetPath)
end
self.resMap = nil
end
if self._addTouchFlag then
self._touchEventCallback = nil
self._longPressCallback = nil
if self._longPressSchedulerId then
self:unscheduleGlobal(self._longPressSchedulerId)
self._longPressSchedulerId = nil
end
end
self.redPoint = nil
self.loadRpOver = nil
self.prefabHelper = nil
BaseObject.onDestroy(self)
self.childMap = nil
end
function UIPrefabObject:setImageGray(grey)
local com = self:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE)
if not com then
return
end
Color4.r = 1
if grey then
Color4.g = 0
self:setTouchEnable(false)
else
Color4.g = 1
self:setTouchEnable(true)
end
Color4.b = 1
Color4.a = 1
com.color = Color4
return true
end
function UIPrefabObject:setScrollRectCellName(nameIndex)
if self.prefabHelper then
self.prefabHelper:SetScrollRectCellName(self.objectIndex, nameIndex)
else
BaseObject.setScrollRectCellName(self, nameIndex)
end
end
return UIPrefabObject