90 lines
2.9 KiB
Lua
90 lines
2.9 KiB
Lua
------------------------------------------------
|
||
--作者: xihan
|
||
--日期: 2019-05-07
|
||
--文件: LuaBehaviourManager.lua
|
||
--模块: LuaBehaviourManager
|
||
--描述: Lua端LuaBehaviour管理器
|
||
------------------------------------------------
|
||
|
||
--定义模块
|
||
local LuaBehaviourManager = {
|
||
AllLuaBehaviourList = List:New(),
|
||
AllLuaBehaviourDic = Dictionary:New(),
|
||
UpdateLuaBehaviourList = List:New(),
|
||
}
|
||
|
||
--给对象添加LuaBehaviour组件,并关联对应的模块
|
||
function LuaBehaviourManager:Add(trans, table)
|
||
if self.AllLuaBehaviourDic:ContainsKey(table) then
|
||
return
|
||
end
|
||
local _luaBehaviour = UnityUtils.RequireLuaBehaviour(trans);
|
||
self.AllLuaBehaviourList:Add(_luaBehaviour);
|
||
self.AllLuaBehaviourDic:Add(table, _luaBehaviour);
|
||
|
||
table._ActiveSelf_ = trans.gameObject.activeSelf;
|
||
|
||
table._OnDestroy_ = function(obj)
|
||
if obj.OnDestroy then
|
||
obj:OnDestroy();
|
||
end
|
||
self:Remove(obj);
|
||
end
|
||
|
||
table._OnEnable_ = function(obj)
|
||
if obj.OnEnable then
|
||
obj:OnEnable();
|
||
end
|
||
table._ActiveSelf_ = true;
|
||
end
|
||
|
||
table._OnDisable_ = function(obj)
|
||
if obj.OnDisable then
|
||
obj:OnDisable();
|
||
end
|
||
table._ActiveSelf_ = false;
|
||
end
|
||
|
||
table._Start_ = function(obj)
|
||
if obj.Start then
|
||
obj:Start();
|
||
end
|
||
if obj.Update then
|
||
self.UpdateLuaBehaviourList:Add(obj);
|
||
end
|
||
end
|
||
|
||
table._OnTimelineProcessFrame_ = function(obj,intParam,stringParam,current,duration)
|
||
if obj.OnTimelineProcessFrame then
|
||
obj:OnTimelineProcessFrame(intParam,stringParam,current,duration);
|
||
end
|
||
end
|
||
|
||
_luaBehaviour.AwakeDelegate = Utils.Handler(table.Awake, table, nil, true);
|
||
_luaBehaviour.StartDelegate = Utils.Handler(table._Start_, table, nil, true);
|
||
_luaBehaviour.OnEnableDelegate = Utils.Handler(table._OnEnable_, table, nil, true);
|
||
_luaBehaviour.OnDisableDelegate = Utils.Handler(table._OnDisable_, table, nil, true);
|
||
_luaBehaviour.OnDestroyDelegate = Utils.Handler(table._OnDestroy_, table, nil, true);
|
||
_luaBehaviour.OnTimelineProcessFrameDelegate = Utils.Handler(table._OnTimelineProcessFrame_, table, nil, true);
|
||
return _luaBehaviour;
|
||
end
|
||
|
||
--LuaBehaviour组件销毁时,自动移除
|
||
function LuaBehaviourManager:Remove(table)
|
||
if self.AllLuaBehaviourDic:ContainsKey(table) then
|
||
local _luaBehaviour = self.AllLuaBehaviourDic:Get(table);
|
||
self.AllLuaBehaviourDic:Remove(table);
|
||
self.AllLuaBehaviourList:Remove(_luaBehaviour);
|
||
self.UpdateLuaBehaviourList:Remove(table);
|
||
end
|
||
end
|
||
|
||
function LuaBehaviourManager:Update(deltaTime)
|
||
for i=1,self.UpdateLuaBehaviourList:Count() do
|
||
if self.UpdateLuaBehaviourList[i]._ActiveSelf_ then
|
||
self.UpdateLuaBehaviourList[i]:Update(deltaTime);
|
||
end
|
||
end
|
||
end
|
||
|
||
return LuaBehaviourManager |