private void handleTeleportationArrivals() { double now = internalInterface.getMobsim().getSimTimer().getTimeOfDay(); while (teleportationList.peek() != null) { Tuple<Double, MobsimAgent> entry = teleportationList.peek(); if (entry.getFirst() <= now) { teleportationList.poll(); MobsimAgent personAgent = entry.getSecond(); personAgent.notifyArrivalOnLinkByNonNetworkMode(personAgent .getDestinationLinkId()); double distance = personAgent.getExpectedTravelDistance(); this.eventsManager.processEvent(new TeleportationArrivalEvent(this.internalInterface.getMobsim().getSimTimer().getTimeOfDay(), personAgent.getId(), distance)); personAgent.endLegAndComputeNextState(now); this.teleportationData.remove(personAgent.getId()); internalInterface.arrangeNextAgentState(personAgent); } else { break; } } }
@Override public boolean handlePassengerLeaving(PTPassengerAgent passenger, MobsimVehicle vehicle, Id<Link> toLinkId, double time) { boolean handled = vehicle.removePassenger(passenger); if(handled){ eventsManager.processEvent(new PersonLeavesVehicleEvent(time, passenger.getId(), vehicle.getVehicle().getId())); // from here on works only if PassengerAgent can be cast into MobsimAgent ... but this is how it was before. // kai, sep'12 MobsimAgent agent = (MobsimAgent) passenger ; agent.notifyArrivalOnLinkByNonNetworkMode(toLinkId); agent.endLegAndComputeNextState(time); this.internalInterface.arrangeNextAgentState(agent) ; // (cannot set trEngine to TransitQSimEngine because there are tests where this will not work. kai, dec'11) } return handled; }
((MobsimAgent) p).endLegAndComputeNextState( now ); events.processEvent( new PersonLeavesVehicleEvent(now, p.getId(), vehicle.getId()));