VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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 
39 #include <vector>
40 #include <list>
41 #include <set>
42 
43 #include <boost/unordered_map.hpp>
44 #include <boost/unordered_set.hpp>
45 #include <tbb/spin_rw_mutex.h>
46 
48 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
49 
50 class DtExerciseConn;
51 class DtReflectedObject;
52 class DtReflectedAggregate;
57 class DtVrfParameterDb;
58 class DtSimObjectSubComponentTypes;
60 class DtVertexList;
62 class DtBaseEntityStateRepository;
64 class DtSimManager;
65 class DtVrfObjectManagerTickArguments;
67 class DtSimTickArguments;
68 class DtSimMessage;
70 class DtIfAggregateAs;
74 class DtReflectedObject;
75 class DtEchelonIdTable;
76 class DtEchelonId;
77 class Coordinate_System;
82 class DtReflectedDesignator;
85 class DtReflectedActiveSonar;
86 class DtReflectedActiveSonarList;
87 class DtReflectedPropulsionNoise;
88 class DtReflectedPropulsionNoiseList;
89 class DtCreateQueueEntry;
90 class DtModifyQueueEntry;
92 class DtlInputStream;
93 
94 
96 typedef bool (*DtSimObjectUserInitFcn)(DtVrfObject* object, void* usr);
97 
101  void* usr);
102 
104 typedef bool (*DtVrfObjectUserInitFcn)(DtVrfObject* vrfObject, void* usr);
105 
108 typedef void (*DtVrfObjectManagerCallbackFcn)(const DtVrfObjectManager& objectManager,
109  void* usr);
110 
114 const int DtSimMaxForceTypes = 256;
115 
118 {
120  void* myUserData;
121 };
122 
125 {
131 
134  unsigned int importFlags;
138 };
139 
142 {
146 };
147 
150 {
154 };
155 
158 {
160  DtEntityIdentifier* myEntityIdentifier;
161 };
162 
167 
169 typedef enum
170 {
175 
187 
189 {
190 public:
192 
196  typedef enum
197  {
198  DtUseParameterDatabaseAggregateState = 0,
200  DtCreateDisaggregatedEntity
201  } DtAggregateCreationMode;
202 
203 public:
204 
206  DtVrfObjectManager(DtSimManager* simManager, int entityAdvisory = 100);
207 
213  virtual ~DtVrfObjectManager();
216 
218  virtual void clearRemoteComponentAttachmentSystem();
219 
225  virtual bool reuseEntityIdentifiersOnScenarioLoad() const;
226  virtual void setReuseEntityIdentifiersOnScenarioLoad(bool);
227 
230  virtual DtEntityIdentifier nextEntityIdentifier(DtVrfObject*, const DtEntityIdentifier&);
231  virtual void addVrfObjectAboutToBePublishedCallback(
232  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
233  virtual void removeVrfObjectAboutToBePublishedCallback(
234  DtVrfObjectAboutToBePublishedCallbackFcn fcn, void* usrData);
235 
238  virtual void createRemoteComponentAttachmentManager();
239 
241  virtual bool isRemoteComponentAttachment(const DtUUID&) const;
242 
244  virtual bool initializeRemoteComponentAttachmentSystem(const DtFilename& fromFile);
245 
247  DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager();
248  const DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager() const;
250 
253  virtual bool create();
254 
257  virtual bool init();
258 
260  virtual bool createDIGuyCharacterManager(const DtFilename & diGuyAnimationsFile);
261 
271  virtual bool add(DtVrfObject* simObject);
272 
274  virtual void completeObjectAddition(DtVrfObject* simObject);
275 
277  virtual bool loadingScenarioInformation() const;
278 
279 private:
282  using DtRwList::add;
283  using DtRwList::remove;
284 
285 public:
287  virtual void setParameterDatabase(DtVrfParameterDb* parameterDatabase);
288  virtual DtVrfParameterDb* parameterDatabase();
289 
291  virtual DtManagedObjectListConstPtr getList(const DtVrfObjectPredicate& predicate,
292  bool reevaluateFlag = false, DtTime evaluationPeriod = 0);
293 
295  virtual void setImportingScenario(bool);
296  virtual bool importingScenario() const;
297 
299  virtual void setImportScenarioData(const DtImportScenarioData&);
300  virtual const DtImportScenarioData& importScenarioData() const;
301 
302  virtual const DtVrfObjectFilterIterator& vrfIterator(
303  const DtObjectType& filter = DtObjectType::anyType(),
304  bool invertFilter = false) const;
305 
306  virtual const DtVrfObjectFilterIterator& vrfIterator(
307  const DtVrfObjectPredicate& predicate) const;
308 
311  virtual const DtVrfObjectFilterIterator& vrfIterator(DtFilterFcn filter,
312  bool invertFilter = false, void* usrData = 0)const;
313 
316  virtual void removeAndDelete(const DtUUID& objectName);
317  virtual void removeAndDelete(DtSharedVrfObjectReference simObject);
318  virtual void removeAndDelete(const DtEntityIdentifier& key);
319  virtual void removeAndDelete(DtVrfObject* object);
320 
322  std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(bool onlyVrfSimulated = true) const;
323 
325  virtual void removeAndDeleteAllLocals();
326 
329  virtual void removeAndDeleteAll();
330 
335  virtual void setExerciseConnection(DtExerciseConn* connection);
336  virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
337 
340  virtual void setPublishZeroVelocityWhenPaused(bool);
341  virtual bool publishZeroVelocityWhenPaused() const;
342 
346  virtual void setSetDeadReckoningAlgorithmToStaticOnPause(bool);
347  virtual bool setDeadReckoningAlgorithmToStaticOnPause() const;
348 
350  virtual void setTaskVisualizationPublicationMode(DtTaskVisualizationPublicationMode mode);
351  virtual DtTaskVisualizationPublicationMode taskVisualizationPublicationMode() const;
352 
355  virtual void setUseDrawControlForTaskVisualizations(bool);
356  virtual bool useDrawControlForTaskVisualizations() const;
357 
359  virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList() const;
360 
363  virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
364 
371  virtual void registerInterfaceCallbacks();
372 
374  virtual const DtSimManager* simManager() const;
376  virtual DtSimManager* simManager();
377 
387  virtual void processCreateVrfObject(DtSimMessage* msg);
388 
395  virtual void processCreateVrfObject(DtIfCreateVrfObject ifCreateVrfObject);
396 
404  virtual void processModifyVrfObject(DtSimMessage* msg);
405 
412  virtual void processModifyVrfObject(DtIfModifyVrfObject modObj);
413 
416  virtual void processModifyVrfOverlay(DtSimMessage* msg);
419  virtual void processDeleteVrfObject(DtSimMessage* msg);
422  virtual void processDeleteVrfObjectById(DtSimMessage* msg);
425  virtual void processVrfObjectDeleted(DtSimMessage* msg);
428  virtual void processAutoReorganize(DtSimMessage* msg);
431  virtual void processAggregateAs(DtSimMessage* msg);
434  virtual void processSkipTask(DtSimMessage* msg);
435 
436 
441  virtual void processSetThresholds(DtSimMessage* msg);
442 
447  virtual void processEntityAddedCallback(DtReflectedExtEntity* entity);
448  virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
449 
452  virtual void processEntityRemovedCallback(DtReflectedExtEntity* entity);
453  virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
454 
455  virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
456  virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
457  virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
458  DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
459 
460  virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
461  virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
462  virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
463  DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
464 
465  typedef std::list<DtReflectedActiveSonar*> ReflectedActiveSonars;
466  virtual ReflectedActiveSonars findActiveSonarsForHostEntity(
467  const DtVrfObject* host) const;
468 
469  virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
470  virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
471  virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
472  DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
473 
474  virtual bool hasEnabledActiveSonar(const DtVrfObject* host) const;
475 
476  virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(const DtVrfObject* host) const;
477 
479  virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
480 
481  virtual void processEnvProcessAddedCallback(
482  DtReflectedEnvironmentProcess* envProcess);
483  virtual void processEnvProcessRemovedCallback(
484  DtReflectedEnvironmentProcess* envProcess);
485  virtual bool processEnvProcessDiscoveryCriteria(
486  DtReflectedEnvironmentProcess* envProcess);
487 
490  virtual void removeObjectSubordinates(DtVrfObject* object);
491 
494  virtual void queueObjectForRemoval(const DtEntityIdentifier& key);
495  virtual void queueObjectForRemoval(const DtUUID& key);
496 
498  virtual void removeObjectsQueuedForRemoval();
499 
508  virtual void tick();
509 
511  virtual DtVrfObject* createAndInitVrfObject(
512  DtIfCreateVrfObject* creationInfo);
513 
514  virtual DtVrfObject* createAndInitVrfObject(
515  DtIfAggregateAs* aggInfo);
516 
518  virtual DtVrfObject* createAndInitVrfObject(
519  DtReflectedEntity* entity);
520 
521  virtual DtVrfObject* createAndInitVrfObject(
522  DtReflectedAggregate* aggregate,
523  int superType = DtObjectTypeAggregate);
524 
525  virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
526 
536  virtual DtVrfObject* createAndInitVrfObject(
537  const DtObjectType& objectType,
538  bool publishLocalObject = true,
539  const DtString& objectName = DtString::nullString(),
540  const DtString& objectLabel = DtString::nullString(),
541  DtForceType forceType = DtForceOther,
542  const DtList* vertices = 0,
543  const DtTaitBryan* orientation = 0,
544  bool projection = false,
545  bool closedFigure = false,
546  const DtAppearance& appearance = DtAppearance::nullAppearance(),
547  const DtString& readerWriterName = DtString::nullString(),
548  DtReaderWriterRegistry* parentRegistry = 0,
549  bool createSubObjects = false,
550  DtVrfObjectUserInitFcn userInit = 0,
551  void* userInitData = 0,
552  bool organize = true,
553  const DtString& startingFormation = DtDefaultFormationString,
554  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
556  unsigned long requestId = 0,
557  const DtString& overlayParent = "");
558 
566  virtual DtVrfObject* createAndInitVrfObject(
567  const DtObjectType& objectType,
568  bool publishLocalObject = true,
569  const DtString& objectName = DtString::nullString(),
570  const DtString& objectLabel = DtString::nullString(),
571  DtForceType forceType = DtForceOther,
572  const DtVector& position = DtVector::zero(),
573  const DtTaitBryan* orientation = 0,
574  bool projection = false,
575  bool closedFigure = false,
576  const DtAppearance& appearance = DtAppearance::nullAppearance(),
577  const DtString& readerWriterName = DtString::nullString(),
578  DtReaderWriterRegistry* parentRegistry = 0,
579  bool createSubObjects = false,
580  DtVrfObjectUserInitFcn userInitFcn = 0,
581  void* userInitData = 0,
582  bool organize = true,
583  const DtString& startingFormation = DtDefaultFormationString,
584  DtVrfObjectManager::DtAggregateCreationMode initialAggregateState =
586  unsigned long requestId = 0, const DtString& overlayParent = "");
587 
595  virtual void createSubObjectsFromParameters(DtVrfObject* parent,
596  bool publishSubobjects, unsigned long requestId, const DtString& overlayParent);
597 
604  virtual DtVrfObject* createSubObjectFromParameterEntry(
605  const DtVrfSubObjectParameterEntry& entry, const DtVector& positionOffsetFromParent,
606  const DtVrfObject& parent,
607  const DtString& formationName,
608  bool publishSubObject, unsigned long requestId = 0, const DtString& overlayParent = "");
609 
611  virtual bool readOrderOfBattleFile(const DtFilename & filename);
612  virtual bool readOrderOfBattleFile(const std::vector<std::string*>& oob);
613 
615  virtual bool readOrderOfBattleFile(DtlInputStream*);
616  virtual bool readOrderOfBattleFileFromZipFile(const DtFilename& zipFile, const DtString & filename);
617  virtual bool writeOrderOfBattleFile(const DtString & filename);
619  virtual bool writeOrderOfBattleFile(std::string& stream);
620  virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams);
621 
624  virtual bool writeSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags,
625  boost::unordered_set<DtUUID>& uuidsSaved);
626 
630  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(const DtString& filename, int flags, DtForceType force,
631  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
632  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
633  const DtFilename& scenarioZipFile, const DtString& filename, int flags, DtForceType force,
634  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
635  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(int flags, DtForceType force, DtlObjPtr& args);
636  virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream, int flags, DtForceType force,
637  DtlObjPtr* retArgs = 0, bool* errorLoading = 0);
638 
642  virtual bool objectShouldBeSavedToOrderOfBattle(
643  const DtVrfObject* vrfObject) const;
644  virtual bool objectShouldBeSavedToSimulationObjectGroup(
645  const DtVrfObject* vrfObject) const;
646 
647  virtual DtVrfObject* createObjectFromMemoryBuffer(const std::string& buffer);
648 
649  virtual DtlObjPtr getData(DtlObjPtr args,
650  const DtReaderWriter::SearchPaths& searchPaths,
651  const DtVariableBindingsList& variableBindings);
652 
655  static void tickCallback(void* args);
656 
660  virtual void addVrfObjectAboutToBeAddedCallback(
661  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
662  const DtObjectType& filter = DtObjectType::anyType(),
663  bool invertFilter = false);
664 
668  virtual void addVrfObjectAddedCallback(
669  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
670  const DtObjectType& filter = DtObjectType::anyType(),
671  bool invertFilter = false);
672 
676  virtual void addVrfObjectAboutToBeLoadedCallback(
677  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
678  const DtObjectType& filter = DtObjectType::anyType(),
679  bool invertFilter = false);
680 
681 
686  virtual void addVrfObjectAboutToBeRemovedCallback(
687  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
688  const DtObjectType& filter = DtObjectType::anyType(),
689  bool invertFilter = false);
690 
693  virtual void removeVrfObjectAboutToBeAddedCallback(
694  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
695  const DtObjectType& filter = DtObjectType::anyType(),
696  bool invertFilter = false);
697 
700  virtual void removeVrfObjectAboutToBeLoadedCallback(
701  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
702  const DtObjectType& filter = DtObjectType::anyType(),
703  bool invertFilter = false);
704 
707  virtual void removeVrfObjectAddedCallback(
708  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
709  const DtObjectType& filter = DtObjectType::anyType(),
710  bool invertFilter = false);
711 
714  virtual void removeVrfObjectAboutToBeRemovedCallback(
715  DtVrfObjectListActivityCallbackFcn fcn, void* usrData,
716  const DtObjectType& filter = DtObjectType::anyType(),
717  bool invertFilter = false);
718 
721  virtual void addObjectManagerAboutToRemoveAllCallback(
722  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
723 
726  virtual void removeObjectManagerAboutToRemoveAllCallback(
727  DtVrfObjectManagerCallbackFcn fcn, void* usrData);
728 
730  virtual void addOrganizationManagerReadyCallback(
731  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
732 
734  virtual void removeOrganizationManagerReadyCallback(
735  DtOrganizationManagerReadyCallbackFcn fcn, void* usrData);
736 
738  virtual void enableAutoReorganization();
739  virtual void disableAutoReorganization();
741  virtual bool autoReorganizeEnabled() const;
742 
744  virtual DtEntityIdentifier mapUUIDToEntityIdentifier(const DtUUID&) const;
745  virtual DtGlobalObjectDesignator mapUUIDToGlobalId(const DtUUID&) const;
746  virtual DtUUID mapGlobalIdToUUID(const DtGlobalObjectDesignator&) const;
747 
751  virtual bool objectNameExists(const DtString&) const;
752 
754  virtual DtSharedVrfObjectReference lookupTopLevelVrfObject(DtForceType forceType);
755 
757  virtual DtString nextNameWithPrefix(const DtObjectType & objectType,
758  const DtString& potentialPrefix);
759 
762  virtual DtString nextNameWithPrefix(int maxLength,
763  const DtString& potentialPrefix);
764 
766  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
769  virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
770  const DtString& name);
772  virtual DtString topLevelName(DtForceType forceType);
773 
781  virtual DtString nextName(const DtObjectType& objectType);
783  virtual DtString nextUnorganizedName();
786  virtual DtString uniquifyName(const DtString& name, const DtObjectType& objectType);
787 
791  virtual unsigned int maxNameLengthForType(const DtObjectType& objectType);
792 
795  virtual DtReflectedObject* lookupReflectedObject(
796  const DtGlobalObjectDesignator& globalId) const;
797 
799  virtual void rediscoverObjects(const std::set<DtGlobalObjectDesignator>& ignore =
800  std::set<DtGlobalObjectDesignator>());
801 
804  virtual void requestUpdatesForRemoteNonVrfObjects() const;
805 
808  virtual void objectNameChanged(DtVrfObject*, const DtString& oldName,
809  const DtString& newName);
810 
813  virtual void objectUUIDChanged(const DtUUID& oldUUID, const DtUUID& newUUID);
814 
816 
817  virtual void addObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
818  virtual void removeObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr);
820 
824 
825  virtual void addObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
826  virtual void removeObjectUUIDChangedCallback(DtVrfObjectUUIDChangedCallbackFcn fcn, void* usr);
828 
845  virtual DtVrfObject* aggregateAs(
846  const DtObjectType& aggregateType,
847  DtForceType force,
848  const DtVector& dbPosition,
849  DtReal heading,
850  const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
851  const DtString& aggregateName = DtString::nullString());
852 
854  virtual double timeOfDay() const;
855 
857  virtual double dateAndTimeOfDay() const;
858 
863  virtual void setSimulationDateTimeBasedOnLocation(const DtVector& geocentricLocation, int timeOfDay);
864 
868  virtual bool addSubordinatesToAggregate(DtVrfObject* object,
869  const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
870 
876  static void addSubordinatesToAggregateCompleteCallback(void* usr);
877 
878  virtual DtOrganizationManager* organizationManager();
879  virtual const DtOrganizationManager* organizationManager() const;
880 
883  virtual DtDiGuyCharacterDataManager * diGuyCharacterManager();
884  virtual const DtDiGuyCharacterDataManager * diGuyCharacterManager() const;
885 
887  virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem);
888 
890  virtual unsigned objectCount() const;
891 
894  virtual DtSharedVrfObjectReference lookupVrfObjectByEntityIdentifier(const DtEntityIdentifier& key) const;
895 
898  virtual DtSharedVrfObjectReference lookupVrfObjectByGlobalId(const DtGlobalObjectDesignator& globalId) const;
899 
905  virtual DtSharedVrfObjectReference lookupVrfObjectByUUID(const DtUUID&) const;
906 
909  virtual bool uuidExists(const DtUUID&) const;
910 
913  virtual bool addNameAlias(const DtString& aliasName, DtVrfObject* object);
914 
915  virtual void removeNameAlias(const DtString& alias);
916 
921  virtual DtSharedVrfObjectReference lookupVrfObjectByMarkingText(const DtString&) const;
922 
925  virtual bool markingTextExists(const DtString&) const;
926 
928  virtual const DtSimulationAddress& simulationAddress() const;
929 
935  const DtSimObjectIterator& iterator() const;
936 
938  virtual bool createSimObjectList();
939 
942  virtual DtHashlist* hashlist() const;
943 
947  virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
948  virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
949 
954  static void entityAddedCallback(DtReflectedExtEntity* entity, void* userData);
955 
960  static void entityRemovedCallback(DtReflectedExtEntity* entity,
961  void* userData);
962 
967  static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
968  void* userData);
969 
974  static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
975  void* userData);
976 
981  static void entityChangedCallback(DtReflectedExtEntity* entity,
982  void* userData);
983 
988  static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
989  void* userData);
990 
992  virtual void processEntityChanged(DtReflectedExtEntity* entity);
993 
999  static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
1000  void* userData);
1001 
1007  static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
1008  void* userData);
1009 
1015  virtual bool processEntityDiscoveryCriteria(
1016  DtReflectedEntity* entity);
1017 
1023  virtual bool processAggregateDiscoveryCriteria(
1024  DtReflectedAggregate* aggregate);
1025 
1028  virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(const DtGlobalObjectDesignator&
1029  tgtGlobalId);
1030 
1034  virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(const int code);
1035 
1039  virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1040 
1041  virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1042  virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1043 
1044  DtReflectedDesignatorList* reflectedDesignatorList() const;
1045 
1046  DtReflectedActiveSonarList* reflectedActiveSonarList() const;
1047  DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList() const;
1048 
1050  virtual DtVrfParameterDb* objectParametersDB() const;
1051 
1054  virtual void addSimObjectAboutToBeAddedCallback(
1056  virtual void addSimObjectAddedCallback(
1058  virtual void addSimObjectAboutToBeRemovedCallback(
1060  virtual void addSimObjectAboutToBeLoadedCallback(
1062 
1066  virtual void addSimObjectAboutToBeAddedCallback(
1067  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1068  const DtObjectType& filter = DtObjectType::anyType(),
1069  bool invertFilter = false);
1070 
1074  virtual void addSimObjectAddedCallback(
1075  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1076  const DtObjectType& filter = DtObjectType::anyType(),
1077  bool invertFilter = false);
1078 
1082  virtual void addSimObjectAboutToBeRemovedCallback(
1083  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1084  const DtObjectType& filter = DtObjectType::anyType(),
1085  bool invertFilter = false);
1086 
1090  virtual void addSimObjectAboutToBeLoadedCallback(
1091  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1092  const DtObjectType& filter = DtObjectType::anyType(),
1093  bool invertFilter = false);
1094 
1097  virtual void removeSimObjectAboutToBeAddedCallback(
1098  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1099  const DtObjectType& filter = DtObjectType::anyType(),
1100  bool invertFilter = false);
1101 
1102  virtual void removeSimObjectAboutToBeRemovedCallback(
1103  const DtSimObjectListActivityCallbackInfo& cbInfo);
1104 
1107  virtual void removeSimObjectAddedCallback(
1108  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1109  const DtObjectType& filter = DtObjectType::anyType(),
1110  bool invertFilter = false);
1111 
1114  virtual void removeSimObjectAboutToBeLoadedCallback(
1115  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1116  const DtObjectType& filter = DtObjectType::anyType(),
1117  bool invertFilter = false);
1118 
1121  virtual void removeSimObjectAboutToBeAddedCallback(
1122  const DtSimObjectListActivityCallbackInfo& cbInfo);
1123  virtual void removeSimObjectAddedCallback(
1124  const DtSimObjectListActivityCallbackInfo& cbInfo);
1125  virtual void removeSimObjectAboutToBeLoadedCallback(
1126  const DtSimObjectListActivityCallbackInfo& cbInfo);
1127 
1130  virtual void removeSimObjectAboutToBeRemovedCallback(
1131  DtSimObjectListActivityCallbackFcn fcn, void* usrData,
1132  const DtObjectType& filter = DtObjectType::anyType(),
1133  bool invertFilter = false);
1134 
1138  virtual void invokeSimObjectAboutToBeAddedCallbacks(
1139  DtVrfObject* simObject) const;
1140 
1144  virtual void invokeSimObjectAddedCallbacks(
1145  DtVrfObject* simObject) const;
1146 
1150  virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1151  DtVrfObject* simObject) const;
1152 
1156  virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1157  DtVrfObject* simObject) const;
1158 
1160  virtual DtReflectedExtEntityList* reflectedEntityList() const;
1161 
1163  virtual DtReflectedExtAggregateList* reflectedAggregateList() const;
1164 
1168  virtual void setSimObjectType(const DtString& type);
1169  virtual const DtString& simObjectType() const;
1171 
1174  virtual bool addUUIDMappingForObject(DtVrfObject* vrfObject);
1175 
1177  virtual void removeUUIDMappingForObject(DtVrfObject* vrfObject);
1178 
1180  virtual DtEntityIdentifier nextId(DtVrfObject* o = NULL);
1181 
1186  virtual DtString generateUniqueName(int maxLength, const DtString&
1187  root = "Object") const;
1188 
1190  virtual void setRollUpRules(const DtAssembliesReaderWriter::RwRootNode&);
1191 
1193  virtual const DtAssembliesReaderWriter::RwRootNode& rollUpRules() const;
1194 
1196  virtual void setActivities(const DtRwActivities&);
1197 
1199  virtual const DtRwActivities& activities() const;
1200 
1203  virtual bool isLocal(const DtBaseEntityStateRepository& stateRep);
1204 
1208  static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1209 
1214  virtual void objectsEmbarkedOn(DtVrfObjectStateRepository* vrfObjSR, std::vector<DtSharedVrfObjectReference>& list,
1215  bool includePseudoAggregates = true) const;
1216 
1221  static void designatorAddedCallback(DtReflectedDesignator * des,
1222  void * userData);
1223 
1228  static void designatorRemovedCallback(DtReflectedDesignator * des,
1229  void * userData);
1230 
1235  static void designatorChangedCallback(DtReflectedDesignator * des,
1236  void * userData);
1237 
1243  static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1244  void * userData);
1245 
1246  static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1247  void* userData);
1248  static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1249  void* userData);
1250  static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1251  void* userData);
1252  static DtBoolean activeSonarDiscoveryCriteriaCallback(
1253  DtReflectedObject* activeSonar, void* userData);
1254 
1255  static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1256  void* userData);
1257  static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1258  void* userData);
1259  static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1260  void* userData);
1261  static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1262  DtReflectedObject* propNoise, void* userData);
1263 
1266  virtual bool canSimulate() const;
1267 
1270  virtual void setCanSimulate(bool);
1271 
1273  virtual void printReflectedObjectCounts() const;
1274 
1277  virtual void addStealthType(const DtEntityType&);
1278  virtual void removeStealthType(const DtEntityType&);
1279  virtual bool isStealthType(const DtEntityType&) const;
1280  std::vector<DtEntityType>& stealthTypes() { return myStealthTypes; };
1281  const std::vector<DtEntityType>& stealthTypes() const { return myStealthTypes; };
1282 
1283 protected:
1285  virtual void processOrganizationManagerReady(const DtOrganizationManagerReadyCallbackInfo&);
1286  virtual void invokeOrganizationManagerReadyCallbacks(const DtOrganizationManagerReadyCallbackInfo&);
1287 
1288 protected:
1290  virtual DtObjectType potentialRandomObjectTypeFrom(const DtObjectType& original);
1291 
1294  virtual void rediscoverNonVRFEntities();
1295 
1299  virtual void remove(DtVrfObject* simObject);
1300  virtual void remove(DtSharedVrfObjectReference simObject);
1301  virtual DtVrfObject* remove(const DtEntityIdentifier& key);
1302 
1305  virtual void invokeObjectManagerAboutToRemoveAllCallbacks() const;
1306 
1309  virtual void onQueueObjectForRemoval(DtVrfObject* vrfObject);
1310 
1311  virtual const Coordinate_System* coordinateSystem() const;
1312  virtual Coordinate_System* coordinateSystem();
1313 
1316  virtual void modifyInterfaceContentForNewObject(DtSimInterfaceContent*, DtVrfObject*, bool& isLocal) const;
1317 
1320  virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(const DtList&) const;
1321 
1323  virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(const DtList& subObjects,
1324  int& totalLeafNodes) const;
1325 
1326 protected:
1328  virtual void checkPendingNameRemoval(const DtString& markingText);
1329 
1331  virtual void removeVrfObject(const DtUUID&);
1332 
1334  virtual DtObjectGeometricModelsManager* createObjectModelsManager() const;
1335 
1337  virtual DtVrfEntityIdentifierFactory* createVrfEntityIdentifierFactory();
1338 
1340  virtual DtVrfObjectPlanAdministrator* createPlanAdministrator();
1341 
1342  virtual bool finalizeObjectRead(DtVrfObject*);
1343 
1344  virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1345 
1346 public:
1347  DtObjectGeometricModelsManager* objectModelsManager() const;
1348  DtVrfEntityIdentifierFactory* vrfEntityIdentifierFactory() const;
1349 
1350 #if DtHLA_1516
1351 
1352  DtGlobalObjectDesignator nextReservedGlobalObjectId();
1353 #endif
1354 
1355  virtual DtVrfObjectPlanAdministrator* planAdministrator();
1356 
1357  virtual DtSimInternalCommunicationManager* simInternalCommunicationManager();
1358 
1359 protected:
1361  virtual DtSimInternalCommunicationManager* createSimInternalCommunicationManager(
1362  DtSimManager* simMgr) const;
1363 
1364 protected:
1365 
1367  typedef std::pair<DtVrfObject*, DtVrfSimulationObjectGroupGeometry*> PendingObjectInformation;
1368  typedef std::vector<PendingObjectInformation> PendingObjectsInformation;
1369  typedef std::vector<PendingObjectsInformation> ObjectsAwaitingDiscovery;
1370 
1373  virtual bool addObjectsReadyForSimulation(PendingObjectsInformation&);
1374 
1378  static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr);
1379  static void modifyVrfOverlayCallback(DtSimMessage* msg, void* usr);
1380  static void autoReorganizeCallback(DtSimMessage* msg, void* usr);
1381  static void skipTaskCallback(DtSimMessage* msg, void* usr);
1382  static void setThresholdsCallback(DtSimMessage* msg, void* usr);
1383 
1384 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1385  static void vrfObjectStateUpdateCallback(DtSimMessage* msg, void* usr);
1386 #endif
1387 
1395  static void createVrfObjectCallback(DtSimMessage* msg, void* usr);
1396  static void deleteVrfObjectCallback(DtSimMessage* msg, void* usr);
1397  static void deleteVrfObjectByIdCallback(DtSimMessage* msg, void* usr);
1398  static void vrfObjectDeletedCallback(DtSimMessage* msg, void* usr);
1399  static void orderOfBattleOpCallback(DtSimMessage* msg, void* usr);
1400  static void aggregateAsCallback(DtSimMessage* msg, void* usr);
1401 
1403  static void extendedLabelsOperationCallback(DtSimMessage* msg, void* usr);
1404  virtual void processExtendedLabelsOperation(DtSimMessage*);
1405 
1407  static void requestActivitiesCallback(DtSimMessage* msg, void* usr);
1408  virtual void processRequestActivities(DtSimMessage*);
1409 
1411  static void requestJoystickControlsCallback(DtSimMessage* msg, void* usr);
1412  virtual void processRequestJoystickControls(DtSimMessage*);
1413 
1416  virtual bool acceptRemoteEnvironmental(const DtEntityType& et) const;
1417 
1422  static void createVrfObjectPostDrainCallback(void* usr);
1423  static void deleteVrfObjectPostDrainCallback(void* usr);
1424  static void deleteVrfObjectByIdPostDrainCallback(void* usr);
1425  static void vrfObjectDeletedPostDrainCallback(void* usr);
1426  static void aggregateAsPostDrainCallback(void* usr);
1427 
1428  static void envProcessAddedCallback(
1429  DtReflectedEnvironmentProcess* envProcess, void* userData);
1430  static void envProcessRemovedCallback(
1431  DtReflectedEnvironmentProcess* envProcess, void* userData);
1432  static bool envProcessDiscoveryCriteria(
1433  DtReflectedObject* envProcess, void* userData);
1434 
1435  static void organizationManagerReadyCallback(const DtOrganizationManagerReadyCallbackInfo& info, void* usr);
1436 
1437 protected:
1438 
1441 
1444 
1447 
1453  static void postInitFromParamsCallback(DtVrfObject* vrfObject, void* usr);
1454 
1457  virtual DtCreateQueueEntry* createQueueEntryCreator(DtIfCreateVrfObject msg);
1458 
1461  virtual DtModifyQueueEntry* modifyQueueEntryCreator(DtIfModifyVrfObject msg);
1462 
1463 protected:
1466 
1468  DtHashlist* mySimObjectList;
1469 
1472 
1475 
1478 
1479  DtReflectedActiveSonarList* myRemoteActiveSonarList;
1480  DtReflectedPropulsionNoiseList* myRemotePropulsionNoiseList;
1481 
1484 
1486  {
1488  {
1489  if (!a || !b)
1490  {
1492  return a < b;
1493  }
1494 
1495  return (a->func() < b->func() ||
1496  (a->func() == b->func() && a->usrData() < b->usrData()) ||
1497  (a->func() == b->func() && a->usrData() == b->usrData() && a->filter() < b->filter()));
1498  }
1499  };
1500 
1503 
1508 
1513 
1517  typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> AddedList;
1519  mutable tbb::spin_rw_mutex myAddedSimObjectCallbackListMutex;
1520 
1524  typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp> ToBeRemovedList;
1527 
1528  mutable std::set<DtSimObjectListActivityCallbackInfo*> myRemovalCallbacksRemoved;
1529 
1532 
1537 
1538  DtExerciseConn* myExerciseConn;
1539 
1542 
1544 
1549 
1551 
1554  std::set<DtUUID> myObjectsToRemoveQueue;
1555  std::map<DtString, std::set<DtUUID> > myObjectsToRemoveByNameQueue;
1556 
1559  typedef DtBoost::shared_ptr<DtCreateQueueEntry> DtCreateQueueEntryPtr;
1560  typedef std::list<DtCreateQueueEntryPtr> DtVrfObjectCreateQueue;
1562 
1565  typedef DtBoost::shared_ptr<DtModifyQueueEntry> DtModifyQueueEntryPtr;
1566  typedef std::list<DtModifyQueueEntryPtr> DtVrfObjectModifyQueue;
1568 
1571 
1573 
1575 
1576  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> GlobalIdToObjectMap;
1578 
1581 
1583 
1585 
1587 
1589 
1591 
1593 
1596 
1599 
1602 
1604 
1606 
1608 
1611 
1615 
1618 
1619  typedef boost::unordered_map<DtUUID, DtSharedVrfObjectReference> UUIDToObjectMap;
1621 
1622  typedef boost::unordered_map<DtString, DtSharedVrfObjectReference> NameToObjectMap;
1625 
1626  typedef boost::unordered_map<DtVrfObject*, DtSharedVrfObjectReference> ObjectToObjectMap;
1628 
1630 
1631  //Incremented each time a callback list is invoked.
1632  //Decremented when done invoking callbacks.
1633  //Unsigned because invoke can be called from within
1634  //a callback.
1640  //@]
1641 
1642  std::vector<DtVrfObject*> myJustAdded;
1643 
1644  std::map<int, DtlObjPtr> mySortedByEntityId;
1650 
1651 #if DtHLA_1516
1652  std::set<DtGlobalObjectDesignator> myReservedGlobalIds;
1653 #endif
1654 
1655  std::vector<DtEntityType> myStealthTypes;
1656 
1657 private:
1658 
1659  std::vector<DtVrfObjectManagerCallbackInfo> myAboutToRemoveAllCallbackList;
1660 };
1661 
1663 {
1665 }
1666 
1668 {
1670 }

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)