final void positionPassengers(Collection<AgentSnapshotInfo> positions, Collection<? extends PassengerAgent> passengers, double distanceOnLink, Coord startCoord, Coord endCoord, double lengthOfCurve, Integer lane, double speedValueBetweenZeroAndOne) { int cnt = passengers.size(); int laneInt = 2*(cnt+1); if (lane != null){ laneInt += lane; } for (PassengerAgent passenger : passengers) { int lanePos = laneInt - 2*cnt ; AgentSnapshotInfo passengerPosition = snapshotInfoFactory.createAgentSnapshotInfo(passenger.getId(), startCoord, endCoord, distanceOnLink, lanePos, lengthOfCurve); passengerPosition.setColorValueBetweenZeroAndOne(speedValueBetweenZeroAndOne); passengerPosition.setAgentState(AgentState.PERSON_OTHER_MODE); // in 2010, probably a passenger positions.add(passengerPosition); cnt-- ; } }
private void boardPassengers() { // using the vehicle provider might give access to a vehicle which is // used by somebody else, if the sequence is incorrect. // Using getVehicle() looks safer, as it should fail if the vehicle // is somewhere else. // It remains however problematic, as it is not clear whether agents will continue // to be given the vehicle or not... final MobsimVehicle vehicle = getVehicle();// vehicleProvider.getVehicle( delegate.getPlannedVehicleId() ); final EventsManager events = ((QSim) internalInterface.getMobsim()).getEventsManager(); for ( PassengerAgent passenger : passengersToBoard ) { assert passenger.getCurrentLinkId().equals( getCurrentLinkId() ) : passenger+" is at "+passenger.getCurrentLinkId()+" instead of "+getCurrentLinkId()+" for driver "+this; assert ((Leg) getCurrentPlanElement()).getMode().equals( JointActingTypes.DRIVER ) : getCurrentPlanElement(); assert ((DriverRoute) ((Leg) getCurrentPlanElement()).getRoute()).getPassengersIds().contains( passenger.getId() ) : passenger+" not in "+((DriverRoute) ((Leg) getCurrentPlanElement()).getRoute()).getPassengersIds()+" for driver "+this; final boolean isAdded = vehicle.addPassenger( passenger ); if ( !isAdded ) { // do not know how to handle that... throw new RuntimeException( passenger+" could not be added to vehicle "+vehicle ); } events.processEvent( new PersonEntersVehicleEvent(internalInterface.getMobsim().getSimTimer().getTimeOfDay(), passenger.getId(), vehicle.getId())); } passengersToBoard.clear(); final DriverRoute dr = (DriverRoute) ((Leg) getCurrentPlanElement()).getRoute(); assert vehicle.getPassengers().size() == dr.getPassengersIds().size() && IdentifiableCollectionsUtils.containsAll( dr.getPassengersIds() , vehicle.getPassengers() ) : vehicle.getPassengers()+" != "+dr.getPassengersIds()+" for driver "+this; }
assert vehicle != null; for ( PassengerAgent p : vehicle.getPassengers() ) { if ( p.getDestinationLinkId().equals( linkId ) ) { passengersToUnboard.add( p ); for (PassengerAgent p : passengersToUnboard) { assert p != this; assert !p.getId().equals( getId() ); ((MobsimAgent) p).endLegAndComputeNextState( now ); events.processEvent( new PersonLeavesVehicleEvent(now, p.getId(), vehicle.getId())); internalInterface.arrangeNextAgentState( (MobsimAgent) p );
@Override public final boolean insertPassengerIntoVehicle(MobsimAgent passenger, Id<Vehicle> vehicleId) { double now = context.getSimTimer().getTimeOfDay(); QVehicle vehicle = this.getParkedVehicle(vehicleId); // if the vehicle is not parked at the link, mark the agent as passenger waiting for vehicle if (vehicle == null) { registerPassengerAgentWaitingForCar(passenger, vehicleId); return false; } else { boolean added = vehicle.addPassenger((PassengerAgent) passenger); if (!added) { log.warn("Passenger " + passenger.getId().toString() + " could not be inserted into vehicle " + vehicleId.toString() + " since there is no free seat available!"); return false; } ((PassengerAgent) passenger).setVehicle(vehicle); EventsManager eventsManager = context.getEventsManager(); eventsManager.processEvent(new PersonEntersVehicleEvent(now, passenger.getId(), vehicle.getId())); // TODO: allow setting passenger's currentLinkId to null return true; } }