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;
314 virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList()
const;
318 virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
326 virtual void registerInterfaceCallbacks();
371 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
377 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
380 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
403 virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
408 virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
410 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
411 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
412 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
413 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
415 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
416 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
417 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
418 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
424 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
425 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
426 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
427 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
429 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
431 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
434 virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
436 virtual void processEnvProcessAddedCallback(
437 DtReflectedEnvironmentProcess* envProcess);
438 virtual void processEnvProcessRemovedCallback(
439 DtReflectedEnvironmentProcess* envProcess);
440 virtual bool processEnvProcessDiscoveryCriteria(
441 DtReflectedEnvironmentProcess* envProcess);
445 virtual void removeObjectSubordinates(
DtVrfObject*
object);
449 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key);
452 virtual void removeObjectsQueuedForRemoval();
473 DtReflectedEntity* entity);
476 DtReflectedAggregate* aggregate,
477 int superType = DtObjectTypeAggregate);
479 virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
491 const DtObjectType& objectType,
492 bool publishLocalObject =
true,
493 const DtString& objectName = DtString::nullString(),
494 const DtString& objectLabel = DtString::nullString(),
495 DtForceType forceType = DtForceOther,
496 const DtList* vertices = 0,
497 const DtTaitBryan* orientation = 0,
498 bool projection =
false,
499 bool closedFigure =
false,
500 const DtAppearance& appearance = DtAppearance::nullAppearance(),
501 const DtString& readerWriterName = DtString::nullString(),
503 bool createSubObjects =
false,
505 void* userInitData = 0,
506 bool organize =
true,
510 unsigned long requestId = 0,
511 const DtString& overlayParent =
"");
521 const DtObjectType& objectType,
522 bool publishLocalObject =
true,
523 const DtString& objectName = DtString::nullString(),
524 const DtString& objectLabel = DtString::nullString(),
525 DtForceType forceType = DtForceOther,
526 const DtVector& position = DtVector::zero(),
527 const DtTaitBryan* orientation = 0,
528 bool projection =
false,
529 bool closedFigure =
false,
530 const DtAppearance& appearance = DtAppearance::nullAppearance(),
531 const DtString& readerWriterName = DtString::nullString(),
533 bool createSubObjects =
false,
535 void* userInitData = 0,
536 bool organize =
true,
540 unsigned long requestId = 0,
const DtString& overlayParent =
"");
549 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
550 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent);
558 virtual DtVrfObject* createSubObjectFromParameterEntry(
562 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"");
565 virtual bool readOrderOfBattleFile(
const DtString & filename);
566 virtual bool writeOrderOfBattleFile(
const DtString & filename);
570 virtual bool objectShouldBeSavedToOrderOfBattle(
573 virtual DtlObjPtr
getData(DtlObjPtr args,
579 static void tickCallback(
void* args);
584 virtual void addVrfObjectAboutToBeAddedCallback(
586 const DtObjectType& filter = DtObjectType::anyType(),
587 bool invertFilter =
false);
592 virtual void addVrfObjectAddedCallback(
594 const DtObjectType& filter = DtObjectType::anyType(),
595 bool invertFilter =
false);
600 virtual void addVrfObjectAboutToBeLoadedCallback(
602 const DtObjectType& filter = DtObjectType::anyType(),
603 bool invertFilter =
false);
610 virtual void addVrfObjectAboutToBeRemovedCallback(
612 const DtObjectType& filter = DtObjectType::anyType(),
613 bool invertFilter =
false);
617 virtual void removeVrfObjectAboutToBeAddedCallback(
619 const DtObjectType& filter = DtObjectType::anyType(),
620 bool invertFilter =
false);
624 virtual void removeVrfObjectAboutToBeLoadedCallback(
626 const DtObjectType& filter = DtObjectType::anyType(),
627 bool invertFilter =
false);
631 virtual void removeVrfObjectAddedCallback(
633 const DtObjectType& filter = DtObjectType::anyType(),
634 bool invertFilter =
false);
638 virtual void removeVrfObjectAboutToBeRemovedCallback(
640 const DtObjectType& filter = DtObjectType::anyType(),
641 bool invertFilter =
false);
645 virtual void addObjectManagerAboutToRemoveAllCallback(
650 virtual void removeObjectManagerAboutToRemoveAllCallback(
654 virtual void addOrganizationManagerReadyCallback(
658 virtual void removeOrganizationManagerReadyCallback(
662 virtual void enableAutoReorganization();
663 virtual void disableAutoReorganization();
665 virtual bool autoReorganizeEnabled()
const;
668 virtual DtVrfObject* lookupTopLevelVrfObject(DtForceType forceType);
670 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
673 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
676 virtual DtString topLevelName(DtForceType forceType);
685 virtual DtString nextName(
const DtObjectType& objectType);
687 virtual DtString nextUnorganizedName();
690 virtual DtString uniquifyName(
const DtString& name,
const DtObjectType& objectType);
695 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
699 virtual DtReflectedObject* lookupReflectedObject(
700 const DtGlobalObjectDesignator& globalId)
const;
703 virtual void rediscoverObjects();
707 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
711 virtual void objectNameChanged(
const DtString& oldName,
724 virtual void removeNameAlias(
const DtString& alias);
743 const DtObjectType& aggregateType,
747 DtList* subordinateNames = 0,
748 const DtString& aggregateName = DtString::nullString());
754 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
759 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
760 const DtList* subordinateNames, DtAggregateState desiredState = DtFullyDisaggregated);
767 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
778 virtual void setCoordinateSystem(
const Coordinate_System* coordinateSystem);
781 virtual unsigned objectCount()
const;
784 virtual DtVrfObject* lookup(
const DtEntityIdentifier& key);
785 virtual const DtVrfObject* lookup(
const DtEntityIdentifier& key)
const;
788 virtual DtVrfObject* lookupObjectByGlobalId(
const DtGlobalObjectDesignator& globalId);
790 const DtGlobalObjectDesignator& globalId)
const;
797 virtual const DtSimulationAddress& simulationAddress()
const;
807 virtual bool createSimObjectList();
811 virtual DtHashlist* hashlist()
const;
816 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
817 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
836 static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
843 static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
857 static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
868 static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
876 static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
884 virtual bool processEntityDiscoveryCriteria(
885 DtReflectedEntity* entity);
892 virtual bool processAggregateDiscoveryCriteria(
893 DtReflectedAggregate* aggregate);
897 virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(
const DtGlobalObjectDesignator&
903 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
908 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
910 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
911 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
915 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
916 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
923 virtual void addSimObjectAboutToBeAddedCallback(
925 virtual void addSimObjectAddedCallback(
927 virtual void addSimObjectAboutToBeRemovedCallback(
929 virtual void addSimObjectAboutToBeLoadedCallback(
935 virtual void addSimObjectAboutToBeAddedCallback(
937 const DtObjectType& filter = DtObjectType::anyType(),
938 bool invertFilter =
false);
943 virtual void addSimObjectAddedCallback(
945 const DtObjectType& filter = DtObjectType::anyType(),
946 bool invertFilter =
false);
951 virtual void addSimObjectAboutToBeRemovedCallback(
953 const DtObjectType& filter = DtObjectType::anyType(),
954 bool invertFilter =
false);
959 virtual void addSimObjectAboutToBeLoadedCallback(
961 const DtObjectType& filter = DtObjectType::anyType(),
962 bool invertFilter =
false);
966 virtual void removeSimObjectAboutToBeAddedCallback(
968 const DtObjectType& filter = DtObjectType::anyType(),
969 bool invertFilter =
false);
971 virtual void removeSimObjectAboutToBeRemovedCallback(
976 virtual void removeSimObjectAddedCallback(
978 const DtObjectType& filter = DtObjectType::anyType(),
979 bool invertFilter =
false);
983 virtual void removeSimObjectAboutToBeLoadedCallback(
985 const DtObjectType& filter = DtObjectType::anyType(),
986 bool invertFilter =
false);
990 virtual void removeSimObjectAboutToBeAddedCallback(
992 virtual void removeSimObjectAddedCallback(
994 virtual void removeSimObjectAboutToBeLoadedCallback(
999 virtual void removeSimObjectAboutToBeRemovedCallback(
1001 const DtObjectType& filter = DtObjectType::anyType(),
1002 bool invertFilter =
false);
1007 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1013 virtual void invokeSimObjectAddedCallbacks(
1019 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1025 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1037 virtual void setSimObjectType(
const DtString& type);
1038 virtual const DtString& simObjectType()
const;
1042 virtual const DtEntityIdentifier& nextId();
1049 root =
"Object")
const;
1065 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1070 static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1077 bool includePseudoAggregates =
true)
const;
1083 static void designatorAddedCallback(DtReflectedDesignator * des,
1090 static void designatorRemovedCallback(DtReflectedDesignator * des,
1097 static void designatorChangedCallback(DtReflectedDesignator * des,
1105 static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1108 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1110 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1112 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1114 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1115 DtReflectedObject* activeSonar,
void* userData);
1117 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1119 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1121 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1123 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1124 DtReflectedObject* propNoise,
void* userData);
1128 virtual bool canSimulate()
const;
1131 virtual void printReflectedObjectCounts()
const;
1141 virtual void rediscoverNonVRFEntities();
1147 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1151 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1155 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject);
1157 virtual const Coordinate_System* coordinateSystem()
const;
1158 virtual Coordinate_System* coordinateSystem();
1166 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1169 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1170 int& totalLeafNodes)
const;
1181 void setTerrainDbFactory(DtTerrainDbFactory*);
1182 DtTerrainDbFactory* terrainDbFactory();
1198 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1199 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1200 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1201 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1202 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1204 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1205 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1215 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1216 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1217 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1218 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1219 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1220 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1223 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1224 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1227 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1234 static void createVrfObjectPostDrainCallback(
void* usr);
1235 static void deleteVrfObjectPostDrainCallback(
void* usr);
1236 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1237 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1238 static void aggregateAsPostDrainCallback(
void* usr);
1240 static void envProcessAddedCallback(
1241 DtReflectedEnvironmentProcess* envProcess,
void* userData);
1242 static void envProcessRemovedCallback(
1243 DtReflectedEnvironmentProcess* envProcess,
void* userData);
1244 static bool envProcessDiscoveryCriteria(
1245 DtReflectedObject* envProcess,
void* userData);
1265 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);