@Override public void addAt(T object, Point position) { delegate().addAt(object, position); }
@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); }
void addAt(T obj, Point position, @Nullable ConnLoc connLoc) { @Nullable ConnLoc cl = connLoc; // if no ConnLoc is provided but the position is known to be on a // connection, we can use that conn instead. if (cl == null && isOnConnection(position)) { cl = connLocMap.get(posMap.get(position).iterator().next()); } // remove from old position if (containsObject(obj)) { removeObject(obj); } delegate().addAt(obj, position); posMap.put(position, obj); if (cl != null) { connMap.put(cl.connection(), obj); connLocMap.put(obj, cl); } }
@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; }
@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 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)); }
@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); }
registry().addAt(object, loc);
@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); } }