VR-Forces 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 #include <tbb/spin_mutex.h>
28 #include <set>
29 
31 class DtEntityType;
35 class DtChord;
37 class DtSimMessage;
38 class DtLocalObject;
39 
40 namespace makVrf
41 {
42  class DtTroposphereStateComponent;
43 }
44 
68 {
69 private:
71 
74  orig);
77 
78 public:
79 
82 
84  virtual ~DtEnvironmentalStateManager();
85 
86  virtual bool init();
87 
88  virtual void tick();
89 
93  virtual void setAutomaticallyCreateGlobalEnvironment(bool autoCreate);
94 
97  virtual const DtWeatherStateProvider* weatherStateProvider() const;
98  virtual void setWeatherStateProvider(DtWeatherStateProvider* w);
100 
103  virtual bool globalEnvironmentSimulatedLocally() const;
104 
109  virtual bool startEnvironmentSimulationLocally();
110 
113 
118  virtual void setWeatherState(const DtChangeWeatherCommand& command);
119 
120  virtual void setUseDayNightIlluminationModel(const DtChangeTimeOfDayCommand& command);
122 
123 
131 
134  template<typename WeatherStateType>
135  const WeatherStateType* weatherStateFor(const DtUUID& = DtUUID::nullUUID(),
136  bool* isGlobal = 0) const;
137 
140  template<typename WeatherStateType>
141  const WeatherStateType* weatherStateFor(const DtVector& localPosition,
142  bool* isGlobal = 0) const;
143 
145  DtSimObjectReference globalWeatherObject() const;
146 
151  virtual std::vector<DtSimObjectReference> weatherObjectsFor(const DtChord& localChord) const;
152 
154  virtual const makVrf::DtTroposphereStateComponent* cloudLayerFor(const DtUUID&) const;
155 
158  virtual const makVrf::DtTroposphereStateComponent* cloudLayerFor(const DtVector& localPosition) const;
159 
161  virtual std::vector<const makVrf::DtTroposphereStateComponent*> cloudLayersFor(const DtChord& localChord) const;
162 
167  virtual std::vector<CloudStateSegment>
168  cloudLayerDescriptionsAt(const DtVector& localPosition) const;
169 
171  virtual DtSimObjectReference windCorridorFor(const DtUUID&) const;
172 
175  virtual DtSimObjectReference windCorridorFor(double & windHeading, const DtVector& localPosition) const;
176 
178  virtual std::vector<DtSimObjectReference> windCorridorsFor(const DtChord& localChord) const;
179 
181  virtual DtSimObjectReference airTurbulenceFor(const DtUUID&) const;
182 
185  virtual DtSimObjectReference airTurbulenceFor(const DtVector& localPosition) const;
186 
188  virtual std::vector<DtSimObjectReference> airTurbulencesFor(const DtChord& localChord) const;
189 
191 
196  virtual double visualDetectionMinimumContrast() const;
197 
199 
201  virtual double airTemperature(const DtVector&) const;
202 
204  virtual double airPressure(const DtVector& localPosition) const;
205 
207  virtual double airTemperatureAltitude(const DtVector& localPosition) const;
208 
210  virtual double airPressureAltitude(const DtVector& localPosition) const;
211 
213  virtual double humidity(const DtVector& localPosition) const;
214 
216  virtual double precipitationIntensity(const DtVector&) const;
217 
220  virtual double averagePrecipitationIntensity(const DtChord&) const;
221 
223  virtual DtVrfWeatherPrecipitationType precipitationType(const DtVector&) const;
224 
226  virtual double windSpeed(const DtVector&) const;
227 
229  virtual double windDirection(const DtVector&) const;
230 
232  virtual DtVrfTurbulenceLevel airTurbulence(const DtVector&) const;
233 
235  virtual bool lightningPresent(const DtVector& localPosition) const;
236 
238  virtual double visibility(const DtVector&) const;
239 
241  virtual int visibilityObscurant(const DtVector&) const;
242 
248  virtual double visibility(const DtChord&) const;
249 
251  virtual double underwaterVisibility(const DtVector&) const;
252 
254  virtual double surfaceTransparency(const DtVector&) const;
255 
257  virtual double waterCurrentSpeed(const DtVector&) const;
258 
260  virtual double waterCurrentDirection(const DtVector&) const;
261 
263  virtual double ambientWaterTemperature(const DtVector&) const;
264 
266  virtual double tidalOffset(const DtVector&) const;
267 
269  virtual unsigned int swellState(const DtVector&) const;
270 
272  virtual double swellStateDirection(const DtVector&) const;
273 
275  virtual unsigned int seaState(const DtVector&) const;
276 
278  virtual double seaStateDirection(const DtVector&) const;
279 
281  virtual double choppiness(const DtVector&) const;
282 
284  virtual double surgeDepth(const DtVector&) const;
285 
287  virtual double depthOffset(const DtVector&) const;
288 
290  virtual double windFetch(const DtVector&) const;
291 
293  virtual double fogHeight(const DtVector&) const;
294 
299  virtual DtVector fogColor(const DtVector&) const;
300 
302  virtual int blowingParticulateMatter(const DtVector&) const;
303 
305  virtual double snowAccumulation(const DtVector&) const;
306 
309  virtual double snowRoadAccumulation(const DtVector&) const;
310 
312  virtual double rainAccumulation(const DtVector&) const;
313 
316  virtual DtEntityType globalEnvironmentObjectType() const;
317 
320  virtual DtEntityType metocServiceObjectType() const;
321 
324  virtual DtUUID initializeAndGetMetocWeatherService();
325 
329  virtual double thermoclineLayer1Depth(const DtVector&) const;
330  virtual double thermoclineLayer1Permeability(const DtVector&) const;
331  virtual double thermoclineLayer2Depth(const DtVector&) const;
332  virtual double thermoclineLayer2Permeability(const DtVector&) const;
333  virtual double thermoclineLayer3Depth(const DtVector&) const;
334  virtual double thermoclineLayer3Permeability(const DtVector&) const;
335  virtual double thermoclineLayer4Depth(const DtVector&) const;
336  virtual double thermoclineLayer4Permeability(const DtVector&) const;
337  virtual double thermoclineLayer5Depth(const DtVector&) const;
338  virtual double thermoclineLayer5Permeability(const DtVector&) const;
340 
342  virtual bool windSpeedAndDirectionAtAltitude(const DtVector&,
343  double altMSL, double& windSpeed, double& windDirection) const;
345  virtual bool visibilityAndObscurantAtAltitude(const DtVector&,
346  double altMSL, double& visibility, int& obscurant) const;
347 
349 
352 
355  virtual void setDateAndTimeOfDay(double secondsPastMidnight);
356  virtual void setDateAndTimeOfDay(const DtChangeTimeOfDayCommand& command);
358  virtual double timeOfDay() const;
360  virtual double dateAndTimeOfDay() const;
361 
363  virtual void setTimeOfDayAdvancementSpeed(double speed);
364  virtual void setTimeOfDayAdvancementSpeed(const DtChangeTimeOfDayCommand& command);
365  virtual double timeOfDayAdvancementSpeed() const;
366 
368 
371 
374  virtual double illumination(const DtVector& localPosition) const;
375 
378  virtual double expectedIllumination(const DtVector& localPosition, double dateAndTime) const;
380 
397  virtual void computeSoilWeatherMobilityModifiers(
398  const DtVector& location, const DtString& soilType,
399  double& snowEffectFraction,
400  DtString& alternateSoil, double& alternateSoilFraction,
401  double& tractionModifier) const;
402 
405 
408  virtual void setSnowMinimumAltitude(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
409  virtual double snowMinimumAltitude(const DtVector&) const;
411 
415  virtual void setWindDrivenSeaStateEnabled(bool b, const DtUUID& weatherArea = DtUUID::nullUUID());
416  virtual bool windDrivenSeaStateEnabled(const DtVector&) const;
418 
422  virtual void setUseDayNightIlluminationModel(bool);
423  virtual bool useDayNightIlluminationModel() const;
425 
429  virtual double normalizedPrecipitationRate() const;
430  virtual void setNormalizedPrecipitationRate(const double);
432 
438  virtual bool reduceVisibilityForPrecipitation() const;
439  virtual void setReduceVisibilityForPrecipitation(const bool);
441 
443 
444  DtSimulationServices* simulationServices() const { return mySimulationServices; };
445 
449  virtual DtLocalObject* createGlobalEnvironmentObject();
450 
451 protected:
452 
455  virtual DtString deepWaterSoilName() const;
456  virtual DtString shallowWaterSoilName() const;
457  virtual DtString waterySoilName() const;
458  virtual DtString drySoilName() const;
459  virtual DtString roadSoilName() const;
460  virtual DtString snowSoilName() const;
461  virtual DtString iceSoilName() const;
462  virtual double deepSnowDepth() const;
465  virtual double saturationWaterDepth() const;
467  virtual double waterSlideDepth() const;
469  virtual double waterSlideFactor() const;
472  virtual double hardFreezeTemperature() const;
474 
476 
477  virtual void setPriority(int p, const DtUUID& weatherArea = DtUUID::nullUUID());
478  virtual int priority(const DtUUID& weatherArea) const;
479  virtual int priority(const DtVector&) const;
481 
482 
487  virtual CloudLayerCloudType cloudType(const DtVector& localPosition) const;
488  virtual double cloudAltitude(const DtVector& localPosition) const;
489  virtual double cloudThickness(const DtVector& localPosition) const;
490  virtual double cloudDensity(const DtVector& localPosition) const;
491 
493 
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 setSeaLevelWaterConcentration(double water, const DtUUID& weatherArea = DtUUID::nullUUID());
502 
503  virtual void setAirTurbulence(int current, const DtUUID& weatherArea = DtUUID::nullUUID());
504  virtual void setPrecipitationIntensity(double factor, const DtUUID& weatherArea = DtUUID::nullUUID());
505  virtual void setPrecipitationType(DtVrfWeatherPrecipitationType current, const DtUUID& weatherArea = DtUUID::nullUUID());
506 
507  virtual void setUnderwaterVisibility(double underwaterVisibility, const DtUUID& weatherArea = DtUUID::nullUUID());
508  virtual void setSurfaceTransparency(double transparency, const DtUUID& weatherArea = DtUUID::nullUUID());
509  virtual void setWaterCurrentSpeed(double waterCurrentSpeed, const DtUUID& weatherArea = DtUUID::nullUUID());
510  virtual void setWaterCurrentDirection(double waterCurrentDirection, const DtUUID& weatherArea = DtUUID::nullUUID());
511  virtual void setAmbientWaterTemperature(double waterTemperature, const DtUUID& weatherArea = DtUUID::nullUUID());
512  virtual void setTidalOffset(double tidalOffset, const DtUUID& weatherArea = DtUUID::nullUUID());
513  virtual void setSwellState(unsigned int state, const DtUUID& weatherArea = DtUUID::nullUUID());
514  virtual void setSwellStateDirection(double direction, const DtUUID& weatherArea = DtUUID::nullUUID());
515  virtual void setSeaState(unsigned int state, const DtUUID& weatherArea = DtUUID::nullUUID());
516  virtual void setSeaStateDirection(double direction, const DtUUID& weatherArea = DtUUID::nullUUID());
517  virtual void setChoppiness(double choppiness, const DtUUID& weatherArea = DtUUID::nullUUID());
518  virtual void setSurgeDepth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
519  virtual void setDepthOffset(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
520  virtual void setWindFetch(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
521  virtual void setFogHeight(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
522  virtual void setFogColor(const DtVector& color, const DtUUID& weatherArea = DtUUID::nullUUID());
523  virtual void setBlowingParticulateMatter(int value, const DtUUID& weatherArea = DtUUID::nullUUID());
524  virtual void setSnowAccumulation(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
525  virtual void setSnowRoadAccumulation(double snow, const DtUUID& weatherArea = DtUUID::nullUUID());
526  virtual void setRainAccumulation(double rain, const DtUUID& weatherArea = DtUUID::nullUUID());
527  virtual void setThermoclineLayer1Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
528  virtual void setThermoclineLayer1Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
529  virtual void setThermoclineLayer2Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
530  virtual void setThermoclineLayer2Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
531  virtual void setThermoclineLayer3Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
532  virtual void setThermoclineLayer3Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
533  virtual void setThermoclineLayer4Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
534  virtual void setThermoclineLayer4Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
535  virtual void setThermoclineLayer5Depth(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
536  virtual void setThermoclineLayer5Permeability(double depth, const DtUUID& weatherArea = DtUUID::nullUUID());
537 
538  virtual void setLightningPresentForWeatherArea(bool, const DtUUID& weatherArea = DtUUID::nullUUID());
539 
541 
543  virtual void clearWindLevels(const DtUUID& weatherArea = DtUUID::nullUUID());
544  virtual void setWindLevels(const DtRwWindLevels&, const DtUUID& weatherArea = DtUUID::nullUUID());
545  virtual DtRwWindLevels windLevels(const DtVector& localPosition) const;
547 
550  virtual void setDeepWaterSoilName(const DtString&);
551  virtual void setShallowWaterSoilName(const DtString&);
552  virtual void setDrySoilName(const DtString&);
553  virtual void setWaterySoilName(const DtString&);
554  virtual void setRoadSoilName(const DtString&);
555  virtual void setSnowSoilName(const DtString&);
556  virtual void setIceSoilName(const DtString&);
557  virtual void setDeepSnowDepth(const double);
558  virtual void setSaturationWaterDepth(const double);
559  virtual void setWaterSlideDepth(const double);
560  virtual void setWaterSlideFactor(const double);
561  virtual void setHardFreezeTemperature(const double);
563 
564 protected:
565  virtual void processSimObjectAdded(DtSimObjectReference);
566  virtual void processSimObjectDeleted(DtSimObjectReference);
567 
569  virtual DtEnvironmentalStateSetter* createLocalEnvironmentalStateSetter();
571  virtual DtEnvironmentalStateSetter* createRemoteEnvironmentalStateSetter();
572 
573  static void changeWeatherPrioritiesCallback(DtSimMessage* msg, void* usr);
574  virtual void processChangeWeatherPriorities(DtSimMessage* msg);
575 
576  static void requestWeatherAtLocationCallback(DtSimMessage* msg, void* usr);
577  virtual void processRequestWeatherAtLocation(DtSimMessage* msg);
578 
579  static void physicalWorldParametersChangedCallback(void* usr);
580  virtual void initializeIlluminationObjectsList();
583  virtual void initializeSoilCharacteristics();
584 
587  virtual void initializeWeatherStateProvider();
588 
591  virtual void initializeWeatherParameters();
592 
593  virtual const DtIlluminationObjectParameters& findBestMatch(const DtEntityType& objtype) const;
594  virtual void setupGlobalEnvironmentObject(DtLocalObject* lo);
595  virtual void setupGlobalEnvironmentObject(const DtUUID&);
596  static void globalObjectAddedCallback(const DtLocalObject*, void* usr);
597 
601  virtual bool autoCreateGlobalEnvironmentIfRequired();
602 
603  public:
605  void printWeatherObjects() const;
606 
607 protected:
609 
612 
619 
622 
624 
627 
629 
630  std::map<DtEntityType, DtIlluminationObjectParameters> myIlluminationObjectTypes;
631 
634 
637 
640 
643 
646 
649 
652 
655 
659 
662 
665 
669 
673 
682 
683  boost::signals2::scoped_connection mySimObjectAddedConnection;
684  boost::signals2::scoped_connection mySimObjectDeletedConnection;
685 
688 
691  tbb::spin_mutex myRemovalMutex;
692 };
693 
694 
UUID is a unique ID wrapper class.
Definition: uuid.h:59
DtVrfWeatherPrecipitationType
Definition: vrfWeatherStateEnums.h:13
DtString myIceSoilName
Name of &quot;soil&quot; that is ice.
Definition: environmentalStateManager.h:651
bool myAutomaticallyCreateGlobalEnvironment
Definition: environmentalStateManager.h:623
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
class DtLocalObjectManager:
Definition: localObjectManager.h:157
DtRwBoolean myReduceVisibilityForPrecipitation
This flag determines whether to degrade visibility due to precipitation, on top of the effect of the ...
Definition: environmentalStateManager.h:681
DtSimulationServices * simulationServices() const
Definition: environmentalStateManager.h:444
DtReal myWaterSlideFactor
Fraction [0-1] of traction retained on hard surface with water on it.
Definition: environmentalStateManager.h:664
This class contains the functions that the VRF simulation uses to query the current state of the weat...
Definition: weatherStateProvider.h:186
DtEnvironmentalStateSetter * myEnvironmentalStateSetter
This is only for setting global weather – local weather will use local vrf objects.
Definition: environmentalStateManager.h:621
tbb::spin_mutex myRemovalMutex
This flag determines whether the net interfaces for Environmental Process objects will publish METOC ...
Definition: environmentalStateManager.h:691
DtVrfTurbulenceLevel
placeholder. Final version is defined in vrfWeatherStateEnums.h
Definition: weatherStateProvider.h:27
Instances of DtIlluminationObjectParameters are used to specify the how much illumination is cast by ...
Definition: illuminationObjectParameters.h:21
DtSimObjectReferenceList myAirTurbulenceObjects
Definition: environmentalStateManager.h:618
DtString myShallowWaterSoilName
Name of soil that is considered shallow water.
Definition: environmentalStateManager.h:636
std::map< DtEntityType, DtIlluminationObjectParameters > myIlluminationObjectTypes
Definition: environmentalStateManager.h:630
double myHardFreezeTemperature
Temperature at which shallow water is frozen enough to drive a vehicle on. Degrees C...
Definition: environmentalStateManager.h:668
std::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
Contains the DtUUID class declaration.
DtUUID myMetocWeatherServiceUuid
Definition: environmentalStateManager.h:626
boost::signals2::scoped_connection mySimObjectAddedConnection
Definition: environmentalStateManager.h:683
bool myFirstTick
Definition: environmentalStateManager.h:686
CloudLayerCloudType
Definition: vrfCloudLayerStateEnums.h:14
DtString myRoadSoilName
Name of soil that is paved road.
Definition: environmentalStateManager.h:645
DtLocalObjectManager * myObjectManager
Definition: environmentalStateManager.h:687
DtSimulationServices * mySimulationServices
Definition: environmentalStateManager.h:608
DtSimObjectReferenceList myWeatherObjects
Definition: environmentalStateManager.h:616
bool myCreatedMetocService
Definition: environmentalStateManager.h:625
static const DtUUID & nullUUID()
boost::signals2::scoped_connection mySimObjectDeletedConnection
Definition: environmentalStateManager.h:684
#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:617
double myDeepSnowDepth
Depth of snow required for full snow soil effect. Meters.
Definition: environmentalStateManager.h:654
File: simMsg.h.
Definition: simMessage.h:35
DtWeatherStateProvider * myWeatherStateProvider
The object used to get weather state.
Definition: environmentalStateManager.h:611
double mySaturationWaterDepth
Depth of water accumulation before dry soil is changed completely to watery soil. Meters...
Definition: environmentalStateManager.h:658
DtReal myWaterSlideDepth
Depth of water on a hard surface that causes loss of normal traction.
Definition: environmentalStateManager.h:661
DtString myWaterySoilName
Name of soil that is considered watery soil.
Definition: environmentalStateManager.h:639
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:615
DtString myDeepWaterSoilName
Name of soil that is considered deep water.
Definition: environmentalStateManager.h:633
This is a convenience list that will add DtSimObjectReference objects and modify the list as objects ...
Definition: simObjectReferenceList.h:25
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
Description: Readable, Writable bool.
Definition: rwBoolean.h:26
DtString myDrySoilName
Name of soil that is dry soil–not sand or gravel.
Definition: environmentalStateManager.h:642
DtString mySnowSoilName
Name of &quot;soil&quot; that is snow.
Definition: environmentalStateManager.h:648
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtUUID myNextFrameGlobalEnvironmentObjectUUID
Definition: environmentalStateManager.h:614
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:67
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:628
1) Define the interface class that will be used to represent the next and current frames...
Definition: troposphereStateComponent.h:46
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:672
A locally simulated VRF object.
Definition: localObject.h:98
DtLocalObject * myNextFrameGlobalEnvironmentObject
Definition: environmentalStateManager.h:613

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)