local p=require((game:GetService("\082\101\112\108\105\099\097\116\101\100\083\116\111\114\097\103\101")):WaitForChild("\078\101\118\101\114\109\111\114\101"))local N=p("\083\117\109\109\101\100\067\097\109\101\114\097")local q={}q.ClassName="\067\117\115\116\111\109\067\097\109\101\114\097\069\102\102\101\099\116"function q.new(p)local N=setmetatable({},q)N._getCurrentStateFunc=p or error("\103\101\116\067\117\114\114\101\110\116\083\116\097\116\101\070\117\110\099 \105\115 \114\101\113\117\105\114\101\100")return N end function q.__add(q,p)return N.new(q,p)end function q.__index(N,p)if p=="\083\116\097\116\101"or p=="\067\097\109\101\114\097\083\116\097\116\101"or p=="\067\097\109\101\114\097"then return N._getCurrentStateFunc()else return q[p]end end return q
--- For effects that can be easily bound in scope
-- @classmod CustomCameraEffect

local require = require(game:GetService("ReplicatedStorage"):WaitForChild("Nevermore"))

local SummedCamera = require("SummedCamera")

local CustomCameraEffect = {}
CustomCameraEffect.ClassName = "CustomCameraEffect"

--- Constructs a new custom camera effect
-- @tparam function getCurrentStateFunc to return a function state
function CustomCameraEffect.new(getCurrentStateFunc)
	local self = setmetatable({}, CustomCameraEffect)

	self._getCurrentStateFunc = getCurrentStateFunc or error("getCurrentStateFunc is required")

	return self
end

function CustomCameraEffect:__add(other)
	return SummedCamera.new(self, other)
end

function CustomCameraEffect:__index(index)
	if index == "State" or index == "CameraState" or index == "Camera" then
		return self._getCurrentStateFunc()
	else
		return CustomCameraEffect[index]
	end
end

return CustomCameraEffect