Exemple #1
0
        /// <inheritdoc />
        bool IShotInfluence.Change(int turn, double fromX, double fromY, ref double toX, ref double toY)
        {
            Segment shotSegment = new Segment(fromX, fromY, toX, toY);

            Point intersect = EuclideanSpaceUtils.GetNearestIntersect(shotSegment, this.Segments());

            toY = intersect.Y;
            toX = intersect.X;

            return(true);
        }
Exemple #2
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);
        }
Exemple #3
0
        public void ShotChange(int turn, double fromX, double fromY, ref double toX, ref double toY)
        {
            var enumerator = getEnumerator(shotObstacles, fromX, fromY, toX, toY).GetEnumerator();

            while (enumerator.MoveNext())
            {
                IShotInfluence obstacle = enumerator.Current;
                if (obstacle == null)
                {
                    continue;
                }
                if (obstacle.Change(turn, fromX, fromY, ref toX, ref toY))
                {
                    enumerator.Dispose();
                    Segment leadSegment      = new Segment(fromX, fromY, toX, toY);
                    Point   nearestIntersect = EuclideanSpaceUtils.GetNearestIntersect(leadSegment, obstacle.Segments());

                    fromX      = nearestIntersect.X;
                    fromY      = nearestIntersect.Y;
                    enumerator = getEnumerator(shotObstacles, fromX, fromY, toX, toY).GetEnumerator();
                }
            }
        }