Example #1
0
        public void MoveChange(Robot robot, int turn, double fromX, double fromY, double toX, double toY)
        {
            clearUsages(movementObstacles.Values);
            var enumerator = getEnumerator(movementObstacles, fromX, fromY, toX, toY).GetEnumerator();
            List <IMoveInfluence> usedObstacle = new List <IMoveInfluence>();

            while (enumerator.MoveNext())
            {
                IMoveInfluence movementObstacle = enumerator.Current;
                if (movementObstacle == null)
                {
                    continue;
                }
                movementObstacle.Used = true;
                usedObstacle.Add(movementObstacle);

                Segment leadSegment      = new Segment(fromX, fromY, toX, toY);
                Point   nearestIntersect = EuclideanSpaceUtils.GetNearestIntersect(leadSegment, movementObstacle.Segments());

                robot.X = nearestIntersect.X;
                robot.Y = nearestIntersect.Y;

                double prevFromX = fromX;
                double prevFromY = fromY;
                double prevToX   = toX;
                double prevToY   = toY;

                movementObstacle.Change(robot, turn, ref fromX, ref fromY, ref toX, ref toY);
                if (!fromX.DEquals(prevFromX) || !fromY.DEquals(prevFromY) || !toX.DEquals(prevToX) || toY.DEquals(prevToY))
                {
                    enumerator.Dispose();
                    enumerator = getEnumerator(movementObstacles, fromX, fromY, toX, toY).GetEnumerator();
                }
            }
            enumerator.Dispose();

            robot.X = toX;
            robot.Y = toY;

            clearUsages(usedObstacle);
        }
Example #2
0
 public void AddMovementObstacle(IMoveInfluence obstacle)
 {
     this.movementObstacles.Add(new Point(obstacle.X, obstacle.Y), obstacle);
 }