20 #include <vrfExtProtocol/objTypeEnums.h>
24 #include <vlpi/appearance.h>
25 #include <vlutil/vlFilename.h>
26 #include <vlutil/vlList.h>
27 #include <vlutil/vlConfig.h>
28 #include <vlutil/vlSmartPointers.h>
36 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
38 class DtTerrainDbFactory;
43 class DtReflectedObject;
44 class DtReflectedAggregate;
45 class DtReflectedExtEntity;
46 class DtReflectedExtAggregate;
47 class DtReflectedExtEntityList;
48 class DtReflectedExtAggregateList;
51 class DtSimObjectSubComponentTypes;
53 class DtAggregateStateRepository;
54 class DtBaseEntityStateRepository;
57 class DtVrfObjectManagerTickArguments;
58 class DtSimTickArguments;
63 class DtReflectedEnvironmentProcess;
64 class DtReflectedControlObjectList;
66 class DtReflectedObject;
69 class Coordinate_System;
74 class DtReflectedDesignator;
76 class DtReflectedDesignatorList;
77 class DtReflectedActiveSonar;
78 class DtReflectedActiveSonarList;
79 class DtReflectedPropulsionNoise;
80 class DtReflectedPropulsionNoiseList;
150 DtUseParameterDatabaseAggregateState = 0,
152 DtCreateDisaggregatedEntity
153 } DtAggregateCreationMode;
170 virtual void clearRemoteComponentAttachmentSystem();
174 virtual void createRemoteComponentAttachmentManager();
177 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
186 virtual bool create();
188 virtual bool createObjectNameHashlist();
191 virtual bool createGlobalIdHashlist();
199 virtual void createDIGuyCharacterManager(
const DtFilename & diGuyDataFile,
200 const DtFilename & diGuyAnimationsFile);
227 virtual DtVrfObject* lookupVrfObject(
const DtEntityIdentifier& key);
228 virtual const DtVrfObject* lookupVrfObject(
const DtEntityIdentifier& key)
const;
231 const DtGlobalObjectDesignator& globalId);
232 virtual const DtVrfObject* lookupVrfObjectByGlobalId(
233 const DtGlobalObjectDesignator& globalId)
const;
236 warnOnFailure =
true);
238 warnOnFailure =
true)
const;
240 virtual const DtVrfObject* lookupVrfObjectByEchelonIdString(
242 virtual DtVrfObject* lookupVrfObjectByEchelonIdString(
245 virtual const DtVrfObject* lookupVrfObjectByEchelonId(
253 virtual DtVrfObject * lookupVrfObjectByObjectId(
const DtObjectId &
id)
const;
259 virtual DtGlobalObjectDesignator lookupGlobalId(
const DtObjectId &
id)
const;
264 virtual DtObjectId lookupObjectId(
const DtGlobalObjectDesignator & globalId);
268 bool reevaluateFlag =
false, DtTime evaluationPeriod = 0);
271 const DtObjectType& filter = DtObjectType::anyType(),
272 bool invertFilter =
false)
const;
280 bool invertFilter =
false,
void* usrData = 0)
const;
284 virtual void removeAndDelete(
const DtString& objectName);
285 virtual void removeAndDelete(
const DtEntityIdentifier& key);
289 virtual void removeAndDeleteAllLocals();
293 virtual void removeAndDeleteAll();
299 virtual void setExerciseConnection(DtExerciseConn* connection);
300 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
303 virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList()
const;
307 virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn);
315 virtual void registerInterfaceCallbacks();
360 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
366 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
369 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
391 virtual void processCreateControlObject(
DtSimMessage* msg);
394 virtual void processRequestEntityName(
DtSimMessage* msg);
400 virtual void processEntityAddedCallback(DtReflectedExtEntity* entity);
401 virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate);
405 virtual void processEntityRemovedCallback(DtReflectedExtEntity* entity);
406 virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate);
408 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
409 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
410 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
411 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
413 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
414 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
415 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
416 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
422 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
423 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
424 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
425 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
427 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
429 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
432 virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate);
434 virtual void processEnvProcessAddedCallback(
435 DtReflectedEnvironmentProcess* envProcess);
436 virtual void processEnvProcessRemovedCallback(
437 DtReflectedEnvironmentProcess* envProcess);
438 virtual bool processEnvProcessDiscoveryCriteria(
439 DtReflectedEnvironmentProcess* envProcess);
443 virtual void removeObjectSubordinates(
DtVrfObject*
object);
447 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key);
450 virtual void removeObjectsQueuedForRemoval();
471 DtReflectedEntity* entity);
474 DtReflectedAggregate* aggregate,
475 int superType = DtObjectTypeAggregate);
477 virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess);
489 const DtObjectType& objectType,
490 bool publishLocalObject =
true,
491 const DtString& objectName = DtString::nullString(),
492 const DtString& objectLabel = DtString::nullString(),
493 DtForceType forceType = DtForceOther,
494 const DtList* vertices = 0,
495 const DtTaitBryan* orientation = 0,
496 bool projection =
false,
497 bool closedFigure =
false,
498 const DtAppearance& appearance = DtAppearance::nullAppearance(),
499 const DtString& readerWriterName = DtString::nullString(),
501 bool createSubObjects =
false,
503 void* userInitData = 0,
504 bool organize =
true,
517 const DtObjectType& objectType,
518 bool publishLocalObject =
true,
519 const DtString& objectName = DtString::nullString(),
520 const DtString& objectLabel = DtString::nullString(),
521 DtForceType forceType = DtForceOther,
522 const DtVector& position = DtVector::zero(),
523 const DtTaitBryan* orientation = 0,
524 bool projection =
false,
525 bool closedFigure =
false,
526 const DtAppearance& appearance = DtAppearance::nullAppearance(),
527 const DtString& readerWriterName = DtString::nullString(),
529 bool createSubObjects =
false,
531 void* userInitData = 0,
532 bool organize =
true,
544 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
545 bool publishSubobjects);
553 virtual DtVrfObject* createSubObjectFromParameterEntry(
557 bool publishSubObject);
560 virtual bool readOrderOfBattleFile(
const DtString & filename);
561 virtual bool writeOrderOfBattleFile(
const DtString & filename);
565 virtual bool objectShouldBeSavedToOrderOfBattle(
568 virtual DtlObjPtr
getData(DtlObjPtr args,
const DtFilename& searchPath,
573 static void tickCallback(
void* args);
578 virtual void addVrfObjectAboutToBeAddedCallback(
580 const DtObjectType& filter = DtObjectType::anyType(),
581 bool invertFilter =
false);
586 virtual void addVrfObjectAddedCallback(
588 const DtObjectType& filter = DtObjectType::anyType(),
589 bool invertFilter =
false);
594 virtual void addVrfObjectAboutToBeLoadedCallback(
596 const DtObjectType& filter = DtObjectType::anyType(),
597 bool invertFilter =
false);
604 virtual void addVrfObjectAboutToBeRemovedCallback(
606 const DtObjectType& filter = DtObjectType::anyType(),
607 bool invertFilter =
false);
611 virtual void removeVrfObjectAboutToBeAddedCallback(
613 const DtObjectType& filter = DtObjectType::anyType(),
614 bool invertFilter =
false);
618 virtual void removeVrfObjectAboutToBeLoadedCallback(
620 const DtObjectType& filter = DtObjectType::anyType(),
621 bool invertFilter =
false);
625 virtual void removeVrfObjectAddedCallback(
627 const DtObjectType& filter = DtObjectType::anyType(),
628 bool invertFilter =
false);
632 virtual void removeVrfObjectAboutToBeRemovedCallback(
634 const DtObjectType& filter = DtObjectType::anyType(),
635 bool invertFilter =
false);
639 virtual void addObjectManagerAboutToRemoveAllCallback(
644 virtual void removeObjectManagerAboutToRemoveAllCallback(
648 virtual void addOrganizationManagerReadyCallback(
652 virtual void removeOrganizationManagerReadyCallback(
656 virtual void enableAutoReorganization();
657 virtual void disableAutoReorganization();
659 virtual bool autoReorganizeEnabled()
const;
662 virtual DtVrfObject* lookupTopLevelVrfObject(DtForceType forceType);
664 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
667 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
670 virtual DtString topLevelName(DtForceType forceType);
679 virtual DtString nextName(
const DtObjectType& objectType);
681 virtual DtString nextUnorganizedName();
684 virtual DtString uniquifyName(
const DtString& name,
const DtObjectType& objectType);
689 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
694 virtual bool readOverlayFile(
const DtString& filename);
698 virtual DtReflectedObject* lookupReflectedObject(
699 const DtGlobalObjectDesignator& globalId)
const;
702 virtual void rediscoverObjects();
706 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
710 virtual void objectNameChanged(
const DtString& oldName,
723 virtual void removeNameAlias(
const DtString& alias);
742 const DtObjectType& aggregateType,
746 DtList* subordinateNames = 0,
747 const DtString& aggregateName = DtString::nullString());
752 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
753 const DtList* subordinateNames, DtAggregateState desiredState = DtFullyDisaggregated);
760 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
771 virtual void setCoordinateSystem(
const Coordinate_System* coordinateSystem);
774 virtual unsigned objectCount()
const;
777 virtual DtVrfObject* lookup(
const DtEntityIdentifier& key);
778 virtual const DtVrfObject* lookup(
const DtEntityIdentifier& key)
const;
781 virtual DtVrfObject* lookupObjectByGlobalId(
const DtGlobalObjectDesignator& globalId);
783 const DtGlobalObjectDesignator& globalId)
const;
790 virtual const DtSimulationAddress& simulationAddress()
const;
800 virtual bool createSimObjectList();
804 virtual DtHashlist* hashlist()
const;
809 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
810 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
816 static void entityAddedCallback(DtReflectedExtEntity* entity,
void* userData);
822 static void entityRemovedCallback(DtReflectedExtEntity* entity,
829 static void aggregateAddedCallback(DtReflectedExtAggregate* entity,
836 static void aggregateRemovedCallback(DtReflectedExtAggregate* entity,
843 static void entityChangedCallback(DtReflectedExtEntity* entity,
850 static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate,
854 virtual void processEntityChanged(DtReflectedExtEntity* entity);
861 static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity,
869 static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate,
877 virtual bool processEntityDiscoveryCriteria(
878 DtReflectedEntity* entity);
885 virtual bool processAggregateDiscoveryCriteria(
886 DtReflectedAggregate* aggregate);
890 virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(
const DtGlobalObjectDesignator&
896 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
901 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
903 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
904 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
906 DtReflectedDesignatorList* reflectedDesignatorList()
const;
908 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
909 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
916 virtual void addSimObjectAboutToBeAddedCallback(
918 virtual void addSimObjectAddedCallback(
920 virtual void addSimObjectAboutToBeRemovedCallback(
922 virtual void addSimObjectAboutToBeLoadedCallback(
928 virtual void addSimObjectAboutToBeAddedCallback(
930 const DtObjectType& filter = DtObjectType::anyType(),
931 bool invertFilter =
false);
936 virtual void addSimObjectAddedCallback(
938 const DtObjectType& filter = DtObjectType::anyType(),
939 bool invertFilter =
false);
944 virtual void addSimObjectAboutToBeRemovedCallback(
946 const DtObjectType& filter = DtObjectType::anyType(),
947 bool invertFilter =
false);
952 virtual void addSimObjectAboutToBeLoadedCallback(
954 const DtObjectType& filter = DtObjectType::anyType(),
955 bool invertFilter =
false);
959 virtual void removeSimObjectAboutToBeAddedCallback(
961 const DtObjectType& filter = DtObjectType::anyType(),
962 bool invertFilter =
false);
964 virtual void removeSimObjectAboutToBeRemovedCallback(
969 virtual void removeSimObjectAddedCallback(
971 const DtObjectType& filter = DtObjectType::anyType(),
972 bool invertFilter =
false);
976 virtual void removeSimObjectAboutToBeLoadedCallback(
978 const DtObjectType& filter = DtObjectType::anyType(),
979 bool invertFilter =
false);
983 virtual void removeSimObjectAboutToBeAddedCallback(
985 virtual void removeSimObjectAddedCallback(
987 virtual void removeSimObjectAboutToBeLoadedCallback(
992 virtual void removeSimObjectAboutToBeRemovedCallback(
994 const DtObjectType& filter = DtObjectType::anyType(),
995 bool invertFilter =
false);
1000 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1006 virtual void invokeSimObjectAddedCallbacks(
1012 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1018 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1022 virtual DtReflectedExtEntityList* reflectedEntityList()
const;
1025 virtual DtReflectedExtAggregateList* reflectedAggregateList()
const;
1030 virtual void setSimObjectType(
const DtString& type);
1031 virtual const DtString& simObjectType()
const;
1035 virtual const DtEntityIdentifier& nextId();
1042 root =
"Object")
const;
1046 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1051 static int aggregateSuperType(DtAggregateStateRepository* aggregate);
1058 bool includePsuedoAggregates =
true)
const;
1064 static void designatorAddedCallback(DtReflectedDesignator * des,
1071 static void designatorRemovedCallback(DtReflectedDesignator * des,
1078 static void designatorChangedCallback(DtReflectedDesignator * des,
1086 static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des,
1089 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1091 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1093 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1095 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1096 DtReflectedObject* activeSonar,
void* userData);
1098 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1100 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1102 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1104 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1105 DtReflectedObject* propNoise,
void* userData);
1109 virtual bool canSimulate()
const;
1112 virtual void printReflectedObjectCounts()
const;
1122 virtual void rediscoverNonVRFEntities();
1128 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1132 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1136 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject);
1139 virtual const Coordinate_System* coordinateSystem()
const;
1140 virtual Coordinate_System* coordinateSystem();
1151 void setTerrainDbFactory(DtTerrainDbFactory*);
1152 DtTerrainDbFactory* terrainDbFactory();
1168 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1169 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1170 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1171 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1172 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1174 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1175 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1185 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1186 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1187 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1188 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1189 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1190 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1196 static void createVrfObjectPostDrainCallback(
void* usr);
1197 static void deleteVrfObjectPostDrainCallback(
void* usr);
1198 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1199 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1200 static void orderOfBattleOpPostDrainCallback(
void* usr);
1201 static void aggregateAsPostDrainCallback(
void* usr);
1203 static void envProcessAddedCallback(
1204 DtReflectedEnvironmentProcess* envProcess,
void* userData);
1205 static void envProcessRemovedCallback(
1206 DtReflectedEnvironmentProcess* envProcess,
void* userData);
1207 static bool envProcessDiscoveryCriteria(
1208 DtReflectedObject* envProcess,
void* userData);
1228 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);