VR-Forces 4.6 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"
19 #include "vrfobjcore/vrfObject.h"
25 #include "vrfutil/rwActivities.h"
28 
30 #include <vlpi/appearance.h>
31 #include <vlutil/vlFilename.h>
32 #include <vlutil/vlList.h>
33 #include <vlutil/vlHashlist.h>
34 #include <vlutil/vlConfig.h>
35 #include <vlutil/vlSmartPointers.h>
37 #include <vl/fomMapper.h>
38 
40 #include <vector>
41 #include <list>
42 #include <set>
43 
44 #include <boost/unordered_map.hpp>
45 #include <boost/unordered_set.hpp>
46 #include <tbb/spin_rw_mutex.h>
47 
49 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
50 
51 class DtExerciseConn;
52 class DtReflectedObject;
53 class DtReflectedAggregate;
60 class DtVrfParameterDb;
61 class DtSimObjectSubComponentTypes;
63 class DtOrbatManager;
64 class DtVertexList;
66 class DtBaseEntityStateRepository;
68 class DtSimManager;
69 class DtVrfObjectManagerTickArguments;
71 class DtSimTickArguments;
72 class DtSimMessage;
74 class DtIfAggregateAs;
79 class DtReflectedObject;
80 class DtEchelonId;
81 class Coordinate_System;
86 class DtReflectedDesignator;
89 class DtReflectedActiveSonar;
90 class DtReflectedActiveSonarList;
91 class DtReflectedPropulsionNoise;
92 class DtReflectedPropulsionNoiseList;
93 class DtCreateQueueEntry;
94 class DtModifyQueueEntry;
96 class DtlInputStream;
98 
99 #if DtHLA
100 namespace makVrfVrlinkExtToolkit
101 {
102  class DtReflectedExtendedAttributesObjectList;
103 }
104 #endif
105 
106 
108 typedef bool (*DtSimObjectUserInitFcn)(DtVrfObject* object, void* usr);
109 
113  void* usr);
114 
116 typedef bool (*DtVrfObjectUserInitFcn)(DtVrfObject* vrfObject, void* usr);
117 
120 typedef void (*DtVrfObjectManagerCallbackFcn)(const DtVrfObjectManager& objectManager,
121  void* usr);
122 
126 const int DtSimMaxForceTypes = 256;
127 
130 {
132  void* myUserData;
133 };
134 
137 {
143 
146  unsigned int importFlags;
150 };
151 
154 {
158 };
159 
162 {
164 
168 };
169 
172 {
174  DtEntityIdentifier* myEntityIdentifier;
175 };
176 
182 
184 typedef enum
185 {
190 
202 
204 {
205 public:
207 
211  typedef enum
212  {
213  DtUseParameterDatabaseAggregateState = 0,
215  DtCreateDisaggregatedEntity
216  } DtAggregateCreationMode;
217 
218 public:
219 
221  DtVrfObjectManager(DtSimManager* simManager, int entityAdvisory = 100);
222 
228  virtual ~DtVrfObjectManager();
231 
233  virtual void clearRemoteComponentAttachmentSystem();
234 
240  virtual bool reuseEntityIdentifiersOnScenarioLoad() const;
241  virtual void setReuseEntityIdentifiersOnScenarioLoad(bool);
242 
245  virtual DtEntityIdentifier nextEntityIdentifier(DtVrfObject*, const DtEntityIdentifier&);
246  virtual void addVrfObjectAboutToBePublishedCallback(
247  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
248  virtual void removeVrfObjectAboutToBePublishedCallback(
249  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
250 
253  virtual void createRemoteComponentAttachmentManager();
254 
256  virtual bool isRemoteComponentAttachment(const DtUUID&) const;
257 
259  virtual bool initializeRemoteComponentAttachmentSystem(const DtFilename& fromFile);
260 
262  DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager();
263  const DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager() const;
265 
268  virtual bool create();
269 
272  virtual bool init();
273 
275  virtual bool createDIGuyCharacterManager(const DtFilename & diGuyAnimationsFile);
276 
286  virtual bool add(DtVrfObject* simObject);
287 
289  virtual void completeObjectAddition(DtVrfObject* simObject);
290 
292  virtual bool loadingScenarioInformation() const;
293 
294 private:
297  using DtRwList::add;
298  using DtRwList::remove;
299 
300 public:
302  virtual void setParameterDatabase(DtVrfParameterDb* parameterDatabase);
303  virtual DtVrfParameterDb* parameterDatabase();
304 
306  virtual bool registerExtendedProperties();
307 
309  virtual DtManagedObjectListConstPtr getList(const DtVrfObjectPredicate& predicate,
310  bool reevaluateFlag = false, DtTime evaluationPeriod = 0);
311 
313  virtual void setImportingScenario(bool);
314  virtual bool importingScenario() const;
315 
317  virtual void setImportScenarioData(const DtImportScenarioData&);
318  virtual const DtImportScenarioData& importScenarioData() const;
319 
320  virtual const DtVrfObjectFilterIterator& vrfIterator(
321  const DtObjectType& filter = DtObjectType::anyType(),
322  bool invertFilter = false) const;
323 
324  virtual const DtVrfObjectFilterIterator& vrfIterator(
325  const DtVrfObjectPredicate& predicate) const;
326 
329  virtual const DtVrfObjectFilterIterator& vrfIterator(DtFilterFcn filter,
330  bool invertFilter = false, void* usrData = 0)const;
331 
337  virtual void removeAndDelete(const DtUUID& objectName, bool andRemoveFromOrbat);
338  virtual void removeAndDelete(DtSharedVrfObjectReference simObject, bool andRemoveFromOrbat);
339  virtual void removeAndDelete(const DtEntityIdentifier& key, bool andRemoveFromOrbat);
340  virtual void removeAndDelete(DtVrfObject* object, bool andRemoveFromOrbat);
341 
343  std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(bool onlyVrfSimulated = true) const;
344 
346  virtual void removeAndDeleteAllLocals(bool andDeleteFromOrbat = false);
347 
350  virtual void removeAndDeleteAll(bool andDeleteFromOrbat = false);
351 
356  virtual void setExerciseConnection(DtExerciseConn* connection);
357  virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
358 
361  virtual void setPublishZeroVelocityWhenPaused(bool);
362  virtual bool publishZeroVelocityWhenPaused() const;
363 
367  virtual void setSetDeadReckoningAlgorithmToStaticOnPause(bool);
368  virtual bool setDeadReckoningAlgorithmToStaticOnPause() const;
369 
371  virtual void setTaskVisualizationPublicationMode(DtTaskVisualizationPublicationMode mode);
372  virtual DtTaskVisualizationPublicationMode taskVisualizationPublicationMode() const;
373 
377  virtual bool hasPermissionToDisplayTaskVisualizations(const DtUUID& uuid);
378 
380  virtual void setMaxObjectsWithTaskVisualizations(unsigned max);
381  virtual unsigned maxObjectsWithTaskVisualizations() const;
382 
385  virtual void setUseDrawControlForTaskVisualizations(bool);
386  virtual bool useDrawControlForTaskVisualizations() const;
387 
389  virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList() const;
390 
393  virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
394 
396  virtual bool objectInRemovalQueue(const DtUUID& uuid);
397 
404  virtual void registerInterfaceCallbacks();
405 
407  virtual const DtSimManager* simManager() const;
409  virtual DtSimManager* simManager();
410 
420  virtual void processCreateVrfObject(DtSimMessage* msg);
421 
428  virtual void processCreateVrfObject(DtIfCreateVrfObject ifCreateVrfObject);
429 
437  virtual void processModifyVrfObject(DtSimMessage* msg);
438 
445  virtual void processModifyVrfObject(DtIfModifyVrfObject modObj);
446 
449  virtual void processModifyVrfOverlay(DtSimMessage* msg);
452  virtual void processDeleteVrfObject(DtSimMessage* msg);
455  virtual void processDeleteVrfObjectById(DtSimMessage* msg);
458  virtual void processVrfObjectDeleted(DtSimMessage* msg);
461  virtual void processAutoReorganize(DtSimMessage* msg);
464  virtual void processAggregateAs(DtSimMessage* msg);
467  virtual void processSkipTask(DtSimMessage* msg);
468 
469 
474  virtual void processSetThresholds(DtSimMessage* msg);
475 
477  virtual void processDeleteDynamicTerrainServer(DtSimMessage*);
478 
483  virtual void processEntityAddedCallback(DtReflectedExtEntity* entity);
484  virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
485 
488  virtual void processEntityRemovedCallback(DtReflectedExtEntity* entity);
489  virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
490 
491  virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
492  virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
493  virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
494  DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
495 
496  virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
497  virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
498  virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
499  DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
500 
501  typedef std::list<DtReflectedActiveSonar*> ReflectedActiveSonars;
502  virtual ReflectedActiveSonars findActiveSonarsForHostEntity(
503  const DtVrfObject* host) const;
504 
505  virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
506  virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
507  virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
508  DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
509 
510  virtual bool hasEnabledActiveSonar(const DtVrfObject* host) const;
511 
512  virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(const DtVrfObject* host) const;
513 
514  virtual DtReflectedEmitterSystemManager* reflectedEmitterSystemManager();
515 
517  virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
518 
519  virtual void processEnvProcessAddedCallback(
520  DtReflectedEnvironmentProcess* envProcess);
521  virtual void processEnvProcessRemovedCallback(
522  DtReflectedEnvironmentProcess* envProcess);
523  virtual bool processEnvProcessDiscoveryCriteria(
524  DtReflectedEnvironmentProcess* envProcess);
525 
528  virtual void removeObjectSubordinates(DtVrfObject* object, bool andRemoveFromOrbat);
529 
532  virtual void queueObjectForRemoval(const DtEntityIdentifier& key, bool andRemoveFromOrbat = false);
533  virtual void queueObjectForRemoval(const DtUUID& key, bool andRemoveFromOrbat = false);
534 
536  virtual void removeObjectsQueuedForRemoval();
537 
546  virtual void tick();
547 
549  virtual DtVrfObject* createAndInitVrfObject(
550  DtIfCreateVrfObject* creationInfo);
551 
552  virtual DtVrfObject* createAndInitVrfObject(
553  DtIfAggregateAs* aggInfo);
554 
556  virtual DtVrfObject* createAndInitVrfObject(
557  DtReflectedEntity* entity);
558 
559  virtual DtVrfObject* createAndInitVrfObject(
560  DtReflectedAggregate* aggregate,
561  int superType = DtObjectTypeAggregate);
562 
563  virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
564 
574  virtual DtVrfObject* createAndInitVrfObject(
575  const DtObjectType& objectType,
576  bool publishLocalObject = true,
577  const DtString& objectName = DtString::nullString(),
578  const DtString& objectLabel = DtString::nullString(),
579  DtForceType forceType = DtForceOther,
580  const DtList* vertices = 0,
581  const DtTaitBryan* orientation = 0,
582  bool projection = false,
583  bool closedFigure = false,
584  const DtAppearance& appearance = DtAppearance::nullAppearance(),
585  const DtString& readerWriterName = DtString::nullString(),
586  DtReaderWriterRegistry* parentRegistry = 0,
587  bool createSubObjects = false,
588  DtVrfObjectUserInitFcn userInit = 0,
589  void* userInitData = 0,
590  bool organize = true,
591  const DtString& startingFormation = DtDefaultFormationString,
592  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
594  unsigned long requestId = 0,
595  const DtString& overlayParent = "",
596  const DtUUID& uuid = DtUUID::nullUUID(),
597  bool addToOrbat = false);
598 
606  virtual DtVrfObject* createAndInitVrfObject(
607  const DtObjectType& objectType,
608  bool publishLocalObject = true,
609  const DtString& objectName = DtString::nullString(),
610  const DtString& objectLabel = DtString::nullString(),
611  DtForceType forceType = DtForceOther,
612  const DtVector& position = DtVector::zero(),
613  const DtTaitBryan* orientation = 0,
614  bool projection = false,
615  bool closedFigure = false,
616  const DtAppearance& appearance = DtAppearance::nullAppearance(),
617  const DtString& readerWriterName = DtString::nullString(),
618  DtReaderWriterRegistry* parentRegistry = 0,
619  bool createSubObjects = false,
620  DtVrfObjectUserInitFcn userInitFcn = 0,
621  void* userInitData = 0,
622  bool organize = true,
623  const DtString& startingFormation = DtDefaultFormationString,
624  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
626  unsigned long requestId = 0, const DtString& overlayParent = "",
627  const DtUUID& startingUUID = DtUUID::nullUUID(),
628  bool addToOrbat = false);
629 
637  virtual void createSubObjectsFromParameters(DtVrfObject* parent,
638  bool publishSubobjects, unsigned long requestId, const DtString& overlayParent, bool addToOrbat);
639 
646  virtual DtVrfObject* createSubObjectFromParameterEntry(
647  const DtVrfSubObjectParameterEntry& entry, const DtVector& positionOffsetFromParent,
648  const DtVrfObject& parent,
649  const DtString& formationName,
650  bool publishSubObject, unsigned long requestId = 0, const DtString& overlayParent = "",
651  const DtString& markingText = "", const DtUUID& uuid = DtUUID::nullUUID(),
652  bool addToOrbat = true);
653 
655  virtual bool readOrderOfBattleFile(const DtFilename & filename);
656  virtual bool readOrderOfBattleFile(const std::vector<std::string*>& oob);
657 
659  virtual bool readOrderOfBattleFile(DtlInputStream*);
660  virtual bool readOrderOfBattleFileFromZipFile(const DtFilename& zipFile, const DtString & filename);
661  virtual bool writeOrderOfBattleFile(const DtString & filename);
663  virtual bool writeOrderOfBattleFile(std::string& stream, int& numberOfLuaScripts);
664  virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams, int& numberOfLuaScripts);
665 
668  virtual bool writeSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags,
669  boost::unordered_set<DtUUID>& uuidsSaved);
670 
672  virtual void preallocateLuaScriptHandles(int);
673 
677  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags, DtForceType force,
678  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
679  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
680  const DtFilename& scenarioZipFile, const DtString& filename, int flags, DtForceType force,
681  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
682  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(int flags, DtForceType force, DtlObjPtr& args);
683  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream, int flags, DtForceType force,
684  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
685 
689  virtual bool objectShouldBeSavedToOrderOfBattle(
690  const DtVrfObject* vrfObject) const;
691  virtual bool objectShouldBeSavedToSimulationObjectGroup(
692  const DtVrfObject* vrfObject) const;
693 
694  virtual DtVrfObject* createObjectFromMemoryBuffer(const std::string& buffer);
695 
696  virtual DtlObjPtr getData(DtlObjPtr args,
697  const DtReaderWriter::SearchPaths& searchPaths,
698  const DtVariableBindingsList& variableBindings);
699 
702  static void tickCallback(void* args);
703 
707  virtual void addVrfObjectAboutToBeAddedCallback(
708  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
709  const DtObjectType& filter = DtObjectType::anyType(),
710  bool invertFilter = false);
711 
715  virtual void addVrfObjectAddedCallback(
716  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
717  const DtObjectType& filter = DtObjectType::anyType(),
718  bool invertFilter = false);
719 
723  virtual void addVrfObjectAboutToBeLoadedCallback(
724  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
725  const DtObjectType& filter = DtObjectType::anyType(),
726  bool invertFilter = false);
727 
732  virtual void addVrfObjectAboutToBeRemovedCallback(
733  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
734  const DtObjectType& filter = DtObjectType::anyType(),
735  bool invertFilter = false);
736 
739  virtual void removeVrfObjectAboutToBeAddedCallback(
740  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
741  const DtObjectType& filter = DtObjectType::anyType(),
742  bool invertFilter = false);
743 
746  virtual void removeVrfObjectAboutToBeLoadedCallback(
747  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
748  const DtObjectType& filter = DtObjectType::anyType(),
749  bool invertFilter = false);
750 
753  virtual void removeVrfObjectAddedCallback(
754  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
755  const DtObjectType& filter = DtObjectType::anyType(),
756  bool invertFilter = false);
757 
760  virtual void removeVrfObjectAboutToBeRemovedCallback(
761  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
762  const DtObjectType& filter = DtObjectType::anyType(),
763  bool invertFilter = false);
764 
767  virtual void addObjectManagerAboutToRemoveAllCallback(
768  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
769 
772  virtual void removeObjectManagerAboutToRemoveAllCallback(
773  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
774 
776  virtual void addOrganizationManagerReadyCallback(
777  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
778 
780  virtual void removeOrganizationManagerReadyCallback(
781  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
782 
784  virtual void enableAutoReorganization();
785  virtual void disableAutoReorganization();
787  virtual bool autoReorganizeEnabled() const;
788 
790  virtual DtEntityIdentifier mapUUIDToEntityIdentifier(const DtUUID&) const;
791  virtual DtGlobalObjectDesignator mapUUIDToGlobalId(const DtUUID&) const;
792  virtual DtUUID mapGlobalIdToUUID(const DtGlobalObjectDesignator&) const;
793 
797  virtual bool objectNameExists(const DtString&) const;
798 
800  virtual DtSharedVrfObjectReference lookupTopLevelVrfObject(DtForceType forceType);
801 
803  virtual DtString nextNameWithPrefix(const DtObjectType & objectType,
804  const DtString& potentialPrefix);
805 
808  virtual DtString nextNameWithPrefix(int maxLength,
809  const DtString& potentialPrefix);
810 
812  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
815  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
816  const DtString& name);
818  virtual DtString topLevelName(DtForceType forceType);
819 
827  virtual DtString nextName(const DtObjectType& objectType);
829  virtual DtString nextUnorganizedName();
832  virtual DtString uniquifyName(const DtString& name, const DtObjectType& objectType);
833 
837  virtual unsigned int maxNameLengthForType(const DtObjectType& objectType);
838 
841  virtual DtReflectedObject* lookupReflectedObject(
842  const DtGlobalObjectDesignator& globalId) const;
843 
845  virtual void rediscoverObjects(const std::set<DtGlobalObjectDesignator>& ignore =
846  std::set<DtGlobalObjectDesignator>());
847 
850  virtual void requestUpdatesForRemoteNonVrfObjects() const;
851 
854  virtual void objectNameChanged(DtVrfObject*, const DtString& oldName,
855  const DtString& newName);
856 
859  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
860 
862 
863  virtual void addObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
864  virtual void removeObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
866 
870 
871  virtual void addObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
872  virtual void removeObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
874 
891  virtual DtVrfObject* aggregateAs(
892  const DtObjectType& aggregateType,
893  DtForceType force,
894  const DtVector& dbPosition,
895  DtReal heading,
896  const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
897  const DtString& aggregateName = DtString::nullString(),
898  bool addToOrbat = true);
899 
901  virtual double timeOfDay() const;
902 
904  virtual double dateAndTimeOfDay() const;
905 
910  virtual void setSimulationDateTimeBasedOnLocation(const DtVector& geocentricLocation, int timeOfDay);
911 
915  virtual bool addSubordinatesToAggregate(DtVrfObject* object,
916  const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
917 
923  static void addSubordinatesToAggregateCompleteCallback(void* usr);
924 
925  virtual DtOrganizationManager* organizationManager();
926  virtual const DtOrganizationManager* organizationManager() const;
927 
928  virtual DtOrbatManager* orbatManager();
929  virtual const DtOrbatManager* orbatManager() const;
930 
933  virtual DtDiGuyCharacterDataManager * diGuyCharacterManager();
934  virtual const DtDiGuyCharacterDataManager * diGuyCharacterManager() const;
935 
937  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
938 
940  virtual unsigned objectCount() const;
941 
944  virtual DtSharedVrfObjectReference lookupVrfObjectByEntityIdentifier(const DtEntityIdentifier& key) const;
945 
948  virtual DtSharedVrfObjectReference lookupVrfObjectByGlobalId(const DtGlobalObjectDesignator& globalId) const;
949 
964  virtual DtSharedVrfObjectReference lookupVrfObjectByUUID(const DtUUID&) const;
965 
968  virtual bool uuidExists(const DtUUID&) const;
969 
972  virtual bool addNameAlias(const DtString& aliasName, DtVrfObject* object);
973 
974  virtual void removeNameAlias(const DtString& alias);
975 
980  virtual DtSharedVrfObjectReference lookupVrfObjectByMarkingText(const DtString&) const;
981 
983  virtual bool hasObjectType(const DtObjectType&) const;
984 
987  virtual bool markingTextExists(const DtString&) const;
988 
990  virtual const DtSimulationAddress& simulationAddress() const;
991 
997  const DtSimObjectIterator& iterator() const;
998 
1000  virtual bool createSimObjectList();
1001 
1004  virtual DtHashlist* hashlist() const;
1005 
1009  virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
1010  virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1011 
1016  static void entityAddedCallback(DtReflectedExtEntity* entity, void* userData);
1017 
1022  static void entityRemovedCallback(DtReflectedExtEntity* entity,
1023  void* userData);
1024 
1029  static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
1030  void* userData);
1031 
1036  static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
1037  void* userData);
1038 
1043  static void entityChangedCallback(DtReflectedExtEntity* entity,
1044  void* userData);
1045 
1050  static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
1051  void* userData);
1052 
1054  virtual void processEntityChanged(DtReflectedExtEntity* entity);
1055 
1061  static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
1062  void* userData);
1063 
1069  static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
1070  void* userData);
1071 
1077  virtual bool processEntityDiscoveryCriteria(
1078  DtReflectedEntity* entity);
1079 
1085  virtual bool processAggregateDiscoveryCriteria(
1086  DtReflectedAggregate* aggregate);
1087 
1090  virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(const DtGlobalObjectDesignator&
1091  tgtGlobalId);
1092 
1094  virtual bool hostingDynamicTerrainServer() const;
1095 
1099  virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(const int code);
1100 
1104  virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1105 
1106  virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1107  virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1108  virtual void createRemoteEmitterSystemList(DtExerciseConn* exConn);
1109 
1110 #if DtHLA
1111 
1112 
1113  virtual void createRemoteExtendedAttributesList(DtExerciseConn* exConn);
1114 #endif
1115 
1116  DtReflectedDesignatorList* reflectedDesignatorList() const;
1117 
1118  DtReflectedActiveSonarList* reflectedActiveSonarList() const;
1119  DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList() const;
1120 
1122  virtual DtVrfParameterDb* objectParametersDB() const;
1123 
1126  virtual void addSimObjectAboutToBeAddedCallback(
1128  virtual void addSimObjectAddedCallback(
1130  virtual void addSimObjectAboutToBeRemovedCallback(
1132  virtual void addSimObjectAboutToBeLoadedCallback(
1134 
1136  virtual void addSimObjectQueuedForRemovalCallback(
1138  virtual void removeSimObjectQueuedForRemovalCallback(
1140  virtual void invokeSimObjectQueuedForRemovalCallbacks(
1141  DtVrfObject* object);
1142 
1146  virtual void addSimObjectAboutToBeAddedCallback(
1147  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1148  const DtObjectType& filter = DtObjectType::anyType(),
1149  bool invertFilter = false);
1150 
1154  virtual void addSimObjectAddedCallback(
1155  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1156  const DtObjectType& filter = DtObjectType::anyType(),
1157  bool invertFilter = false);
1158 
1162  virtual void addSimObjectAboutToBeRemovedCallback(
1163  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1164  const DtObjectType& filter = DtObjectType::anyType(),
1165  bool invertFilter = false);
1166 
1170  virtual void addSimObjectAboutToBeLoadedCallback(
1171  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1172  const DtObjectType& filter = DtObjectType::anyType(),
1173  bool invertFilter = false);
1174 
1177  virtual void removeSimObjectAboutToBeAddedCallback(
1178  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1179  const DtObjectType& filter = DtObjectType::anyType(),
1180  bool invertFilter = false);
1181 
1182  virtual void removeSimObjectAboutToBeRemovedCallback(
1183  const DtSimObjectListActivityCallbackInfo& cbInfo);
1184 
1187  virtual void removeSimObjectAddedCallback(
1188  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1189  const DtObjectType& filter = DtObjectType::anyType(),
1190  bool invertFilter = false);
1191 
1194  virtual void removeSimObjectAboutToBeLoadedCallback(
1195  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1196  const DtObjectType& filter = DtObjectType::anyType(),
1197  bool invertFilter = false);
1198 
1201  virtual void removeSimObjectAboutToBeAddedCallback(
1202  const DtSimObjectListActivityCallbackInfo& cbInfo);
1203  virtual void removeSimObjectAddedCallback(
1204  const DtSimObjectListActivityCallbackInfo& cbInfo);
1205  virtual void removeSimObjectAboutToBeLoadedCallback(
1206  const DtSimObjectListActivityCallbackInfo& cbInfo);
1207 
1210  virtual void removeSimObjectAboutToBeRemovedCallback(
1211  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1212  const DtObjectType& filter = DtObjectType::anyType(),
1213  bool invertFilter = false);
1214 
1218  virtual void invokeSimObjectAboutToBeAddedCallbacks(
1219  DtVrfObject* simObject) const;
1220 
1224  virtual void invokeSimObjectAddedCallbacks(
1225  DtVrfObject* simObject) const;
1226 
1230  virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1231  DtVrfObject* simObject) const;
1232 
1236  virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1237  DtVrfObject* simObject) const;
1238 
1240  virtual DtReflectedExtEntityList* reflectedEntityList() const;
1241 
1243  virtual DtReflectedExtAggregateList* reflectedAggregateList() const;
1244 
1248  virtual void setSimObjectType(const DtString& type);
1249  virtual const DtString& simObjectType() const;
1251 
1253  virtual void setOrbatEnabled(bool);
1254  virtual bool orbatEnabled() const;
1255 
1257  virtual void setOrderOfBattleObjectsAddedToOrbatByDefault(bool b);
1258  virtual bool orderOfBattleObjectsAddedToOrbatByDefault() const;
1259 
1261  virtual void closingScenario();
1262 
1265  virtual bool addUUIDMappingForObject(DtVrfObject* vrfObject);
1266 
1268  virtual void removeUUIDMappingForObject(DtVrfObject* vrfObject);
1269 
1271  virtual DtEntityIdentifier nextId(DtVrfObject* o = NULL);
1272 
1277  virtual DtString generateUniqueName(int maxLength, const DtString&
1278  root = "Object") const;
1279 
1281  virtual void setRollUpRules(const DtAssembliesReaderWriter::RwRootNode&);
1282 
1284  virtual const DtAssembliesReaderWriter::RwRootNode& rollUpRules() const;
1285 
1287  virtual void setActivities(const DtRwActivities&);
1288 
1290  virtual const DtRwActivities& activities() const;
1291 
1294  virtual bool isLocal(const DtBaseEntityStateRepository& stateRep);
1295 
1299  static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1300 
1305  virtual void objectsEmbarkedOn(DtVrfObjectStateRepository* vrfObjSR, std::vector<DtSharedVrfObjectReference>& list,
1306  bool includePseudoAggregates = true) const;
1307 
1312  static void designatorAddedCallback(DtReflectedDesignator * des,
1313  void * userData);
1314 
1319  static void designatorRemovedCallback(DtReflectedDesignator * des,
1320  void * userData);
1321 
1326  static void designatorChangedCallback(DtReflectedDesignator * des,
1327  void * userData);
1328 
1334  static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1335  void * userData);
1336 
1337  static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1338  void* userData);
1339  static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1340  void* userData);
1341  static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1342  void* userData);
1343  static DtBoolean activeSonarDiscoveryCriteriaCallback(
1344  DtReflectedObject* activeSonar, void* userData);
1345 
1346  static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1347  void* userData);
1348  static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1349  void* userData);
1350  static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1351  void* userData);
1352  static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1353  DtReflectedObject* propNoise, void* userData);
1354 
1357  virtual bool canSimulate() const;
1358 
1361  virtual void setCanSimulate(bool);
1362 
1364  virtual void printReflectedObjectCounts() const;
1365 
1368  virtual void addStealthType(const DtEntityType&);
1369  virtual void removeStealthType(const DtEntityType&);
1370  virtual bool isStealthType(const DtEntityType&) const;
1371  std::vector<DtEntityType>& stealthTypes() { return myStealthTypes; };
1372  const std::vector<DtEntityType>& stealthTypes() const { return myStealthTypes; };
1373 
1375  virtual std::set<DtVrfObject*> objectsOnOverlayLayer(const DtString&) const;
1376 
1378  static void vrfObjectDataChangedCallback(DtVrfObject*, int, void*);
1379  virtual void processVrfObjectDataChanged(DtVrfObject*, int);
1380 
1382  virtual void clearObjectsAwaitingDiscovery();
1383 
1384 protected:
1386  virtual void processOrganizationManagerReady(const DtOrganizationManagerReadyCallbackInfo&);
1387  virtual void invokeOrganizationManagerReadyCallbacks(const DtOrganizationManagerReadyCallbackInfo&);
1388 
1389 protected:
1391  virtual DtObjectType potentialRandomObjectTypeFrom(const DtObjectType& original);
1392 
1395  virtual void rediscoverNonVRFEntities();
1396 
1400  virtual void remove(DtVrfObject* simObject);
1401  virtual void remove(DtSharedVrfObjectReference simObject);
1402  virtual DtVrfObject* remove(const DtEntityIdentifier& key);
1403 
1406  virtual void invokeObjectManagerAboutToRemoveAllCallbacks() const;
1407 
1410  virtual void onQueueObjectForRemoval(DtVrfObject* vrfObject, bool andRemoveFromOrbat = false);
1411 
1412  virtual const Coordinate_System* coordinateSystem() const;
1413  virtual Coordinate_System* coordinateSystem();
1414 
1417  virtual void modifyInterfaceContentForNewObject(DtSimInterfaceContent*, DtVrfObject*, bool& isLocal) const;
1418 
1421  virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(const DtList&) const;
1422 
1424  virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(const DtList& subObjects,
1425  int& totalLeafNodes) const;
1426 
1427 protected:
1429  virtual void checkPendingNameRemoval(const DtString& markingText);
1430 
1433  virtual void removeVrfObject(const DtUUID&, bool queueDeletionOfVrfObject = false);
1434 
1436  virtual DtObjectGeometricModelsManager* createObjectModelsManager() const;
1437 
1439  virtual DtVrfEntityIdentifierFactory* createVrfEntityIdentifierFactory();
1440 
1442  virtual DtVrfObjectPlanAdministrator* createPlanAdministrator();
1443 
1444  virtual bool finalizeObjectRead(DtVrfObject*);
1445 
1446  virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1447 
1449  virtual void deleteVrfObjectsToBeDeleted();
1450 
1451 public:
1452  DtObjectGeometricModelsManager* objectModelsManager() const;
1453  DtVrfEntityIdentifierFactory* vrfEntityIdentifierFactory() const;
1454 
1455 #if DtHLA_1516
1456 
1457  DtGlobalObjectDesignator nextReservedGlobalObjectId();
1458 #endif
1459 
1460  virtual DtVrfObjectPlanAdministrator* planAdministrator();
1461 
1462  virtual DtSimInternalCommunicationManager* simInternalCommunicationManager();
1463 
1464 protected:
1466  virtual DtSimInternalCommunicationManager* createSimInternalCommunicationManager(
1467  DtSimManager* simMgr) const;
1468 
1469 protected:
1470 
1472  typedef std::pair<DtVrfObject*, DtVrfSimulationObjectGroupGeometry*> PendingObjectInformation;
1473  typedef std::vector<PendingObjectInformation> PendingObjectsInformation;
1474  typedef std::vector<PendingObjectsInformation> ObjectsAwaitingDiscovery;
1475 
1478  virtual bool addObjectsReadyForSimulation(PendingObjectsInformation&);
1479 
1483  static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr);
1484  static void modifyVrfOverlayCallback(DtSimMessage* msg, void* usr);
1485  static void autoReorganizeCallback(DtSimMessage* msg, void* usr);
1486  static void skipTaskCallback(DtSimMessage* msg, void* usr);
1487  static void setThresholdsCallback(DtSimMessage* msg, void* usr);
1488  static void deleteDynamicTerrainServerCallback(DtSimMessage*, void*);
1489 
1490 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1491  static void vrfObjectStateUpdateCallback(DtSimMessage* msg, void* usr);
1492 #endif
1493 
1501  static void createVrfObjectCallback(DtSimMessage* msg, void* usr);
1502  static void deleteVrfObjectCallback(DtSimMessage* msg, void* usr);
1503  static void deleteVrfObjectByIdCallback(DtSimMessage* msg, void* usr);
1504  static void vrfObjectDeletedCallback(DtSimMessage* msg, void* usr);
1505  static void orderOfBattleOpCallback(DtSimMessage* msg, void* usr);
1506  static void aggregateAsCallback(DtSimMessage* msg, void* usr);
1507 
1509  static void extendedLabelsOperationCallback(DtSimMessage* msg, void* usr);
1510  virtual void processExtendedLabelsOperation(DtSimMessage*);
1511 
1513  static void requestActivitiesCallback(DtSimMessage* msg, void* usr);
1514  virtual void processRequestActivities(DtSimMessage*);
1515 
1517  static void requestJoystickControlsCallback(DtSimMessage* msg, void* usr);
1518  virtual void processRequestJoystickControls(DtSimMessage*);
1519 
1522  virtual bool acceptRemoteEnvironmental(const DtEntityType& et) const;
1523 
1528  static void createVrfObjectPostDrainCallback(void* usr);
1529  static void deleteVrfObjectPostDrainCallback(void* usr);
1530  static void deleteVrfObjectByIdPostDrainCallback(void* usr);
1531  static void vrfObjectDeletedPostDrainCallback(void* usr);
1532  static void aggregateAsPostDrainCallback(void* usr);
1533 
1534  static void envProcessAddedCallback(
1535  DtReflectedEnvironmentProcess* envProcess, void* userData);
1536  static void envProcessRemovedCallback(
1537  DtReflectedEnvironmentProcess* envProcess, void* userData);
1538  static bool envProcessDiscoveryCriteria(
1539  DtReflectedObject* envProcess, void* userData);
1540 
1541  static void organizationManagerReadyCallback(const DtOrganizationManagerReadyCallbackInfo& info, void* usr);
1542 
1543 protected:
1544 
1547 
1550 
1553 
1559  static void postInitFromParamsCallback(DtVrfObject* vrfObject, void* usr);
1560 
1563  virtual DtCreateQueueEntry* createQueueEntryCreator(DtIfCreateVrfObject msg);
1564 
1567  virtual DtModifyQueueEntry* modifyQueueEntryCreator(DtIfModifyVrfObject msg);
1568 
1570  virtual DtOrganizationManager* createOrganizationManager();
1571 
1573  virtual DtOrbatManager* createOrbatManager();
1574 
1575 protected:
1578 
1580  DtHashlist* mySimObjectList;
1581 
1584 
1587 
1590 
1591  DtReflectedActiveSonarList* myRemoteActiveSonarList;
1592  DtReflectedPropulsionNoiseList* myRemotePropulsionNoiseList;
1593 
1595 
1596 #if DtHLA
1597 
1599 #endif
1600 
1603 
1605  {
1607  {
1608  if (!a || !b)
1609  {
1611  return a < b;
1612  }
1613 
1614  return (a->func() < b->func() ||
1615  (a->func() == b->func() && a->usrData() < b->usrData()) ||
1616  (a->func() == b->func() && a->usrData() == b->usrData() && a->filter() < b->filter()));
1617  }
1618  };
1619 
1622 
1627 
1632 
1636  typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> AddedList;
1638  mutable tbb::spin_rw_mutex myAddedSimObjectCallbackListMutex;
1639 
1643  typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> ToBeRemovedList;
1646 
1647  mutable std::set<DtSimObjectListActivityCallbackInfo*> myRemovalCallbacksRemoved;
1648 
1651 
1656 
1657  DtExerciseConn* myExerciseConn;
1658 
1661 
1663 
1668 
1670 
1673  std::map<DtUUID, bool> myObjectsToRemoveQueue;
1674  std::map<DtString, std::map<DtUUID, bool> > myObjectsToRemoveByNameQueue;
1675 
1678  typedef DtBoost::shared_ptr<DtCreateQueueEntry> DtCreateQueueEntryPtr;
1679  typedef std::list<DtCreateQueueEntryPtr> DtVrfObjectCreateQueue;
1681 
1684  typedef DtBoost::shared_ptr<DtModifyQueueEntry> DtModifyQueueEntryPtr;
1685  typedef std::list<DtModifyQueueEntryPtr> DtVrfObjectModifyQueue;
1687 
1690 
1692 
1694 
1695  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> GlobalIdToObjectMap;
1697 
1699 
1701 
1703 
1705 
1707 
1709 
1711 
1713 
1715 
1718 
1722 
1725 
1728 
1730 
1732 
1734 
1737 
1741 
1747 
1748  typedef boost::unordered_map<DtUUID, DtSharedVrfObjectReference> UUIDToObjectMap;
1750 
1751  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> NameToObjectMap;
1754 
1755  typedef boost::unordered_map<DtVrfObject*, DtSharedVrfObjectReference> ObjectToObjectMap;
1757 
1759 
1760  //Incremented each time a callback list is invoked.
1761  //Decremented when done invoking callbacks.
1762  //Unsigned because invoke can be called from within
1763  //a callback.
1769  //@]
1770 
1771  std::vector<DtVrfObject*> myJustAdded;
1772 
1773  std::map<int, DtlObjPtr> mySortedByEntityId;
1780 
1781 #if DtHLA_1516
1782  std::set<DtGlobalObjectDesignator> myReservedGlobalIds;
1783 #endif
1784 
1785  std::vector<DtEntityType> myStealthTypes;
1786 
1787  std::vector<DtVrfObject*> myVrfObjectsToDelete;
1788 
1789 private:
1790 
1791  std::vector<DtVrfObjectManagerCallbackInfo> myAboutToRemoveAllCallbackList;
1792 
1794  mutable tbb::spin_rw_mutex myOverlayMapMutex;
1795  typedef std::map<DtString, std::set<DtVrfObject*> > OverlayMap;
1796  typedef std::map<DtVrfObject*, DtString> ObjectOverlayMap;
1797 
1800 };
1801 
1803 {
1805 }
1806 
1808 {
1810 }

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)