private bool CheckForImpregnation(AlienComponent alienData, PositionComponent alienPos, AbstractEntity target, PositionComponent targetPos)
 {
     if (alienData.impregnateNextEnemy)
     {
         double dist = GeometryFunctions.Distance(alienPos.x, alienPos.y, targetPos.x, targetPos.y);
         if (dist < 2)
         {
             target.AddComponent(new ImpregnatedComponent());
             return(true);
         }
     }
     return(false);
 }
        public void Explosion(AbstractEntity entity)
        {
            ExplodesWhenTimerExpiresComponent ewtec = (ExplodesWhenTimerExpiresComponent)entity.GetComponent(nameof(ExplodesWhenTimerExpiresComponent));
            PositionComponent pos = ECSHelper.GetPosition(entity);

            foreach (var e in this.entities)
            {
                PositionComponent epos = ECSHelper.GetPosition(e);
                if (epos != null)
                {
                    if (GeometryFunctions.Distance(epos.x, epos.y, pos.x, pos.y) <= ewtec.range)
                    {
                        if (this.checkVis.CanSee(epos.x, epos.y, pos.x, pos.y))
                        {
                            this.damageSystem.Damage(e, ewtec.power, $"Exploding {entity.name}");
                        }
                    }
                }
            }
        }