VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
environmentalStateManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2021 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
14 #include <vlutil/vlString.h>
17 #include "vrfobjcore/simObject.h"
18 #include <matrix/vlVector.h>
19 #include <vrfutil/rwUUID.h>
22 #include <tbb/spin_mutex.h>
25 #include <vrfutil/rwWindLevels.h>
27 
28 #include <set>
29 
31 class DtObjectType;
36 class DtChord;
38 class DtSimMessage;
39 class DtLocalObject;
40 
60 {
61 private:
63 
66  orig);
69 
70 public:
71 
74 
76  virtual ~DtEnvironmentalStateManager();
77 
78  virtual bool init();
79 
80  virtual void tick();
81 
84  virtual const DtWeatherStateProvider* weatherStateProvider() const;
85  virtual void setWeatherStateProvider(DtWeatherStateProvider* w);
87 
90  virtual bool globalEnvironmentSimulatedLocally() const;
91 
96  virtual bool startEnvironmentSimulationLocally();
97 
100 
105  virtual void setWeatherState(const DtChangeWeatherCommand& command);
106 
110  virtual void setCloudLayerState(const DtChangeCloudLayerCommand& command);
111 
112  virtual void setUseDayNightIlluminationModel(const DtChangeTimeOfDayCommand& command);
114 
115 
123 
125  virtual DtSimObjectReference weatherObjectFor(const DtUUID& = DtUUID::nullUUID(),
126  bool* isGlobal = 0) const;
127 
130  virtual DtSimObjectReference weatherObjectFor(const DtVector& localPosition,
131  bool* isGlobal = 0) const;
132 
137  virtual std::vector<DtSimObjectReference> weatherObjectsFor(const DtChord& localChord) const;
138 
140  virtual DtSimObjectReference cloudLayerFor(const DtUUID&) const;
141 
144  virtual DtSimObjectReference cloudLayerFor(const DtVector& localPosition) const;
145 
147  virtual std::vector<DtSimObjectReference> cloudLayersFor(const DtChord& localChord) const;
148 
153  virtual std::vector<CloudStateSegment>
154  cloudLayerDescriptionsAt(const DtVector& localPosition) const;
155 
157  virtual DtSimObjectReference windCorridorFor(const DtUUID&) const;
158 
161  virtual DtSimObjectReference windCorridorFor(double & windHeading, const DtVector& localPosition) const;
162 
164  virtual std::vector<DtSimObjectReference> windCorridorsFor(const DtChord& localChord) const;
165 
167  virtual DtSimObjectReference airTurbulenceFor(const DtUUID&) const;
168 
171  virtual DtSimObjectReference airTurbulenceFor(const DtVector& localPosition) const;
172 
174  virtual std::vector<DtSimObjectReference> airTurbulencesFor(const DtChord& localChord) const;
175 
177 
182  virtual double visualDetectionMinimumContrast() const;
183 
185 
191  virtual double airTurbidity(const DtVector&) const;
192 
194  virtual double airTemperature(const DtVector&) const;
195 
197  virtual double airPressure(const DtVector& localPosition ) const;
198 
200  virtual double airTemperatureAltitude(const DtVector& localPosition) const;
201 
203  virtual double airPressureAltitude(const DtVector& localPosition) const;
204 
206  virtual bool airTemperatureAltitudeIsSeaLevel(const DtVector& localPosition) const;
207 
209  virtual bool airPressureAltitudeIsSeaLevel(const DtVector& localPosition) const;
210 
212  virtual double humidity(const DtVector& localPosition) const;
213 
215  virtual double precipitationIntensity(const DtVector&) const;
216 
219  virtual double averagePrecipitationIntensity(const DtChord&) const;
220 
222  virtual DtVrfWeatherPrecipitationType precipitationType(const DtVector&) const;
223 
225  virtual double windSpeed(const DtVector&) const;
226 
228  virtual double windDirection(const DtVector&) const;
229 
231  virtual DtVrfTurbulenceLevel airTurbulence(const DtVector&) const;
232 
234  virtual bool lightningPresent(const DtVector& localPosition) const;
235 
237  virtual double visibility(const DtVector&) const;
238 
240  virtual int visibilityObscurant(const DtVector&) const;
241 
247  virtual double visibility(const DtChord&) const;
248 
250  virtual double underwaterVisibility(const DtVector&) const;
251 
253  virtual double surfaceTransparency(const DtVector&) const;
254 
256  virtual double waterCurrentSpeed(const DtVector&) const;
257 
259  virtual double waterCurrentDirection(const DtVector&) const;
260 
262  virtual double ambientWaterTemperature(const DtVector&) const;
263 
265  virtual double tidalOffset(const DtVector&) const;
266 
269  virtual bool tidalDirection(const DtVector&) const;
270 
272  virtual unsigned int swellState(const DtVector&) const;
273 
275  virtual double swellStateDirection(const DtVector&) const;
276 
278  virtual unsigned int seaState(const DtVector&) const;
279 
281  virtual double seaStateDirection(const DtVector&) const;
282 
284  virtual double choppiness(const DtVector&) const;
285 
287  virtual double surgeDepth(const DtVector&) const;
288 
290  virtual double fogHeight(const DtVector&) const;
291 
296  virtual DtVector fogColor(const DtVector&) const;
297 
299  virtual double snowAccumulation(const DtVector&) const;
300 
303  virtual double snowRoadAccumulation(const DtVector&) const;
304 
306  virtual double rainAccumulation(const DtVector&) const;
307 
310  virtual DtObjectType globalEnvironmentObjectType() const;
311 
314  virtual DtObjectType metocServiceObjectType() const;
315 
318  virtual DtUUID initializeAndGetMetocWeatherService();
319 
321  virtual void setMetocEnabled(bool b);
323  virtual bool metocEnabled() const;
324 
328  virtual double thermoclineLayer1Depth(const DtVector&) const;
329  virtual double thermoclineLayer1Permeability(const DtVector&) const;
330  virtual double thermoclineLayer2Depth(const DtVector&) const;
331  virtual double thermoclineLayer2Permeability(const DtVector&) const;
332  virtual double thermoclineLayer3Depth(const DtVector&) const;
333  virtual double thermoclineLayer3Permeability(const DtVector&) const;
334  virtual double thermoclineLayer4Depth(const DtVector&) const;
335  virtual double thermoclineLayer4Permeability(const DtVector&) const;
336  virtual double thermoclineLayer5Depth(const DtVector&) const;
337  virtual double thermoclineLayer5Permeability(const DtVector&) const;
339 
341  virtual bool windSpeedAndDirectionAtAltitude(const DtVector&,
342  double altMSL, double& windSpeed, double& windDirection) const;
344  virtual bool visibilityAndObscurantAtAltitude(const DtVector&,
345  double altMSL, double& visibility, int& obscurant) const;
346 
348 
351 
354  virtual void setDateAndTimeOfDay(double secondsPastMidnight);
355  virtual void setDateAndTimeOfDay(const DtChangeTimeOfDayCommand& command);
357  virtual double timeOfDay() const;
359  virtual double dateAndTimeOfDay() const;
360 
362  virtual void setTimeOfDayAdvancementSpeed(double speed);
363  virtual void setTimeOfDayAdvancementSpeed(const DtChangeTimeOfDayCommand& command);
364  virtual double timeOfDayAdvancementSpeed() const;
365 
367 
370 
373  virtual double illumination(const DtVector& localPosition) const;
374 
377  virtual double expectedIllumination(const DtVector& localPosition, double dateAndTime) const;
379 
396  virtual void computeSoilWeatherMobilityModifiers(
397  const DtVector& location, const DtString& soilType,
398  double& snowEffectFraction,
399  DtString& alternateSoil, double& alternateSoilFraction,
400  double& tractionModifier) const;
401 
404 
407  virtual void setSnowMinimumAltitude(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
408  virtual double snowMinimumAltitude(const DtVector&) const;
410 
414  virtual void setWindDrivenSeaStateEnabled(bool b, const DtUUID& weatherArea = DtUUID::nullUUID());
415  virtual bool windDrivenSeaStateEnabled(const DtVector&) const;
417 
421  virtual void setUseDayNightIlluminationModel(bool);
422  virtual bool useDayNightIlluminationModel() const;
424 
428  virtual double normalizedPrecipitationRate() const;
429  virtual void setNormalizedPrecipitationRate(const double);
431 
437  virtual bool reduceVisibilityForPrecipitation() const;
438  virtual void setReduceVisibilityForPrecipitation(const bool);
440 
442 
443  DtSimulationServices* simulationServices() const { return mySimulationServices; };
444 
448  virtual DtLocalObject* createGlobalEnvironmentObject();
449 
450 protected:
451 
454  virtual DtString deepWaterSoilName() const;
455  virtual DtString shallowWaterSoilName() const;
456  virtual DtString waterySoilName() const;
457  virtual DtString drySoilName() const;
458  virtual DtString roadSoilName() const;
459  virtual DtString snowSoilName() const;
460  virtual DtString iceSoilName() const;
461  virtual double deepSnowDepth() const;
464  virtual double saturationWaterDepth() const;
466  virtual double waterSlideDepth() const;
468  virtual double waterSlideFactor() const;
471  virtual double hardFreezeTemperature() const;
473 
475 
476  virtual void setPriority(int p, const DtUUID& weatherArea = DtUUID::nullUUID());
477  virtual int priority(const DtUUID& weatherArea) const;
478  virtual int priority(const DtVector&) const;
480 
481 
486  virtual CloudLayerCloudType cloudType(const DtVector& localPosition) const;
487  virtual double cloudAltitude(const DtVector& localPosition) const;
488  virtual double cloudThickness(const DtVector& localPosition) const;
489  virtual double cloudDensity(const DtVector& localPosition) const;
490 
492 
496  virtual void setAirTurbidity(double factor, const DtUUID& weatherArea = DtUUID::nullUUID());
497  virtual void setAmbientAirTemperature(double temp, const DtUUID& weatherArea = DtUUID::nullUUID());
498  virtual void setAmbientAirPressure(double pressure, const DtUUID& weatherArea = DtUUID::nullUUID());
499  virtual void setAirTemperatureAltitude(double altitude, const DtUUID& weatherArea = DtUUID::nullUUID());
500  virtual void setAirPressureAltitude(double altitude, const DtUUID& weatherArea = DtUUID::nullUUID());
501  virtual void setAirTemperatureAltitudeIsSeaLevel(bool seaLevel, const DtUUID& weatherArea = DtUUID::nullUUID());
502  virtual void setAirPressureAltitudeIsSeaLevel(bool seaLevel, const DtUUID& weatherArea = DtUUID::nullUUID());
503  virtual void setSeaLevelWaterConcentration(double water, const DtUUID& weatherArea = DtUUID::nullUUID());
504 
505  virtual void setAirTurbulence(int current, const DtUUID& weatherArea = DtUUID::nullUUID());
506  virtual void setPrecipitationIntensity(double factor, const DtUUID& weatherArea = DtUUID::nullUUID());
507  virtual void setPrecipitationType(DtVrfWeatherPrecipitationType current, const DtUUID& weatherArea = DtUUID::nullUUID());
508  virtual void setWindSpeed(double value, const DtUUID& weatherArea = DtUUID::nullUUID());
509  virtual void setWindDirection(double value, const DtUUID& weatherArea = DtUUID::nullUUID());
510  virtual void setVisibility(double value, const DtUUID& weatherArea = DtUUID::nullUUID());
511  virtual void setUnderwaterVisibility(double underwaterVisibility, const DtUUID& weatherArea = DtUUID::nullUUID());
512  virtual void setSurfaceTransparency(double transparency, const DtUUID& weatherArea = DtUUID::nullUUID());
513  virtual void setWaterCurrentSpeed(double waterCurrentSpeed, const DtUUID& weatherArea = DtUUID::nullUUID());
514  virtual void setWaterCurrentDirection(double waterCurrentDirection, const DtUUID& weatherArea = DtUUID::nullUUID());
515  virtual void setAmbientWaterTemperature(double waterTemperature, const DtUUID& weatherArea = DtUUID::nullUUID());
516  virtual void setTidalOffset(double tidalOffset, const DtUUID& weatherArea = DtUUID::nullUUID());
517  virtual void setTidalDirection(bool tidalDirection, const DtUUID& weatherArea = DtUUID::nullUUID());
518  virtual void setSwellState(unsigned int state, const DtUUID& weatherArea = DtUUID::nullUUID());
519  virtual void setSwellStateDirection(double direction, const DtUUID& weatherArea = DtUUID::nullUUID());
520  virtual void setSeaState(unsigned int state, const DtUUID& weatherArea = DtUUID::nullUUID());
521  virtual void setSeaStateDirection(double direction, const DtUUID& weatherArea = DtUUID::nullUUID());
522  virtual void setChoppiness(double choppiness, const DtUUID& weatherArea = DtUUID::nullUUID());
523  virtual void setSurgeDepth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
524  virtual void setFogHeight(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
525  virtual void setFogColor(const DtVector& color, const DtUUID& weatherArea = DtUUID::nullUUID());
526  virtual void setSnowAccumulation(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
527  virtual void setSnowRoadAccumulation(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
528  virtual void setRainAccumulation(double rain, const DtUUID& weatherArea = DtUUID::nullUUID());
529  virtual void setThermoclineLayer1Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
530  virtual void setThermoclineLayer1Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
531  virtual void setThermoclineLayer2Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
532  virtual void setThermoclineLayer2Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
533  virtual void setThermoclineLayer3Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
534  virtual void setThermoclineLayer3Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
535  virtual void setThermoclineLayer4Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
536  virtual void setThermoclineLayer4Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
537  virtual void setThermoclineLayer5Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
538  virtual void setThermoclineLayer5Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
539 
540  virtual void setLightingPresentForWeatherArea(bool, const DtUUID& weatherArea = DtUUID::nullUUID());
541 
543 
545  virtual void clearWindLevels(const DtUUID& weatherArea = DtUUID::nullUUID());
546  virtual void setWindLevels(const DtRwWindLevels&, const DtUUID& weatherArea = DtUUID::nullUUID());
548 
551  virtual void setDeepWaterSoilName(const DtString&);
552  virtual void setShallowWaterSoilName(const DtString&);
553  virtual void setDrySoilName(const DtString&);
554  virtual void setWaterySoilName(const DtString&);
555  virtual void setRoadSoilName(const DtString&);
556  virtual void setSnowSoilName(const DtString&);
557  virtual void setIceSoilName(const DtString&);
558  virtual void setDeepSnowDepth(const double);
559  virtual void setSaturationWaterDepth(const double);
560  virtual void setWaterSlideDepth(const double);
561  virtual void setWaterSlideFactor(const double);
562  virtual void setHardFreezeTemperature(const double);
564 
565 protected:
566  virtual void processSimObjectAdded(DtSimObjectReference);
567  virtual void processSimObjectDeleted(DtSimObjectReference);
568 
570  virtual DtEnvironmentalStateSetter* createLocalEnvironmentalStateSetter();
572  virtual DtEnvironmentalStateSetter* createRemoteEnvironmentalStateSetter();
573 
574  static void changeWeatherPrioritiesCallback(DtSimMessage* msg, void* usr);
575  virtual void processChangeWeatherPriorities(DtSimMessage* msg);
576 
577  static void requestWeatherAtLocationCallback(DtSimMessage* msg, void* usr);
578  virtual void processRequestWeatherAtLocation(DtSimMessage* msg);
579 
580  static void physicalWorldParametersChangedCallback(void* usr);
581  virtual void initializeIlluminationObjectsList();
584  virtual void initializeSoilCharacteristics();
585 
588  virtual void initializeWeatherStateProvider();
589 
592  virtual void initializeWeatherParameters();
593 
594  virtual const DtIlluminationObjectParameters& findBestMatch(const DtObjectType& objtype) const;
595  virtual void setupGlobalEnvironmentObject(DtLocalObject* lo);
596  virtual void setupGlobalEnvironmentObject(const DtUUID&);
597  static void globalObjectAddedCallback(const DtLocalObject*, void* usr);
598 
599 protected:
601 
604 
610 
613 
616 
618 
619  std::map<DtObjectType, DtIlluminationObjectParameters> myIlluminationObjectTypes;
620 
623 
626 
629 
632 
635 
638 
641 
644 
648 
651 
654 
658 
662 
671 
672  boost::signals2::scoped_connection mySimObjectAddedConnection;
673  boost::signals2::scoped_connection mySimObjectDeletedConnection;
674 
677 
681 };
682 
683 
UUID is a unique ID wrapper class.
Definition: rwUUID.h:226
DtVrfWeatherPrecipitationType
Definition: vrfWeatherStateEnums.h:13
DtString myIceSoilName
Name of &quot;soil&quot; that is ice.
Definition: environmentalStateManager.h:640
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
class DtLocalObjectManager:
Definition: localObjectManager.h:151
DtRwBoolean myReduceVisibilityForPrecipitation
This flag determines whether to degrade visibility due to precipitation, on top of the effect of the ...
Definition: environmentalStateManager.h:670
DtSimulationServices * simulationServices() const
Definition: environmentalStateManager.h:443
DtReal myWaterSlideFactor
Fraction [0-1] of traction retained on hard surface with water on it.
Definition: environmentalStateManager.h:653
std::map< DtObjectType, DtIlluminationObjectParameters > myIlluminationObjectTypes
Definition: environmentalStateManager.h:619
This class contains the functions that the VRF simulation uses to query the current state of the weat...
Definition: weatherStateProvider.h:185
DtEnvironmentalStateSetter * myEnvironmentalStateSetter
This is only for setting global weather – local weather will use local vrf objects.
Definition: environmentalStateManager.h:612
DtVrfTurbulenceLevel
placeholder. Final version is defined in vrfWeatherStateEnums.h
Definition: weatherStateProvider.h:26
The DtSimObjectReference is a shared pointer that can be used amongst many object for access to the u...
Definition: simObjectReference.h:26
Instances of DtIlluminationObjectParameters are used to specify the how much illumination is cast by ...
Definition: illuminationObjectParameters.h:21
DtSimObjectReferenceList myAirTurbulenceObjects
Definition: environmentalStateManager.h:609
DtString myShallowWaterSoilName
Name of soil that is considered shallow water.
Definition: environmentalStateManager.h:625
double myHardFreezeTemperature
Temperature at which shallow water is frozen enough to drive a vehicle on. Degrees C...
Definition: environmentalStateManager.h:657
Contains the DtUUID class declaration.
DtUUID myMetocWeatherServiceUuid
Definition: environmentalStateManager.h:615
boost::signals2::scoped_connection mySimObjectAddedConnection
Definition: environmentalStateManager.h:672
bool myFirstTick
Definition: environmentalStateManager.h:675
CloudLayerCloudType
Definition: vrfCloudLayerStateEnums.h:14
DtString myRoadSoilName
Name of soil that is paved road.
Definition: environmentalStateManager.h:634
DtLocalObjectManager * myObjectManager
Definition: environmentalStateManager.h:676
DtSimulationServices * mySimulationServices
Definition: environmentalStateManager.h:600
DtSimObjectReferenceList myWeatherObjects
Definition: environmentalStateManager.h:607
Definition: objectType.h:27
bool myCreatedMetocService
Definition: environmentalStateManager.h:614
static const DtUUID & nullUUID()
boost::signals2::scoped_connection mySimObjectDeletedConnection
Definition: environmentalStateManager.h:673
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Contains the enums for cloud layers.
DtSimObjectReferenceList myWindCorridorObjects
Definition: environmentalStateManager.h:608
double myDeepSnowDepth
Depth of snow required for full snow soil effect. Meters.
Definition: environmentalStateManager.h:643
File: simMsg.h.
Definition: simMessage.h:35
DtWeatherStateProvider * myWeatherStateProvider
The object used to get weather state.
Definition: environmentalStateManager.h:603
double mySaturationWaterDepth
Depth of water accumulation before dry soil is changed completely to watery soil. Meters...
Definition: environmentalStateManager.h:647
A DtSimCommand subclass which specifies a change to the cloud layer settings for the specified cloud ...
Definition: changeCloudLayerCommand.h:25
DtReal myWaterSlideDepth
Depth of water on a hard surface that causes loss of normal traction.
Definition: environmentalStateManager.h:650
DtString myWaterySoilName
Name of soil that is considered watery soil.
Definition: environmentalStateManager.h:628
A DtSimCommand subclass which specifies a change to the weather settings for the specified weather ar...
Definition: changeWeatherCommand.h:29
DtSimObjectReference myGlobalEnvironmentObject
Definition: environmentalStateManager.h:606
DtString myDeepWaterSoilName
Name of soil that is considered deep water.
Definition: environmentalStateManager.h:622
This is a convenience list that will add DtSimObjectReference objects and modify the list as objects ...
Definition: simObjectReferenceList.h:22
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:89
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
DtString myDrySoilName
Name of soil that is dry soil–not sand or gravel.
Definition: environmentalStateManager.h:631
DtString mySnowSoilName
Name of &quot;soil&quot; that is snow.
Definition: environmentalStateManager.h:637
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtBoost::shared_ptr< const DtManagedObjectList > DtManagedObjectListConstPtr
Typedef for a shared pointer to a const DtOrgViewManagedObjectList. These lists are used within VR-Fo...
Definition: managedObjectList.h:35
Maintains the environmental state of the simulation, such as time of day, illumination, and various aspects of the weather. All access to this data from any behavior or dynamics model should be made to this class.
Definition: environmentalStateManager.h:59
bool myMetocEnabled
This flag determines whether the net interfaces for Environmental Process objects will publish METOC ...
Definition: environmentalStateManager.h:680
Definition: rwWindLevels.h:17
A DtSimCommand subclass which specifies a change to the time of day settings in the simulation engine...
Definition: changeTimeOfDayCommand.h:20
Abstract base class for classes that set new environmental state to the environmental state simulator...
Definition: environmentalStateSetter.h:29
DtManagedObjectListConstPtr myIlluminationObjects
Definition: environmentalStateManager.h:617
double myNormalizedPrecipitationRate
The (rain) precipitation rate that corresponds to a value of 1.0 in a weather object or the return va...
Definition: environmentalStateManager.h:661
A locally simulated VRF object. Holds all internal and external data for the object, and provides access to both the current frame and next frame state data for the object. All current frame data is read-only, and next-frame data can be written to. No thread safety guarantees are made on this object during the simulation frame and it should only be accessed by the thread that is simulating the object.
Definition: localObject.h:86
DtLocalObject * myNextFrameGlobalEnvironmentObject
Definition: environmentalStateManager.h:605

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)