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 #include <vl/fomMapper.h>
44 #include <boost/unordered_map.hpp>
45 #include <boost/unordered_set.hpp>
46 #include <tbb/spin_rw_mutex.h>
49 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
53 class DtReflectedAggregate;
61 class DtSimObjectSubComponentTypes;
66 class DtBaseEntityStateRepository;
69 class DtVrfObjectManagerTickArguments;
71 class DtSimTickArguments;
86 class DtReflectedDesignator;
89 class DtReflectedActiveSonar;
90 class DtReflectedActiveSonarList;
91 class DtReflectedPropulsionNoise;
92 class DtReflectedPropulsionNoiseList;
100 namespace makVrfVrlinkExtToolkit
102 class DtReflectedExtendedAttributesObjectList;
213 DtUseParameterDatabaseAggregateState = 0,
215 DtCreateDisaggregatedEntity
216 } DtAggregateCreationMode;
233 virtual void clearRemoteComponentAttachmentSystem();
240 virtual bool reuseEntityIdentifiersOnScenarioLoad()
const;
241 virtual void setReuseEntityIdentifiersOnScenarioLoad(
bool);
245 virtual DtEntityIdentifier nextEntityIdentifier(
DtVrfObject*,
const DtEntityIdentifier&);
246 virtual void addVrfObjectAboutToBePublishedCallback(
248 virtual void removeVrfObjectAboutToBePublishedCallback(
253 virtual void createRemoteComponentAttachmentManager();
256 virtual bool isRemoteComponentAttachment(
const DtUUID&)
const;
259 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
268 virtual bool create();
275 virtual bool createDIGuyCharacterManager(
const DtFilename & diGuyAnimationsFile);
289 virtual void completeObjectAddition(
DtVrfObject* simObject);
292 virtual bool loadingScenarioInformation()
const;
306 virtual bool registerExtendedProperties();
310 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
313 virtual void setImportingScenario(
bool);
314 virtual bool importingScenario()
const;
322 bool invertFilter =
false)
const;
330 bool invertFilter =
false,
void* usrData = 0)
const;
337 virtual void removeAndDelete(
const DtUUID& objectName,
bool andRemoveFromOrbat);
339 virtual void removeAndDelete(
const DtEntityIdentifier& key,
bool andRemoveFromOrbat);
340 virtual void removeAndDelete(
DtVrfObject*
object,
bool andRemoveFromOrbat);
343 std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(
bool onlyVrfSimulated =
true)
const;
346 virtual void removeAndDeleteAllLocals(
bool andDeleteFromOrbat =
false);
356 virtual void setExerciseConnection(DtExerciseConn* connection);
357 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
361 virtual void setPublishZeroVelocityWhenPaused(
bool);
362 virtual bool publishZeroVelocityWhenPaused()
const;
367 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
368 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
377 virtual bool hasPermissionToDisplayTaskVisualizations(
const DtUUID& uuid);
380 virtual void setMaxObjectsWithTaskVisualizations(
unsigned max);
381 virtual unsigned maxObjectsWithTaskVisualizations()
const;
385 virtual void setUseDrawControlForTaskVisualizations(
bool);
386 virtual bool useDrawControlForTaskVisualizations()
const;
396 virtual bool objectInRemovalQueue(
const DtUUID& uuid);
404 virtual void registerInterfaceCallbacks();
449 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
455 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
458 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
477 virtual void processDeleteDynamicTerrainServer(
DtSimMessage*);
491 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
492 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
493 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
494 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
496 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
497 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
498 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
499 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
505 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
506 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
507 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
508 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
510 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
512 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
519 virtual void processEnvProcessAddedCallback(
521 virtual void processEnvProcessRemovedCallback(
523 virtual bool processEnvProcessDiscoveryCriteria(
528 virtual void removeObjectSubordinates(
DtVrfObject*
object,
bool andRemoveFromOrbat);
532 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key,
bool andRemoveFromOrbat =
false);
533 virtual void queueObjectForRemoval(
const DtUUID& key,
bool andRemoveFromOrbat =
false);
536 virtual void removeObjectsQueuedForRemoval();
557 DtReflectedEntity* entity);
560 DtReflectedAggregate* aggregate,
576 bool publishLocalObject =
true,
577 const DtString& objectName = DtString::nullString(),
578 const DtString& objectLabel = DtString::nullString(),
579 DtForceType forceType = DtForceOther,
580 const DtList* vertices = 0,
581 const DtTaitBryan* orientation = 0,
582 bool projection =
false,
583 bool closedFigure =
false,
584 const DtAppearance& appearance = DtAppearance::nullAppearance(),
585 const DtString& readerWriterName = DtString::nullString(),
587 bool createSubObjects =
false,
589 void* userInitData = 0,
590 bool organize =
true,
594 unsigned long requestId = 0,
597 bool addToOrbat =
false);
608 bool publishLocalObject =
true,
609 const DtString& objectName = DtString::nullString(),
610 const DtString& objectLabel = DtString::nullString(),
611 DtForceType forceType = DtForceOther,
612 const DtVector& position = DtVector::zero(),
613 const DtTaitBryan* orientation = 0,
614 bool projection =
false,
615 bool closedFigure =
false,
616 const DtAppearance& appearance = DtAppearance::nullAppearance(),
617 const DtString& readerWriterName = DtString::nullString(),
619 bool createSubObjects =
false,
621 void* userInitData = 0,
622 bool organize =
true,
626 unsigned long requestId = 0,
const DtString& overlayParent =
"",
628 bool addToOrbat =
false);
637 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
638 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent,
bool addToOrbat);
646 virtual DtVrfObject* createSubObjectFromParameterEntry(
650 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"",
652 bool addToOrbat =
true);
655 virtual bool readOrderOfBattleFile(
const DtFilename &
filename);
656 virtual bool readOrderOfBattleFile(
const std::vector<std::string*>& oob);
659 virtual bool readOrderOfBattleFile(DtlInputStream*);
663 virtual bool writeOrderOfBattleFile(std::string&
stream,
int& numberOfLuaScripts);
664 virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams,
int& numberOfLuaScripts);
668 virtual bool writeSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags,
669 boost::unordered_set<DtUUID>& uuidsSaved);
672 virtual void preallocateLuaScriptHandles(
int);
677 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags, DtForceType force,
678 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
679 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
680 const DtFilename& scenarioZipFile,
const DtString&
filename,
int flags, DtForceType force,
681 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
682 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
int flags, DtForceType force, DtlObjPtr& args);
683 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream,
int flags, DtForceType force,
684 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
689 virtual bool objectShouldBeSavedToOrderOfBattle(
691 virtual bool objectShouldBeSavedToSimulationObjectGroup(
694 virtual DtVrfObject* createObjectFromMemoryBuffer(
const std::string& buffer);
696 virtual DtlObjPtr
getData(DtlObjPtr args,
702 static void tickCallback(
void* args);
707 virtual void addVrfObjectAboutToBeAddedCallback(
710 bool invertFilter =
false);
715 virtual void addVrfObjectAddedCallback(
718 bool invertFilter =
false);
723 virtual void addVrfObjectAboutToBeLoadedCallback(
726 bool invertFilter =
false);
732 virtual void addVrfObjectAboutToBeRemovedCallback(
735 bool invertFilter =
false);
739 virtual void removeVrfObjectAboutToBeAddedCallback(
742 bool invertFilter =
false);
746 virtual void removeVrfObjectAboutToBeLoadedCallback(
749 bool invertFilter =
false);
753 virtual void removeVrfObjectAddedCallback(
756 bool invertFilter =
false);
760 virtual void removeVrfObjectAboutToBeRemovedCallback(
763 bool invertFilter =
false);
767 virtual void addObjectManagerAboutToRemoveAllCallback(
772 virtual void removeObjectManagerAboutToRemoveAllCallback(
776 virtual void addOrganizationManagerReadyCallback(
780 virtual void removeOrganizationManagerReadyCallback(
784 virtual void enableAutoReorganization();
785 virtual void disableAutoReorganization();
787 virtual bool autoReorganizeEnabled()
const;
790 virtual DtEntityIdentifier mapUUIDToEntityIdentifier(
const DtUUID&)
const;
797 virtual bool objectNameExists(
const DtString&)
const;
808 virtual DtString nextNameWithPrefix(
int maxLength,
812 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
815 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
818 virtual DtString topLevelName(DtForceType forceType);
829 virtual DtString nextUnorganizedName();
837 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
845 virtual void rediscoverObjects(
const std::set<DtGlobalObjectDesignator>& ignore =
846 std::set<DtGlobalObjectDesignator>());
850 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
859 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
896 const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
897 const DtString& aggregateName = DtString::nullString(),
898 bool addToOrbat =
true);
901 virtual double timeOfDay()
const;
904 virtual double dateAndTimeOfDay()
const;
910 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
915 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
916 const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
923 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
940 virtual unsigned objectCount()
const;
968 virtual bool uuidExists(
const DtUUID&)
const;
974 virtual void removeNameAlias(
const DtString& alias);
987 virtual bool markingTextExists(
const DtString&)
const;
990 virtual const DtSimulationAddress& simulationAddress()
const;
1000 virtual bool createSimObjectList();
1004 virtual DtHashlist* hashlist()
const;
1009 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
1010 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1077 virtual bool processEntityDiscoveryCriteria(
1078 DtReflectedEntity* entity);
1085 virtual bool processAggregateDiscoveryCriteria(
1086 DtReflectedAggregate* aggregate);
1094 virtual bool hostingDynamicTerrainServer()
const;
1099 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
1104 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1106 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1107 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1108 virtual void createRemoteEmitterSystemList(DtExerciseConn* exConn);
1113 virtual void createRemoteExtendedAttributesList(DtExerciseConn* exConn);
1118 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
1119 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
1126 virtual void addSimObjectAboutToBeAddedCallback(
1128 virtual void addSimObjectAddedCallback(
1130 virtual void addSimObjectAboutToBeRemovedCallback(
1132 virtual void addSimObjectAboutToBeLoadedCallback(
1136 virtual void addSimObjectQueuedForRemovalCallback(
1138 virtual void removeSimObjectQueuedForRemovalCallback(
1140 virtual void invokeSimObjectQueuedForRemovalCallbacks(
1146 virtual void addSimObjectAboutToBeAddedCallback(
1149 bool invertFilter =
false);
1154 virtual void addSimObjectAddedCallback(
1157 bool invertFilter =
false);
1162 virtual void addSimObjectAboutToBeRemovedCallback(
1165 bool invertFilter =
false);
1170 virtual void addSimObjectAboutToBeLoadedCallback(
1173 bool invertFilter =
false);
1177 virtual void removeSimObjectAboutToBeAddedCallback(
1180 bool invertFilter =
false);
1182 virtual void removeSimObjectAboutToBeRemovedCallback(
1187 virtual void removeSimObjectAddedCallback(
1190 bool invertFilter =
false);
1194 virtual void removeSimObjectAboutToBeLoadedCallback(
1197 bool invertFilter =
false);
1201 virtual void removeSimObjectAboutToBeAddedCallback(
1203 virtual void removeSimObjectAddedCallback(
1205 virtual void removeSimObjectAboutToBeLoadedCallback(
1210 virtual void removeSimObjectAboutToBeRemovedCallback(
1213 bool invertFilter =
false);
1218 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1224 virtual void invokeSimObjectAddedCallbacks(
1230 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1236 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1248 virtual void setSimObjectType(
const DtString& type);
1249 virtual const DtString& simObjectType()
const;
1253 virtual void setOrbatEnabled(
bool);
1254 virtual bool orbatEnabled()
const;
1257 virtual void setOrderOfBattleObjectsAddedToOrbatByDefault(
bool b);
1258 virtual bool orderOfBattleObjectsAddedToOrbatByDefault()
const;
1261 virtual void closingScenario();
1265 virtual bool addUUIDMappingForObject(
DtVrfObject* vrfObject);
1268 virtual void removeUUIDMappingForObject(
DtVrfObject* vrfObject);
1271 virtual DtEntityIdentifier nextId(
DtVrfObject* o = NULL);
1278 root =
"Object")
const;
1294 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1306 bool includePseudoAggregates =
true)
const;
1312 static void designatorAddedCallback(DtReflectedDesignator * des,
1319 static void designatorRemovedCallback(DtReflectedDesignator * des,
1326 static void designatorChangedCallback(DtReflectedDesignator * des,
1337 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1339 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1341 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1343 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1346 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1348 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1350 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1352 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1357 virtual bool canSimulate()
const;
1361 virtual void setCanSimulate(
bool);
1364 virtual void printReflectedObjectCounts()
const;
1368 virtual void addStealthType(
const DtEntityType&);
1369 virtual void removeStealthType(
const DtEntityType&);
1370 virtual bool isStealthType(
const DtEntityType&)
const;
1372 const std::vector<DtEntityType>&
stealthTypes()
const {
return myStealthTypes; };
1375 virtual std::set<DtVrfObject*> objectsOnOverlayLayer(
const DtString&)
const;
1378 static void vrfObjectDataChangedCallback(
DtVrfObject*,
int,
void*);
1379 virtual void processVrfObjectDataChanged(
DtVrfObject*,
int);
1382 virtual void clearObjectsAwaitingDiscovery();
1395 virtual void rediscoverNonVRFEntities();
1402 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1406 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1410 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject,
bool andRemoveFromOrbat =
false);
1421 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1424 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1425 int& totalLeafNodes)
const;
1429 virtual void checkPendingNameRemoval(
const DtString& markingText);
1433 virtual void removeVrfObject(
const DtUUID&,
bool queueDeletionOfVrfObject =
false);
1446 virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1449 virtual void deleteVrfObjectsToBeDeleted();
1483 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1484 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1485 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1486 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1487 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1488 static void deleteDynamicTerrainServerCallback(
DtSimMessage*,
void*);
1490 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1491 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1501 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1502 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1503 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1504 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1505 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1506 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1509 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1510 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1513 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1517 static void requestJoystickControlsCallback(
DtSimMessage* msg,
void* usr);
1518 virtual void processRequestJoystickControls(
DtSimMessage*);
1522 virtual bool acceptRemoteEnvironmental(
const DtEntityType& et)
const;
1528 static void createVrfObjectPostDrainCallback(
void* usr);
1529 static void deleteVrfObjectPostDrainCallback(
void* usr);
1530 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1531 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1532 static void aggregateAsPostDrainCallback(
void* usr);
1534 static void envProcessAddedCallback(
1536 static void envProcessRemovedCallback(
1538 static bool envProcessDiscoveryCriteria(
1559 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);
1636 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
AddedList;
1643 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
ToBeRemovedList;
1782 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;