68 lines
2.8 KiB
Lua

-- File Licence: You can copy and distribute this file regardless of the mod's general licence. This licence exception does not affect other files of this mod.
local collision_mask_util_extended = {}
-- see collision_mask_util_extended_extended.lua for full instructions.
--[[
-- Example usage
local collision_mask_util_extended = require("collision-mask-util-control")
function check_collision_layers()
collision_mask_util_extended.named_collision_mask_integrity_check()
local flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer")
end
script.on_init(check_collision_layers)
script.on_configuration_changed(check_collision_layers)
function find_flying_entities(surface)
local flying_layer = collision_mask_util_extended.get_named_collision_mask("flying-layer")
return surface.find_entities_filtered{collision_mask={flying_layer}}
end
]]
function collision_mask_util_extended.get_named_collision_mask(mask_name)
local prototype = game.entity_prototypes["collision-mask-"..mask_name]
if prototype then
local layer
for mask_name, collides in pairs(prototype.collision_mask) do
if layer then
error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object must have only 1 collision mask.\n\n")
else
layer = mask_name
end
end
if not layer then
error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object is missing collision_mask.\n\n")
end
return layer
else
error("\n\n\nA reserved collision mask object "..mask_name.." has been removed.\n\n")
end
end
function collision_mask_util_extended.named_collision_mask_integrity_check()
-- This function will check that collision mask marker objects have 1 collision mask
-- Run this on the events: on_init and on_configuration_changed
-- It will not detect collision mask marker objects that have been removed from the game
-- However: collision_mask_util_extended.get_named_collision_mask(mask_name) will
local prototypes = game.get_filtered_entity_prototypes({{filter = "type", type = "arrow"}})
for _, prototype in pairs(prototypes) do
if string.find(prototype.name, "collision-mask-") then
local layer
for mask_name, collides in pairs(prototype.collision_mask) do
if layer then
error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object must have only 1 collision mask.\n\n")
else
layer = mask_name
end
end
if not layer then
error("\n\n\nA reserved collision mask object "..mask_name.." has been compromised by 1 or more of your installed mods. Object is missing collision_mask.\n\n")
end
end
end
end
return collision_mask_util_extended