// really parked a car: this will prevent using P+R as
// shortcut.
if ((back != exit) && !(backEdge instanceof ParkAndRideEdge))
return null;
StateEditor s1 = s0.edit(this);
TraverseMode mode = s0.getNonTransitMode();
if (mode == TraverseMode.WALK) {
// Walking
double walkTime = linkDistance * WALK_OBSTRUCTION_FACTOR
/ s0.getOptions().walkSpeed;
s1.incrementTimeInSeconds((int) Math.round(walkTime));
s1.incrementWeight(walkTime);
s1.incrementWalkDistance(linkDistance);
s1.setBackMode(TraverseMode.WALK);
} else if (mode == TraverseMode.CAR) {
// Driving
double driveTime = linkDistance * DRIVE_OBSTRUCTION_FACTOR / DRIVE_SPEED_MS;
s1.incrementTimeInSeconds((int) Math.round(driveTime));
s1.incrementWeight(driveTime);
s1.setBackMode(TraverseMode.CAR);
} else {
// Can't cycle in/out a P+R.
return null;
}
return s1.makeState();
}