Im dividing by the smoke radius instead of diameter, using diameter it leaves a gap.
To compute the pos between each smoke I made a proportion with the radius of the tower and 180 degrees, not sure if this is entirely correct, but it works.
The logic is, if in 180 degrees the "distance" displaced is 2*r, then how many angle rot is for the smoke radius:
float angleStep = (180.0f * fxRadius) / (coll.radius * 2.0f);
void SpawnTowerDestructionFx(CircleCollider2D coll)
{
float circunf = Mathf.PI * coll.radius * 2.0f;
float fxRadius = 0.8f;// not really at the border, smokes overlap
//float fxDiameter = fxRadius * 2.0f;
int nFxs = (int)(circunf / fxRadius); // this is not precise computation either
Vector2 towerPos = transform.position;
float angleStep = (180.0f * fxRadius) / (coll.radius * 2.0f);
for (int it = 0; it < nFxs; ++it)
{
float angle = it * angleStep;
Quaternion rot = Quaternion.Euler(0.0f, 0.0f, angle);
Vector2 dir = rot * Vector2.right;
Vector2 pos = towerPos + dir * coll.radius;
spriteFxPooling.PoolObject().GetComponent<SpriteFX>().
Launch(pos, rot, SpriteFX.AnimHashes.SMOKE);
}
}