68 lines
2.8 KiB
Lua
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
|