- Added function to check distance between two entities as I couldn't find one in utils
- Added call to check how far from destroyer to wagon
- Since there's now a check I removed the 2 second wait between spawning and starting to fire in favour of using distance instead (384, 386)
Rearranged the order of the code so that it's more performant and added comments to further explain the logic and reasons for the complications, ie. the cheesing with artillery.
- Current behaviour is that when destroyers/defenders are created their target position is set to the entity that killed them.
- If a player picks up the artillery after the capsules spawn then they lose their cause.target and stop, not reaching the cause of the turret death.
- I've changed this behaviour so that if the target.cause is artillery then it spawns a defender/destroyer projectile NOT an entity. The projectile target can therefore be a position not an entity. So the capsules won't stop if the artillery is picked up.
- If the cause is not artillery turret or wagon then a destroyer/defender capsule entity is spawned instead of a projectile because a projectile cannot track the player.
- If the player picks up the artillery turret before the projectile that kills a turret arrives then the event cause.name will be missing and no bots spawn at all. I have changed the behaviour so that "if not cause" then we assume they're doing something fucky. We won't have the entity cause name or position, so let's just spawn double the normal amount of destroyers and just send them at 0, 0 since we know nothing else to do with them.
When a combat robot expires and is targeting an artillery wagon, it will now explode. This is a work around for a factorio bug where combat robots do not attack artillery wagons.
Players were using remotely located artillery wagons in lakes to cheesily clear the map with no repercussions. Swarms of destroyer capsules would hover over the artillery but not target it. They would timeout and the player could then refill the wagon with ammo.
I've changed the entity_died_events file to events.lua since it now has on_entity_died, on_player_died and on_combat_robot_expired.
I have added the on_combat_robot_expired event so that when the robots timeout they explode, damaging nearby entities.