@Override public void addObjectAtSamePosition(RoadUser newObj, RoadUser existingObj) { checkArgument(!registry().containsObject(newObj), "Object %s is already " + "added.", newObj); checkArgument(registry().containsObject(existingObj), "Object %s does not exist.", existingObj); registry().addAt(newObj, registry().getPosition(existingObj)); eventDispatcher.dispatchEvent(new RoadModelEvent( RoadEventType.ADD_ROAD_USER, this, newObj)); }
@Override public ImmutableSet<T> findNearestObjects(Point position, int n) { return delegate().findNearestObjects(position, n); }
@Override public ImmutableSet<T> findObjectsInRect(Point min, Point max) { return delegate().findObjectsInRect(min, max); }
@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; }
@Test public void findObjectsInRectTest() { assertThat(reg.findObjectsInRect(new Point(0, 0), new Point(1, 1))) .isEmpty(); reg.addAt(A, new Point(1, 0)); reg.addAt(B, new Point(0, 0)); reg.addAt(C, new Point(1.1, 0)); reg.addAt(D, new Point(.5, .5)); reg.addAt(E, new Point(5, 5)); assertThat(reg.findObjectsInRect(new Point(0, 0), new Point(1, 1))) .containsExactly(A, B, D); }
@Test public void findNearestObjectsTest() { assertThat(reg.findNearestObjects(new Point(0, 0), 10)).isEmpty(); reg.addAt(A, new Point(1, 0)); assertThat(reg.findNearestObjects(new Point(0, 0), 1)).containsExactly(A); assertThat(reg.findNearestObjects(new Point(0, 0), 3)).containsExactly(A); reg.addAt(B, new Point(2, 0)); reg.addAt(C, new Point(3, 0)); reg.addAt(D, new Point(9, 0)); assertThat(reg.findNearestObjects(new Point(4, 0), 1)).containsExactly(C); assertThat(reg.findNearestObjects(new Point(4, 0), 2)) .containsExactly(C, B); reg.addAt(C2, new Point(3, 0)); assertThat(reg.findNearestObjects(new Point(4, 0), 1)).containsExactly(C); }
@Test public void findObjectsWithinRadiusTest() { assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 5)).isEmpty(); reg.addAt(A, new Point(1, 0)); reg.addAt(B, new Point(2, 0)); reg.addAt(C, new Point(3, 0)); reg.addAt(D, new Point(0, 4)); reg.addAt(E, new Point(5, 5)); assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 1)).isEmpty(); assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 2)) .containsExactly(A); assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 3)) .containsExactly(A, B); assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 4)) .containsExactly(A, B, C); assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 5)) .containsExactly(A, B, C, D); assertThat(reg.findObjectsWithinRadius(new Point(0, 0), 10)) .containsExactly(A, B, C, D, E); } }
@Override public void addObjectAt(RoadUser newObj, Point pos) { checkArgument(!registry().containsObject(newObj), "Object is already added: %s.", newObj); registry().addAt(newObj, pos); eventDispatcher.dispatchEvent(new RoadModelEvent( RoadEventType.ADD_ROAD_USER, this, newObj)); }
@Override public ImmutableSet<T> findObjectsWithinRadius(Point position, double radius) { return delegate().findObjectsWithinRadius(position, radius); }
@Override public void addAt(T object, Point position) { delegate().addAt(object, position); }
TimeLapse time) { final long startTimeConsumed = time.getTimeConsumed(); Point loc = registry().getPosition(object); registry().addAt(object, loc);
@Override public void removeObject(RoadUser roadUser) { checkArgument(registry().containsObject(roadUser), "RoadUser: %s does not exist.", roadUser); registry().removeObject(roadUser); objDestinations.remove(roadUser); eventDispatcher.dispatchEvent(new RoadModelEvent( RoadEventType.REMOVE_ROAD_USER, this, roadUser)); }
@Override public boolean containsObject(RoadUser obj) { return registry().containsObject(obj); }
@Override public Point getPosition(RoadUser roadUser) { return registry().getPosition(roadUser); }
@Override public void clear() { registry().clear(); objDestinations.clear(); }
@Override public void removeObject(T object) { delegate().removeObject(object); }
@Override public ImmutableMap<T, Point> getObjectsAndPositions() { return delegate().getObjectsAndPositions(); }
@Override public ImmutableSet<T> getObjects() { return delegate().getObjects(); }
/** * Checks whether the specified {@link Point} is occupied or not. A * {@link Point} is considered occupied if a {@link MovingRoadUser} cannot be * added at that location without colliding with an existing * {@link MovingRoadUser}. * @param pos The position to check. * @return <code>true</code> indicates that the position is occupied, * <code>false</code> indicates that the position is not occupied. */ public boolean isOccupied(Point pos) { return !blockingRegistry.findObjectsWithinRadius(pos, 2 * objRadius) .isEmpty(); }
@Override public void addObjectAt(RoadUser obj, Point pos) { if (obj instanceof MovingRoadUser) { checkArgument(!isOccupied(pos), "Cannot add an object on an occupied position: %s.", pos); blockingRegistry.addAt((MovingRoadUser) obj, pos); } super.addObjectAt(obj, pos); }