mirror of
				https://github.com/luanti-org/minetest_game.git
				synced 2025-10-30 23:25:33 +01:00 
			
		
		
		
	default:river_water_source can also create sound if desired as rivers are considered to be flowing water. A simple mod for now, with the intention to later use new engine environmental sound features if/when they appear.
		
			
				
	
	
		
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| -- Parameters
 | |
| 
 | |
| local radius = 8 -- Water node search radius around player
 | |
| 
 | |
| -- End of parameters
 | |
| 
 | |
| 
 | |
| local river_source_sounds = minetest.settings:get_bool("river_source_sounds")
 | |
| 
 | |
| 
 | |
| -- Update sound for player
 | |
| 
 | |
| local function update_sound(player)
 | |
| 	local player_name = player:get_player_name()
 | |
| 	local ppos = player:get_pos()
 | |
| 	local areamin = vector.subtract(ppos, radius)
 | |
| 	local areamax = vector.add(ppos, radius)
 | |
| 	local water_nodes = {"default:water_flowing", "default:river_water_flowing"}
 | |
| 	if river_source_sounds then
 | |
| 		table.insert(water_nodes, "default:river_water_source")
 | |
| 	end
 | |
| 	local wpos, _ = minetest.find_nodes_in_area(areamin, areamax, water_nodes)
 | |
| 	local waters = #wpos
 | |
| 	if waters == 0 then
 | |
| 		return
 | |
| 	end
 | |
| 
 | |
| 	-- Find average position of water positions
 | |
| 	local wposav = vector.new()
 | |
| 	for _, pos in ipairs(wpos) do
 | |
| 		wposav.x = wposav.x + pos.x
 | |
| 		wposav.y = wposav.y + pos.y
 | |
| 		wposav.z = wposav.z + pos.z
 | |
| 	end
 | |
| 	wposav = vector.divide(wposav, waters)
 | |
| 
 | |
| 	minetest.sound_play(
 | |
| 		"env_sounds_water",
 | |
| 		{
 | |
| 			pos = wposav,
 | |
| 			to_player = player_name,
 | |
| 			gain = math.min(0.04 + waters * 0.004, 0.4),
 | |
| 		}
 | |
| 	)
 | |
| end
 | |
| 
 | |
| 
 | |
| -- Update sound 'on joinplayer'
 | |
| 
 | |
| minetest.register_on_joinplayer(function(player)
 | |
| 	update_sound(player)
 | |
| end)
 | |
| 
 | |
| 
 | |
| -- Cyclic sound update
 | |
| 
 | |
| local function cyclic_update()
 | |
| 	for _, player in pairs(minetest.get_connected_players()) do
 | |
| 		update_sound(player)
 | |
| 	end
 | |
| 	minetest.after(3.5, cyclic_update)
 | |
| end
 | |
| 
 | |
| minetest.after(0, cyclic_update)
 |