/// <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); }
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); }
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(); } } }