add node sounds checking function

Some nodes do not provide sounds. With implementation of this function
and saubsequent checks no sounds are played if not available.

Fixes https://gitlab.com/4w/uniham/issues/2
This commit is contained in:
Dirk Sohler 2019-06-22 12:28:21 +02:00
parent 430c5b1a84
commit 7014c9ad5a
No known key found for this signature in database
GPG Key ID: B9751241BD7D4E1A

@ -13,6 +13,25 @@ local replacements = {
['default:silver_sandstone'] = 'default:silver_sand',
}
-- Get a node sound
--
-- This helper function returns a sound table or nil depending on wheter the
-- requested sound type exists in the provided node definition or not.
--
-- Common sound types are `dug`, footstep`, or `place`. For example: When
-- requesting the `dug` sounds of a node definition the function checks if
-- the table node_definition.sounds.dug exists and if so it returns that
-- table. If the table does not exist `nil` is returned.
--
-- @param node_definition The desired nodes definition
-- @param sound_type Name of a sound
local get_sound = function (node_definition, sound_type)
if not node_definition then return end
if not node_definition.sounds then return end
if not node_definition.sounds[sound_type] then return end
return node_definition.sounds[sound_type]
end
-- Hammer use function
--
@ -29,26 +48,30 @@ uniham.crush_nodes = function (itemstack, player, pointed_thing)
if pointed_thing.type ~= 'node' then return end
local node_pos = minetest.get_pointed_thing_position(pointed_thing)
local node_name = minetest.get_node(node_pos).name
local node_sounds = minetest.registered_nodes[node_name].sounds
local node_sound = get_sound(minetest.registered_nodes[node_name], 'dug')
if not replacements[node_name] then
minetest.sound_play(node_sounds.dug.name, {
pos = node_pos,
max_hear_distance = 8,
gain = node_sounds.dug.gain,
})
if node_sound then
minetest.sound_play(node_sound.name, {
pos = node_pos,
max_hear_distance = 8,
gain = node_sound.gain,
})
end
return
end
local replacement = replacements[node_name]
local replacement_sounds = minetest.registered_nodes[replacement].sounds
local rep_sound = get_sound(minetest.registered_nodes[replacement], 'dug')
local uses = minetest.registered_tools[itemstack:get_name()]._uniham.uses
minetest.sound_play(replacement_sounds.dug.name, {
pos = node_pos,
max_hear_distance = 8,
gain = replacement_sounds.dug.gain,
})
if rep_sound then
minetest.sound_play(rep_sound.name, {
pos = node_pos,
max_hear_distance = 8,
gain = rep_sound.gain,
})
end
minetest.set_node(node_pos, { name = replacement })
minetest.check_for_falling(node_pos)