public EstimatedPosition(EstimatedPosition p) : base(p) { XPrecision = p.XPrecision; YPrecision = p.YPrecision; }
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)}"); }