12#ifndef XWSFSEATRAFFIC_HPP
13#define XWSFSEATRAFFIC_HPP
15#include "wsf_export.h"
20#include "UtCallbackHolder.hpp"
32class XWsfSeaTrafficExtension;
85 return mSeaPorts.find(aNameId) != mSeaPorts.end() ? &mSeaPorts[aNameId] :
nullptr;
92 return mSeaLanes.find(aNameId) != mSeaLanes.end() ? &mSeaLanes[aNameId] :
nullptr;
99 return mDepVehicles.find(aTypeId) != mDepVehicles.end() ? &mDepVehicles[aTypeId] :
nullptr;
106 return mLocVehicles.find(aTypeId) != mLocVehicles.end() ? &mLocVehicles[aTypeId] :
nullptr;
124 SeaRegion(
double aLat,
double aLon,
double aRadius,
double aFraction = 0.0)
250 ,
mDefaultSpeed(10.0 * UtMath::cFT_PER_NM / UtMath::cFT_PER_M)
283 , mSeaTrafficPtr(aSeaTrafficPtr)
290 mSeaTrafficPtr->HandleDeparture(mPortId,
GetTime());
307 , mPlatformId(aPlatformId)
330 typedef std::map<WsfStringId, SeaPort> Ports;
331 typedef std::map<WsfStringId, SeaLane> Lanes;
332 typedef std::map<WsfStringId, Vehicle> Vehicles;
334 bool ProcessSeaTraffic(UtInput& aInput);
336 void ProcessDepartureTraffic(UtInput& aInput);
338 void ProcessLocalTraffic(UtInput& aInput);
340 void GenerateInitialEntities();
342 bool GenerateDeparture(SeaPort& aPort,
bool aLocalDeparture, Vehicle& aVehicle,
double aDistanceAlongRoute,
double aSimTime);
344 bool GenerateEntity(Vehicle& aVehicle,
WsfRoute& aRoute,
double aSimTime);
346 void UpdateRoute(
double aDistanceAlongRoute,
WsfRoute& aRoute);
348 Vehicle* GetRandomVehicle(Vehicles& aVehicles);
350 SeaLane* GetRandomLane(SeaPort& aPort);
352 void GetRandomRoute(SeaLane& aLane,
357 bool aActualRoute =
false);
359 void GetRandomRoute(SeaPort& aPort, SeaRegion& aRegion, Vehicle& aVehicle,
double aSpeed,
WsfRoute& aRoute);
361 void GetRandomWaypoint(SeaRegion& aRegion,
WsfWaypoint& aWaypoint,
bool aActualWaypoint =
false);
363 void GetRandomRegion(SeaPort& aPort, SeaRegion& aRegion);
365 double GetRandomSpeed(Vehicle& aVehicle);
367 double GetRandomLoiterTime(Vehicle& aVehicle);
369 double CalcMaxTravelTime(SeaPort& aPort, Vehicles& aVehicles);
371 void WriteScenarioEditorFile();
377 bool mProcessedInput;
379 double mDepVehiclesFraction;
380 double mLocVehiclesFraction;
384 Vehicles mDepVehicles;
385 Vehicles mLocVehicles;
WsfPlatform * platformPtr
Definition WsfScriptTrackClass.cpp:507
UtStringId WsfStringId
WsfStringId – the same thing as UtStringId.
Definition WsfStringId.hpp:23
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
double GetTime() const
Definition WsfEvent.hpp:71
WsfSimulation * GetSimulation() const
Definition WsfEvent.hpp:103
EventDisposition
Definition WsfEvent.hpp:37
@ cDELETE
Delete the event from the event queue.
Definition WsfEvent.hpp:38
Definition WsfMover.hpp:37
A collection of WsfWaypoint objects that represent a path to be followed.
Definition WsfRoute.hpp:40
WsfSimulationExtension()
Definition WsfSimulationExtension.cpp:23
friend class WsfSimulation
Definition WsfSimulationExtension.hpp:43
virtual bool Initialize()
Definition WsfSimulationExtension.cpp:49
Definition WsfWaypoint.hpp:57
DepartureEvent(XWsfSeaTraffic *aSeaTrafficPtr, WsfStringId aPortId, double aSimTime)
Definition XWsfSeaTraffic.hpp:281
EventDisposition Execute() override
Definition XWsfSeaTraffic.hpp:288
EventDisposition Execute() override
Definition XWsfSeaTraffic.hpp:311
ExitLoiterEvent(WsfStringId aPlatformId, double aSimTime)
Definition XWsfSeaTraffic.hpp:305
Definition XWsfSeaTraffic.hpp:188
bool operator==(const SeaLane &aRhs) const
Definition XWsfSeaTraffic.hpp:223
~SeaLane()
Definition XWsfSeaTraffic.hpp:204
WsfStringId mNameId
Definition XWsfSeaTraffic.hpp:225
WsfStringId GetDestinationPort(WsfStringId aPortId) const
Definition XWsfSeaTraffic.hpp:211
bool IgnorePortRoute(WsfStringId aPortId) const
Definition XWsfSeaTraffic.hpp:218
std::vector< SeaRegion > mLaneRoute
Definition XWsfSeaTraffic.hpp:229
SeaLane(WsfStringId aNameId)
Definition XWsfSeaTraffic.hpp:194
WsfStringId mPortId[2]
Definition XWsfSeaTraffic.hpp:227
bool mPortIgnoreRoute[2]
Definition XWsfSeaTraffic.hpp:228
SeaLane()
Definition XWsfSeaTraffic.hpp:190
int mPortCount
Definition XWsfSeaTraffic.hpp:226
Definition XWsfSeaTraffic.hpp:147
~SeaPort()
Definition XWsfSeaTraffic.hpp:164
std::vector< WsfStringId > mSeaLaneIds
Definition XWsfSeaTraffic.hpp:179
WsfStringId mNameId
Definition XWsfSeaTraffic.hpp:171
std::vector< WsfStringId > mAirportIds
Definition XWsfSeaTraffic.hpp:181
std::vector< SeaRegion > mPortRoute
Definition XWsfSeaTraffic.hpp:173
double mDepVehiclesInterval
Definition XWsfSeaTraffic.hpp:176
SeaPort(WsfStringId aNameId)
Definition XWsfSeaTraffic.hpp:155
double mLocVehiclesInterval
Definition XWsfSeaTraffic.hpp:177
SeaRegion mPosition
Definition XWsfSeaTraffic.hpp:172
std::vector< SeaRegion > mLocalTrafficRegions
Definition XWsfSeaTraffic.hpp:174
bool operator==(const SeaPort &aRhs) const
Definition XWsfSeaTraffic.hpp:169
bool mUseAllLanes
Definition XWsfSeaTraffic.hpp:178
std::vector< double > mDstPortWeights
Definition XWsfSeaTraffic.hpp:180
double mDepartureInterval
Definition XWsfSeaTraffic.hpp:175
SeaPort()
Definition XWsfSeaTraffic.hpp:149
Definition XWsfSeaTraffic.hpp:114
SeaRegion(double aLat, double aLon, double aRadius, double aFraction=0.0)
Definition XWsfSeaTraffic.hpp:124
~SeaRegion()
Definition XWsfSeaTraffic.hpp:132
double mLat
Definition XWsfSeaTraffic.hpp:136
double mRadius
Definition XWsfSeaTraffic.hpp:138
double mFraction
Definition XWsfSeaTraffic.hpp:139
SeaRegion()
Definition XWsfSeaTraffic.hpp:116
double mLon
Definition XWsfSeaTraffic.hpp:137
bool ProcessInput(UtInput &aInput)
Definition XWsfSeaTraffic.hpp:235
double mDefaultLoiterTime
Definition XWsfSeaTraffic.hpp:267
double mSigmaLoiterTime
Definition XWsfSeaTraffic.hpp:268
~Vehicle()
Definition XWsfSeaTraffic.hpp:256
Vehicle(WsfStringId aTypeId)
Definition XWsfSeaTraffic.hpp:241
int mCount
Definition XWsfSeaTraffic.hpp:264
bool operator==(const Vehicle &aRhs) const
Definition XWsfSeaTraffic.hpp:261
double mSigmaSpeed
Definition XWsfSeaTraffic.hpp:271
WsfStringId mTypeId
Definition XWsfSeaTraffic.hpp:263
double mFraction
Definition XWsfSeaTraffic.hpp:265
std::vector< WsfStringId > mRouteIds
Definition XWsfSeaTraffic.hpp:273
double mDefaultSpeed
Definition XWsfSeaTraffic.hpp:270
double mSpeed
Definition XWsfSeaTraffic.hpp:269
Vehicle()
Definition XWsfSeaTraffic.hpp:237
double mLoiterTime
Definition XWsfSeaTraffic.hpp:266
Definition XWsfSeaTraffic.hpp:42
bool DoesLocVehicleExist(WsfStringId aTypeId) const
Definition XWsfSeaTraffic.hpp:79
bool DoesLaneExist(WsfStringId aNameId) const
Definition XWsfSeaTraffic.hpp:71
bool Initialize() override
Definition XWsfSeaTraffic.cpp:123
static const double cEPSILON
Definition XWsfSeaTraffic.hpp:109
bool DoesPortExist(WsfStringId aNameId) const
Definition XWsfSeaTraffic.hpp:67
void GetSeaLaneIds(WsfStringId aPortId, std::vector< WsfStringId > &aLaneIds)
Definition XWsfSeaTraffic.cpp:281
XWsfSeaTraffic(const XWsfSeaTraffic &aSrc, WsfSimulation *aSimPtr)
Vehicle * GetDepVehicle(WsfStringId aTypeId)
Definition XWsfSeaTraffic.hpp:97
virtual bool ProcessInput(UtInput &aInput)
Definition XWsfSeaTraffic.cpp:102
void HandleEnterLoiter(WsfPlatform *aPlatformPtr, double aSimTime)
Definition XWsfSeaTraffic.cpp:263
virtual XWsfSeaTraffic * Clone() const
Definition XWsfSeaTraffic.cpp:1158
Vehicle * GetLocVehicle(WsfStringId aTypeId)
Definition XWsfSeaTraffic.hpp:104
void HandleDeparture(WsfStringId aPortId, double aSimTime)
Definition XWsfSeaTraffic.cpp:192
bool DoesDepVehicleExist(WsfStringId aTypeId) const
Definition XWsfSeaTraffic.hpp:75
SeaLane * GetSeaLane(WsfStringId aNameId)
Definition XWsfSeaTraffic.hpp:90
XWsfSeaTraffic()
Definition XWsfSeaTraffic.cpp:70
friend class XWsfSeaTrafficExtension
Definition XWsfSeaTraffic.hpp:44
SeaPort * GetSeaPort(WsfStringId aNameId)
Definition XWsfSeaTraffic.hpp:83