840 lines
23 KiB
Lua
840 lines
23 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: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: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: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 |