--- a/place-sounds/control.lua Wed Jul 23 16:08:55 2025 +0300 +++ b/place-sounds/control.lua Wed Aug 27 10:26:12 2025 +0300 @@ -1,43 +1,57 @@ -script.on_event(defines.events.on_built_entity, function(event) - local sound_path = "entity-close/"..event.entity.name +---@param entity LuaEntity +local function should_play_entity_sounds(entity) + return not (entity.type == "electric-pole" or entity.type == "wall" or entity.name == "stone-furnace") +end + +---@param entity LuaEntity +---@param sound_path SoundPath +local function try_play_sound(entity, sound_path, position) if helpers.is_valid_sound_path(sound_path) then - event.entity.surface.play_sound{ + entity.surface.play_sound{ path=sound_path, - position=game.players[event.player_index].position, + position=entity.position, } + return true + else + return false end +end + +local function play_drop_sounds(entity, position) + if not (should_play_entity_sounds(entity) and try_play_sound(entity, "entity-close/"..entity.name)) + then + try_play_sound(entity, "item-drop/"..entity.name) + end +end + +local function play_mined_sounds(entity, position) + if not (should_play_entity_sounds(entity) and try_play_sound(entity, "entity-open/"..entity.name, position)) + then + try_play_sound(entity, "item-pick/"..entity.name, position) + end +end + +script.on_event(defines.events.on_built_entity, function(event) + play_drop_sounds(event.entity, game.players[event.player_index].position) end) script.on_event(defines.events.on_robot_built_entity, function(event) - local sound_path = "entity-close/"..event.entity.name - if helpers.is_valid_sound_path(sound_path) - then - event.entity.surface.play_sound{ - path=sound_path, - position=event.entity.position, - } - end + play_drop_sounds(event.entity, event.entity.position) +end) + +script.on_event(defines.events.on_space_platform_built_entity, function(event) + play_drop_sounds(event.entity, event.entity.position) end) script.on_event(defines.events.on_player_mined_entity, function(event) - local sound_path = "entity-open/"..event.entity.name - if helpers.is_valid_sound_path(sound_path) - then - event.entity.surface.play_sound{ - path=sound_path, - position=game.players[event.player_index].position, - } - end + play_mined_sounds(event.entity, game.players[event.player_index].position) end) script.on_event(defines.events.on_robot_mined_entity, function(event) - local sound_path = "entity-open/"..event.entity.name - if helpers.is_valid_sound_path(sound_path) - then - event.entity.surface.play_sound{ - path=sound_path, - position=event.entity.position, - } - end + play_mined_sounds(event.entity, event.entity.position) end) + +script.on_event(defines.events.on_space_platform_mined_entity, function(event) + play_mined_sounds(event.entity, event.entity.position) +end)