video-masks / rectangle /lua /LumiFamily /LumiManager.lua
Visecall's picture
Add video mask Lua, shaders and shape resources
103b0f1 verified
Raw History Blame Contribute Delete
4.9 kB
local isEditor = (Amaz.Macros and Amaz.Macros.EditorSDK) and true or false
local exports = exports or {}
local LumiManager = LumiManager or {}
LumiManager.__index = LumiManager
---@class LumiManager : ScriptComponent
---@field LumiEffectTrans Transform
---@field start_render_layer int
---@field start_render_order int
---@field InputTex Texture
---@field OutputTex Texture
---@field PingPongTex Texture
local function handleAllEntityBySingleParent(_trans, func, ...)
if _trans.children:size() > 0 then
for i = 1, _trans.children:size() do
local child = _trans.children:get(i-1)
handleAllEntityBySingleParent(child, func, ...)
end
end
func(_trans, ...)
end
function LumiManager.new(construct, ...)
local self = setmetatable({}, LumiManager)
self.LumiEffectTrans = nil
self.start_render_layer = 1
self.start_render_order = 1
self.InputTex = nil
self.OutputTex = nil
self.PingPongTex = nil
self.startTime = 0.0
self.endTime = 6.0
self.curTime = 0.0
if construct and LumiManager.constructor then LumiManager.constructor(self, ...) end
return self
end
function LumiManager:onStart(comp)
self.entity = comp.entity
self.trans = self.entity:getComponent("Transform")
-- self.input = comp.entity.scene.assetMgr:SyncLoad("share://input.texture")
-- self.output = comp.entity.scene.assetMgr:SyncLoad("rt/outputTex.rt")
self.lumi_obj_extension = includeRelativePath("LumiObjectExtension")
self.lumi_obj = nil
self.LumiParamsSetter = includeRelativePath("LumiParamsSetter")
if self.LumiParamsSetter then
local ae_tools = includeRelativePath("AETools")
self.lumi_params_setter = self.LumiParamsSetter.new(ae_tools)
end
end
function LumiManager:onDestroy(comp)
if self.LumiEffectTrans and self.lumi_obj_extension then
self.lumi_obj_extension.deregister(self.LumiEffectTrans.entity)
end
self.lumi_obj = nil
end
---@function [UI(Button="ReRender")]
function LumiManager:getCameraCount()
if self.LumiEffectTrans == nil then
return 0
end
self.lumi_obj = nil
self:ReRender()
local cam_count = 0
if self.lumi_obj then
cam_count = self.lumi_obj:getCameraCount()
Amaz.LOGI("AE_LUA_TAG", self.lumi_obj.entity.name .. " camera_count: " .. tostring(cam_count))
end
return cam_count
end
function LumiManager:ReRender()
if self.LumiEffectTrans == nil then
return
end
-- re register
self.lumi_obj = nil
self:registerLumiObj(self.LumiEffectTrans, 1)
if self.lumi_obj == nil then
Amaz.LOGE('AE_LUA_TAG', 'No lumi_obj register')
return
end
-- change layer & order
self:updateCameraLayerAndOrder()
-- change rt pingpong
self:updateRtPingpong()
end
function LumiManager:registerLumiObj(_trans, _idx)
if _trans == nil then return end
-- Amaz.LOGI("lrc ".._idx, _trans.entity.name)
local script_comp = _trans.entity:getComponent("ScriptComponent")
if script_comp then
local lua_obj = Amaz.ScriptUtils.getLuaObj(script_comp:getScript())
if lua_obj then
self.lumi_obj_extension.deregister(_trans.entity)
self.lumi_obj = self.lumi_obj_extension.register(_trans.entity)
end
end
end
function LumiManager:updateCameraLayerAndOrder()
if self.lumi_obj then
self.lumi_obj:updateCameraLayerAndOrder(self.start_render_layer, self.start_render_order)
end
end
function LumiManager:updateRtPingpong()
if self.lumi_obj then
self.lumi_obj:updateRt(self.InputTex, self.OutputTex, self.PingPongTex)
end
end
function LumiManager:onUpdate(comp, deltaTime)
if isEditor then
end
if self.lumi_obj == nil then
self:registerLumiObj(self.LumiEffectTrans, 1)
end
self.curTime = self.curTime + deltaTime
if self.lumi_obj then
self.lumi_obj:setEffectAttr("startTime", self.startTime)
self.lumi_obj:setEffectAttr("endTime", self.endTime)
self.lumi_obj:setEffectAttr("curTime", self.curTime)
end
if self.lumi_params_setter and self.lumi_params_setter.updateKeyFrameData then
self.lumi_params_setter:updateKeyFrameData(self.lumi_obj, self.startTime, self.endTime, self.curTime)
end
if self.lumi_obj and self.lumi_obj.updateMaterials then
self.lumi_obj:updateMaterials(deltaTime)
end
end
function LumiManager:onEvent(comp, event)
if self.lumi_obj == nil then
self:registerLumiObj(self.LumiEffectTrans, 1)
end
if self.lumi_obj == nil then
Amaz.LOGE('AE_LUA_TAG', 'Failed to find lumi_obj')
return
end
if self.lumi_params_setter and self.lumi_params_setter.onEvent then
self.lumi_params_setter:onEvent(self.lumi_obj, event)
end
end
exports.LumiManager = LumiManager
return exports