public EstimatedPosition(EstimatedPosition p) : base(p)
 {
     XPrecision = p.XPrecision;
     YPrecision = p.YPrecision;
 }
Example #2
0
        private void AnalyseMove(Instruction instruction)
        {
            Console.Error.Write($"AnalyseMove Ep: {(Enemy.CurrentPosition.Known ? Enemy.CurrentPosition : Enemy.LastInstruction.EstimatedPosition)}");
            var _analyseMoveCase = "0";

            var lastInstruction = Enemy.LastInstruction;
            var lastDirection   = lastInstruction.MoveCommand?.Direction ?? Direction.None;

            if (!Enemy.CurrentPosition.Known && Enemy.LastInstructions.Count > 0)
            {
                //On regarde la position estimé du dernier coup (la position précédante est recopié N-2 = N-1)
                var previousInstruction = Enemy.LastInstruction;
                if (previousInstruction.EstimatedPosition.Known)
                {
                    //On applique le déplacement du coup

                    var newEstimatedPosition = new EstimatedPosition(previousInstruction.EstimatedPosition);

                    var xOffset = lastDirection.GetOffset(OffsetType.XOffset);
                    var yOffset = lastDirection.GetOffset(OffsetType.YOffset);

                    if (!newEstimatedPosition.IsValidPosition(Map, yOffset, xOffset))
                    {
                        _analyseMoveCase = "1.1";

                        // On reset pour le moment ...
                        newEstimatedPosition.X           = -1;
                        newEstimatedPosition.Y           = -1;
                        newEstimatedPosition.XPrecision += 1;
                        newEstimatedPosition.YPrecision += 1;

                        //Console.Error.Write(" No reachable position, define close position");
                    }
                    else
                    {
                        _analyseMoveCase        = "1.2";
                        newEstimatedPosition.X += xOffset;
                        newEstimatedPosition.Y += yOffset;
                    }

                    lastInstruction.EstimatedPosition = newEstimatedPosition;
                    // Console.Error.WriteLine($"Enemy estimated postion updated to: {lastInstruction.EstimatedPosition}");
                }
                else
                {
                    _analyseMoveCase = "2.1";

                    // On connait pas encore sa positon mais il a fait surface
                    if (previousInstruction.SurfaceCommand?.IsValid == true)
                    {
                        _analyseMoveCase = "2.1.1";
                    }
                }
            }

            if (Enemy.CurrentPosition.Known)
            {
                // Console.Error.WriteLine("Track move !");
                _analyseMoveCase = "3.1";

                var xOffset = lastDirection.GetOffset(OffsetType.XOffset);
                var yOffset = lastDirection.GetOffset(OffsetType.YOffset);

                var newEnemyPosition = new Position(Enemy.CurrentPosition);

                // Console.Error.WriteLine($"Tracked position {newEnemyPosition} + x: {xOffset}, + y: {yOffset}");


                if (newEnemyPosition.IsValidPosition(Map, yOffset, xOffset))
                {
                    _analyseMoveCase = "3.2";

                    //Console.Error.Write($"Enemy Position : {Enemy.Position} ->");
                    Enemy.CurrentPosition.X += xOffset;
                    Enemy.CurrentPosition.Y += yOffset;
                    //Console.Error.WriteLine($" {Enemy.Position}");
                }
            }
            Console.Error.WriteLine($" -> _analyseMoveCase: {_analyseMoveCase} -  EPosition : {(Enemy.CurrentPosition.Known ? Enemy.CurrentPosition : lastInstruction.EstimatedPosition)}");
        }