From fe544f4ab5971510fc37cba302759847a08b8baf Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 10 Sep 2019 00:34:25 +0100 Subject: [PATCH] Attend to reviews, calculate average water position --- mods/env_sounds/depends.txt | 1 - mods/env_sounds/init.lua | 74 +++++++++++++------------------------ mods/env_sounds/mod.conf | 3 ++ 3 files changed, 28 insertions(+), 50 deletions(-) delete mode 100644 mods/env_sounds/depends.txt create mode 100644 mods/env_sounds/mod.conf diff --git a/mods/env_sounds/depends.txt b/mods/env_sounds/depends.txt deleted file mode 100644 index 4ad96d51..00000000 --- a/mods/env_sounds/depends.txt +++ /dev/null @@ -1 +0,0 @@ -default diff --git a/mods/env_sounds/init.lua b/mods/env_sounds/init.lua index fbd03857..c2a2898d 100644 --- a/mods/env_sounds/init.lua +++ b/mods/env_sounds/init.lua @@ -14,7 +14,7 @@ local river_source_sounds = minetest.settings:get_bool("river_source_sounds") local function update_sound(player) local player_name = player:get_player_name() -- Search for water nodes in radius around player - local ppos = player:getpos() + local ppos = player:get_pos() local areamin = vector.subtract(ppos, radius) local areamax = vector.add(ppos, radius) local wpos, num @@ -39,54 +39,30 @@ local function update_sound(player) ) end -- Total number of waters in radius - local waters = (num["default:water_flowing"] or 0) + - (num["default:river_water_source"] or 0) + - (num["default:river_water_flowing"] or 0) - -- If waters - if waters > 0 then - -- Find centre of water positions - local wposmid = wpos[1] - -- If more than 1 water - if #wpos > 1 then - local wposmin = areamax - local wposmax = areamin - for i = 1, #wpos do - local wposi = wpos[i] - if wposi.x > wposmax.x then - wposmax.x = wposi.x - end - if wposi.y > wposmax.y then - wposmax.y = wposi.y - end - if wposi.z > wposmax.z then - wposmax.z = wposi.z - end - if wposi.x < wposmin.x then - wposmin.x = wposi.x - end - if wposi.y < wposmin.y then - wposmin.y = wposi.y - end - if wposi.z < wposmin.z then - wposmin.z = wposi.z - end - end - wposmid = vector.divide(vector.add(wposmin, wposmax), 2) - end - -- Play sound - local handle = minetest.sound_play( - "env_sounds_water", - { - pos = wposmid, - to_player = player_name, - gain = math.min(0.04 + waters * 0.004, 0.4), - max_hear_distance = 32, - } - ) - -- Store sound handle for this player - if handle then - handles[player_name] = handle - end + local waters = #wpos + if waters == 0 then + return + end + + -- Find average position of water positions + local wposav = vector.new() + for i, pos in ipairs(wpos) do + wposav = vector.add(wposav, pos) + end + wposav = vector.divide(wposav, waters) + -- Play sound + local handle = minetest.sound_play( + "env_sounds_water", + { + pos = wposav, + to_player = player_name, + gain = math.min(0.04 + waters * 0.004, 0.4), + max_hear_distance = 32, + } + ) + -- Store sound handle for this player + if handle then + handles[player_name] = handle end end diff --git a/mods/env_sounds/mod.conf b/mods/env_sounds/mod.conf new file mode 100644 index 00000000..ad6feb31 --- /dev/null +++ b/mods/env_sounds/mod.conf @@ -0,0 +1,3 @@ +name = env_sounds +description = Minetest Game mod: env_sounds +depends = default