31 #include <vlpi/appearance.h>
32 #include <vlutil/vlFilename.h>
33 #include <vlutil/vlList.h>
34 #include <vlutil/vlHashlist.h>
35 #include <vlutil/vlConfig.h>
36 #include <vlutil/vlSmartPointers.h>
38 #include <vl/fomMapper.h>
45 #include <boost/unordered_map.hpp>
46 #include <boost/unordered_set.hpp>
47 #include <tbb/spin_rw_mutex.h>
50 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
54 class DtReflectedAggregate;
62 class DtSimObjectSubComponentTypes;
67 class DtBaseEntityStateRepository;
70 class DtVrfObjectManagerTickArguments;
72 class DtSimTickArguments;
87 class DtReflectedDesignator;
90 class DtReflectedActiveSonar;
91 class DtReflectedActiveSonarList;
92 class DtReflectedPropulsionNoise;
93 class DtReflectedPropulsionNoiseList;
101 namespace makVrfVrlinkExtToolkit
103 class DtReflectedExtendedAttributesObjectList;
215 DtUseParameterDatabaseAggregateState = 0,
217 DtCreateDisaggregatedEntity
218 } DtAggregateCreationMode;
235 virtual void clearRemoteComponentAttachmentSystem();
242 virtual bool reuseEntityIdentifiersOnScenarioLoad()
const;
243 virtual void setReuseEntityIdentifiersOnScenarioLoad(
bool);
247 virtual DtEntityIdentifier nextEntityIdentifier(
DtVrfObject*,
const DtEntityIdentifier&);
248 virtual void addVrfObjectAboutToBePublishedCallback(
250 virtual void removeVrfObjectAboutToBePublishedCallback(
255 virtual void createRemoteComponentAttachmentManager();
258 virtual bool isRemoteComponentAttachment(
const DtUUID&)
const;
261 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
270 virtual bool create();
277 virtual bool createDIGuyCharacterManager(
const DtFilename & diGuyAnimationsFile);
291 virtual void completeObjectAddition(
DtVrfObject* simObject);
294 virtual bool loadingScenarioInformation()
const;
308 virtual bool registerExtendedProperties();
312 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
315 virtual void setImportingScenario(
bool);
316 virtual bool importingScenario()
const;
324 bool invertFilter =
false)
const;
332 bool invertFilter =
false,
void* usrData = 0)
const;
339 virtual void removeAndDelete(
const DtUUID& objectName,
bool andRemoveFromOrbat);
341 virtual void removeAndDelete(
const DtEntityIdentifier& key,
bool andRemoveFromOrbat);
342 virtual void removeAndDelete(
DtVrfObject*
object,
bool andRemoveFromOrbat);
345 std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(
bool onlyVrfSimulated =
true)
const;
348 virtual void removeAndDeleteAllLocals(
bool andDeleteFromOrbat =
false);
358 virtual void setExerciseConnection(DtExerciseConn* connection);
359 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
363 virtual void setPublishZeroVelocityWhenPaused(
bool);
364 virtual bool publishZeroVelocityWhenPaused()
const;
369 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
370 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
373 virtual void overrideDeadReckoningAlgorithm(DtDeadReckonTypes drAlg);
377 virtual bool isDeadReckonAlgorithmOverridden(DtDeadReckonTypes& drAlg)
const;
381 virtual void removeDeadReckoningAlgorithmOverride();
390 virtual bool hasPermissionToDisplayTaskVisualizations(
const DtUUID& uuid);
393 virtual void setMaxObjectsWithTaskVisualizations(
unsigned max);
394 virtual unsigned maxObjectsWithTaskVisualizations()
const;
398 virtual void setUseDrawControlForTaskVisualizations(
bool);
399 virtual bool useDrawControlForTaskVisualizations()
const;
409 virtual bool objectInRemovalQueue(
const DtUUID& uuid);
417 virtual void registerInterfaceCallbacks();
467 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
473 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
476 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
495 virtual void processDeleteDynamicTerrainServer(
DtSimMessage*);
509 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
510 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
511 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
512 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
514 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
515 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
516 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
517 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
523 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
524 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
525 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
526 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
528 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
530 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
537 virtual void processEnvProcessAddedCallback(
539 virtual void processEnvProcessRemovedCallback(
541 virtual bool processEnvProcessDiscoveryCriteria(
546 virtual void removeObjectSubordinates(
DtVrfObject*
object,
bool andRemoveFromOrbat);
550 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key,
bool andRemoveFromOrbat =
false);
551 virtual void queueObjectForRemoval(
const DtUUID& key,
bool andRemoveFromOrbat =
false);
554 virtual void removeObjectsQueuedForRemoval();
575 DtReflectedEntity* entity);
578 DtReflectedAggregate* aggregate,
594 bool publishLocalObject =
true,
595 const DtString& objectName = DtString::nullString(),
596 const DtString& objectLabel = DtString::nullString(),
597 DtForceType forceType = DtForceOther,
598 const DtList* vertices = 0,
599 const DtTaitBryan* orientation = 0,
600 bool projection =
false,
601 bool closedFigure =
false,
602 const DtAppearance& appearance = DtAppearance::nullAppearance(),
603 const DtString& readerWriterName = DtString::nullString(),
605 bool createSubObjects =
false,
607 void* userInitData = 0,
608 bool organize =
true,
612 unsigned long requestId = 0,
615 bool addToOrbat =
false);
626 bool publishLocalObject =
true,
627 const DtString& objectName = DtString::nullString(),
628 const DtString& objectLabel = DtString::nullString(),
629 DtForceType forceType = DtForceOther,
630 const DtVector& position = DtVector::zero(),
631 const DtTaitBryan* orientation = 0,
632 bool projection =
false,
633 bool closedFigure =
false,
634 const DtAppearance& appearance = DtAppearance::nullAppearance(),
635 const DtString& readerWriterName = DtString::nullString(),
637 bool createSubObjects =
false,
639 void* userInitData = 0,
640 bool organize =
true,
644 unsigned long requestId = 0,
const DtString& overlayParent =
"",
646 bool addToOrbat =
false);
655 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
656 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent,
bool addToOrbat);
664 virtual DtVrfObject* createSubObjectFromParameterEntry(
668 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"",
670 bool addToOrbat =
true);
673 virtual bool readOrderOfBattleFile(
const DtFilename &
filename);
674 virtual bool readOrderOfBattleFile(
const std::vector<std::string*>& oob);
677 virtual bool readOrderOfBattleFile(DtlInputStream*);
681 virtual bool writeOrderOfBattleFile(std::string&
stream,
int& numberOfLuaScripts);
682 virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams,
int& numberOfLuaScripts);
686 virtual bool writeSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags,
687 boost::unordered_set<DtUUID>& uuidsSaved);
690 virtual void preallocateLuaScriptHandles(
int);
695 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags, DtForceType force,
696 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
697 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
698 const DtFilename& scenarioZipFile,
const DtString&
filename,
int flags, DtForceType force,
699 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
700 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
int flags, DtForceType force, DtlObjPtr& args);
701 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream,
int flags, DtForceType force,
702 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
707 virtual bool objectShouldBeSavedToOrderOfBattle(
709 virtual bool objectShouldBeSavedToSimulationObjectGroup(
712 virtual DtVrfObject* createObjectFromMemoryBuffer(
const std::string& buffer);
714 virtual DtlObjPtr
getData(DtlObjPtr args,
720 static void tickCallback(
void* args);
725 virtual void addVrfObjectAboutToBeAddedCallback(
728 bool invertFilter =
false);
733 virtual void addVrfObjectAddedCallback(
736 bool invertFilter =
false);
741 virtual void addVrfObjectAboutToBeLoadedCallback(
744 bool invertFilter =
false);
750 virtual void addVrfObjectAboutToBeRemovedCallback(
753 bool invertFilter =
false);
757 virtual void removeVrfObjectAboutToBeAddedCallback(
760 bool invertFilter =
false);
764 virtual void removeVrfObjectAboutToBeLoadedCallback(
767 bool invertFilter =
false);
771 virtual void removeVrfObjectAddedCallback(
774 bool invertFilter =
false);
778 virtual void removeVrfObjectAboutToBeRemovedCallback(
781 bool invertFilter =
false);
785 virtual void addObjectManagerAboutToRemoveAllCallback(
790 virtual void removeObjectManagerAboutToRemoveAllCallback(
794 virtual void addOrganizationManagerReadyCallback(
798 virtual void removeOrganizationManagerReadyCallback(
802 virtual void enableAutoReorganization();
803 virtual void disableAutoReorganization();
805 virtual bool autoReorganizeEnabled()
const;
808 virtual DtEntityIdentifier mapUUIDToEntityIdentifier(
const DtUUID&)
const;
815 virtual bool objectNameExists(
const DtString&)
const;
826 virtual DtString nextNameWithPrefix(
int maxLength,
830 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
833 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
836 virtual DtString topLevelName(DtForceType forceType);
847 virtual DtString nextUnorganizedName();
855 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
863 virtual void rediscoverObjects(
const std::set<DtGlobalObjectDesignator>& ignore =
864 std::set<DtGlobalObjectDesignator>());
868 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
877 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
914 const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
915 const DtString& aggregateName = DtString::nullString(),
916 bool addToOrbat =
true);
919 virtual double timeOfDay()
const;
922 virtual double dateAndTimeOfDay()
const;
928 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
933 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
934 const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
941 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
958 virtual unsigned objectCount()
const;
986 virtual bool uuidExists(
const DtUUID&)
const;
992 virtual void removeNameAlias(
const DtString& alias);
1005 virtual bool markingTextExists(
const DtString&)
const;
1008 virtual const DtSimulationAddress& simulationAddress()
const;
1018 virtual bool createSimObjectList();
1027 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
1028 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1095 virtual bool processEntityDiscoveryCriteria(
1096 DtReflectedEntity* entity);
1103 virtual bool processAggregateDiscoveryCriteria(
1104 DtReflectedAggregate* aggregate);
1112 virtual bool hostingDynamicTerrainServer()
const;
1117 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
1122 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1124 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1125 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1126 virtual void createRemoteEmitterSystemList(DtExerciseConn* exConn);
1131 virtual void createRemoteExtendedAttributesList(DtExerciseConn* exConn);
1136 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
1137 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
1144 virtual void addSimObjectAboutToBeAddedCallback(
1146 virtual void addSimObjectAddedCallback(
1148 virtual void addSimObjectAboutToBeRemovedCallback(
1150 virtual void addSimObjectAboutToBeLoadedCallback(
1154 virtual void addSimObjectQueuedForRemovalCallback(
1156 virtual void removeSimObjectQueuedForRemovalCallback(
1158 virtual void invokeSimObjectQueuedForRemovalCallbacks(
1164 virtual void addSimObjectAboutToBeAddedCallback(
1167 bool invertFilter =
false);
1172 virtual void addSimObjectAddedCallback(
1175 bool invertFilter =
false);
1180 virtual void addSimObjectAboutToBeRemovedCallback(
1183 bool invertFilter =
false);
1188 virtual void addSimObjectAboutToBeLoadedCallback(
1191 bool invertFilter =
false);
1195 virtual void removeSimObjectAboutToBeAddedCallback(
1198 bool invertFilter =
false);
1200 virtual void removeSimObjectAboutToBeRemovedCallback(
1205 virtual void removeSimObjectAddedCallback(
1208 bool invertFilter =
false);
1212 virtual void removeSimObjectAboutToBeLoadedCallback(
1215 bool invertFilter =
false);
1219 virtual void removeSimObjectAboutToBeAddedCallback(
1221 virtual void removeSimObjectAddedCallback(
1223 virtual void removeSimObjectAboutToBeLoadedCallback(
1228 virtual void removeSimObjectAboutToBeRemovedCallback(
1231 bool invertFilter =
false);
1236 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1242 virtual void invokeSimObjectAddedCallbacks(
1248 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1254 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1266 virtual void setSimObjectType(
const DtString& type);
1267 virtual const DtString& simObjectType()
const;
1271 virtual void setOrbatEnabled(
bool);
1272 virtual bool orbatEnabled()
const;
1275 virtual void setOrderOfBattleObjectsAddedToOrbatByDefault(
bool b);
1276 virtual bool orderOfBattleObjectsAddedToOrbatByDefault()
const;
1279 virtual void closingScenario();
1283 virtual bool addUUIDMappingForObject(
DtVrfObject* vrfObject);
1286 virtual void removeUUIDMappingForObject(
DtVrfObject* vrfObject);
1289 virtual DtEntityIdentifier nextId(
DtVrfObject* o = NULL);
1296 root =
"Object")
const;
1312 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1324 bool includePseudoAggregates =
true)
const;
1330 static void designatorAddedCallback(DtReflectedDesignator * des,
1337 static void designatorRemovedCallback(DtReflectedDesignator * des,
1344 static void designatorChangedCallback(DtReflectedDesignator * des,
1355 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1357 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1359 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1361 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1364 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1366 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1368 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1370 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1375 virtual bool canSimulate()
const;
1379 virtual void setCanSimulate(
bool);
1382 virtual void printReflectedObjectCounts()
const;
1386 virtual void addStealthType(
const DtEntityType&);
1387 virtual void removeStealthType(
const DtEntityType&);
1388 virtual bool isStealthType(
const DtEntityType&)
const;
1390 const std::vector<DtEntityType>&
stealthTypes()
const {
return myStealthTypes; };
1393 virtual std::set<DtVrfObject*> objectsOnOverlayLayer(
const DtString&)
const;
1396 static void vrfObjectDataChangedCallback(
DtVrfObject*,
int,
void*);
1397 virtual void processVrfObjectDataChanged(
DtVrfObject*,
int);
1400 virtual void clearObjectsAwaitingDiscovery();
1413 virtual void rediscoverNonVRFEntities();
1420 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1424 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1428 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject,
bool andRemoveFromOrbat =
false);
1439 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1442 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1443 int& totalLeafNodes)
const;
1447 virtual void checkPendingNameRemoval(
const DtString& markingText);
1451 virtual void removeVrfObject(
const DtUUID&,
bool queueDeletionOfVrfObject =
false);
1464 virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1467 virtual void deleteVrfObjectsToBeDeleted();
1501 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1502 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1503 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1504 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1505 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1506 static void deleteDynamicTerrainServerCallback(
DtSimMessage*,
void*);
1508 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1509 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1519 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1520 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1521 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1522 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1523 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1524 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1527 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1528 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1531 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1535 static void requestJoystickControlsCallback(
DtSimMessage* msg,
void* usr);
1536 virtual void processRequestJoystickControls(
DtSimMessage*);
1540 virtual bool acceptRemoteEnvironmental(
const DtEntityType& et)
const;
1546 static void createVrfObjectPostDrainCallback(
void* usr);
1547 static void deleteVrfObjectPostDrainCallback(
void* usr);
1548 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1549 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1550 static void aggregateAsPostDrainCallback(
void* usr);
1552 static void envProcessAddedCallback(
1554 static void envProcessRemovedCallback(
1556 static bool envProcessDiscoveryCriteria(
1577 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);
1654 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
AddedList;
1661 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
ToBeRemovedList;
1798 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;