74 lines
2.0 KiB
Lua
74 lines
2.0 KiB
Lua
-- This script will play a camera animation chain from "cam0" -to "camN" named camera proxies in the scene
|
|
-- To use this, first place four cameras into the scene and name them cam0, cam1, cam2 and cam3, then press F8 to start
|
|
-- The animation will repeat infinitely, but it will cut from last to first proxy at the end
|
|
|
|
-- Get the main camera:
|
|
local cam = GetCamera()
|
|
|
|
-- This will be the transform that we grab the camera by:
|
|
local target = TransformComponent()
|
|
|
|
-- Get the main scene:
|
|
local scene = GetScene()
|
|
|
|
-- Camera speed overridable from outer scope too:
|
|
scriptableCameraSpeed = 0.4
|
|
|
|
-- Animation state:
|
|
local tt = 0.0
|
|
local play = false
|
|
local rot = 0
|
|
ToggleCameraAnimation = function()
|
|
tt = 0.0
|
|
play = not play
|
|
rot = 0
|
|
end
|
|
|
|
-- Gather camera proxy entities in the scene from "cam0" to "cam1", "cam2", ... "camN":
|
|
local proxies={}
|
|
local it = 0
|
|
while true do
|
|
local entity = scene.Entity_FindByName("cam" .. it)
|
|
if(entity == INVALID_ENTITY) then
|
|
break
|
|
end
|
|
it = it + 1
|
|
proxies[it] = entity
|
|
end
|
|
|
|
runProcess(function()
|
|
while true do
|
|
|
|
if(input.Press(KEYBOARD_BUTTON_F8)) then
|
|
ToggleCameraAnimation()
|
|
end
|
|
if(play) then
|
|
-- Play animation:
|
|
local count = len(proxies)
|
|
|
|
-- Place main camera on spline:
|
|
local a = scene.Component_GetTransform(proxies[(rot - 1) % count + 1])
|
|
local b = scene.Component_GetTransform(proxies[rot % count + 1])
|
|
local c = scene.Component_GetTransform(proxies[(rot + 1) % count + 1])
|
|
local d = scene.Component_GetTransform(proxies[(rot + 2) % count + 1])
|
|
target.CatmullRom(a, b, c, d, tt)
|
|
target.UpdateTransform()
|
|
cam.TransformCamera(target)
|
|
cam.UpdateCamera()
|
|
|
|
-- Advance animation state:
|
|
tt = tt + scriptableCameraSpeed * getDeltaTime()
|
|
if(tt >= 1.0) then
|
|
tt = 0.0
|
|
rot = rot + 1
|
|
end
|
|
|
|
end
|
|
|
|
-- Wait for render() tick from Engine
|
|
-- We should wait for update() normally, but Editor tends to update the camera already from update()
|
|
-- and it would overridethe scrips...
|
|
render()
|
|
|
|
end
|
|
end) |