58 const auto& it = std::find(pedestrians.begin(), pedestrians.end(), p);
59 if (it != pedestrians.end()) {
63 pedestrians.erase(it);
71 double oncomingGap, std::vector<const MSPerson*>* collectBlockers) {
73 const double leaderFrontDist = (ped->getDirection() ==
FORWARD ? vehSide - ped->getEdgePos(0) : ped->getEdgePos(0) - vehSide);
74 const double leaderBackDist = leaderFrontDist + ped->getPerson()->getVehicleType().getLength();
75#ifdef DEBUG_INTERACTING
77 std::cout <<
SIMTIME <<
" lane=" << lane->
getID() <<
" dir=" << ped->getDirection() <<
" pX=" << ped->getEdgePos(0) <<
" pL=" << ped.getLength()
78 <<
" vehSide=" << vehSide
79 <<
" vehWidth=" << vehWidth
80 <<
" lBD=" << leaderBackDist
81 <<
" lFD=" << leaderFrontDist
85 if (leaderBackDist >= -vehWidth
86 && (leaderFrontDist < 0
88 || (leaderFrontDist <= oncomingGap && ped->getWaitingTime() <
TIME2STEPS(2.0)))) {
94 if (collectBlockers ==
nullptr) {
97 collectBlockers->push_back(ped->getPerson());
100 if (collectBlockers ==
nullptr) {
103 return collectBlockers->size() > 0;
130 double relX2 = ped->getEdgePos(0) - (ped->getDirection() ==
FORWARD ? 0 : stopTime * ped->getPerson()->getMaxSpeed());
131 double dist = ((relX2 - minPos) * (bidi ? -1 : 1)
132 - (ped->getDirection() ==
FORWARD ? ped->getPerson()->getVehicleType().getLength() : 0));
133 const bool aheadOfVehicle = bidi ? ped->getEdgePos(0) < minPos : ped->getEdgePos(0) > minPos;
134 if (aheadOfVehicle && dist < result.second) {
135 const double center = ped->getLatOffset() + 0.5 * lane->
getWidth();
136 const double halfWidth = 0.5 * ped->getPerson()->getVehicleType().getWidth();
137 const bool overlap = (center + halfWidth > minRight && center - halfWidth < maxLeft);
138#ifdef DEBUG_INTERACTING
140 std::cout <<
" nextBlocking lane=" << lane->
getID() <<
" bidi=" << bidi
141 <<
" minPos=" << minPos <<
" minRight=" << minRight <<
" maxLeft=" << maxLeft
142 <<
" stopTime=" << stopTime
143 <<
" pedY=" << ped->getPosLat()
144 <<
" pedX=" << ped->getEdgePos(0)
145 <<
" relX2=" << relX2
146 <<
" center=" << center
147 <<
" pedLeft=" << center + halfWidth
148 <<
" pedRight=" << center - halfWidth
149 <<
" overlap=" << overlap
154 result.first = ped->getPerson();
155 result.second = dist;
178#ifdef DEBUG_INTERACTING
std::pair< const MSPerson *, double > PersonDist
static bool gUsingInternalLanes
Information whether the simulation regards internal lanes.
Representation of a lane in the micro simulation.
const std::vector< IncomingLaneInfo > & getIncomingLanes() const
double getWidth() const
Returns the lane's width.
static bool ignoreFoe(const SUMOTrafficObject *ego, const SUMOTrafficObject *foe)
static MSNet * getInstance()
Returns the pointer to the unique instance of MSNet (singleton).
bool hasPedestrianNetwork() const
return whether the network contains walkingareas and crossings
bool hasInternalLinks() const
return whether the network contains internal links
std::vector< MSPModel_InteractingState * > Pedestrians
bool usingInternalLanes()
whether movements on intersections are modelled /
Pedestrians & getPedestrians(const MSLane *lane)
retrieves the pedestrian vector for the given lane (may be empty)
PersonDist nextBlocking(const MSLane *lane, double minPos, double minRight, double maxLeft, double stopTime=0, bool bidi=false)
returns the next pedestrian beyond minPos that is laterally between minRight and maxLeft or nullptr
bool blockedAtDist(const SUMOTrafficObject *ego, const MSLane *lane, double vehSide, double vehWidth, double oncomingGap, std::vector< const MSPerson * > *collectBlockers)
whether a pedestrian is blocking the crossing of lane for the given vehicle bondaries
ActiveLanes myActiveLanes
store of all lanes which have pedestrians on them
bool myAmActive
whether an event for pedestrian processing was added
static Pedestrians noPedestrians
empty pedestrian vector
static bool usingInternalLanesStatic()
int myNumActivePedestrians
the total number of active pedestrians
virtual void remove(MSTransportableStateAdapter *state)
remove the specified person from the pedestrian simulation
bool hasPedestrians(const MSLane *lane)
whether the given lane has pedestrians on it
virtual void clearState()
Resets pedestrians when quick-loading state.
static void unregisterCrossingApproach(const MSPModel_InteractingState &ped, const MSLane *crossing)
unregister pedestrian approach with the junction model
Container for pedestrian state and individual position update function.
virtual const MSLane * getNextCrossing() const
placeholder function for the accessing the next crossing
MSPerson * getPerson() const
return the represented person
abstract base class for managing callbacks to retrieve various state information from the model
virtual const MSLane * getLane() const
the current lane of the transportable
const std::string & getID() const
Returns the id.
Representation of a vehicle, person, or container.