VR-Forces 4.6.1 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 
11 #include "vrfutil/rwObjectType.h"
13 #include "vrfutil/rwList.h"
20 #include "vrfobjcore/vrfObject.h"
26 #include "vrfutil/rwActivities.h"
29 
31 #include <vlpi/appearance.h>
32 #include <vlutil/vlFilename.h>
33 #include <vlutil/vlList.h>
34 #include <vlutil/vlHashlist.h>
35 #include <vlutil/vlConfig.h>
36 #include <vlutil/vlSmartPointers.h>
38 #include <vl/fomMapper.h>
39 
41 #include <vector>
42 #include <list>
43 #include <set>
44 
45 #include <boost/unordered_map.hpp>
46 #include <boost/unordered_set.hpp>
47 #include <tbb/spin_rw_mutex.h>
48 
50 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
51 
52 class DtExerciseConn;
53 class DtReflectedObject;
54 class DtReflectedAggregate;
61 class DtVrfParameterDb;
62 class DtSimObjectSubComponentTypes;
64 class DtOrbatManager;
65 class DtVertexList;
67 class DtBaseEntityStateRepository;
69 class DtSimManager;
70 class DtVrfObjectManagerTickArguments;
72 class DtSimTickArguments;
73 class DtSimMessage;
75 class DtIfAggregateAs;
80 class DtReflectedObject;
81 class DtEchelonId;
82 class Coordinate_System;
87 class DtReflectedDesignator;
90 class DtReflectedActiveSonar;
91 class DtReflectedActiveSonarList;
92 class DtReflectedPropulsionNoise;
93 class DtReflectedPropulsionNoiseList;
94 class DtCreateQueueEntry;
95 class DtModifyQueueEntry;
97 class DtlInputStream;
99 
100 #if DtHLA
101 namespace makVrfVrlinkExtToolkit
102 {
103  class DtReflectedExtendedAttributesObjectList;
104 }
105 #endif
106 
107 typedef std::map<DtEntityIdentifier, DtVrfObject*> DtSimObjectMap;
108 
110 typedef bool (*DtSimObjectUserInitFcn)(DtVrfObject* object, void* usr);
111 
115  void* usr);
116 
118 typedef bool (*DtVrfObjectUserInitFcn)(DtVrfObject* vrfObject, void* usr);
119 
122 typedef void (*DtVrfObjectManagerCallbackFcn)(const DtVrfObjectManager& objectManager,
123  void* usr);
124 
128 const int DtSimMaxForceTypes = 256;
129 
132 {
134  void* myUserData;
135 };
136 
139 {
145 
148  unsigned int importFlags;
152 };
153 
156 {
160 };
161 
164 {
166 
170 };
171 
174 {
176  DtEntityIdentifier* myEntityIdentifier;
177 };
178 
184 
186 typedef enum
187 {
192 
204 
206 {
207 public:
209 
213  typedef enum
214  {
215  DtUseParameterDatabaseAggregateState = 0,
217  DtCreateDisaggregatedEntity
218  } DtAggregateCreationMode;
219 
220 public:
221 
223  DtVrfObjectManager(DtSimManager* simManager, int entityAdvisory = 100);
224 
230  virtual ~DtVrfObjectManager();
233 
235  virtual void clearRemoteComponentAttachmentSystem();
236 
242  virtual bool reuseEntityIdentifiersOnScenarioLoad() const;
243  virtual void setReuseEntityIdentifiersOnScenarioLoad(bool);
244 
247  virtual DtEntityIdentifier nextEntityIdentifier(DtVrfObject*, const DtEntityIdentifier&);
248  virtual void addVrfObjectAboutToBePublishedCallback(
249  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
250  virtual void removeVrfObjectAboutToBePublishedCallback(
251  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
252 
255  virtual void createRemoteComponentAttachmentManager();
256 
258  virtual bool isRemoteComponentAttachment(const DtUUID&) const;
259 
261  virtual bool initializeRemoteComponentAttachmentSystem(const DtFilename& fromFile);
262 
264  DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager();
265  const DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager() const;
267 
270  virtual bool create();
271 
274  virtual bool init();
275 
277  virtual bool createDIGuyCharacterManager(const DtFilename & diGuyAnimationsFile);
278 
288  virtual bool add(DtVrfObject* simObject);
289 
291  virtual void completeObjectAddition(DtVrfObject* simObject);
292 
294  virtual bool loadingScenarioInformation() const;
295 
296 private:
299  using DtRwList::add;
300  using DtRwList::remove;
301 
302 public:
304  virtual void setParameterDatabase(DtVrfParameterDb* parameterDatabase);
305  virtual DtVrfParameterDb* parameterDatabase();
306 
308  virtual bool registerExtendedProperties();
309 
311  virtual DtManagedObjectListConstPtr getList(const DtVrfObjectPredicate& predicate,
312  bool reevaluateFlag = false, DtTime evaluationPeriod = 0);
313 
315  virtual void setImportingScenario(bool);
316  virtual bool importingScenario() const;
317 
319  virtual void setImportScenarioData(const DtImportScenarioData&);
320  virtual const DtImportScenarioData& importScenarioData() const;
321 
322  virtual const DtVrfObjectFilterMapIterator& vrfIterator(
323  const DtObjectType& filter = DtObjectType::anyType(),
324  bool invertFilter = false) const;
325 
326  virtual const DtVrfObjectFilterMapIterator& vrfIterator(
327  const DtVrfObjectPredicate& predicate) const;
328 
331  virtual const DtVrfObjectFilterMapIterator& vrfIterator(DtFilterFcn filter,
332  bool invertFilter = false, void* usrData = 0)const;
333 
339  virtual void removeAndDelete(const DtUUID& objectName, bool andRemoveFromOrbat);
340  virtual void removeAndDelete(DtSharedVrfObjectReference simObject, bool andRemoveFromOrbat);
341  virtual void removeAndDelete(const DtEntityIdentifier& key, bool andRemoveFromOrbat);
342  virtual void removeAndDelete(DtVrfObject* object, bool andRemoveFromOrbat);
343 
345  std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(bool onlyVrfSimulated = true) const;
346 
348  virtual void removeAndDeleteAllLocals(bool andDeleteFromOrbat = false);
349 
352  virtual void removeAndDeleteAll(bool andDeleteFromOrbat = false);
353 
358  virtual void setExerciseConnection(DtExerciseConn* connection);
359  virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
360 
363  virtual void setPublishZeroVelocityWhenPaused(bool);
364  virtual bool publishZeroVelocityWhenPaused() const;
365 
369  virtual void setSetDeadReckoningAlgorithmToStaticOnPause(bool);
370  virtual bool setDeadReckoningAlgorithmToStaticOnPause() const;
371 
373  virtual void overrideDeadReckoningAlgorithm(DtDeadReckonTypes drAlg);
374 
377  virtual bool isDeadReckonAlgorithmOverridden(DtDeadReckonTypes& drAlg) const;
378 
381  virtual void removeDeadReckoningAlgorithmOverride();
382 
384  virtual void setTaskVisualizationPublicationMode(DtTaskVisualizationPublicationMode mode);
385  virtual DtTaskVisualizationPublicationMode taskVisualizationPublicationMode() const;
386 
390  virtual bool hasPermissionToDisplayTaskVisualizations(const DtUUID& uuid);
391 
393  virtual void setMaxObjectsWithTaskVisualizations(unsigned max);
394  virtual unsigned maxObjectsWithTaskVisualizations() const;
395 
398  virtual void setUseDrawControlForTaskVisualizations(bool);
399  virtual bool useDrawControlForTaskVisualizations() const;
400 
402  virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList() const;
403 
406  virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
407 
409  virtual bool objectInRemovalQueue(const DtUUID& uuid);
410 
417  virtual void registerInterfaceCallbacks();
418 
420  virtual const DtSimManager* simManager() const;
422  virtual DtSimManager* simManager();
423 
433  virtual void processCreateVrfObject(DtSimMessage* msg);
434 
436  typedef DtBoost::shared_ptr<DtCreateQueueEntry> DtCreateQueueEntryPtr;
437  typedef std::list<DtCreateQueueEntryPtr> DtVrfObjectCreateQueue;
438  virtual const DtVrfObjectCreateQueue& objectCreateQueue() const;
439 
446  virtual void processCreateVrfObject(DtIfCreateVrfObject ifCreateVrfObject);
447 
455  virtual void processModifyVrfObject(DtSimMessage* msg);
456 
463  virtual void processModifyVrfObject(DtIfModifyVrfObject modObj);
464 
467  virtual void processModifyVrfOverlay(DtSimMessage* msg);
470  virtual void processDeleteVrfObject(DtSimMessage* msg);
473  virtual void processDeleteVrfObjectById(DtSimMessage* msg);
476  virtual void processVrfObjectDeleted(DtSimMessage* msg);
479  virtual void processAutoReorganize(DtSimMessage* msg);
482  virtual void processAggregateAs(DtSimMessage* msg);
485  virtual void processSkipTask(DtSimMessage* msg);
486 
487 
492  virtual void processSetThresholds(DtSimMessage* msg);
493 
495  virtual void processDeleteDynamicTerrainServer(DtSimMessage*);
496 
501  virtual void processEntityAddedCallback(DtReflectedExtEntity* entity);
502  virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
503 
506  virtual void processEntityRemovedCallback(DtReflectedExtEntity* entity);
507  virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
508 
509  virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
510  virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
511  virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
512  DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
513 
514  virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
515  virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
516  virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
517  DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
518 
519  typedef std::list<DtReflectedActiveSonar*> ReflectedActiveSonars;
520  virtual ReflectedActiveSonars findActiveSonarsForHostEntity(
521  const DtVrfObject* host) const;
522 
523  virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
524  virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
525  virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
526  DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
527 
528  virtual bool hasEnabledActiveSonar(const DtVrfObject* host) const;
529 
530  virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(const DtVrfObject* host) const;
531 
532  virtual DtReflectedEmitterSystemManager* reflectedEmitterSystemManager();
533 
535  virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
536 
537  virtual void processEnvProcessAddedCallback(
538  DtReflectedEnvironmentProcess* envProcess);
539  virtual void processEnvProcessRemovedCallback(
540  DtReflectedEnvironmentProcess* envProcess);
541  virtual bool processEnvProcessDiscoveryCriteria(
542  DtReflectedEnvironmentProcess* envProcess);
543 
546  virtual void removeObjectSubordinates(DtVrfObject* object, bool andRemoveFromOrbat);
547 
550  virtual void queueObjectForRemoval(const DtEntityIdentifier& key, bool andRemoveFromOrbat = false);
551  virtual void queueObjectForRemoval(const DtUUID& key, bool andRemoveFromOrbat = false);
552 
554  virtual void removeObjectsQueuedForRemoval();
555 
564  virtual void tick();
565 
567  virtual DtVrfObject* createAndInitVrfObject(
568  DtIfCreateVrfObject* creationInfo);
569 
570  virtual DtVrfObject* createAndInitVrfObject(
571  DtIfAggregateAs* aggInfo);
572 
574  virtual DtVrfObject* createAndInitVrfObject(
575  DtReflectedEntity* entity);
576 
577  virtual DtVrfObject* createAndInitVrfObject(
578  DtReflectedAggregate* aggregate,
579  int superType = DtObjectTypeAggregate);
580 
581  virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
582 
592  virtual DtVrfObject* createAndInitVrfObject(
593  const DtObjectType& objectType,
594  bool publishLocalObject = true,
595  const DtString& objectName = DtString::nullString(),
596  const DtString& objectLabel = DtString::nullString(),
597  DtForceType forceType = DtForceOther,
598  const DtList* vertices = 0,
599  const DtTaitBryan* orientation = 0,
600  bool projection = false,
601  bool closedFigure = false,
602  const DtAppearance& appearance = DtAppearance::nullAppearance(),
603  const DtString& readerWriterName = DtString::nullString(),
604  DtReaderWriterRegistry* parentRegistry = 0,
605  bool createSubObjects = false,
606  DtVrfObjectUserInitFcn userInit = 0,
607  void* userInitData = 0,
608  bool organize = true,
609  const DtString& startingFormation = DtDefaultFormationString,
610  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
612  unsigned long requestId = 0,
613  const DtString& overlayParent = "",
614  const DtUUID& uuid = DtUUID::nullUUID(),
615  bool addToOrbat = false);
616 
624  virtual DtVrfObject* createAndInitVrfObject(
625  const DtObjectType& objectType,
626  bool publishLocalObject = true,
627  const DtString& objectName = DtString::nullString(),
628  const DtString& objectLabel = DtString::nullString(),
629  DtForceType forceType = DtForceOther,
630  const DtVector& position = DtVector::zero(),
631  const DtTaitBryan* orientation = 0,
632  bool projection = false,
633  bool closedFigure = false,
634  const DtAppearance& appearance = DtAppearance::nullAppearance(),
635  const DtString& readerWriterName = DtString::nullString(),
636  DtReaderWriterRegistry* parentRegistry = 0,
637  bool createSubObjects = false,
638  DtVrfObjectUserInitFcn userInitFcn = 0,
639  void* userInitData = 0,
640  bool organize = true,
641  const DtString& startingFormation = DtDefaultFormationString,
642  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
644  unsigned long requestId = 0, const DtString& overlayParent = "",
645  const DtUUID& startingUUID = DtUUID::nullUUID(),
646  bool addToOrbat = false);
647 
655  virtual void createSubObjectsFromParameters(DtVrfObject* parent,
656  bool publishSubobjects, unsigned long requestId, const DtString& overlayParent, bool addToOrbat);
657 
664  virtual DtVrfObject* createSubObjectFromParameterEntry(
665  const DtVrfSubObjectParameterEntry& entry, const DtVector& positionOffsetFromParent,
666  const DtVrfObject& parent,
667  const DtString& formationName,
668  bool publishSubObject, unsigned long requestId = 0, const DtString& overlayParent = "",
669  const DtString& markingText = "", const DtUUID& uuid = DtUUID::nullUUID(),
670  bool addToOrbat = true);
671 
673  virtual bool readOrderOfBattleFile(const DtFilename & filename);
674  virtual bool readOrderOfBattleFile(const std::vector<std::string*>& oob);
675 
677  virtual bool readOrderOfBattleFile(DtlInputStream*);
678  virtual bool readOrderOfBattleFileFromZipFile(const DtFilename& zipFile, const DtString & filename);
679  virtual bool writeOrderOfBattleFile(const DtString & filename);
681  virtual bool writeOrderOfBattleFile(std::string& stream, int& numberOfLuaScripts);
682  virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams, int& numberOfLuaScripts);
683 
686  virtual bool writeSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags,
687  boost::unordered_set<DtUUID>& uuidsSaved);
688 
690  virtual void preallocateLuaScriptHandles(int);
691 
695  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags, DtForceType force,
696  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
697  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
698  const DtFilename& scenarioZipFile, const DtString& filename, int flags, DtForceType force,
699  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
700  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(int flags, DtForceType force, DtlObjPtr& args);
701  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream, int flags, DtForceType force,
702  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
703 
707  virtual bool objectShouldBeSavedToOrderOfBattle(
708  const DtVrfObject* vrfObject) const;
709  virtual bool objectShouldBeSavedToSimulationObjectGroup(
710  const DtVrfObject* vrfObject) const;
711 
712  virtual DtVrfObject* createObjectFromMemoryBuffer(const std::string& buffer);
713 
714  virtual DtlObjPtr getData(DtlObjPtr args,
715  const DtReaderWriter::SearchPaths& searchPaths,
716  const DtVariableBindingsList& variableBindings);
717 
720  static void tickCallback(void* args);
721 
725  virtual void addVrfObjectAboutToBeAddedCallback(
726  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
727  const DtObjectType& filter = DtObjectType::anyType(),
728  bool invertFilter = false);
729 
733  virtual void addVrfObjectAddedCallback(
734  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
735  const DtObjectType& filter = DtObjectType::anyType(),
736  bool invertFilter = false);
737 
741  virtual void addVrfObjectAboutToBeLoadedCallback(
742  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
743  const DtObjectType& filter = DtObjectType::anyType(),
744  bool invertFilter = false);
745 
750  virtual void addVrfObjectAboutToBeRemovedCallback(
751  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
752  const DtObjectType& filter = DtObjectType::anyType(),
753  bool invertFilter = false);
754 
757  virtual void removeVrfObjectAboutToBeAddedCallback(
758  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
759  const DtObjectType& filter = DtObjectType::anyType(),
760  bool invertFilter = false);
761 
764  virtual void removeVrfObjectAboutToBeLoadedCallback(
765  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
766  const DtObjectType& filter = DtObjectType::anyType(),
767  bool invertFilter = false);
768 
771  virtual void removeVrfObjectAddedCallback(
772  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
773  const DtObjectType& filter = DtObjectType::anyType(),
774  bool invertFilter = false);
775 
778  virtual void removeVrfObjectAboutToBeRemovedCallback(
779  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
780  const DtObjectType& filter = DtObjectType::anyType(),
781  bool invertFilter = false);
782 
785  virtual void addObjectManagerAboutToRemoveAllCallback(
786  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
787 
790  virtual void removeObjectManagerAboutToRemoveAllCallback(
791  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
792 
794  virtual void addOrganizationManagerReadyCallback(
795  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
796 
798  virtual void removeOrganizationManagerReadyCallback(
799  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
800 
802  virtual void enableAutoReorganization();
803  virtual void disableAutoReorganization();
805  virtual bool autoReorganizeEnabled() const;
806 
808  virtual DtEntityIdentifier mapUUIDToEntityIdentifier(const DtUUID&) const;
809  virtual DtGlobalObjectDesignator mapUUIDToGlobalId(const DtUUID&) const;
810  virtual DtUUID mapGlobalIdToUUID(const DtGlobalObjectDesignator&) const;
811 
815  virtual bool objectNameExists(const DtString&) const;
816 
818  virtual DtSharedVrfObjectReference lookupTopLevelVrfObject(DtForceType forceType);
819 
821  virtual DtString nextNameWithPrefix(const DtObjectType & objectType,
822  const DtString& potentialPrefix);
823 
826  virtual DtString nextNameWithPrefix(int maxLength,
827  const DtString& potentialPrefix);
828 
830  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
833  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
834  const DtString& name);
836  virtual DtString topLevelName(DtForceType forceType);
837 
845  virtual DtString nextName(const DtObjectType& objectType);
847  virtual DtString nextUnorganizedName();
850  virtual DtString uniquifyName(const DtString& name, const DtObjectType& objectType);
851 
855  virtual unsigned int maxNameLengthForType(const DtObjectType& objectType);
856 
859  virtual DtReflectedObject* lookupReflectedObject(
860  const DtGlobalObjectDesignator& globalId) const;
861 
863  virtual void rediscoverObjects(const std::set<DtGlobalObjectDesignator>& ignore =
864  std::set<DtGlobalObjectDesignator>());
865 
868  virtual void requestUpdatesForRemoteNonVrfObjects() const;
869 
872  virtual void objectNameChanged(DtVrfObject*, const DtString& oldName,
873  const DtString& newName);
874 
877  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
878 
880 
881  virtual void addObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
882  virtual void removeObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
884 
888 
889  virtual void addObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
890  virtual void removeObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
892 
909  virtual DtVrfObject* aggregateAs(
910  const DtObjectType& aggregateType,
911  DtForceType force,
912  const DtVector& dbPosition,
913  DtReal heading,
914  const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
915  const DtString& aggregateName = DtString::nullString(),
916  bool addToOrbat = true);
917 
919  virtual double timeOfDay() const;
920 
922  virtual double dateAndTimeOfDay() const;
923 
928  virtual void setSimulationDateTimeBasedOnLocation(const DtVector& geocentricLocation, int timeOfDay);
929 
933  virtual bool addSubordinatesToAggregate(DtVrfObject* object,
934  const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
935 
941  static void addSubordinatesToAggregateCompleteCallback(void* usr);
942 
943  virtual DtOrganizationManager* organizationManager();
944  virtual const DtOrganizationManager* organizationManager() const;
945 
946  virtual DtOrbatManager* orbatManager();
947  virtual const DtOrbatManager* orbatManager() const;
948 
951  virtual DtDiGuyCharacterDataManager * diGuyCharacterManager();
952  virtual const DtDiGuyCharacterDataManager * diGuyCharacterManager() const;
953 
955  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
956 
958  virtual unsigned objectCount() const;
959 
962  virtual DtSharedVrfObjectReference lookupVrfObjectByEntityIdentifier(const DtEntityIdentifier& key) const;
963 
966  virtual DtSharedVrfObjectReference lookupVrfObjectByGlobalId(const DtGlobalObjectDesignator& globalId) const;
967 
982  virtual DtSharedVrfObjectReference lookupVrfObjectByUUID(const DtUUID&) const;
983 
986  virtual bool uuidExists(const DtUUID&) const;
987 
990  virtual bool addNameAlias(const DtString& aliasName, DtVrfObject* object);
991 
992  virtual void removeNameAlias(const DtString& alias);
993 
998  virtual DtSharedVrfObjectReference lookupVrfObjectByMarkingText(const DtString&) const;
999 
1001  virtual bool hasObjectType(const DtObjectType&) const;
1002 
1005  virtual bool markingTextExists(const DtString&) const;
1006 
1008  virtual const DtSimulationAddress& simulationAddress() const;
1009 
1015  const DtSimObjectMapIterator& iterator() const;
1016 
1018  virtual bool createSimObjectList();
1019 
1022  virtual const DtSimObjectMap& objectMap() const;
1023 
1027  virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
1028  virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1029 
1034  static void entityAddedCallback(DtReflectedExtEntity* entity, void* userData);
1035 
1040  static void entityRemovedCallback(DtReflectedExtEntity* entity,
1041  void* userData);
1042 
1047  static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
1048  void* userData);
1049 
1054  static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
1055  void* userData);
1056 
1061  static void entityChangedCallback(DtReflectedExtEntity* entity,
1062  void* userData);
1063 
1068  static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
1069  void* userData);
1070 
1072  virtual void processEntityChanged(DtReflectedExtEntity* entity);
1073 
1079  static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
1080  void* userData);
1081 
1087  static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
1088  void* userData);
1089 
1095  virtual bool processEntityDiscoveryCriteria(
1096  DtReflectedEntity* entity);
1097 
1103  virtual bool processAggregateDiscoveryCriteria(
1104  DtReflectedAggregate* aggregate);
1105 
1108  virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(const DtGlobalObjectDesignator&
1109  tgtGlobalId);
1110 
1112  virtual bool hostingDynamicTerrainServer() const;
1113 
1117  virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(const int code);
1118 
1122  virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1123 
1124  virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1125  virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1126  virtual void createRemoteEmitterSystemList(DtExerciseConn* exConn);
1127 
1128 #if DtHLA
1129 
1130 
1131  virtual void createRemoteExtendedAttributesList(DtExerciseConn* exConn);
1132 #endif
1133 
1134  DtReflectedDesignatorList* reflectedDesignatorList() const;
1135 
1136  DtReflectedActiveSonarList* reflectedActiveSonarList() const;
1137  DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList() const;
1138 
1140  virtual DtVrfParameterDb* objectParametersDB() const;
1141 
1144  virtual void addSimObjectAboutToBeAddedCallback(
1146  virtual void addSimObjectAddedCallback(
1148  virtual void addSimObjectAboutToBeRemovedCallback(
1150  virtual void addSimObjectAboutToBeLoadedCallback(
1152 
1154  virtual void addSimObjectQueuedForRemovalCallback(
1156  virtual void removeSimObjectQueuedForRemovalCallback(
1158  virtual void invokeSimObjectQueuedForRemovalCallbacks(
1159  DtVrfObject* object);
1160 
1164  virtual void addSimObjectAboutToBeAddedCallback(
1165  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1166  const DtObjectType& filter = DtObjectType::anyType(),
1167  bool invertFilter = false);
1168 
1172  virtual void addSimObjectAddedCallback(
1173  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1174  const DtObjectType& filter = DtObjectType::anyType(),
1175  bool invertFilter = false);
1176 
1180  virtual void addSimObjectAboutToBeRemovedCallback(
1181  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1182  const DtObjectType& filter = DtObjectType::anyType(),
1183  bool invertFilter = false);
1184 
1188  virtual void addSimObjectAboutToBeLoadedCallback(
1189  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1190  const DtObjectType& filter = DtObjectType::anyType(),
1191  bool invertFilter = false);
1192 
1195  virtual void removeSimObjectAboutToBeAddedCallback(
1196  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1197  const DtObjectType& filter = DtObjectType::anyType(),
1198  bool invertFilter = false);
1199 
1200  virtual void removeSimObjectAboutToBeRemovedCallback(
1201  const DtSimObjectListActivityCallbackInfo& cbInfo);
1202 
1205  virtual void removeSimObjectAddedCallback(
1206  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1207  const DtObjectType& filter = DtObjectType::anyType(),
1208  bool invertFilter = false);
1209 
1212  virtual void removeSimObjectAboutToBeLoadedCallback(
1213  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1214  const DtObjectType& filter = DtObjectType::anyType(),
1215  bool invertFilter = false);
1216 
1219  virtual void removeSimObjectAboutToBeAddedCallback(
1220  const DtSimObjectListActivityCallbackInfo& cbInfo);
1221  virtual void removeSimObjectAddedCallback(
1222  const DtSimObjectListActivityCallbackInfo& cbInfo);
1223  virtual void removeSimObjectAboutToBeLoadedCallback(
1224  const DtSimObjectListActivityCallbackInfo& cbInfo);
1225 
1228  virtual void removeSimObjectAboutToBeRemovedCallback(
1229  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1230  const DtObjectType& filter = DtObjectType::anyType(),
1231  bool invertFilter = false);
1232 
1236  virtual void invokeSimObjectAboutToBeAddedCallbacks(
1237  DtVrfObject* simObject) const;
1238 
1242  virtual void invokeSimObjectAddedCallbacks(
1243  DtVrfObject* simObject) const;
1244 
1248  virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1249  DtVrfObject* simObject) const;
1250 
1254  virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1255  DtVrfObject* simObject) const;
1256 
1258  virtual DtReflectedExtEntityList* reflectedEntityList() const;
1259 
1261  virtual DtReflectedExtAggregateList* reflectedAggregateList() const;
1262 
1266  virtual void setSimObjectType(const DtString& type);
1267  virtual const DtString& simObjectType() const;
1269 
1271  virtual void setOrbatEnabled(bool);
1272  virtual bool orbatEnabled() const;
1273 
1275  virtual void setOrderOfBattleObjectsAddedToOrbatByDefault(bool b);
1276  virtual bool orderOfBattleObjectsAddedToOrbatByDefault() const;
1277 
1279  virtual void closingScenario();
1280 
1283  virtual bool addUUIDMappingForObject(DtVrfObject* vrfObject);
1284 
1286  virtual void removeUUIDMappingForObject(DtVrfObject* vrfObject);
1287 
1289  virtual DtEntityIdentifier nextId(DtVrfObject* o = NULL);
1290 
1295  virtual DtString generateUniqueName(int maxLength, const DtString&
1296  root = "Object") const;
1297 
1299  virtual void setRollUpRules(const DtAssembliesReaderWriter::RwRootNode&);
1300 
1302  virtual const DtAssembliesReaderWriter::RwRootNode& rollUpRules() const;
1303 
1305  virtual void setActivities(const DtRwActivities&);
1306 
1308  virtual const DtRwActivities& activities() const;
1309 
1312  virtual bool isLocal(const DtBaseEntityStateRepository& stateRep);
1313 
1317  static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1318 
1323  virtual void objectsEmbarkedOn(DtVrfObjectStateRepository* vrfObjSR, std::vector<DtSharedVrfObjectReference>& list,
1324  bool includePseudoAggregates = true) const;
1325 
1330  static void designatorAddedCallback(DtReflectedDesignator * des,
1331  void * userData);
1332 
1337  static void designatorRemovedCallback(DtReflectedDesignator * des,
1338  void * userData);
1339 
1344  static void designatorChangedCallback(DtReflectedDesignator * des,
1345  void * userData);
1346 
1352  static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1353  void * userData);
1354 
1355  static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1356  void* userData);
1357  static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1358  void* userData);
1359  static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1360  void* userData);
1361  static DtBoolean activeSonarDiscoveryCriteriaCallback(
1362  DtReflectedObject* activeSonar, void* userData);
1363 
1364  static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1365  void* userData);
1366  static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1367  void* userData);
1368  static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1369  void* userData);
1370  static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1371  DtReflectedObject* propNoise, void* userData);
1372 
1375  virtual bool canSimulate() const;
1376 
1379  virtual void setCanSimulate(bool);
1380 
1382  virtual void printReflectedObjectCounts() const;
1383 
1386  virtual void addStealthType(const DtEntityType&);
1387  virtual void removeStealthType(const DtEntityType&);
1388  virtual bool isStealthType(const DtEntityType&) const;
1389  std::vector<DtEntityType>& stealthTypes() { return myStealthTypes; };
1390  const std::vector<DtEntityType>& stealthTypes() const { return myStealthTypes; };
1391 
1393  virtual std::set<DtVrfObject*> objectsOnOverlayLayer(const DtString&) const;
1394 
1396  static void vrfObjectDataChangedCallback(DtVrfObject*, int, void*);
1397  virtual void processVrfObjectDataChanged(DtVrfObject*, int);
1398 
1400  virtual void clearObjectsAwaitingDiscovery();
1401 
1402 protected:
1404  virtual void processOrganizationManagerReady(const DtOrganizationManagerReadyCallbackInfo&);
1405  virtual void invokeOrganizationManagerReadyCallbacks(const DtOrganizationManagerReadyCallbackInfo&);
1406 
1407 protected:
1409  virtual DtObjectType potentialRandomObjectTypeFrom(const DtObjectType& original);
1410 
1413  virtual void rediscoverNonVRFEntities();
1414 
1418  virtual void remove(DtVrfObject* simObject);
1419  virtual void remove(DtSharedVrfObjectReference simObject);
1420  virtual DtVrfObject* remove(const DtEntityIdentifier& key);
1421 
1424  virtual void invokeObjectManagerAboutToRemoveAllCallbacks() const;
1425 
1428  virtual void onQueueObjectForRemoval(DtVrfObject* vrfObject, bool andRemoveFromOrbat = false);
1429 
1430  virtual const Coordinate_System* coordinateSystem() const;
1431  virtual Coordinate_System* coordinateSystem();
1432 
1435  virtual void modifyInterfaceContentForNewObject(DtSimInterfaceContent*, DtVrfObject*, bool& isLocal) const;
1436 
1439  virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(const DtList&) const;
1440 
1442  virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(const DtList& subObjects,
1443  int& totalLeafNodes) const;
1444 
1445 protected:
1447  virtual void checkPendingNameRemoval(const DtString& markingText);
1448 
1451  virtual void removeVrfObject(const DtUUID&, bool queueDeletionOfVrfObject = false);
1452 
1454  virtual DtObjectGeometricModelsManager* createObjectModelsManager() const;
1455 
1457  virtual DtVrfEntityIdentifierFactory* createVrfEntityIdentifierFactory();
1458 
1460  virtual DtVrfObjectPlanAdministrator* createPlanAdministrator();
1461 
1462  virtual bool finalizeObjectRead(DtVrfObject*);
1463 
1464  virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1465 
1467  virtual void deleteVrfObjectsToBeDeleted();
1468 
1469 public:
1470  DtObjectGeometricModelsManager* objectModelsManager() const;
1471  DtVrfEntityIdentifierFactory* vrfEntityIdentifierFactory() const;
1472 
1473 #if DtHLA_1516
1474 
1475  DtGlobalObjectDesignator nextReservedGlobalObjectId();
1476 #endif
1477 
1478  virtual DtVrfObjectPlanAdministrator* planAdministrator();
1479 
1480  virtual DtSimInternalCommunicationManager* simInternalCommunicationManager();
1481 
1482 protected:
1484  virtual DtSimInternalCommunicationManager* createSimInternalCommunicationManager(
1485  DtSimManager* simMgr) const;
1486 
1487 protected:
1488 
1490  typedef std::pair<DtVrfObject*, DtVrfSimulationObjectGroupGeometry*> PendingObjectInformation;
1491  typedef std::vector<PendingObjectInformation> PendingObjectsInformation;
1492  typedef std::vector<PendingObjectsInformation> ObjectsAwaitingDiscovery;
1493 
1496  virtual bool addObjectsReadyForSimulation(PendingObjectsInformation&);
1497 
1501  static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr);
1502  static void modifyVrfOverlayCallback(DtSimMessage* msg, void* usr);
1503  static void autoReorganizeCallback(DtSimMessage* msg, void* usr);
1504  static void skipTaskCallback(DtSimMessage* msg, void* usr);
1505  static void setThresholdsCallback(DtSimMessage* msg, void* usr);
1506  static void deleteDynamicTerrainServerCallback(DtSimMessage*, void*);
1507 
1508 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1509  static void vrfObjectStateUpdateCallback(DtSimMessage* msg, void* usr);
1510 #endif
1511 
1519  static void createVrfObjectCallback(DtSimMessage* msg, void* usr);
1520  static void deleteVrfObjectCallback(DtSimMessage* msg, void* usr);
1521  static void deleteVrfObjectByIdCallback(DtSimMessage* msg, void* usr);
1522  static void vrfObjectDeletedCallback(DtSimMessage* msg, void* usr);
1523  static void orderOfBattleOpCallback(DtSimMessage* msg, void* usr);
1524  static void aggregateAsCallback(DtSimMessage* msg, void* usr);
1525 
1527  static void extendedLabelsOperationCallback(DtSimMessage* msg, void* usr);
1528  virtual void processExtendedLabelsOperation(DtSimMessage*);
1529 
1531  static void requestActivitiesCallback(DtSimMessage* msg, void* usr);
1532  virtual void processRequestActivities(DtSimMessage*);
1533 
1535  static void requestJoystickControlsCallback(DtSimMessage* msg, void* usr);
1536  virtual void processRequestJoystickControls(DtSimMessage*);
1537 
1540  virtual bool acceptRemoteEnvironmental(const DtEntityType& et) const;
1541 
1546  static void createVrfObjectPostDrainCallback(void* usr);
1547  static void deleteVrfObjectPostDrainCallback(void* usr);
1548  static void deleteVrfObjectByIdPostDrainCallback(void* usr);
1549  static void vrfObjectDeletedPostDrainCallback(void* usr);
1550  static void aggregateAsPostDrainCallback(void* usr);
1551 
1552  static void envProcessAddedCallback(
1553  DtReflectedEnvironmentProcess* envProcess, void* userData);
1554  static void envProcessRemovedCallback(
1555  DtReflectedEnvironmentProcess* envProcess, void* userData);
1556  static bool envProcessDiscoveryCriteria(
1557  DtReflectedObject* envProcess, void* userData);
1558 
1559  static void organizationManagerReadyCallback(const DtOrganizationManagerReadyCallbackInfo& info, void* usr);
1560 
1561 protected:
1562 
1565 
1568 
1571 
1577  static void postInitFromParamsCallback(DtVrfObject* vrfObject, void* usr);
1578 
1581  virtual DtCreateQueueEntry* createQueueEntryCreator(DtIfCreateVrfObject msg);
1582 
1585  virtual DtModifyQueueEntry* modifyQueueEntryCreator(DtIfModifyVrfObject msg);
1586 
1588  virtual DtOrganizationManager* createOrganizationManager();
1589 
1591  virtual DtOrbatManager* createOrbatManager();
1592 
1593 protected:
1596 
1599 
1602 
1605 
1608 
1609  DtReflectedActiveSonarList* myRemoteActiveSonarList;
1610  DtReflectedPropulsionNoiseList* myRemotePropulsionNoiseList;
1611 
1613 
1614 #if DtHLA
1615 
1617 #endif
1618 
1621 
1623  {
1625  {
1626  if (!a || !b)
1627  {
1629  return a < b;
1630  }
1631 
1632  return (a->func() < b->func() ||
1633  (a->func() == b->func() && a->usrData() < b->usrData()) ||
1634  (a->func() == b->func() && a->usrData() == b->usrData() && a->filter() < b->filter()));
1635  }
1636  };
1637 
1640 
1645 
1650 
1654  typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> AddedList;
1656  mutable tbb::spin_rw_mutex myAddedSimObjectCallbackListMutex;
1657 
1661  typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> ToBeRemovedList;
1664 
1665  mutable std::set<DtSimObjectListActivityCallbackInfo*> myRemovalCallbacksRemoved;
1666 
1669 
1674 
1675  DtExerciseConn* myExerciseConn;
1676 
1679 
1681 
1686 
1688 
1691  std::map<DtUUID, bool> myObjectsToRemoveQueue;
1692  std::map<DtString, std::map<DtUUID, bool> > myObjectsToRemoveByNameQueue;
1693 
1697 
1700  typedef DtBoost::shared_ptr<DtModifyQueueEntry> DtModifyQueueEntryPtr;
1701  typedef std::list<DtModifyQueueEntryPtr> DtVrfObjectModifyQueue;
1703 
1706 
1708 
1710 
1711  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> GlobalIdToObjectMap;
1713 
1715 
1717 
1719 
1721 
1723 
1725 
1727 
1729 
1731 
1734 
1738 
1741 
1744 
1746 
1748 
1750 
1753 
1757 
1763 
1764  typedef boost::unordered_map<DtUUID, DtSharedVrfObjectReference> UUIDToObjectMap;
1766 
1767  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> NameToObjectMap;
1770 
1771  typedef boost::unordered_map<DtVrfObject*, DtSharedVrfObjectReference> ObjectToObjectMap;
1773 
1775 
1776  //Incremented each time a callback list is invoked.
1777  //Decremented when done invoking callbacks.
1778  //Unsigned because invoke can be called from within
1779  //a callback.
1785  //@]
1786 
1787  std::vector<DtVrfObject*> myJustAdded;
1788 
1789  std::map<int, DtlObjPtr> mySortedByEntityId;
1796 
1797 #if DtHLA_1516
1798  std::set<DtGlobalObjectDesignator> myReservedGlobalIds;
1799 #endif
1800 
1801  std::vector<DtEntityType> myStealthTypes;
1802 
1803  std::vector<DtVrfObject*> myVrfObjectsToDelete;
1804 
1805 private:
1806 
1807  std::vector<DtVrfObjectManagerCallbackInfo> myAboutToRemoveAllCallbackList;
1808 
1810  mutable tbb::spin_rw_mutex myOverlayMapMutex;
1811  typedef std::map<DtString, std::set<DtVrfObject*> > OverlayMap;
1812  typedef std::map<DtVrfObject*, DtString> ObjectOverlayMap;
1813 
1816 
1819 };
1820 
1822 {
1824 }
1825 
1827 {
1829 }

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)