Remove music interruptions

This commit is contained in:
ancientmarinerdev 2023-03-10 03:04:34 +00:00 committed by Gitea
parent 32ffa32009
commit ede3123b1a

@ -22,8 +22,6 @@ local dimension_to_base_track = {
local listeners = {} local listeners = {}
local weather_state
local function pick_track(dimension, underground) local function pick_track(dimension, underground)
local track_key local track_key
@ -72,7 +70,7 @@ local function stop_music_for_all()
end end
end end
local function play_song(track, player_name, hp, dimension, day_count, underground) local function play_song(track, player_name, hp, dimension, day_count)
local spec = { local spec = {
name = track, name = track,
gain = 0.3, gain = 0.3,
@ -90,17 +88,10 @@ local function play_song(track, player_name, hp, dimension, day_count, undergrou
hp = hp, hp = hp,
dimension = dimension, dimension = dimension,
day_count = day_count, day_count = day_count,
underground = underground,
} }
end end
local function play() local function play()
local new_weather_state = mcl_weather.get_weather()
local was_good_weather = weather_state == "none" or weather_state == "clear"
weather_state = new_weather_state
local is_good_weather = weather_state == "none" or weather_state == "clear"
local is_weather_changed = weather_state ~= new_weather_state
local time = minetest.get_timeofday() local time = minetest.get_timeofday()
if time < 0.25 or time >= 0.75 then if time < 0.25 or time >= 0.75 then
stop_music_for_all() stop_music_for_all()
@ -116,34 +107,28 @@ local function play()
local dimension = mcl_worlds.pos_to_dimension(pos) local dimension = mcl_worlds.pos_to_dimension(pos)
local underground = dimension == "overworld" and pos and pos.y < 0
local listener = listeners[player_name] local listener = listeners[player_name]
local handle = listener and listener.handle local handle = listener and listener.handle
local old_hp = listener and listener.hp local old_hp = listener and listener.hp
local old_dimension = listener and listener.dimension local old_dimension = listener and listener.dimension
local old_underground = listener and listener.underground
local is_dimension_changed = old_dimension and (old_dimension ~= dimension) or false local is_dimension_changed = old_dimension and (old_dimension ~= dimension) or false
local is_hp_changed = old_hp and (math.abs(old_hp - hp) > 0.00001) or false local is_hp_changed = old_hp and (math.abs(old_hp - hp) > 0.00001) or false
local underground_changed = old_underground and underground ~= old_underground
--minetest.log("handle: " .. dump (handle)) --minetest.log("handle: " .. dump (handle))
if is_hp_changed or is_dimension_changed or underground_changed if is_hp_changed or is_dimension_changed then
or (dimension == "overworld" and (is_weather_changed or not is_good_weather)) then
stop_music_for_listener_name(player_name) stop_music_for_listener_name(player_name)
if not listeners[player_name] then if not listeners[player_name] then
listeners[player_name] = {} listeners[player_name] = {}
end end
listeners[player_name].hp = hp listeners[player_name].hp = hp
listeners[player_name].dimension = dimension listeners[player_name].dimension = dimension
listeners[player_name].underground = underground
elseif not handle and (not listener or (listener.day_count ~= day_count)) then elseif not handle and (not listener or (listener.day_count ~= day_count)) then
local underground = dimension == "overworld" and pos and pos.y < 0
local track = pick_track(dimension, underground) local track = pick_track(dimension, underground)
if track then if track then
play_song(track, player_name, hp, dimension, day_count, underground) play_song(track, player_name, hp, dimension, day_count)
else else
--minetest.log("no track found. weird") --minetest.log("no track found. weird")
end end