コード例 #1
0
ファイル: BulletLogic.cs プロジェクト: led318/tank-bot
        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);
        }