public static void CalculateBullets() { var bullets = State.ThisRound.Bullets; if (!bullets.Any()) { return; } foreach (var bullet in bullets) { var prevRoundNearBullet = CalculateNearestBullet(bullet); if (prevRoundNearBullet != null) { bullet.Direction = prevRoundNearBullet.Point.CalculateDirectionToPoint(bullet.Point); bullet.IsMyBullet = prevRoundNearBullet.IsMyBullet; continue; } var currentRoundNearTank = CalculateNearestTank(bullet) ?? CalculateNearestTank(bullet, Bullet.DefaultSpeed); if (currentRoundNearTank != null) { bullet.Direction = currentRoundNearTank.Direction; currentRoundNearTank.Shot(); if (currentRoundNearTank is MyTank) { bullet.IsMyBullet = true; } continue; } var currentRoundNearTrees = CalculateNearestTrees(bullet, Bullet.DefaultSpeed); if (currentRoundNearTrees.Any()) { foreach (var currentRoundNearTree in currentRoundNearTrees) { var direction = currentRoundNearTree.Point.CalculateDirectionToPoint(bullet.Point); bullet.Direction = direction; var enemyTank = new EnemyTank(Element.OTHER_TANK_DOWN, currentRoundNearTree.Point); enemyTank.Direction = direction; enemyTank.UpdateElementByDirection(); enemyTank.IsPhantom = true; State.ThisRound.EnemyTanks.Add(enemyTank); var cell = Field.GetCell(currentRoundNearTree.Point); cell.Items.Insert(0, enemyTank); } } } BulletPredictionLogic.CalculateBulletPredictions(State.ThisRound.Bullets); }