33 #include <vlpi/appearance.h>
34 #include <vlutil/vlFilename.h>
35 #include <vlutil/vlList.h>
36 #include <vlutil/vlHashlist.h>
37 #include <vlutil/vlConfig.h>
38 #include <vlutil/vlSmartPointers.h>
41 #include <vl/fomMapper.h>
48 #include <boost/unordered_map.hpp>
49 #include <boost/unordered_set.hpp>
50 #include <tbb/spin_rw_mutex.h>
53 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
57 class DtReflectedAggregate;
65 class DtSimObjectSubComponentTypes;
70 class DtBaseEntityStateRepository;
73 class DtVrfObjectManagerTickArguments;
75 class DtSimTickArguments;
90 class DtReflectedDesignator;
93 class DtReflectedActiveSonar;
94 class DtReflectedActiveSonarList;
95 class DtReflectedPropulsionNoise;
96 class DtReflectedPropulsionNoiseList;
100 class DtlInputStream;
104 class DtReflectedIffList;
105 class DtReflectedIff;
108 namespace makVrfVrlinkExtToolkit
110 class DtReflectedExtendedAttributesObjectList;
217 DtUseParameterDatabaseAggregateState = 0,
219 DtCreateDisaggregatedEntity
220 } DtAggregateCreationMode;
237 virtual void clearRemoteComponentAttachmentSystem();
244 virtual bool reuseEntityIdentifiersOnScenarioLoad()
const;
245 virtual void setReuseEntityIdentifiersOnScenarioLoad(
bool);
249 virtual DtEntityIdentifier nextEntityIdentifier(
DtVrfObject*,
const DtEntityIdentifier&);
250 virtual void addVrfObjectAboutToBePublishedCallback(
252 virtual void removeVrfObjectAboutToBePublishedCallback(
257 virtual void createRemoteComponentAttachmentManager();
260 virtual bool isRemoteComponentAttachment(
const DtUUID&)
const;
263 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
272 virtual bool create();
279 virtual bool createDIGuyCharacterManager(
const DtFilename & diGuyAnimationsFile);
286 virtual DtFilename metaDataFilename(
const DtObjectType&)
const;
306 virtual void completeObjectAddition(
DtVrfObject* simObject);
309 virtual bool loadingScenarioInformation()
const;
330 virtual bool registerExtendedProperties();
334 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
337 virtual void setImportingScenario(
bool);
338 virtual bool importingScenario()
const;
346 bool invertFilter =
false)
const;
354 bool invertFilter =
false,
void* usrData = 0)
const;
361 virtual void removeAndDelete(
const DtUUID& objectName,
bool andRemoveFromOrbat);
363 virtual void removeAndDelete(
const DtEntityIdentifier& key,
bool andRemoveFromOrbat);
364 virtual void removeAndDelete(
DtVrfObject*
object,
bool andRemoveFromOrbat);
367 std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(
bool onlyVrfSimulated =
true)
const;
370 virtual void removeAndDeleteAllLocals(
bool andDeleteFromOrbat =
false);
380 virtual void setExerciseConnection(DtExerciseConn* connection);
381 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
385 virtual void setPublishZeroVelocityWhenPaused(
bool);
386 virtual bool publishZeroVelocityWhenPaused()
const;
391 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
392 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
395 virtual void overrideDeadReckoningAlgorithm(DtDeadReckonTypes drAlg);
399 virtual bool isDeadReckonAlgorithmOverridden(DtDeadReckonTypes& drAlg)
const;
403 virtual void removeDeadReckoningAlgorithmOverride();
412 virtual bool hasPermissionToDisplayTaskVisualizations(
const DtUUID& uuid);
415 virtual void setMaxObjectsWithTaskVisualizations(
unsigned max);
416 virtual unsigned maxObjectsWithTaskVisualizations()
const;
420 virtual void setUseDrawControlForTaskVisualizations(
bool);
421 virtual bool useDrawControlForTaskVisualizations()
const;
431 virtual bool objectInRemovalQueue(
const DtUUID& uuid);
439 virtual void registerInterfaceCallbacks();
489 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
495 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
498 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
517 virtual void processDeleteDynamicTerrainServer(
DtSimMessage*);
531 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
532 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
533 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
534 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
536 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
537 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
538 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
539 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
545 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
546 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
547 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
548 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
550 virtual void processIffAddedCallback(DtReflectedIff* des);
551 virtual void processIffRemovedCallback(DtReflectedIff* des);
552 virtual void processIffChangedCallback(DtReflectedIff* des);
553 virtual DtBoolean processIffDiscoveryCriteria(DtReflectedIff*);
555 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
557 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
558 virtual DtReflectedIff* iffForHost(
const DtVrfObject* host)
const;
565 virtual void processEnvProcessAddedCallback(
567 virtual void processEnvProcessRemovedCallback(
569 virtual bool processEnvProcessDiscoveryCriteria(
574 virtual void removeObjectSubordinates(
DtVrfObject*
object,
bool andRemoveFromOrbat);
578 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key,
bool andRemoveFromOrbat =
false);
579 virtual void queueObjectForRemoval(
const DtUUID& key,
bool andRemoveFromOrbat =
false);
582 virtual void removeObjectsQueuedForRemoval();
606 DtReflectedAggregate* aggregate,
622 bool publishLocalObject =
true,
623 const DtString& objectName = DtString::nullString(),
624 const DtString& objectLabel = DtString::nullString(),
625 DtForceType forceType = DtForceOther,
626 const DtList* vertices = 0,
627 const DtTaitBryan* orientation = 0,
628 bool projection =
false,
629 bool closedFigure =
false,
630 const DtAppearance& appearance = DtAppearance::nullAppearance(),
631 const DtString& readerWriterName = DtString::nullString(),
633 bool createSubObjects =
false,
635 void* userInitData = 0,
636 bool organize =
true,
640 unsigned long requestId = 0,
643 bool addToOrbat =
false);
654 bool publishLocalObject =
true,
655 const DtString& objectName = DtString::nullString(),
656 const DtString& objectLabel = DtString::nullString(),
657 DtForceType forceType = DtForceOther,
658 const DtVector& position = DtVector::zero(),
659 const DtTaitBryan* orientation = 0,
660 bool projection =
false,
661 bool closedFigure =
false,
662 const DtAppearance& appearance = DtAppearance::nullAppearance(),
663 const DtString& readerWriterName = DtString::nullString(),
665 bool createSubObjects =
false,
667 void* userInitData = 0,
668 bool organize =
true,
672 unsigned long requestId = 0,
const DtString& overlayParent =
"",
674 bool addToOrbat =
false);
683 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
684 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent,
bool addToOrbat);
692 virtual DtVrfObject* createSubObjectFromParameterEntry(
696 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"",
698 bool addToOrbat =
true);
701 virtual bool readOrderOfBattleFile(
const DtFilename &
filename);
702 virtual bool readOrderOfBattleFile(
const std::vector<std::string*>& oob);
705 virtual bool readOrderOfBattleFile(DtlInputStream*);
709 virtual bool writeOrderOfBattleFile(std::string&
stream,
int& numberOfLuaScripts);
710 virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams,
int& numberOfLuaScripts);
714 virtual bool writeSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags,
715 boost::unordered_set<DtUUID>& uuidsSaved);
718 virtual void preallocateLuaScriptHandles(
int);
723 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags, DtForceType force,
724 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
725 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
726 const DtFilename& scenarioZipFile,
const DtString&
filename,
int flags, DtForceType force,
727 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
728 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
int flags, DtForceType force, DtlObjPtr& args);
729 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream,
int flags, DtForceType force,
730 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
735 virtual bool objectShouldBeSavedToOrderOfBattle(
737 virtual bool objectShouldBeSavedToSimulationObjectGroup(
740 virtual DtVrfObject* createObjectFromMemoryBuffer(
const std::string& buffer);
744 virtual bool hasUUIDOrMarkingText(DtlObjPtr args,
DtUUID&)
const;
746 virtual DtlObjPtr
getData(DtlObjPtr args,
752 static void tickCallback(
void* args);
757 virtual void addVrfObjectAboutToBeAddedCallback(
760 bool invertFilter =
false);
765 virtual void addVrfObjectAddedCallback(
768 bool invertFilter =
false);
773 virtual void addVrfObjectAboutToBeLoadedCallback(
776 bool invertFilter =
false);
782 virtual void addVrfObjectAboutToBeRemovedCallback(
785 bool invertFilter =
false);
789 virtual void removeVrfObjectAboutToBeAddedCallback(
792 bool invertFilter =
false);
796 virtual void removeVrfObjectAboutToBeLoadedCallback(
799 bool invertFilter =
false);
803 virtual void removeVrfObjectAddedCallback(
806 bool invertFilter =
false);
810 virtual void removeVrfObjectAboutToBeRemovedCallback(
813 bool invertFilter =
false);
817 virtual void addObjectManagerAboutToRemoveAllCallback(
822 virtual void removeObjectManagerAboutToRemoveAllCallback(
826 virtual void addOrganizationManagerReadyCallback(
830 virtual void removeOrganizationManagerReadyCallback(
834 virtual void enableAutoReorganization();
835 virtual void disableAutoReorganization();
837 virtual bool autoReorganizeEnabled()
const;
840 virtual DtEntityIdentifier mapUUIDToEntityIdentifier(
const DtUUID&)
const;
847 virtual bool objectNameExists(
const DtString&)
const;
858 virtual DtString nextNameWithPrefix(
int maxLength,
862 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
865 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
868 virtual DtString topLevelName(DtForceType forceType);
879 virtual DtString nextUnorganizedName();
887 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
895 virtual void rediscoverObjects(
const std::set<DtGlobalObjectDesignator>& ignore =
896 std::set<DtGlobalObjectDesignator>());
900 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
909 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
946 const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
947 const DtString& aggregateName = DtString::nullString(),
948 bool addToOrbat =
true);
951 virtual double timeOfDay()
const;
954 virtual double dateAndTimeOfDay()
const;
960 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
965 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
966 const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
973 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
990 virtual unsigned objectCount()
const;
1018 virtual bool uuidExists(
const DtUUID&)
const;
1024 virtual void removeNameAlias(
const DtString& alias);
1037 virtual bool markingTextExists(
const DtString&)
const;
1040 virtual const DtSimulationAddress& simulationAddress()
const;
1050 virtual bool createSimObjectList();
1059 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
1060 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1127 virtual bool processEntityDiscoveryCriteria(
1135 virtual bool processAggregateDiscoveryCriteria(
1136 DtReflectedAggregate* aggregate);
1144 virtual bool hostingDynamicTerrainServer()
const;
1149 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
1154 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1156 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1157 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1158 virtual void createRemoteEmitterSystemList(DtExerciseConn* exConn);
1159 virtual void createRemoteIffList(DtExerciseConn* exConn);
1164 virtual void createRemoteExtendedAttributesList(DtExerciseConn* exConn);
1169 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
1170 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
1171 DtReflectedIffList* reflectedIffList()
const;
1177 virtual void addSimObjectQueuedForRemovalCallback(
1179 virtual void removeSimObjectQueuedForRemovalCallback(
1181 virtual void invokeSimObjectQueuedForRemovalCallbacks(
1187 virtual void addSimObjectAboutToBeAddedCallback(
1190 bool invertFilter =
false);
1195 virtual void addSimObjectAddedCallback(
1198 bool invertFilter =
false);
1203 virtual void addSimObjectAboutToBeRemovedCallback(
1206 bool invertFilter =
false);
1211 virtual void addSimObjectAboutToBeLoadedCallback(
1214 bool invertFilter =
false);
1218 virtual void removeSimObjectAboutToBeAddedCallback(
1221 bool invertFilter =
false);
1225 virtual void removeSimObjectAddedCallback(
1228 bool invertFilter =
false);
1232 virtual void removeSimObjectAboutToBeLoadedCallback(
1235 bool invertFilter =
false);
1239 virtual void removeSimObjectAboutToBeRemovedCallback(
1242 bool invertFilter =
false);
1247 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1253 virtual void invokeSimObjectAddedCallbacks(
1259 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1265 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1277 virtual void setSimObjectType(
const DtString& type);
1278 virtual const DtString& simObjectType()
const;
1282 virtual void setOrbatEnabled(
bool);
1283 virtual bool orbatEnabled()
const;
1286 virtual void setOrderOfBattleObjectsAddedToOrbatByDefault(
bool b);
1287 virtual bool orderOfBattleObjectsAddedToOrbatByDefault()
const;
1290 virtual void closingScenario();
1294 virtual bool addUUIDMappingForObject(
DtVrfObject* vrfObject);
1297 virtual void removeUUIDMappingForObject(
DtVrfObject* vrfObject);
1300 virtual DtEntityIdentifier nextId(
DtVrfObject* o = NULL);
1307 root =
"Object")
const;
1323 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1335 bool includePseudoAggregates =
true)
const;
1341 static void designatorAddedCallback(DtReflectedDesignator * des,
1348 static void designatorRemovedCallback(DtReflectedDesignator * des,
1355 static void designatorChangedCallback(DtReflectedDesignator * des,
1366 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1368 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1370 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1372 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1375 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1377 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1379 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1381 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1384 static void iffAddedCallback(DtReflectedIff* propNoise,
1386 static void iffRemovedCallback(DtReflectedIff* propNoise,
1388 static void iffChangedCallback(DtReflectedIff* propNoise,
1390 static DtBoolean iffDiscoveryCriteriaCallback(
1395 virtual bool canSimulate()
const;
1399 virtual void setCanSimulate(
bool);
1402 virtual void printReflectedObjectCounts()
const;
1406 virtual void addStealthType(
const DtEntityType&);
1407 virtual void removeStealthType(
const DtEntityType&);
1408 virtual bool isStealthType(
const DtEntityType&)
const;
1410 const std::vector<DtEntityType>&
stealthTypes()
const {
return myStealthTypes; };
1413 virtual std::set<DtVrfObject*> objectsOnOverlayLayer(
const DtString&)
const;
1416 static void vrfObjectDataChangedCallback(
DtVrfObject*,
int,
void*);
1417 virtual void processVrfObjectDataChanged(
DtVrfObject*,
int);
1420 virtual void clearObjectsAwaitingDiscovery();
1433 virtual void rediscoverNonVRFEntities();
1440 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1444 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1448 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject,
bool andRemoveFromOrbat =
false);
1459 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1462 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1463 int& totalLeafNodes)
const;
1467 virtual void checkPendingNameRemoval(
const DtString& markingText);
1471 virtual void removeVrfObject(
const DtUUID&,
bool queueDeletionOfVrfObject =
false);
1484 virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1487 virtual void deleteVrfObjectsToBeDeleted();
1490 virtual DtEntityType standardAggregateTypeToVrfAggregateType(
const DtEntityType& aggType)
const;
1496 #if DtHLA_1516_EVOLVED
1498 virtual void reserveGlobalObjectIds(
unsigned numToReserve);
1530 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1531 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1532 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1533 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1534 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1535 static void deleteDynamicTerrainServerCallback(
DtSimMessage*,
void*);
1537 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1538 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1548 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1549 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1550 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1551 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1552 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1553 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1556 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1557 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1560 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1564 static void requestJoystickControlsCallback(
DtSimMessage* msg,
void* usr);
1565 virtual void processRequestJoystickControls(
DtSimMessage*);
1569 virtual bool acceptRemoteEnvironmental(
const DtEntityType& et)
const;
1575 static void createVrfObjectPostDrainCallback(
void* usr);
1576 static void deleteVrfObjectPostDrainCallback(
void* usr);
1577 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1578 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1579 static void aggregateAsPostDrainCallback(
void* usr);
1581 static void envProcessAddedCallback(
1583 static void envProcessRemovedCallback(
1585 static bool envProcessDiscoveryCriteria(
1606 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);
1803 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;