82 lines
2.5 KiB
Lua
82 lines
2.5 KiB
Lua
local ent = ent
|
|
local scene = entities.currentScene()
|
|
local controller = entities.controller()
|
|
|
|
local timer = Timer.new()
|
|
if not timer:running() then
|
|
timer:start();
|
|
end
|
|
|
|
local target = Vector3f(0,0,0)
|
|
local transform = ent:getComponent("Transform")
|
|
local metadata = ent:getComponent("Metadata")
|
|
local physics = ent:getComponent("Physics")
|
|
-- local velocty = physics:linearVelocity()
|
|
local speed = metadata["speed"] or 1.0
|
|
local starting = transform.position + Vector3f(0,0,0)
|
|
local ending = transform.position + Vector3f( metadata["delta"][1], metadata["delta"][2], metadata["delta"][3] )
|
|
local wait = 0
|
|
local direction = 1.0 / math.abs(starting:distance(ending))
|
|
local alpha = 0
|
|
local startingSound = true
|
|
|
|
local soundEmitter = ent:loadChild("/sound.json",true)
|
|
local playSound = function( key, loop )
|
|
if not loop then loop = false end
|
|
local url = "./audio/sfx/" .. key .. ".ogg"
|
|
soundEmitter:queueHook("sound:Emit.%UID%", {
|
|
filename = string.resolveURI(url, metadata["system"]["root"]),
|
|
spatial = true,
|
|
streamed = true,
|
|
volume = "sfx",
|
|
loop = loop
|
|
}, 0)
|
|
end
|
|
local stopSound = function( key )
|
|
local url = "./audio/sfx/" .. key .. ".ogg"
|
|
soundEmitter:queueHook("sound:Stop.%UID%", {
|
|
filename = string.resolveURI(url, metadata["system"]["root"])
|
|
}, 0)
|
|
end
|
|
local playSoundscape = function( key )
|
|
local url = "./audio/soundscape/" .. key .. ".ogg"
|
|
soundEmitter:queueHook("sound:Emit.%UID%", {
|
|
filename = string.resolveURI(url, metadata["system"]["root"]),
|
|
spatial = false,
|
|
volume = "sfx",
|
|
loop = true,
|
|
streamed = true
|
|
}, 0)
|
|
end
|
|
local stopSoundscape = function( key )
|
|
local url = "./audio/soundscape/" .. key .. ".ogg"
|
|
soundEmitter:queueHook("sound:Stop.%UID%", {
|
|
filename = string.resolveURI(url, metadata["system"]["root"])
|
|
}, 0)
|
|
end
|
|
soundEmitter:getComponent("Transform"):setReference( transform )
|
|
-- on tick
|
|
ent:bind( "tick", function(self)
|
|
|
|
if wait > 0 then
|
|
wait = wait - time.delta()
|
|
else
|
|
if startingSound then
|
|
playSound("lift_start", true)
|
|
startingSound = false
|
|
end
|
|
alpha = alpha + time.delta() * speed * direction
|
|
if alpha <= 0 or alpha >= 1 then
|
|
alpha = math.clamp( alpha, 0.0, 1.0 )
|
|
direction = -direction
|
|
wait = 6
|
|
stopSound("lift_start")
|
|
playSound("lift_stop")
|
|
startingSound = true
|
|
-- physics:setLinearVelocity( Vector3f(0,0,0) )
|
|
else
|
|
-- physics:setLinearVelocity( Vector3f(0,direction / math.abs(direction),0) )
|
|
end
|
|
end
|
|
transform.position = Vector3f.lerp( starting, ending, alpha )
|
|
end ) |