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}"); } } } } }