574 lines
13 KiB
Lua
574 lines
13 KiB
Lua
---@class BaseObject
|
|
local BaseObject = class("GameObject")
|
|
|
|
local Vector2 = BF.Vector2(0, 0)
|
|
local Vector3 = BF.Vector3(0, 0, 0)
|
|
|
|
function BaseObject:ctor()
|
|
self.components = {}
|
|
self.childList = {}
|
|
end
|
|
|
|
function BaseObject:initWithPrefab(assetPath, prefab)
|
|
self.assetPath = assetPath
|
|
self.gameObject = prefab
|
|
end
|
|
|
|
function BaseObject:initWithGameObject(gameObject)
|
|
self.gameObject = gameObject
|
|
end
|
|
|
|
function BaseObject:getAssetPath()
|
|
return self.assetPath
|
|
end
|
|
|
|
function BaseObject:setCustomData(name, value)
|
|
if self.customData == nil then
|
|
self.customData = {}
|
|
end
|
|
self.customData[name] = value
|
|
end
|
|
|
|
function BaseObject:getCustomData(name)
|
|
if self.customData == nil then
|
|
return nil
|
|
end
|
|
return self.customData[name]
|
|
end
|
|
|
|
function BaseObject:dontDestroyOnLoad()
|
|
CS.UnityEngine.GameObject.DontDestroyOnLoad(self:getGameObject())
|
|
end
|
|
|
|
function BaseObject:getGameObject()
|
|
return self.gameObject
|
|
end
|
|
|
|
function BaseObject:getTransform()
|
|
if self.transform == nil then
|
|
local gameObject = self:getGameObject()
|
|
if gameObject then
|
|
self.transform = gameObject.transform
|
|
end
|
|
end
|
|
return self.transform
|
|
end
|
|
|
|
function BaseObject:getInstanceID()
|
|
local gameObject = self:getGameObject()
|
|
if gameObject then
|
|
return gameObject:GetInstanceID()
|
|
end
|
|
return 0
|
|
end
|
|
|
|
function BaseObject:addLuaComponent(componentType, params)
|
|
local comp = self.components[componentType]
|
|
if comp == nil then
|
|
comp = require(componentType):create(params)
|
|
comp:_init(self)
|
|
self.components[componentType] = comp
|
|
end
|
|
return comp
|
|
end
|
|
|
|
function BaseObject:removeLuaComponent(componentType)
|
|
self.components[componentType] = nil
|
|
end
|
|
|
|
function BaseObject:getLuaComponent(componentType)
|
|
if self.components[componentType] == nil then
|
|
local comp = require(componentType):create()
|
|
comp:_init(self)
|
|
self.components[componentType] = comp
|
|
end
|
|
return self.components[componentType]
|
|
end
|
|
|
|
function BaseObject:addComponent(componentType)
|
|
if self.components[componentType] == nil then
|
|
local gameObject = self:getGameObject()
|
|
if gameObject then
|
|
self.components[componentType] = gameObject:AddComponent(componentType)
|
|
end
|
|
end
|
|
return self.components[componentType]
|
|
end
|
|
|
|
function BaseObject:getComponent(componentType)
|
|
if self.components[componentType] == nil then
|
|
local gameObject = self:getGameObject()
|
|
if gameObject then
|
|
local com = gameObject:BFGetComponent(componentType)
|
|
self.components[componentType] = com
|
|
end
|
|
end
|
|
return self.components[componentType]
|
|
end
|
|
|
|
function BaseObject:getAllComponents()
|
|
return self.components
|
|
end
|
|
|
|
function BaseObject:getActiveSelf()
|
|
local gameObject = self:getGameObject()
|
|
return gameObject.activeSelf
|
|
end
|
|
|
|
function BaseObject:setActive(active)
|
|
local gameObject = self:getGameObject()
|
|
if gameObject then
|
|
gameObject:SetActive(active)
|
|
end
|
|
end
|
|
|
|
function BaseObject:setName(name)
|
|
self.name = name
|
|
end
|
|
|
|
function BaseObject:getName()
|
|
return self.name or ""
|
|
end
|
|
|
|
function BaseObject:setScrollRectCellName(nameIndex)
|
|
local gameObject = self:getGameObject()
|
|
if gameObject then
|
|
gameObject.name = tostring(nameIndex)
|
|
end
|
|
end
|
|
|
|
function BaseObject:setTag(tag)
|
|
self.tag = tag
|
|
end
|
|
|
|
function BaseObject:getTag()
|
|
return self.tag
|
|
end
|
|
|
|
function BaseObject:setLayer(layer)
|
|
local trans = self:getTransform():GetComponentsInChildren(GConst.TYPEOF_UNITY_CLASS.TRANSFORM, true)
|
|
if trans then
|
|
local len = trans.Length
|
|
for i = 0, len - 1 do
|
|
trans[i].gameObject.layer = layer
|
|
end
|
|
end
|
|
end
|
|
|
|
function BaseObject:getAnchoredPosition()
|
|
local transform = self:getTransform()
|
|
return transform.anchoredPosition
|
|
end
|
|
|
|
function BaseObject:getAnchoredPositionX()
|
|
local transform = self:getTransform()
|
|
return transform.anchoredPosition.x
|
|
end
|
|
|
|
function BaseObject:getAnchoredPositionY()
|
|
local transform = self:getTransform()
|
|
return transform.anchoredPosition.y
|
|
end
|
|
|
|
function BaseObject:setAnchoredPositionX(x)
|
|
local transform = self:getTransform()
|
|
Vector2.x = x
|
|
Vector2.y = transform.anchoredPosition.y
|
|
transform.anchoredPosition = Vector2
|
|
end
|
|
|
|
function BaseObject:setAnchoredPositionY(y)
|
|
local transform = self:getTransform()
|
|
Vector2.x = transform.anchoredPosition.x
|
|
Vector2.y = y
|
|
transform.anchoredPosition = Vector2
|
|
end
|
|
|
|
function BaseObject:setAnchoredPosition(x, y)
|
|
local transform = self:getTransform()
|
|
Vector2.x = x
|
|
Vector2.y = y
|
|
transform.anchoredPosition = Vector2
|
|
end
|
|
|
|
function BaseObject:addAnchoredPosition(x, y)
|
|
local transform = self:getTransform()
|
|
local anchoredPosition = transform.anchoredPosition
|
|
Vector2.x = x + anchoredPosition.x
|
|
Vector2.y = y + anchoredPosition.y
|
|
transform.anchoredPosition = Vector2
|
|
end
|
|
|
|
function BaseObject:getRectSize()
|
|
local transform = self:getTransform()
|
|
return transform.rect
|
|
end
|
|
|
|
function BaseObject:getSizeDeltaY()
|
|
local transform = self:getTransform()
|
|
return transform.sizeDelta.y
|
|
end
|
|
|
|
function BaseObject:getSizeDeltaX()
|
|
local transform = self:getTransform()
|
|
return transform.sizeDelta.x
|
|
end
|
|
|
|
function BaseObject:setSizeDeltaX(x)
|
|
local transform = self:getTransform()
|
|
Vector2.x = x
|
|
Vector2.y = transform.sizeDelta.y
|
|
transform.sizeDelta = Vector2
|
|
end
|
|
|
|
function BaseObject:setSizeDeltaY(y)
|
|
local transform = self:getTransform()
|
|
Vector2.x = transform.sizeDelta.x
|
|
Vector2.y = y
|
|
transform.sizeDelta = Vector2
|
|
end
|
|
|
|
function BaseObject:setSizeDelta(x, y)
|
|
local transform = self:getTransform()
|
|
Vector2.x = x
|
|
Vector2.y = y
|
|
transform.sizeDelta = Vector2
|
|
end
|
|
|
|
function BaseObject:addSizeDelta(x, y)
|
|
local transform = self:getTransform()
|
|
local sizeDelta = transform.sizeDelta
|
|
Vector2.x = x + sizeDelta.x
|
|
Vector2.y = y + sizeDelta.y
|
|
transform.sizeDelta = Vector2
|
|
end
|
|
|
|
function BaseObject:setPosition(x, y, z)
|
|
local transform = self:getTransform()
|
|
Vector3.x = x
|
|
Vector3.y = y
|
|
Vector3.z = z
|
|
transform.position = Vector3
|
|
end
|
|
|
|
function BaseObject:addPosition(x, y, z)
|
|
local transform = self:getTransform()
|
|
local position = transform.position
|
|
Vector3.x = x + position.x
|
|
Vector3.y = y + position.y
|
|
Vector3.z = z + position.z
|
|
transform.position = Vector3
|
|
end
|
|
|
|
function BaseObject:getLocalPosition()
|
|
local transform = self:getTransform()
|
|
return transform.localPosition
|
|
end
|
|
|
|
function BaseObject:setLocalPosition(x, y, z)
|
|
local transform = self:getTransform()
|
|
Vector3.x = x
|
|
Vector3.y = y
|
|
Vector3.z = z
|
|
transform.localPosition = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalPositionX(x)
|
|
local transform = self:getTransform()
|
|
local localPosition = transform.localPosition
|
|
Vector3.x = x
|
|
Vector3.y = localPosition.y
|
|
Vector3.z = localPosition.z
|
|
transform.localPosition = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalPositionY(y)
|
|
local transform = self:getTransform()
|
|
local localPosition = transform.localPosition
|
|
Vector3.x = localPosition.x
|
|
Vector3.y = y
|
|
Vector3.z = localPosition.z
|
|
transform.localPosition = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalPositionZ(z)
|
|
local transform = self:getTransform()
|
|
local localPosition = transform.localPosition
|
|
Vector3.x = localPosition.x
|
|
Vector3.y = localPosition.y
|
|
Vector3.z = z
|
|
transform.localPosition = Vector3
|
|
end
|
|
|
|
function BaseObject:addLocalPosition(x, y, z)
|
|
local transform = self:getTransform()
|
|
local localPosition = transform.localPosition
|
|
Vector3.x = x + localPosition.x
|
|
Vector3.y = y + localPosition.y
|
|
Vector3.z = z + localPosition.z
|
|
transform.localPosition = Vector3
|
|
end
|
|
|
|
function BaseObject:setVisible(visible, scale)
|
|
local transform = self:getTransform()
|
|
if visible then
|
|
Vector3.x = scale or 1
|
|
Vector3.y = scale or 1
|
|
Vector3.z = scale or 1
|
|
else
|
|
Vector3.x = 0
|
|
Vector3.y = 0
|
|
Vector3.z = 0
|
|
end
|
|
transform.localScale = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalScale(x, y, z)
|
|
local transform = self:getTransform()
|
|
Vector3.x = x
|
|
Vector3.y = y
|
|
Vector3.z = z
|
|
transform.localScale = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalScaleX(x)
|
|
local transform = self:getTransform()
|
|
local currScale = transform.localScale
|
|
Vector3.x = x
|
|
Vector3.y = currScale.y
|
|
Vector3.z = currScale.z
|
|
transform.localScale = Vector3
|
|
end
|
|
|
|
function BaseObject:addLocalScale(x, y, z)
|
|
local transform = self:getTransform()
|
|
local localScale = transform.localScale
|
|
Vector3.x = x + localScale.x
|
|
Vector3.y = y + localScale.y
|
|
Vector3.z = z + localScale.z
|
|
transform.localScale = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalRotation(x, y, z)
|
|
local transform = self:getTransform()
|
|
Vector3.x = x
|
|
Vector3.y = y
|
|
Vector3.z = z
|
|
transform.localRotation = Vector3
|
|
end
|
|
|
|
function BaseObject:setEulerAngles(x, y, z)
|
|
local transform = self:getTransform()
|
|
Vector3.x = x
|
|
Vector3.y = y
|
|
Vector3.z = z
|
|
transform.eulerAngles = Vector3
|
|
end
|
|
|
|
function BaseObject:addEulerAngles(x, y, z)
|
|
local transform = self:getTransform()
|
|
local eulerAngles = transform.eulerAngles
|
|
Vector3.x = x + eulerAngles.x
|
|
Vector3.y = y + eulerAngles.y
|
|
Vector3.z = z + eulerAngles.z
|
|
transform.eulerAngles = Vector3
|
|
end
|
|
|
|
function BaseObject:setLocalEulerAngles(x, y, z)
|
|
local transform = self:getTransform()
|
|
Vector3.x = x
|
|
Vector3.y = y
|
|
Vector3.z = z
|
|
transform.localEulerAngles = Vector3
|
|
end
|
|
|
|
function BaseObject:addLocalEulerAngles(x, y, z)
|
|
local transform = self:getTransform()
|
|
local localEulerAngles = transform.localEulerAngles
|
|
Vector3.x = x + localEulerAngles.x
|
|
Vector3.y = y + localEulerAngles.y
|
|
Vector3.z = z + localEulerAngles.z
|
|
transform.localEulerAngles = Vector3
|
|
end
|
|
|
|
function BaseObject:getAdmin()
|
|
return self.admin
|
|
end
|
|
|
|
-- admin可能是parent也可能不是
|
|
function BaseObject:setAdmin(admin)
|
|
self.admin = admin
|
|
end
|
|
|
|
function BaseObject:removeAllChildren()
|
|
if self.childList then
|
|
local count = #self.childList
|
|
for i = 1, count do
|
|
local child = table.remove(self.childList)
|
|
child:setAdmin(nil)
|
|
child:destroy()
|
|
end
|
|
end
|
|
end
|
|
|
|
function BaseObject:removeChild(child)
|
|
if self.childList then
|
|
for k, v in ipairs(self.childList) do
|
|
if v == child then
|
|
table.remove(self.childList, k)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BaseObject:getChildList()
|
|
return self.childList
|
|
end
|
|
|
|
function BaseObject:getFirstChild()
|
|
return self.childList[1]
|
|
end
|
|
|
|
function BaseObject:setParent(parent, worldPositionStays)
|
|
if self.admin then
|
|
self.admin:removeChild(self)
|
|
end
|
|
local transform = self:getTransform()
|
|
local parentTransform = parent and parent:getTransform() or nil
|
|
transform:SetParent(parentTransform, worldPositionStays)
|
|
if parent then
|
|
parent:addChildList(self)
|
|
else
|
|
self.admin = nil
|
|
end
|
|
end
|
|
|
|
function BaseObject:removeFromParent(isNeedCleanUp)
|
|
if isNeedCleanUp then
|
|
self:destroy()
|
|
else
|
|
if self.admin then
|
|
self.admin:removeChild(self)
|
|
self.admin = nil
|
|
end
|
|
self:getTransform():SetParent(nil, false)
|
|
end
|
|
end
|
|
|
|
function BaseObject:addChildList(child)
|
|
child:setAdmin(self)
|
|
table.insert(self.childList, child)
|
|
end
|
|
|
|
function BaseObject:addPrefab(prefab, worldPositionStays)
|
|
prefab.transform:SetParent(self:getTransform(), worldPositionStays)
|
|
end
|
|
|
|
function BaseObject:scheduleGlobal(func, inter)
|
|
local sid = SchedulerManager:scheduleGlobal(func, inter)
|
|
if self._schedulerIds == nil then
|
|
self._schedulerIds = {}
|
|
end
|
|
table.insert(self._schedulerIds, sid)
|
|
return sid
|
|
end
|
|
|
|
function BaseObject:performWithDelayGlobal(func, delay)
|
|
local sid = SchedulerManager:performWithDelayGlobal(func, delay)
|
|
if self._schedulerIds == nil then
|
|
self._schedulerIds = {}
|
|
end
|
|
table.insert(self._schedulerIds, sid)
|
|
return sid
|
|
end
|
|
|
|
function BaseObject:unscheduleGlobal(sid)
|
|
if self._schedulerIds == nil then
|
|
return
|
|
end
|
|
for k, v in ipairs(self._schedulerIds) do
|
|
if v == sid then
|
|
table.remove(self._schedulerIds, k)
|
|
break
|
|
end
|
|
end
|
|
SchedulerManager:unscheduleGlobal(sid)
|
|
end
|
|
|
|
function BaseObject:createBindTweenSequence()
|
|
local sequence = DOTweenManager:createSeqWithGameObject(self:getGameObject())
|
|
return sequence
|
|
end
|
|
|
|
function BaseObject:doScale(endValue, duration, onComplete)
|
|
DOTweenManager:doScale(self:getTransform(),endValue,duration,onComplete)
|
|
end
|
|
|
|
function BaseObject:addUnloadCallback(callback)
|
|
self._unloadCallback = callback
|
|
end
|
|
|
|
function BaseObject:addOnDestroyCallback(callback)
|
|
if not self._onDestroyCallbacks then
|
|
self._onDestroyCallbacks = {}
|
|
end
|
|
table.insert(self._onDestroyCallbacks, callback)
|
|
end
|
|
|
|
function BaseObject:clearOnDestroyCallback()
|
|
self._onDestroyCallbacks = nil
|
|
end
|
|
|
|
function BaseObject:isDestroyed()
|
|
return self._destroy
|
|
end
|
|
|
|
function BaseObject:onDestroy()
|
|
if self._destroy then
|
|
return
|
|
end
|
|
self._destroy = true
|
|
for k, child in ipairs(self.childList) do
|
|
child:onDestroy()
|
|
end
|
|
if self._schedulerIds then
|
|
for k, v in ipairs(self._schedulerIds) do
|
|
SchedulerManager:unscheduleGlobal(v)
|
|
end
|
|
self._schedulerIds = nil
|
|
end
|
|
if self._unloadCallback then
|
|
self._unloadCallback(self)
|
|
self._unloadCallback = nil
|
|
end
|
|
if self._onDestroyCallbacks then
|
|
for _, callback in ipairs(self._onDestroyCallbacks) do
|
|
callback(self)
|
|
end
|
|
self._onDestroyCallbacks = nil
|
|
end
|
|
self.childList = nil
|
|
for k, v in pairs(self.components) do
|
|
self.components[k] = nil
|
|
end
|
|
self.admin = nil
|
|
self.gameObject = nil
|
|
self.transform = nil
|
|
end
|
|
|
|
function BaseObject:destroy()
|
|
if self._destroy then
|
|
return
|
|
end
|
|
if self.admin then
|
|
self.admin:removeChild(self)
|
|
end
|
|
local gameObject = self.gameObject
|
|
if gameObject and not CS.BF.Utils.IsNull(gameObject) then
|
|
ResourceManager:destroyPrefab(gameObject)
|
|
end
|
|
self:onDestroy()
|
|
end
|
|
|
|
return BaseObject |