place-sounds/control.lua

changeset 19
adbc5c74f279
parent 12
2e09a72b2dfa
--- 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)

mercurial