summaryrefslogtreecommitdiff
path: root/drive_entity.lua
diff options
context:
space:
mode:
Diffstat (limited to 'drive_entity.lua')
-rw-r--r--drive_entity.lua45
1 files changed, 45 insertions, 0 deletions
diff --git a/drive_entity.lua b/drive_entity.lua
index fb8521e..7d8763a 100644
--- a/drive_entity.lua
+++ b/drive_entity.lua
@@ -5,6 +5,8 @@ celevator.drives.entity = {
buzzsoundhandles = {},
movementsoundhandles = {},
movementsoundstate = {},
+ carsoundhandles = {},
+ carsoundstate = {},
entityinfo = {},
sheaverefs = {},
}
@@ -117,6 +119,47 @@ local function motorsound(pos,newstate)
celevator.drives.entity.movementsoundstate[hash] = newstate
end
+local function carsound(pos,newstate,speed)
+ if speed < 0.5 then return end
+ local hash = minetest.hash_node_position(pos)
+ local oldstate = celevator.drives.entity.carsoundstate[hash]
+ oldstate = oldstate or "idle"
+ if oldstate == newstate then return end
+ if not celevator.drives.entity.entityinfo[hash] then return end
+ local eref = celevator.drives.entity.entityinfo[hash].handles[1]
+ if not eref:get_pos() then return end
+ local oldhandle = celevator.drives.entity.carsoundhandles[hash]
+ local gain = math.min(1,speed/6)
+ if newstate == "accel" then
+ if oldhandle then minetest.sound_stop(oldhandle) end
+ celevator.drives.entity.carsoundhandles[hash] = minetest.sound_play("celevator_car_start",{
+ object = eref,
+ gain = gain,
+ })
+ minetest.after(3,function()
+ if celevator.drives.entity.carsoundstate[hash] == "accel" then
+ carsound(pos,"run",speed)
+ end
+ end)
+ elseif newstate == "run" then
+ if oldhandle then minetest.sound_stop(oldhandle) end
+ celevator.drives.entity.carsoundhandles[hash] = minetest.sound_play("celevator_car_run",{
+ object = eref,
+ loop = true,
+ gain = gain,
+ })
+ elseif newstate == "decel" then
+ if oldhandle then minetest.sound_stop(oldhandle) end
+ celevator.drives.entity.carsoundhandles[hash] = minetest.sound_play("celevator_car_stop",{
+ object = eref,
+ gain = gain,
+ })
+ elseif newstate == "stopped" then
+ if oldhandle then minetest.sound_stop(oldhandle) end
+ end
+ celevator.drives.entity.carsoundstate[hash] = newstate
+end
+
local function compareexchangesound(pos,compare,new)
local hash = minetest.hash_node_position(pos)
local oldstate = celevator.drives.entity.movementsoundstate[hash]
@@ -356,6 +399,7 @@ function celevator.drives.entity.step(dtime)
celevator.drives.entity.entityinfo[hash] = {
handles = handles,
}
+ carsound(pos,"accel",maxvel)
meta:set_string("state","running")
celevator.drives.entity.sheavetoentity(carid)
elseif state == "running" then
@@ -398,6 +442,7 @@ function celevator.drives.entity.step(dtime)
vel = math.min(dremain,maxvel)
if celevator.drives.entity.movementsoundstate[hash] == "fast" or celevator.drives.entity.movementsoundstate[hash] == "accel" then
decelsound(pos)
+ carsound(pos,"decel",maxvel)
end
elseif dmoved+0.1 > maxvel then
vel = maxvel