31#define DEBUGCOND(PED) ((PED)->getPerson()->isSelected())
59 const auto& it = std::find(pedestrians.begin(), pedestrians.end(), p);
60 if (it != pedestrians.end()) {
64 pedestrians.erase(it);
72 double oncomingGap, std::vector<const MSPerson*>* collectBlockers) {
74 const double leaderFrontDist = (ped->getDirection() ==
FORWARD ? vehCenter - ped->getEdgePos(0) : ped->getEdgePos(0) - vehCenter) - vehWidth * 0.5;
75 const double leaderBackDist = leaderFrontDist + ped->getPerson()->getVehicleType().getLength();
76#ifdef DEBUG_INTERACTING
78 std::cout <<
SIMTIME <<
" lane=" << lane->
getID() <<
" dir=" << ped->getDirection() <<
" pX=" << ped->getEdgePos(0) <<
" pL=" << ped->getPerson()->getVehicleType().getLength()
79 <<
" vehCenter=" << vehCenter
80 <<
" vehWidth=" << vehWidth
81 <<
" lBD=" << leaderBackDist
82 <<
" lFD=" << leaderFrontDist
86 if (leaderBackDist >= -vehWidth
87 && (leaderFrontDist < 0
89 || (leaderFrontDist <= oncomingGap && ped->getWaitingTime() <
TIME2STEPS(2.0)))) {
95 if (collectBlockers ==
nullptr) {
98 collectBlockers->push_back(ped->getPerson());
101 if (collectBlockers ==
nullptr) {
104 return collectBlockers->size() > 0;
131 double relX2 = ped->getEdgePos(0) - (ped->getDirection() ==
FORWARD ? 0 : stopTime * ped->getPerson()->getMaxSpeed());
132 double dist = ((relX2 - minPos) * (bidi ? -1 : 1)
133 - (ped->getDirection() ==
FORWARD ? ped->getPerson()->getVehicleType().getLength() : 0));
134 const bool aheadOfVehicle = bidi ? ped->getEdgePos(0) < minPos : ped->getEdgePos(0) > minPos;
135 if (aheadOfVehicle && dist < result.second) {
136 const double center = ped->getLatOffset() + 0.5 * lane->
getWidth();
137 const double halfWidth = 0.5 * ped->getPerson()->getVehicleType().getWidth();
138 const bool overlap = (center + halfWidth > minRight && center - halfWidth < maxLeft);
139#ifdef DEBUG_INTERACTING
141 std::cout <<
" nextBlocking lane=" << lane->
getID() <<
" bidi=" << bidi
142 <<
" minPos=" << minPos <<
" minRight=" << minRight <<
" maxLeft=" << maxLeft
143 <<
" stopTime=" << stopTime
144 <<
" ped=" << ped->getID()
145 <<
" pedX=" << ped->getEdgePos(0)
146 <<
" relX2=" << relX2
147 <<
" center=" << center
148 <<
" pedLeft=" << center + halfWidth
149 <<
" pedRight=" << center - halfWidth
150 <<
" overlap=" << overlap
155 result.first = ped->getPerson();
156 result.second = dist;
179#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
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 blockedAtDist(const SUMOTrafficObject *ego, const MSLane *lane, double vehCenter, double vehWidth, double oncomingGap, std::vector< const MSPerson * > *collectBlockers)
whether a pedestrian is blocking the crossing of lane for the given vehicle bondaries
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.