20 #include <vrfExtProtocol/objectTypeEnums.h>
26 #include <vlpi/appearance.h>
27 #include <vlutil/vlFilename.h>
28 #include <vlutil/vlList.h>
29 #include <vlutil/vlConfig.h>
30 #include <vlutil/vlSmartPointers.h>
39 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
41 class DtTerrainDbFactory;
46 class DtReflectedObject;
47 class DtReflectedAggregate;
49 class DtReflectedExtAggregate;
54 class DtSimObjectSubComponentTypes;
56 class DtAggregateStateRepository;
57 class DtBaseEntityStateRepository;
60 class DtVrfObjectManagerTickArguments;
61 class DtSimTickArguments;
66 class DtReflectedEnvironmentProcess;
67 class DtReflectedControlObjectList;
68 class DtReflectedObject;
71 class Coordinate_System;
76 class DtReflectedDesignator;
79 class DtReflectedActiveSonar;
80 class DtReflectedActiveSonarList;
81 class DtReflectedPropulsionNoise;
82 class DtReflectedPropulsionNoiseList;
152 DtUseParameterDatabaseAggregateState = 0,
154 DtCreateDisaggregatedEntity
155 } DtAggregateCreationMode;
172 virtual void clearRemoteComponentAttachmentSystem();
176 virtual void createRemoteComponentAttachmentManager();
179 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
188 virtual bool create();
190 virtual bool createObjectNameHashlist();
193 virtual bool createGlobalIdHashlist();
201 virtual void createDIGuyCharacterManager(
const DtFilename & diGuyDataFile,
202 const DtFilename & diGuyAnimationsFile);
233 virtual DtVrfObject* lookupVrfObject(
const DtEntityIdentifier& key);
234 virtual const DtVrfObject* lookupVrfObject(
const DtEntityIdentifier& key)
const;
237 const DtGlobalObjectDesignator& globalId);
238 virtual const DtVrfObject* lookupVrfObjectByGlobalId(
239 const DtGlobalObjectDesignator& globalId)
const;
242 warnOnFailure =
true);
244 warnOnFailure =
true)
const;
246 virtual const DtVrfObject* lookupVrfObjectByEchelonIdString(
248 virtual DtVrfObject* lookupVrfObjectByEchelonIdString(
251 virtual const DtVrfObject* lookupVrfObjectByEchelonId(
259 virtual DtVrfObject * lookupVrfObjectByObjectId(
const DtObjectId &
id)
const;
265 virtual DtGlobalObjectDesignator lookupGlobalId(
const DtObjectId &
id)
const;
270 virtual DtObjectId lookupObjectId(
const DtGlobalObjectDesignator & globalId);
274 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
277 const DtObjectType& filter = DtObjectType::anyType(),
278 bool invertFilter =
false)
const;
286 bool invertFilter =
false,
void* usrData = 0)
const;
290 virtual void removeAndDelete(
const DtString& objectName);
291 virtual void removeAndDelete(
const DtEntityIdentifier& key);
295 virtual void removeAndDeleteAllLocals();
305 virtual void setExerciseConnection(DtExerciseConn* connection);
306 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
310 virtual void setPublishZeroVelocityWhenPaused(
bool);
311 virtual bool publishZeroVelocityWhenPaused()
const;
316 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
317 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
320 virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList()
const;
324 virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
332 virtual void registerInterfaceCallbacks();
377 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
383 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
386 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
409 virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
414 virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
416 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
417 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
418 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
419 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
421 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
422 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
423 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
424 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
430 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
431 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
432 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
433 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
435 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
437 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
440 virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
442 virtual void processEnvProcessAddedCallback(
443 DtReflectedEnvironmentProcess* envProcess);
444 virtual void processEnvProcessRemovedCallback(
445 DtReflectedEnvironmentProcess* envProcess);
446 virtual bool processEnvProcessDiscoveryCriteria(
447 DtReflectedEnvironmentProcess* envProcess);
451 virtual void removeObjectSubordinates(
DtVrfObject*
object);
455 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key);
458 virtual void removeObjectsQueuedForRemoval();
479 DtReflectedEntity* entity);
482 DtReflectedAggregate* aggregate,
483 int superType = DtObjectTypeAggregate);
485 virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
497 const DtObjectType& objectType,
498 bool publishLocalObject =
true,
499 const DtString& objectName = DtString::nullString(),
500 const DtString& objectLabel = DtString::nullString(),
501 DtForceType forceType = DtForceOther,
502 const DtList* vertices = 0,
503 const DtTaitBryan* orientation = 0,
504 bool projection =
false,
505 bool closedFigure =
false,
506 const DtAppearance& appearance = DtAppearance::nullAppearance(),
507 const DtString& readerWriterName = DtString::nullString(),
509 bool createSubObjects =
false,
511 void* userInitData = 0,
512 bool organize =
true,
516 unsigned long requestId = 0,
517 const DtString& overlayParent =
"");
527 const DtObjectType& objectType,
528 bool publishLocalObject =
true,
529 const DtString& objectName = DtString::nullString(),
530 const DtString& objectLabel = DtString::nullString(),
531 DtForceType forceType = DtForceOther,
532 const DtVector& position = DtVector::zero(),
533 const DtTaitBryan* orientation = 0,
534 bool projection =
false,
535 bool closedFigure =
false,
536 const DtAppearance& appearance = DtAppearance::nullAppearance(),
537 const DtString& readerWriterName = DtString::nullString(),
539 bool createSubObjects =
false,
541 void* userInitData = 0,
542 bool organize =
true,
546 unsigned long requestId = 0,
const DtString& overlayParent =
"");
555 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
556 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent);
564 virtual DtVrfObject* createSubObjectFromParameterEntry(
568 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"");
571 virtual bool readOrderOfBattleFile(
const DtString & filename);
572 virtual bool writeOrderOfBattleFile(
const DtString & filename);
576 virtual bool objectShouldBeSavedToOrderOfBattle(
579 virtual DtlObjPtr
getData(DtlObjPtr args,
585 static void tickCallback(
void* args);
590 virtual void addVrfObjectAboutToBeAddedCallback(
592 const DtObjectType& filter = DtObjectType::anyType(),
593 bool invertFilter =
false);
598 virtual void addVrfObjectAddedCallback(
600 const DtObjectType& filter = DtObjectType::anyType(),
601 bool invertFilter =
false);
606 virtual void addVrfObjectAboutToBeLoadedCallback(
608 const DtObjectType& filter = DtObjectType::anyType(),
609 bool invertFilter =
false);
616 virtual void addVrfObjectAboutToBeRemovedCallback(
618 const DtObjectType& filter = DtObjectType::anyType(),
619 bool invertFilter =
false);
623 virtual void removeVrfObjectAboutToBeAddedCallback(
625 const DtObjectType& filter = DtObjectType::anyType(),
626 bool invertFilter =
false);
630 virtual void removeVrfObjectAboutToBeLoadedCallback(
632 const DtObjectType& filter = DtObjectType::anyType(),
633 bool invertFilter =
false);
637 virtual void removeVrfObjectAddedCallback(
639 const DtObjectType& filter = DtObjectType::anyType(),
640 bool invertFilter =
false);
644 virtual void removeVrfObjectAboutToBeRemovedCallback(
646 const DtObjectType& filter = DtObjectType::anyType(),
647 bool invertFilter =
false);
651 virtual void addObjectManagerAboutToRemoveAllCallback(
656 virtual void removeObjectManagerAboutToRemoveAllCallback(
660 virtual void addOrganizationManagerReadyCallback(
664 virtual void removeOrganizationManagerReadyCallback(
668 virtual void enableAutoReorganization();
669 virtual void disableAutoReorganization();
671 virtual bool autoReorganizeEnabled()
const;
674 virtual DtVrfObject* lookupTopLevelVrfObject(DtForceType forceType);
676 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
679 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
682 virtual DtString topLevelName(DtForceType forceType);
691 virtual DtString nextName(
const DtObjectType& objectType);
693 virtual DtString nextUnorganizedName();
696 virtual DtString uniquifyName(
const DtString& name,
const DtObjectType& objectType);
701 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
705 virtual DtReflectedObject* lookupReflectedObject(
706 const DtGlobalObjectDesignator& globalId)
const;
709 virtual void rediscoverObjects();
713 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
717 virtual void objectNameChanged(
const DtString& oldName,
730 virtual void removeNameAlias(
const DtString& alias);
749 const DtObjectType& aggregateType,
753 DtList* subordinateNames = 0,
754 const DtString& aggregateName = DtString::nullString());
760 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
765 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
766 const DtList* subordinateNames, DtAggregateState desiredState = DtFullyDisaggregated);
773 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
784 virtual void setCoordinateSystem(
const Coordinate_System* coordinateSystem);
787 virtual unsigned objectCount()
const;
790 virtual DtVrfObject* lookup(
const DtEntityIdentifier& key);
791 virtual const DtVrfObject* lookup(
const DtEntityIdentifier& key)
const;
794 virtual DtVrfObject* lookupObjectByGlobalId(
const DtGlobalObjectDesignator& globalId);
796 const DtGlobalObjectDesignator& globalId)
const;
803 virtual const DtSimulationAddress& simulationAddress()
const;
813 virtual bool createSimObjectList();
817 virtual DtHashlist* hashlist()
const;
822 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
823 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
842 static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
849 static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
863 static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
874 static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
882 static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
890 virtual bool processEntityDiscoveryCriteria(
891 DtReflectedEntity* entity);
898 virtual bool processAggregateDiscoveryCriteria(
899 DtReflectedAggregate* aggregate);
903 virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(
const DtGlobalObjectDesignator&
909 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
914 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
916 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
917 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
921 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
922 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
929 virtual void addSimObjectAboutToBeAddedCallback(
931 virtual void addSimObjectAddedCallback(
933 virtual void addSimObjectAboutToBeRemovedCallback(
935 virtual void addSimObjectAboutToBeLoadedCallback(
941 virtual void addSimObjectAboutToBeAddedCallback(
943 const DtObjectType& filter = DtObjectType::anyType(),
944 bool invertFilter =
false);
949 virtual void addSimObjectAddedCallback(
951 const DtObjectType& filter = DtObjectType::anyType(),
952 bool invertFilter =
false);
957 virtual void addSimObjectAboutToBeRemovedCallback(
959 const DtObjectType& filter = DtObjectType::anyType(),
960 bool invertFilter =
false);
965 virtual void addSimObjectAboutToBeLoadedCallback(
967 const DtObjectType& filter = DtObjectType::anyType(),
968 bool invertFilter =
false);
972 virtual void removeSimObjectAboutToBeAddedCallback(
974 const DtObjectType& filter = DtObjectType::anyType(),
975 bool invertFilter =
false);
977 virtual void removeSimObjectAboutToBeRemovedCallback(
982 virtual void removeSimObjectAddedCallback(
984 const DtObjectType& filter = DtObjectType::anyType(),
985 bool invertFilter =
false);
989 virtual void removeSimObjectAboutToBeLoadedCallback(
991 const DtObjectType& filter = DtObjectType::anyType(),
992 bool invertFilter =
false);
996 virtual void removeSimObjectAboutToBeAddedCallback(
998 virtual void removeSimObjectAddedCallback(
1000 virtual void removeSimObjectAboutToBeLoadedCallback(
1005 virtual void removeSimObjectAboutToBeRemovedCallback(
1007 const DtObjectType& filter = DtObjectType::anyType(),
1008 bool invertFilter =
false);
1013 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1019 virtual void invokeSimObjectAddedCallbacks(
1025 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1031 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1043 virtual void setSimObjectType(
const DtString& type);
1044 virtual const DtString& simObjectType()
const;
1048 virtual const DtEntityIdentifier& nextId();
1055 root =
"Object")
const;
1071 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1076 static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1083 bool includePseudoAggregates =
true)
const;
1089 static void designatorAddedCallback(DtReflectedDesignator * des,
1096 static void designatorRemovedCallback(DtReflectedDesignator * des,
1103 static void designatorChangedCallback(DtReflectedDesignator * des,
1111 static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1114 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1116 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1118 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1120 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1121 DtReflectedObject* activeSonar,
void* userData);
1123 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1125 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1127 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1129 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1130 DtReflectedObject* propNoise,
void* userData);
1134 virtual bool canSimulate()
const;
1137 virtual void printReflectedObjectCounts()
const;
1147 virtual void rediscoverNonVRFEntities();
1153 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1157 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1161 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject);
1163 virtual const Coordinate_System* coordinateSystem()
const;
1164 virtual Coordinate_System* coordinateSystem();
1172 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1175 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1176 int& totalLeafNodes)
const;
1187 void setTerrainDbFactory(DtTerrainDbFactory*);
1188 DtTerrainDbFactory* terrainDbFactory();
1204 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1205 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1206 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1207 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1208 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1210 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1211 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1221 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1222 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1223 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1224 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1225 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1226 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1229 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1230 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1233 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1240 static void createVrfObjectPostDrainCallback(
void* usr);
1241 static void deleteVrfObjectPostDrainCallback(
void* usr);
1242 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1243 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1244 static void aggregateAsPostDrainCallback(
void* usr);
1246 static void envProcessAddedCallback(
1247 DtReflectedEnvironmentProcess* envProcess,
void* userData);
1248 static void envProcessRemovedCallback(
1249 DtReflectedEnvironmentProcess* envProcess,
void* userData);
1250 static bool envProcessDiscoveryCriteria(
1251 DtReflectedObject* envProcess,
void* userData);
1271 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);