/** * Convenience method for {@link Graphs#findClosestObject}. * @param pos The {@link Point} which is used as reference. * @param rm The {@link RoadModel} which is searched. * @return The closest object in <code>rm</code> to <code>pos</code>. * @see Graphs#findClosestObject */ @Nullable public static RoadUser findClosestObject(Point pos, RoadModel rm) { return findClosestObject(pos, rm, RoadUser.class); }
/** * Convenience method for {@link Graphs#findClosestObject}. * @param pos The {@link Point} which is used as reference. * @param rm The {@link RoadModel} which is searched. * @param type The type of object that is searched. * @param <T> The type of the returned object. * @return The closest object in <code>rm</code> to <code>pos</code> of type * <code>type</code>. * @see Graphs#findClosestObject */ @Nullable public static <T extends RoadUser> T findClosestObject(Point pos, RoadModel rm, final Class<T> type) { return findClosestObject(pos, rm, rm.getObjectsOfType(type)); }
/** * Convenience method for {@link Graphs#findClosestObject}. * @param pos The {@link Point} which is used as reference. * @param rm The {@link RoadModel} which is searched. * @param predicate A {@link Predicate} indicating which objects are included * in the search. * @return The closest object in <code>rm</code> to <code>pos</code> which * satisfies the <code>predicate</code>. * @see Graphs#findClosestObject */ @Nullable public static RoadUser findClosestObject(Point pos, RoadModel rm, Predicate<RoadUser> predicate) { final Collection<RoadUser> filtered = Collections2.filter(rm.getObjects(), predicate); return findClosestObject(pos, rm, filtered); }
curr = Optional.fromNullable(RoadModels.findClosestObject( rm.getPosition(this), rm, Parcel.class));
curr = Optional.fromNullable(RoadModels.findClosestObject( rm.getPosition(this), rm, Parcel.class));
@Test public void findClosestObjectTest() { // actually, o1 and o2 have the same distance to ref (but o1 is added // earlier) assertEquals(o1, RoadModels.findClosestObject(new Point(5, 5), rm)); assertEquals(o2, RoadModels.findClosestObject(new Point(5.000001, 5), rm)); assertEquals(o6, RoadModels.findClosestObject(new Point(5, 5), rm, LongRoadUser.class)); assertEquals(null, RoadModels.findClosestObject(new Point(5, 5), rm, new Predicate<RoadUser>() { @Override public boolean apply(RoadUser input) { return false; } })); }
@Override protected void tickImpl(TimeLapse time) { final RoadModel rm = getRoadModel(); final PDPModel pm = getPDPModel(); // we always go to the closest available parcel final Parcel closest = (Parcel) RoadModels .findClosestObject(rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override public boolean apply(@Nullable RoadUser input) { return input instanceof Parcel && pm.getParcelState((Parcel) input) == ParcelState.AVAILABLE; } }); if (closest != null) { rm.moveTo(this, closest, time); if (rm.equalPosition(closest, this) && pm .getTimeWindowPolicy() .canPickup(closest.getPickupTimeWindow(), time.getTime(), closest.getPickupDuration())) { pm.pickup(this, closest, time); } } } }
@Override protected void tickImpl(TimeLapse time) { final RoadModel rm = getRoadModel(); final PDPModel pm = getPDPModel(); // we always go to the closest available parcel final Parcel closest = (Parcel) RoadModels .findClosestObject(rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override public boolean apply(@Nullable RoadUser input) { return input instanceof Parcel && pm.getParcelState((Parcel) input) == ParcelState.AVAILABLE; } }); if (closest != null) { rm.moveTo(this, closest, time); if (rm.equalPosition(closest, this) && pm .getTimeWindowPolicy() .canPickup(closest.getPickupTimeWindow(), time.getTime(), closest.getPickupDuration())) { pm.pickup(this, closest, time); } } } }
final Parcel closest = (Parcel) RoadModels.findClosestObject( rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override
final Parcel closest = (Parcel) RoadModels.findClosestObject( rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override
@Override protected void tickImpl(TimeLapse time) { final RoadModel rm = getRoadModel(); final PDPModel pm = getPDPModel(); // we always go to the closest available parcel final Parcel closest = (Parcel) RoadModels.findClosestObject( rm.getPosition(this), rm, new Predicate<RoadUser>() { @Override public boolean apply(RoadUser input) { return input instanceof Parcel && pm.getParcelState((Parcel) input) == ParcelState.AVAILABLE; } }); if (closest != null) { rm.moveTo(this, closest, time); if (rm.equalPosition(closest, this) && pm.getTimeWindowPolicy().canPickup(closest.getPickupTimeWindow(), time.getTime(), closest.getPickupDuration())) { pm.pickup(this, closest, time); } } } }