VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfObjectManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
13 #include <readerWriter/rwList.h>
20 #include "vrfobjcore/vrfObject.h"
27 #include "vrfutil/rwActivities.h"
31 
33 #include <vlpi/appearance.h>
34 #include <vlutil/vlFilename.h>
35 #include <vlutil/vlList.h>
36 #include <vlutil/vlHashlist.h>
37 #include <vlutil/vlConfig.h>
38 #include <vlutil/vlSmartPointers.h>
40 #include "vrfutil/itt.h"
41 #include <vl/fomMapper.h>
42 
44 #include <vector>
45 #include <list>
46 #include <set>
47 
48 #include <boost/unordered_map.hpp>
49 #include <boost/unordered_set.hpp>
50 #include <tbb/spin_rw_mutex.h>
51 
53 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
54 
55 class DtExerciseConn;
56 class DtReflectedObject;
57 class DtReflectedAggregate;
64 class DtVrfParameterDb;
65 class DtSimObjectSubComponentTypes;
67 class DtOrbatManager;
68 class DtVertexList;
70 class DtBaseEntityStateRepository;
72 class DtSimManager;
73 class DtVrfObjectManagerTickArguments;
75 class DtSimTickArguments;
76 class DtSimMessage;
78 class DtIfAggregateAs;
83 class DtReflectedObject;
84 class DtEchelonId;
85 class Coordinate_System;
90 class DtReflectedDesignator;
93 class DtReflectedActiveSonar;
94 class DtReflectedActiveSonarList;
95 class DtReflectedPropulsionNoise;
96 class DtReflectedPropulsionNoiseList;
97 class DtCreateQueueEntry;
98 class DtModifyQueueEntry;
100 class DtlInputStream;
104 class DtReflectedIffList;
105 class DtReflectedIff;
106 
107 #if DtHLA
108 namespace makVrfVrlinkExtToolkit
109 {
110  class DtReflectedExtendedAttributesObjectList;
111 }
112 #endif
113 
114 typedef std::map<DtEntityIdentifier, DtVrfObject*> DtSimObjectMap;
115 
117 typedef bool (*DtSimObjectUserInitFcn)(DtVrfObject* object, void* usr);
118 
120 typedef bool (*DtVrfObjectUserInitFcn)(DtVrfObject* vrfObject, void* usr);
121 
124 typedef void (*DtVrfObjectManagerCallbackFcn)(const DtVrfObjectManager& objectManager,
125  void* usr);
126 
130 const int DtSimMaxForceTypes = 256;
131 
134 {
136  void* myUserData;
137 };
138 
141 {
147 
150  unsigned int importFlags;
154 };
155 
158 {
162 };
163 
166 {
168 
172 };
173 
176 {
178  DtEntityIdentifier* myEntityIdentifier;
179 };
180 
186 
188 typedef enum
189 {
194 
206 
208 {
209 public:
211 
215  typedef enum
216  {
217  DtUseParameterDatabaseAggregateState = 0,
219  DtCreateDisaggregatedEntity
220  } DtAggregateCreationMode;
221 
222 public:
223 
225  DtVrfObjectManager(DtSimManager* simManager, int entityAdvisory = 100);
226 
232  virtual ~DtVrfObjectManager();
235 
237  virtual void clearRemoteComponentAttachmentSystem();
238 
244  virtual bool reuseEntityIdentifiersOnScenarioLoad() const;
245  virtual void setReuseEntityIdentifiersOnScenarioLoad(bool);
246 
249  virtual DtEntityIdentifier nextEntityIdentifier(DtVrfObject*, const DtEntityIdentifier&);
250  virtual void addVrfObjectAboutToBePublishedCallback(
251  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
252  virtual void removeVrfObjectAboutToBePublishedCallback(
253  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
254 
257  virtual void createRemoteComponentAttachmentManager();
258 
260  virtual bool isRemoteComponentAttachment(const DtUUID&) const;
261 
263  virtual bool initializeRemoteComponentAttachmentSystem(const DtFilename& fromFile);
264 
266  DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager();
267  const DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager() const;
269 
272  virtual bool create();
273 
276  virtual bool init();
277 
279  virtual bool createDIGuyCharacterManager(const DtFilename & diGuyAnimationsFile);
280 
282  virtual DtVisualMetaDataManager* visualMetaDataManager() const;
283 
286  virtual DtFilename metaDataFilename(const DtObjectType&) const;
287 
292  virtual DtRwStringAttributeList* customizedMarkingsFor(const DtObjectType&) const;
293 
303  virtual bool add(DtVrfObject* simObject);
304 
306  virtual void completeObjectAddition(DtVrfObject* simObject);
307 
309  virtual bool loadingScenarioInformation() const;
310 
311 private:
314  using DtRwList::add;
315  using DtRwList::remove;
316 
317 public:
319  virtual void setParameterDatabase(DtVrfParameterDb* parameterDatabase);
320  virtual DtVrfParameterDb* parameterDatabase();
321 
325  virtual void setSearchPaths(const DtReaderWriter::SearchPaths&);
326  virtual const DtReaderWriter::SearchPaths& searchPaths() const;
328 
330  virtual bool registerExtendedProperties();
331 
333  virtual DtManagedObjectListConstPtr getList(const DtVrfObjectPredicate& predicate,
334  bool reevaluateFlag = false, DtTime evaluationPeriod = 0);
335 
337  virtual void setImportingScenario(bool);
338  virtual bool importingScenario() const;
339 
341  virtual void setImportScenarioData(const DtImportScenarioData&);
342  virtual const DtImportScenarioData& importScenarioData() const;
343 
344  virtual const DtVrfObjectFilterMapIterator& vrfIterator(
345  const DtObjectType& filter = DtObjectType::anyType(),
346  bool invertFilter = false) const;
347 
348  virtual const DtVrfObjectFilterMapIterator& vrfIterator(
349  const DtVrfObjectPredicate& predicate) const;
350 
353  virtual const DtVrfObjectFilterMapIterator& vrfIterator(DtFilterFcn filter,
354  bool invertFilter = false, void* usrData = 0)const;
355 
361  virtual void removeAndDelete(const DtUUID& objectName, bool andRemoveFromOrbat);
362  virtual void removeAndDelete(DtSharedVrfObjectReference simObject, bool andRemoveFromOrbat);
363  virtual void removeAndDelete(const DtEntityIdentifier& key, bool andRemoveFromOrbat);
364  virtual void removeAndDelete(DtVrfObject* object, bool andRemoveFromOrbat);
365 
367  std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(bool onlyVrfSimulated = true) const;
368 
370  virtual void removeAndDeleteAllLocals(bool andDeleteFromOrbat = false);
371 
374  virtual void removeAndDeleteAll(bool andDeleteFromOrbat = false);
375 
380  virtual void setExerciseConnection(DtExerciseConn* connection);
381  virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
382 
385  virtual void setPublishZeroVelocityWhenPaused(bool);
386  virtual bool publishZeroVelocityWhenPaused() const;
387 
391  virtual void setSetDeadReckoningAlgorithmToStaticOnPause(bool);
392  virtual bool setDeadReckoningAlgorithmToStaticOnPause() const;
393 
395  virtual void overrideDeadReckoningAlgorithm(DtDeadReckonTypes drAlg);
396 
399  virtual bool isDeadReckonAlgorithmOverridden(DtDeadReckonTypes& drAlg) const;
400 
403  virtual void removeDeadReckoningAlgorithmOverride();
404 
406  virtual void setTaskVisualizationPublicationMode(DtTaskVisualizationPublicationMode mode);
407  virtual DtTaskVisualizationPublicationMode taskVisualizationPublicationMode() const;
408 
412  virtual bool hasPermissionToDisplayTaskVisualizations(const DtUUID& uuid);
413 
415  virtual void setMaxObjectsWithTaskVisualizations(unsigned max);
416  virtual unsigned maxObjectsWithTaskVisualizations() const;
417 
420  virtual void setUseDrawControlForTaskVisualizations(bool);
421  virtual bool useDrawControlForTaskVisualizations() const;
422 
424  virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList() const;
425 
428  virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
429 
431  virtual bool objectInRemovalQueue(const DtUUID& uuid);
432 
439  virtual void registerInterfaceCallbacks();
440 
442  virtual const DtSimManager* simManager() const;
444  virtual DtSimManager* simManager();
445 
455  virtual void processCreateVrfObject(DtSimMessage* msg);
456 
458  typedef DtBoost::shared_ptr<DtCreateQueueEntry> DtCreateQueueEntryPtr;
459  typedef std::list<DtCreateQueueEntryPtr> DtVrfObjectCreateQueue;
460  virtual const DtVrfObjectCreateQueue& objectCreateQueue() const;
461 
468  virtual void processCreateVrfObject(DtIfCreateVrfObject ifCreateVrfObject);
469 
477  virtual void processModifyVrfObject(DtSimMessage* msg);
478 
485  virtual void processModifyVrfObject(DtIfModifyVrfObject modObj);
486 
489  virtual void processModifyVrfOverlay(DtSimMessage* msg);
492  virtual void processDeleteVrfObject(DtSimMessage* msg);
495  virtual void processDeleteVrfObjectById(DtSimMessage* msg);
498  virtual void processVrfObjectDeleted(DtSimMessage* msg);
501  virtual void processAutoReorganize(DtSimMessage* msg);
504  virtual void processAggregateAs(DtSimMessage* msg);
507  virtual void processSkipTask(DtSimMessage* msg);
508 
509 
514  virtual void processSetThresholds(DtSimMessage* msg);
515 
517  virtual void processDeleteDynamicTerrainServer(DtSimMessage*);
518 
523  virtual void processEntityAddedCallback(DtReflectedExtEntity* entity);
524  virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
525 
528  virtual void processEntityRemovedCallback(DtReflectedExtEntity* entity);
529  virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
530 
531  virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
532  virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
533  virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
534  DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
535 
536  virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
537  virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
538  virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
539  DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
540 
541  typedef std::list<DtReflectedActiveSonar*> ReflectedActiveSonars;
542  virtual ReflectedActiveSonars findActiveSonarsForHostEntity(
543  const DtVrfObject* host) const;
544 
545  virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
546  virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
547  virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
548  DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
549 
550  virtual void processIffAddedCallback(DtReflectedIff* des);
551  virtual void processIffRemovedCallback(DtReflectedIff* des);
552  virtual void processIffChangedCallback(DtReflectedIff* des);
553  virtual DtBoolean processIffDiscoveryCriteria(DtReflectedIff*);
554 
555  virtual bool hasEnabledActiveSonar(const DtVrfObject* host) const;
556 
557  virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(const DtVrfObject* host) const;
558  virtual DtReflectedIff* iffForHost(const DtVrfObject* host) const;
559 
560  virtual DtReflectedEmitterSystemManager* reflectedEmitterSystemManager();
561 
563  virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
564 
565  virtual void processEnvProcessAddedCallback(
566  DtReflectedEnvironmentProcess* envProcess);
567  virtual void processEnvProcessRemovedCallback(
568  DtReflectedEnvironmentProcess* envProcess);
569  virtual bool processEnvProcessDiscoveryCriteria(
570  DtReflectedEnvironmentProcess* envProcess);
571 
574  virtual void removeObjectSubordinates(DtVrfObject* object, bool andRemoveFromOrbat);
575 
578  virtual void queueObjectForRemoval(const DtEntityIdentifier& key, bool andRemoveFromOrbat = false);
579  virtual void queueObjectForRemoval(const DtUUID& key, bool andRemoveFromOrbat = false);
580 
582  virtual void removeObjectsQueuedForRemoval();
583 
592  virtual void tick();
593 
595  virtual DtVrfObject* createAndInitVrfObject(
596  DtIfCreateVrfObject* creationInfo);
597 
598  virtual DtVrfObject* createAndInitVrfObject(
599  DtIfAggregateAs* aggInfo);
600 
602  virtual DtVrfObject* createAndInitVrfObject(
603  DtReflectedEntity* entity);
604 
605  virtual DtVrfObject* createAndInitVrfObject(
606  DtReflectedAggregate* aggregate,
607  int superType = DtObjectTypePseudoAggregate);
608 
609  virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
610 
620  virtual DtVrfObject* createAndInitVrfObject(
621  const DtObjectType& objectType,
622  bool publishLocalObject = true,
623  const DtString& objectName = DtString::nullString(),
624  const DtString& objectLabel = DtString::nullString(),
625  DtForceType forceType = DtForceOther,
626  const DtList* vertices = 0,
627  const DtTaitBryan* orientation = 0,
628  bool projection = false,
629  bool closedFigure = false,
630  const DtAppearance& appearance = DtAppearance::nullAppearance(),
631  const DtString& readerWriterName = DtString::nullString(),
632  DtReaderWriterRegistry* parentRegistry = 0,
633  bool createSubObjects = false,
634  DtVrfObjectUserInitFcn userInit = 0,
635  void* userInitData = 0,
636  bool organize = true,
637  const DtString& startingFormation = DtDefaultFormationString,
638  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
640  unsigned long requestId = 0,
641  const DtString& overlayParent = "",
642  const DtUUID& uuid = DtUUID::nullUUID(),
643  bool addToOrbat = false);
644 
652  virtual DtVrfObject* createAndInitVrfObject(
653  const DtObjectType& objectType,
654  bool publishLocalObject = true,
655  const DtString& objectName = DtString::nullString(),
656  const DtString& objectLabel = DtString::nullString(),
657  DtForceType forceType = DtForceOther,
658  const DtVector& position = DtVector::zero(),
659  const DtTaitBryan* orientation = 0,
660  bool projection = false,
661  bool closedFigure = false,
662  const DtAppearance& appearance = DtAppearance::nullAppearance(),
663  const DtString& readerWriterName = DtString::nullString(),
664  DtReaderWriterRegistry* parentRegistry = 0,
665  bool createSubObjects = false,
666  DtVrfObjectUserInitFcn userInitFcn = 0,
667  void* userInitData = 0,
668  bool organize = true,
669  const DtString& startingFormation = DtDefaultFormationString,
670  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
672  unsigned long requestId = 0, const DtString& overlayParent = "",
673  const DtUUID& startingUUID = DtUUID::nullUUID(),
674  bool addToOrbat = false);
675 
683  virtual void createSubObjectsFromParameters(DtVrfObject* parent,
684  bool publishSubobjects, unsigned long requestId, const DtString& overlayParent, bool addToOrbat);
685 
692  virtual DtVrfObject* createSubObjectFromParameterEntry(
693  const DtVrfSubObjectParameterEntry& entry, const DtVector& positionOffsetFromParent,
694  const DtVrfObject& parent,
695  const DtString& formationName,
696  bool publishSubObject, unsigned long requestId = 0, const DtString& overlayParent = "",
697  const DtString& markingText = "", const DtUUID& uuid = DtUUID::nullUUID(),
698  bool addToOrbat = true);
699 
701  virtual bool readOrderOfBattleFile(const DtFilename & filename);
702  virtual bool readOrderOfBattleFile(const std::vector<std::string*>& oob);
703 
705  virtual bool readOrderOfBattleFile(DtlInputStream*);
706  virtual bool readOrderOfBattleFileFromZipFile(const DtFilename& zipFile, const DtString & filename);
707  virtual bool writeOrderOfBattleFile(const DtString & filename);
709  virtual bool writeOrderOfBattleFile(std::string& stream, int& numberOfLuaScripts);
710  virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams, int& numberOfLuaScripts);
711 
714  virtual bool writeSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags,
715  boost::unordered_set<DtUUID>& uuidsSaved);
716 
718  virtual void preallocateLuaScriptHandles(int);
719 
723  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags, DtForceType force,
724  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
725  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
726  const DtFilename& scenarioZipFile, const DtString& filename, int flags, DtForceType force,
727  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
728  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(int flags, DtForceType force, DtlObjPtr& args);
729  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream, int flags, DtForceType force,
730  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
731 
735  virtual bool objectShouldBeSavedToOrderOfBattle(
736  const DtVrfObject* vrfObject) const;
737  virtual bool objectShouldBeSavedToSimulationObjectGroup(
738  const DtVrfObject* vrfObject) const;
739 
740  virtual DtVrfObject* createObjectFromMemoryBuffer(const std::string& buffer);
741 
744  virtual bool hasUUIDOrMarkingText(DtlObjPtr args, DtUUID&) const;
745 
746  virtual DtlObjPtr getData(DtlObjPtr args,
747  const DtReaderWriter::SearchPaths& searchPaths,
748  const DtVariableBindingsList& variableBindings);
749 
752  static void tickCallback(void* args);
753 
757  virtual void addVrfObjectAboutToBeAddedCallback(
758  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
759  const DtObjectType& filter = DtObjectType::anyType(),
760  bool invertFilter = false);
761 
765  virtual void addVrfObjectAddedCallback(
766  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
767  const DtObjectType& filter = DtObjectType::anyType(),
768  bool invertFilter = false);
769 
773  virtual void addVrfObjectAboutToBeLoadedCallback(
774  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
775  const DtObjectType& filter = DtObjectType::anyType(),
776  bool invertFilter = false);
777 
782  virtual void addVrfObjectAboutToBeRemovedCallback(
783  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
784  const DtObjectType& filter = DtObjectType::anyType(),
785  bool invertFilter = false);
786 
789  virtual void removeVrfObjectAboutToBeAddedCallback(
790  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
791  const DtObjectType& filter = DtObjectType::anyType(),
792  bool invertFilter = false);
793 
796  virtual void removeVrfObjectAboutToBeLoadedCallback(
797  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
798  const DtObjectType& filter = DtObjectType::anyType(),
799  bool invertFilter = false);
800 
803  virtual void removeVrfObjectAddedCallback(
804  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
805  const DtObjectType& filter = DtObjectType::anyType(),
806  bool invertFilter = false);
807 
810  virtual void removeVrfObjectAboutToBeRemovedCallback(
811  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
812  const DtObjectType& filter = DtObjectType::anyType(),
813  bool invertFilter = false);
814 
817  virtual void addObjectManagerAboutToRemoveAllCallback(
818  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
819 
822  virtual void removeObjectManagerAboutToRemoveAllCallback(
823  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
824 
826  virtual void addOrganizationManagerReadyCallback(
827  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
828 
830  virtual void removeOrganizationManagerReadyCallback(
831  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
832 
834  virtual void enableAutoReorganization();
835  virtual void disableAutoReorganization();
837  virtual bool autoReorganizeEnabled() const;
838 
840  virtual DtEntityIdentifier mapUUIDToEntityIdentifier(const DtUUID&) const;
841  virtual DtGlobalObjectDesignator mapUUIDToGlobalId(const DtUUID&) const;
842  virtual DtUUID mapGlobalIdToUUID(const DtGlobalObjectDesignator&) const;
843 
847  virtual bool objectNameExists(const DtString&) const;
848 
850  virtual DtSharedVrfObjectReference lookupTopLevelVrfObject(DtForceType forceType);
851 
853  virtual DtString nextNameWithPrefix(const DtObjectType & objectType,
854  const DtString& potentialPrefix);
855 
858  virtual DtString nextNameWithPrefix(int maxLength,
859  const DtString& potentialPrefix);
860 
862  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
865  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
866  const DtString& name);
868  virtual DtString topLevelName(DtForceType forceType);
869 
877  virtual DtString nextName(const DtObjectType& objectType);
879  virtual DtString nextUnorganizedName();
882  virtual DtString uniquifyName(const DtString& name, const DtObjectType& objectType);
883 
887  virtual unsigned int maxNameLengthForType(const DtObjectType& objectType);
888 
891  virtual DtReflectedObject* lookupReflectedObject(
892  const DtGlobalObjectDesignator& globalId) const;
893 
895  virtual void rediscoverObjects(const std::set<DtGlobalObjectDesignator>& ignore =
896  std::set<DtGlobalObjectDesignator>());
897 
900  virtual void requestUpdatesForRemoteNonVrfObjects() const;
901 
904  virtual void objectNameChanged(DtVrfObject*, const DtString& oldName,
905  const DtString& newName);
906 
909  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
910 
912 
913  virtual void addObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
914  virtual void removeObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
916 
920 
921  virtual void addObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
922  virtual void removeObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
924 
941  virtual DtVrfObject* aggregateAs(
942  const DtObjectType& aggregateType,
943  DtForceType force,
944  const DtVector& dbPosition,
945  DtReal heading,
946  const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
947  const DtString& aggregateName = DtString::nullString(),
948  bool addToOrbat = true);
949 
951  virtual double timeOfDay() const;
952 
954  virtual double dateAndTimeOfDay() const;
955 
960  virtual void setSimulationDateTimeBasedOnLocation(const DtVector& geocentricLocation, int timeOfDay);
961 
965  virtual bool addSubordinatesToAggregate(DtVrfObject* object,
966  const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
967 
973  static void addSubordinatesToAggregateCompleteCallback(void* usr);
974 
975  virtual DtOrganizationManager* organizationManager();
976  virtual const DtOrganizationManager* organizationManager() const;
977 
978  virtual DtOrbatManager* orbatManager();
979  virtual const DtOrbatManager* orbatManager() const;
980 
983  virtual DtDiGuyCharacterDataManager * diGuyCharacterManager();
984  virtual const DtDiGuyCharacterDataManager * diGuyCharacterManager() const;
985 
987  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
988 
990  virtual unsigned objectCount() const;
991 
994  virtual DtSharedVrfObjectReference lookupVrfObjectByEntityIdentifier(const DtEntityIdentifier& key) const;
995 
998  virtual DtSharedVrfObjectReference lookupVrfObjectByGlobalId(const DtGlobalObjectDesignator& globalId) const;
999 
1014  virtual DtSharedVrfObjectReference lookupVrfObjectByUUID(const DtUUID&) const;
1015 
1018  virtual bool uuidExists(const DtUUID&) const;
1019 
1022  virtual bool addNameAlias(const DtString& aliasName, DtVrfObject* object);
1023 
1024  virtual void removeNameAlias(const DtString& alias);
1025 
1030  virtual DtSharedVrfObjectReference lookupVrfObjectByMarkingText(const DtString&) const;
1031 
1033  virtual bool hasObjectType(const DtObjectType&) const;
1034 
1037  virtual bool markingTextExists(const DtString&) const;
1038 
1040  virtual const DtSimulationAddress& simulationAddress() const;
1041 
1047  const DtSimObjectMapIterator& iterator() const;
1048 
1050  virtual bool createSimObjectList();
1051 
1054  virtual const DtSimObjectMap& objectMap() const;
1055 
1059  virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
1060  virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1061 
1066  static void entityAddedCallback(DtReflectedExtEntity* entity, void* userData);
1067 
1072  static void entityRemovedCallback(DtReflectedExtEntity* entity,
1073  void* userData);
1074 
1079  static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
1080  void* userData);
1081 
1086  static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
1087  void* userData);
1088 
1093  static void entityChangedCallback(DtReflectedExtEntity* entity,
1094  void* userData);
1095 
1100  static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
1101  void* userData);
1102 
1104  virtual void processEntityChanged(DtReflectedExtEntity* entity);
1105 
1111  static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
1112  void* userData);
1113 
1119  static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
1120  void* userData);
1121 
1127  virtual bool processEntityDiscoveryCriteria(
1128  DtReflectedEntity* entity);
1129 
1135  virtual bool processAggregateDiscoveryCriteria(
1136  DtReflectedAggregate* aggregate);
1137 
1140  virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(const DtGlobalObjectDesignator&
1141  tgtGlobalId);
1142 
1144  virtual bool hostingDynamicTerrainServer() const;
1145 
1149  virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(const int code);
1150 
1154  virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1155 
1156  virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1157  virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1158  virtual void createRemoteEmitterSystemList(DtExerciseConn* exConn);
1159  virtual void createRemoteIffList(DtExerciseConn* exConn);
1160 
1161 #if DtHLA
1162 
1163 
1164  virtual void createRemoteExtendedAttributesList(DtExerciseConn* exConn);
1165 #endif
1166 
1167  DtReflectedDesignatorList* reflectedDesignatorList() const;
1168 
1169  DtReflectedActiveSonarList* reflectedActiveSonarList() const;
1170  DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList() const;
1171  DtReflectedIffList* reflectedIffList() const;
1172 
1174  virtual DtVrfParameterDb* objectParametersDB() const;
1175 
1177  virtual void addSimObjectQueuedForRemovalCallback(
1179  virtual void removeSimObjectQueuedForRemovalCallback(
1181  virtual void invokeSimObjectQueuedForRemovalCallbacks(
1182  DtVrfObject* object);
1183 
1187  virtual void addSimObjectAboutToBeAddedCallback(
1188  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1189  const DtObjectType& filter = DtObjectType::anyType(),
1190  bool invertFilter = false);
1191 
1195  virtual void addSimObjectAddedCallback(
1196  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1197  const DtObjectType& filter = DtObjectType::anyType(),
1198  bool invertFilter = false);
1199 
1203  virtual void addSimObjectAboutToBeRemovedCallback(
1204  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1205  const DtObjectType& filter = DtObjectType::anyType(),
1206  bool invertFilter = false);
1207 
1211  virtual void addSimObjectAboutToBeLoadedCallback(
1212  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1213  const DtObjectType& filter = DtObjectType::anyType(),
1214  bool invertFilter = false);
1215 
1218  virtual void removeSimObjectAboutToBeAddedCallback(
1219  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1220  const DtObjectType& filter = DtObjectType::anyType(),
1221  bool invertFilter = false);
1222 
1225  virtual void removeSimObjectAddedCallback(
1226  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1227  const DtObjectType& filter = DtObjectType::anyType(),
1228  bool invertFilter = false);
1229 
1232  virtual void removeSimObjectAboutToBeLoadedCallback(
1233  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1234  const DtObjectType& filter = DtObjectType::anyType(),
1235  bool invertFilter = false);
1236 
1239  virtual void removeSimObjectAboutToBeRemovedCallback(
1240  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1241  const DtObjectType& filter = DtObjectType::anyType(),
1242  bool invertFilter = false);
1243 
1247  virtual void invokeSimObjectAboutToBeAddedCallbacks(
1248  DtVrfObject* simObject) const;
1249 
1253  virtual void invokeSimObjectAddedCallbacks(
1254  DtVrfObject* simObject) const;
1255 
1259  virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1260  DtVrfObject* simObject) const;
1261 
1265  virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1266  DtVrfObject* simObject) const;
1267 
1269  virtual DtReflectedExtEntityList* reflectedEntityList() const;
1270 
1272  virtual DtReflectedExtAggregateList* reflectedAggregateList() const;
1273 
1277  virtual void setSimObjectType(const DtString& type);
1278  virtual const DtString& simObjectType() const;
1280 
1282  virtual void setOrbatEnabled(bool);
1283  virtual bool orbatEnabled() const;
1284 
1286  virtual void setOrderOfBattleObjectsAddedToOrbatByDefault(bool b);
1287  virtual bool orderOfBattleObjectsAddedToOrbatByDefault() const;
1288 
1290  virtual void closingScenario();
1291 
1294  virtual bool addUUIDMappingForObject(DtVrfObject* vrfObject);
1295 
1297  virtual void removeUUIDMappingForObject(DtVrfObject* vrfObject);
1298 
1300  virtual DtEntityIdentifier nextId(DtVrfObject* o = NULL);
1301 
1306  virtual DtString generateUniqueName(int maxLength, const DtString&
1307  root = "Object") const;
1308 
1310  virtual void setRollUpRules(const DtAssembliesReaderWriter::RwRootNode&);
1311 
1313  virtual const DtAssembliesReaderWriter::RwRootNode& rollUpRules() const;
1314 
1316  virtual void setActivities(const DtRwActivities&);
1317 
1319  virtual const DtRwActivities& activities() const;
1320 
1323  virtual bool isLocal(const DtBaseEntityStateRepository& stateRep);
1324 
1328  static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1329 
1334  virtual void objectsEmbarkedOn(DtVrfObjectStateRepository* vrfObjSR, std::vector<DtSharedVrfObjectReference>& list,
1335  bool includePseudoAggregates = true) const;
1336 
1341  static void designatorAddedCallback(DtReflectedDesignator * des,
1342  void * userData);
1343 
1348  static void designatorRemovedCallback(DtReflectedDesignator * des,
1349  void * userData);
1350 
1355  static void designatorChangedCallback(DtReflectedDesignator * des,
1356  void * userData);
1357 
1363  static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1364  void * userData);
1365 
1366  static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1367  void* userData);
1368  static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1369  void* userData);
1370  static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1371  void* userData);
1372  static DtBoolean activeSonarDiscoveryCriteriaCallback(
1373  DtReflectedObject* activeSonar, void* userData);
1374 
1375  static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1376  void* userData);
1377  static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1378  void* userData);
1379  static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1380  void* userData);
1381  static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1382  DtReflectedObject* propNoise, void* userData);
1383 
1384  static void iffAddedCallback(DtReflectedIff* propNoise,
1385  void* userData);
1386  static void iffRemovedCallback(DtReflectedIff* propNoise,
1387  void* userData);
1388  static void iffChangedCallback(DtReflectedIff* propNoise,
1389  void* userData);
1390  static DtBoolean iffDiscoveryCriteriaCallback(
1391  DtReflectedObject* iff, void* userData);
1392 
1395  virtual bool canSimulate() const;
1396 
1399  virtual void setCanSimulate(bool);
1400 
1402  virtual void printReflectedObjectCounts() const;
1403 
1406  virtual void addStealthType(const DtEntityType&);
1407  virtual void removeStealthType(const DtEntityType&);
1408  virtual bool isStealthType(const DtEntityType&) const;
1409  std::vector<DtEntityType>& stealthTypes() { return myStealthTypes; };
1410  const std::vector<DtEntityType>& stealthTypes() const { return myStealthTypes; };
1411 
1413  virtual std::set<DtVrfObject*> objectsOnOverlayLayer(const DtString&) const;
1414 
1416  static void vrfObjectDataChangedCallback(DtVrfObject*, int, void*);
1417  virtual void processVrfObjectDataChanged(DtVrfObject*, int);
1418 
1420  virtual void clearObjectsAwaitingDiscovery();
1421 
1422 protected:
1424  virtual void processOrganizationManagerReady(const DtOrganizationManagerReadyCallbackInfo&);
1425  virtual void invokeOrganizationManagerReadyCallbacks(const DtOrganizationManagerReadyCallbackInfo&);
1426 
1427 protected:
1429  virtual DtObjectType potentialRandomObjectTypeFrom(const DtObjectType& original);
1430 
1433  virtual void rediscoverNonVRFEntities();
1434 
1438  virtual void remove(DtVrfObject* simObject);
1439  virtual void remove(DtSharedVrfObjectReference simObject);
1440  virtual DtVrfObject* remove(const DtEntityIdentifier& key);
1441 
1444  virtual void invokeObjectManagerAboutToRemoveAllCallbacks() const;
1445 
1448  virtual void onQueueObjectForRemoval(DtVrfObject* vrfObject, bool andRemoveFromOrbat = false);
1449 
1450  virtual const Coordinate_System* coordinateSystem() const;
1451  virtual Coordinate_System* coordinateSystem();
1452 
1455  virtual void modifyInterfaceContentForNewObject(DtSimInterfaceContent*, DtVrfObject*, bool& isLocal) const;
1456 
1459  virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(const DtList&) const;
1460 
1462  virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(const DtList& subObjects,
1463  int& totalLeafNodes) const;
1464 
1465 protected:
1467  virtual void checkPendingNameRemoval(const DtString& markingText);
1468 
1471  virtual void removeVrfObject(const DtUUID&, bool queueDeletionOfVrfObject = false);
1472 
1474  virtual DtObjectGeometricModelsManager* createObjectModelsManager() const;
1475 
1477  virtual DtVrfEntityIdentifierFactory* createVrfEntityIdentifierFactory();
1478 
1480  virtual DtVrfObjectPlanAdministrator* createPlanAdministrator();
1481 
1482  virtual bool finalizeObjectRead(DtVrfObject*);
1483 
1484  virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1485 
1487  virtual void deleteVrfObjectsToBeDeleted();
1488 
1490  virtual DtEntityType standardAggregateTypeToVrfAggregateType(const DtEntityType& aggType) const;
1491 
1492 public:
1493  DtObjectGeometricModelsManager* objectModelsManager() const;
1494  DtVrfEntityIdentifierFactory* vrfEntityIdentifierFactory() const;
1495 
1496 #if DtHLA_1516_EVOLVED
1497 
1498  virtual void reserveGlobalObjectIds(unsigned numToReserve);
1499 #endif
1500 
1505  virtual DtGlobalObjectDesignator nextGlobalObjectId();
1506 
1507  virtual DtVrfObjectPlanAdministrator* planAdministrator();
1508 
1509  virtual DtSimInternalCommunicationManager* simInternalCommunicationManager();
1510 
1511 protected:
1513  virtual DtSimInternalCommunicationManager* createSimInternalCommunicationManager(
1514  DtSimManager* simMgr) const;
1515 
1516 protected:
1517 
1519  typedef std::pair<DtVrfObject*, DtVrfSimulationObjectGroupGeometry*> PendingObjectInformation;
1520  typedef std::vector<PendingObjectInformation> PendingObjectsInformation;
1521  typedef std::vector<PendingObjectsInformation> ObjectsAwaitingDiscovery;
1522 
1525  virtual bool addObjectsReadyForSimulation(PendingObjectsInformation&);
1526 
1530  static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr);
1531  static void modifyVrfOverlayCallback(DtSimMessage* msg, void* usr);
1532  static void autoReorganizeCallback(DtSimMessage* msg, void* usr);
1533  static void skipTaskCallback(DtSimMessage* msg, void* usr);
1534  static void setThresholdsCallback(DtSimMessage* msg, void* usr);
1535  static void deleteDynamicTerrainServerCallback(DtSimMessage*, void*);
1536 
1537 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1538  static void vrfObjectStateUpdateCallback(DtSimMessage* msg, void* usr);
1539 #endif
1540 
1548  static void createVrfObjectCallback(DtSimMessage* msg, void* usr);
1549  static void deleteVrfObjectCallback(DtSimMessage* msg, void* usr);
1550  static void deleteVrfObjectByIdCallback(DtSimMessage* msg, void* usr);
1551  static void vrfObjectDeletedCallback(DtSimMessage* msg, void* usr);
1552  static void orderOfBattleOpCallback(DtSimMessage* msg, void* usr);
1553  static void aggregateAsCallback(DtSimMessage* msg, void* usr);
1554 
1556  static void extendedLabelsOperationCallback(DtSimMessage* msg, void* usr);
1557  virtual void processExtendedLabelsOperation(DtSimMessage*);
1558 
1560  static void requestActivitiesCallback(DtSimMessage* msg, void* usr);
1561  virtual void processRequestActivities(DtSimMessage*);
1562 
1564  static void requestJoystickControlsCallback(DtSimMessage* msg, void* usr);
1565  virtual void processRequestJoystickControls(DtSimMessage*);
1566 
1569  virtual bool acceptRemoteEnvironmental(const DtEntityType& et) const;
1570 
1575  static void createVrfObjectPostDrainCallback(void* usr);
1576  static void deleteVrfObjectPostDrainCallback(void* usr);
1577  static void deleteVrfObjectByIdPostDrainCallback(void* usr);
1578  static void vrfObjectDeletedPostDrainCallback(void* usr);
1579  static void aggregateAsPostDrainCallback(void* usr);
1580 
1581  static void envProcessAddedCallback(
1582  DtReflectedEnvironmentProcess* envProcess, void* userData);
1583  static void envProcessRemovedCallback(
1584  DtReflectedEnvironmentProcess* envProcess, void* userData);
1585  static bool envProcessDiscoveryCriteria(
1586  DtReflectedObject* envProcess, void* userData);
1587 
1588  static void organizationManagerReadyCallback(const DtOrganizationManagerReadyCallbackInfo& info, void* usr);
1589 
1590 protected:
1591 
1594 
1597 
1600 
1606  static void postInitFromParamsCallback(DtVrfObject* vrfObject, void* usr);
1607 
1610  virtual DtCreateQueueEntry* createQueueEntryCreator(DtIfCreateVrfObject msg);
1611 
1614  virtual DtModifyQueueEntry* modifyQueueEntryCreator(DtIfModifyVrfObject msg);
1615 
1617  virtual DtOrganizationManager* createOrganizationManager();
1618 
1620  virtual DtOrbatManager* createOrbatManager();
1621 
1622 protected:
1625 
1628 
1631 
1634 
1637 
1638  DtReflectedActiveSonarList* myRemoteActiveSonarList;
1639  DtReflectedPropulsionNoiseList* myRemotePropulsionNoiseList;
1640 
1642 
1643  DtReflectedIffList* myReflectedIffList;
1644 
1645 #if DtHLA
1646 
1648 #endif
1649 
1652 
1653 
1654 
1659 
1664 
1668  //typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> AddedList;
1670  //mutable tbb::spin_rw_mutex myAddedSimObjectCallbackListMutex;
1671 
1675  //typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> ToBeRemovedList;
1677  //mutable tbb::spin_rw_mutex myAboutToBeRemovedSimObjectCallbackListMutex;
1678 
1679  //mutable std::set<DtSimObjectListActivityCallbackInfo*> myRemovalCallbacksRemoved;
1680 
1683 
1688 
1689  DtExerciseConn* myExerciseConn;
1690 
1693 
1695 
1700 
1702 
1705  std::map<DtUUID, bool> myObjectsToRemoveQueue;
1706  std::map<DtString, std::map<DtUUID, bool> > myObjectsToRemoveByNameQueue;
1707 
1711 
1714  typedef DtBoost::shared_ptr<DtModifyQueueEntry> DtModifyQueueEntryPtr;
1715  typedef std::list<DtModifyQueueEntryPtr> DtVrfObjectModifyQueue;
1717 
1720 
1722 
1724 
1725  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> GlobalIdToObjectMap;
1727 
1729 
1731 
1733 
1735 
1737 
1739 
1741 
1743 
1745 
1748 
1752 
1755 
1758 
1760 
1762 
1764 
1767 
1771 
1777 
1778  typedef boost::unordered_map<DtUUID, DtSharedVrfObjectReference> UUIDToObjectMap;
1780 
1781  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> NameToObjectMap;
1784 
1785  typedef boost::unordered_map<DtVrfObject*, DtSharedVrfObjectReference> ObjectToObjectMap;
1787 
1789 
1790  std::vector<DtVrfObject*> myJustAdded;
1791 
1792  std::map<int, DtlObjPtr> mySortedByEntityId;
1799 
1801 
1802 #if DtHLA_1516
1803  std::set<DtGlobalObjectDesignator> myReservedGlobalIds;
1804 #endif
1805 
1806  std::vector<DtEntityType> myStealthTypes;
1807 
1808  std::vector<DtVrfObject*> myVrfObjectsToDelete;
1809 
1810 private:
1811 
1812  std::vector<DtVrfObjectManagerCallbackInfo> myAboutToRemoveAllCallbackList;
1813 
1815  mutable tbb::spin_rw_mutex myOverlayMapMutex;
1816  typedef std::map<DtString, std::set<DtVrfObject*> > OverlayMap;
1817  typedef std::map<DtVrfObject*, DtString> ObjectOverlayMap;
1818 
1821 
1824 
1828 
1831 };
1832 
1834 {
1836 }
1837 
1839 {
1841 }

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)