You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.6 KiB
46 lines
1.6 KiB
Medpack = {}
|
|
|
|
-- constants
|
|
Medpack.trigger_base_name = mod_prefix.."heal-trigger-"
|
|
Medpack.search_radius = 8
|
|
|
|
function Medpack.on_trigger_created_entity(event)
|
|
if not event.entity and event.entity.valid then return end
|
|
if string.starts(event.entity.name, Medpack.trigger_base_name) then
|
|
local suffix = util.replace(event.entity.name, Medpack.trigger_base_name, "")
|
|
-- number is at the end.
|
|
local heal = util.string_to_number(suffix)
|
|
if heal and heal > 0 then
|
|
local instigator = event.source
|
|
if not instigator then return end
|
|
|
|
local surface = event.entity.surface
|
|
local position = event.entity.position
|
|
local forces = ceasefire_forces(instigator.force)
|
|
local friends = surface.find_entities_filtered{
|
|
position = position,
|
|
radius = Medpack.search_radius,
|
|
force = forces,
|
|
type = {"character", "unit"}
|
|
}
|
|
local heal_target = nil
|
|
local best_distance = math.huge
|
|
for _, friend in pairs(friends) do
|
|
-- TODO: when entity.prototype.trigger_target_mask is readable then use the biological mask.
|
|
if friend.prototype.flags["breaths-air"] then
|
|
local distance = util.vectors_delta_length(position, friend.position)
|
|
if distance < best_distance then
|
|
best_distance = distance
|
|
heal_target = friend
|
|
end
|
|
end
|
|
end
|
|
if heal_target then
|
|
heal_target.health = heal_target.health + heal
|
|
end
|
|
end
|
|
end
|
|
end
|
|
Event.addListener(defines.events.on_trigger_created_entity, Medpack.on_trigger_created_entity)
|
|
|
|
return Medpack
|
|
|