@Override public void tick(TimeLapse timeLapse) { if (dest == null) { dest = roadModel.get().getRandomPosition(randomGenerator); } roadModel.get().moveTo(this, dest, timeLapse); if (roadModel.get().getPosition(this).equals(dest)) { dest = null; } }
@Override public void initRoadUser(RoadModel model) { roadModel = Optional.of((CollisionPlaneRoadModel) model); roadModel.get().addObjectAt(this, initialPosition); }
@Override public CollisionPlaneRoadModel build( DependencyProvider dependencyProvider) { final Clock clock = dependencyProvider.get(Clock.class); return new CollisionPlaneRoadModel(this, clock); }
/** * Finds a random unoccupied position. * <p> * <b>Warning</b>, if there are no unoccupied positions, this method will not * return. * @param rng The random number generator to use for drawing random numbers. * @return A random unoccupied position. */ public Point getRandomUnoccupiedPosition(RandomGenerator rng) { Point pos; do { pos = getRandomPosition(rng); } while (isOccupied(pos)); return pos; }
@Test public void moveToOccupiedPosition() { model.addObjectAt(ru1, new Point(1, 1)); model.addObjectAt(ru2, new Point(2.5, 1)); final MoveProgress mp = model.moveTo(ru1, new Point(2, 1), tick()); assertThat(Point.distance(model.getPosition(ru1), new Point(1.25, 1))) .isAtMost(PlaneRoadModel.DELTA); assertThat(mp.distance().doubleValue(SI.METER)) .isWithin(PlaneRoadModel.DELTA).of(.25); final MoveProgress mp2 = model.moveTo(ru1, new Point(2, 1), tick()); assertThat(Point.distance(model.getPosition(ru1), new Point(1.5, 1))) .isAtMost(PlaneRoadModel.DELTA); assertThat(mp2.distance().doubleValue(SI.METER)) final MoveProgress mp1c = model.moveTo(ru1, new Point(2, 1), tick()); assertThat(Point.distance(model.getPosition(ru1), new Point(1.5, 1))) .isAtMost(PlaneRoadModel.DELTA); assertThat(mp1c.distance().doubleValue(SI.METER)) .isWithin(PlaneRoadModel.DELTA).of(0); model.addObjectAt(ru3, new Point(3.5, 2)); model.moveTo(ru3, new Point(2.5, 1), tick()); assertThat(Point.distance(model.getPosition(ru3), model.getPosition(ru2))) .isGreaterThan(1d); model.moveTo(ru3, new Point(2.5, 1), tick()); assertThat(Point.distance(model.getPosition(ru3), model.getPosition(ru2)))
@Override public void tick(TimeLapse timeLapse) { if (!destination.isPresent()) { nextDestination(); } final MoveProgress mp = roadModel.get().moveTo(this, destination.get(), timeLapse); if (roadModel.get().getPosition(this).equals(destination.get()) || stuckTickCount >= MAX_STUCK_TICK_COUNT) { nextDestination(); stuckTickCount = 0; } else if (mp.distance().getValue().doubleValue() == 0d) { stuckTickCount++; } else { stuckTickCount = 0; } }
final Point pos = getPosition(ru); if (Point.distance(pos, from) <= objRadius * 2) { hit = true; findIntersectionPoints(pos, 2 * objRadius, from, destDuringTick); if (isBetween(from, destDuringTick, p) && Point.distance(from, p) > DELTA) { intersectPoints.add(p); final double minDist = findMinDist(from, intersectPoints); return Math.min(travelableDistance, Math.max(0, minDist));
@Test public void addRUatOccupiedPosition() { final Point loc1 = new Point(1, 1); model.addObjectAt(ru1, loc1); final ParcelRU p1 = new ParcelRU(); final ParcelRU p2 = new ParcelRU(); final ParcelRU p3 = new ParcelRU(); model.addObjectAt(p1, loc1); model.addObjectAt(p2, loc1); model.addObjectAt(p3, loc1); assertThat(model.getPosition(ru1)).isEqualTo(loc1); assertThat(model.getPosition(p1)).isEqualTo(loc1); assertThat(model.getPosition(p2)).isEqualTo(loc1); assertThat(model.getPosition(p3)).isEqualTo(loc1); assertThat(ImmutableSet.copyOf(model.getObjectPositions())).hasSize(1); }
@Override public void tick(TimeLapse timeLapse) { final List<RoadUser> list = model.getObjects().asList(); for (int i = 0; i < list.size(); i++) { for (int j = i + 1; j < list.size(); j++) { final Point p1 = model.getPosition(list.get(i)); final Point p2 = model.getPosition(list.get(j)); assert_() .withMessage("%s is too close to %s", list.get(i), list.get(j)) .that(Point.distance(p1, p2)) .isAtLeast(599d); } } }
@Override protected MoveProgress doFollowPath(MovingRoadUser object, Queue<Point> path, TimeLapse time) { blockingRegistry.removeObject(object); final MoveProgress mp = super.doFollowPath(object, path, time); blockingRegistry.addAt(object, getPosition(object)); return mp; }
private void nextDestination() { destination = Optional.of(roadModel.get().getRandomPosition(rng.get())); }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { final int radius = 2; final Map<RoadUser, Point> objects = rm.getObjectsAndPositions(); synchronized (objects) { for (final Entry<RoadUser, Point> entry : objects.entrySet()) { final Point p = entry.getValue(); final UavAgent a = (UavAgent) entry.getKey(); final double r = rm.getObjectRadius(); final Color c; if (vizOptions.contains(Opts.DIFFERENT_COLORS)) {
@Override public void tick(TimeLapse timeLapse) { roadModel.get().moveTo(this, destination, timeLapse); }
@Override public void tick(TimeLapse timeLapse) { if (!destination.isPresent()) { nextDestination(); } final MoveProgress mp = roadModel.get().moveTo(this, destination.get(), timeLapse); if (roadModel.get().getPosition(this).equals(destination.get()) || stuckTickCount >= MAX_STUCK_TICK_COUNT) { nextDestination(); stuckTickCount = 0; } else if (mp.distance().getValue().doubleValue() == 0d) { stuckTickCount++; } else { stuckTickCount = 0; } }
secondUav.getSpeed() * sim.getTimeStep() / 1.0e3; Point secondUavPositionBeforeTick = model.getPosition(secondUav); Point firstUavPositionBeforeTick = model.getPosition(firstUav); final Point firstUavPositionAfterTick = model.getPosition(firstUav); final Point secondUavPositionAfterTick = model.getPosition(secondUav);
private void nextDestination() { destination = Optional.of(roadModel.get().getRandomPosition(rng.get())); }
@Override public void renderDynamic(GC gc, ViewPort vp, long time) { final int radius = 2; final Map<RoadUser, Point> objects = rm.getObjectsAndPositions(); synchronized (objects) { for (final Entry<RoadUser, Point> entry : objects.entrySet()) { final Point p = entry.getValue(); final UavAgent a = (UavAgent) entry.getKey(); final double r = rm.getObjectRadius(); final Color c; if (vizOptions.contains(Opts.DIFFERENT_COLORS)) {
@Override public void initRoadUser(RoadModel model) { roadModel = Optional.of((CollisionPlaneRoadModel) model); roadModel.get().addObjectAt(this, initialPosition); }
@Override public void initRoadUser(RoadModel model) { roadModel = Optional.of((CollisionPlaneRoadModel) model); roadModel.get().addObjectAt(this, initialPosition); }
@Override public void initRoadUser(RoadModel model) { roadModel = Optional.of((CollisionPlaneRoadModel) model); roadModel.get().addObjectAt(this, initialPosition); }