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>
43 #include <boost/unordered_map.hpp>
44 #include <boost/unordered_set.hpp>
45 #include <tbb/spin_rw_mutex.h>
48 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
52 class DtReflectedAggregate;
58 class DtSimObjectSubComponentTypes;
62 class DtBaseEntityStateRepository;
65 class DtVrfObjectManagerTickArguments;
67 class DtSimTickArguments;
82 class DtReflectedDesignator;
85 class DtReflectedActiveSonar;
86 class DtReflectedActiveSonarList;
87 class DtReflectedPropulsionNoise;
88 class DtReflectedPropulsionNoiseList;
198 DtUseParameterDatabaseAggregateState = 0,
200 DtCreateDisaggregatedEntity
201 } DtAggregateCreationMode;
218 virtual void clearRemoteComponentAttachmentSystem();
225 virtual bool reuseEntityIdentifiersOnScenarioLoad()
const;
226 virtual void setReuseEntityIdentifiersOnScenarioLoad(
bool);
230 virtual DtEntityIdentifier nextEntityIdentifier(
DtVrfObject*,
const DtEntityIdentifier&);
231 virtual void addVrfObjectAboutToBePublishedCallback(
233 virtual void removeVrfObjectAboutToBePublishedCallback(
238 virtual void createRemoteComponentAttachmentManager();
241 virtual bool isRemoteComponentAttachment(
const DtUUID&)
const;
244 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
253 virtual bool create();
260 virtual bool createDIGuyCharacterManager(
const DtFilename & diGuyAnimationsFile);
274 virtual void completeObjectAddition(
DtVrfObject* simObject);
277 virtual bool loadingScenarioInformation()
const;
292 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
295 virtual void setImportingScenario(
bool);
296 virtual bool importingScenario()
const;
304 bool invertFilter =
false)
const;
312 bool invertFilter =
false,
void* usrData = 0)
const;
316 virtual void removeAndDelete(
const DtUUID& objectName);
318 virtual void removeAndDelete(
const DtEntityIdentifier& key);
322 std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(
bool onlyVrfSimulated =
true)
const;
325 virtual void removeAndDeleteAllLocals();
335 virtual void setExerciseConnection(DtExerciseConn* connection);
336 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
340 virtual void setPublishZeroVelocityWhenPaused(
bool);
341 virtual bool publishZeroVelocityWhenPaused()
const;
346 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
347 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
355 virtual void setUseDrawControlForTaskVisualizations(
bool);
356 virtual bool useDrawControlForTaskVisualizations()
const;
371 virtual void registerInterfaceCallbacks();
416 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
422 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
425 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
455 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
456 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
457 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
458 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
460 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
461 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
462 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
463 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
469 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
470 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
471 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
472 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
474 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
476 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
481 virtual void processEnvProcessAddedCallback(
483 virtual void processEnvProcessRemovedCallback(
485 virtual bool processEnvProcessDiscoveryCriteria(
490 virtual void removeObjectSubordinates(
DtVrfObject*
object);
494 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key);
495 virtual void queueObjectForRemoval(
const DtUUID& key);
498 virtual void removeObjectsQueuedForRemoval();
519 DtReflectedEntity* entity);
522 DtReflectedAggregate* aggregate,
538 bool publishLocalObject =
true,
539 const DtString& objectName = DtString::nullString(),
540 const DtString& objectLabel = DtString::nullString(),
541 DtForceType forceType = DtForceOther,
542 const DtList* vertices = 0,
543 const DtTaitBryan* orientation = 0,
544 bool projection =
false,
545 bool closedFigure =
false,
546 const DtAppearance& appearance = DtAppearance::nullAppearance(),
547 const DtString& readerWriterName = DtString::nullString(),
549 bool createSubObjects =
false,
551 void* userInitData = 0,
552 bool organize =
true,
556 unsigned long requestId = 0,
557 const DtString& overlayParent =
"");
568 bool publishLocalObject =
true,
569 const DtString& objectName = DtString::nullString(),
570 const DtString& objectLabel = DtString::nullString(),
571 DtForceType forceType = DtForceOther,
572 const DtVector& position = DtVector::zero(),
573 const DtTaitBryan* orientation = 0,
574 bool projection =
false,
575 bool closedFigure =
false,
576 const DtAppearance& appearance = DtAppearance::nullAppearance(),
577 const DtString& readerWriterName = DtString::nullString(),
579 bool createSubObjects =
false,
581 void* userInitData = 0,
582 bool organize =
true,
586 unsigned long requestId = 0,
const DtString& overlayParent =
"");
595 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
596 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent);
604 virtual DtVrfObject* createSubObjectFromParameterEntry(
608 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"");
611 virtual bool readOrderOfBattleFile(
const DtFilename &
filename);
612 virtual bool readOrderOfBattleFile(
const std::vector<std::string*>& oob);
615 virtual bool readOrderOfBattleFile(DtlInputStream*);
619 virtual bool writeOrderOfBattleFile(std::string&
stream);
620 virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams);
624 virtual bool writeSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags,
625 boost::unordered_set<DtUUID>& uuidsSaved);
630 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
const DtString&
filename,
int flags, DtForceType force,
631 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
632 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFileFromZipFile(
633 const DtFilename& scenarioZipFile,
const DtString&
filename,
int flags, DtForceType force,
634 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
635 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
int flags, DtForceType force, DtlObjPtr& args);
636 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(DtlInputStream* fStream,
int flags, DtForceType force,
637 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
642 virtual bool objectShouldBeSavedToOrderOfBattle(
644 virtual bool objectShouldBeSavedToSimulationObjectGroup(
647 virtual DtVrfObject* createObjectFromMemoryBuffer(
const std::string& buffer);
649 virtual DtlObjPtr
getData(DtlObjPtr args,
655 static void tickCallback(
void* args);
660 virtual void addVrfObjectAboutToBeAddedCallback(
663 bool invertFilter =
false);
668 virtual void addVrfObjectAddedCallback(
671 bool invertFilter =
false);
676 virtual void addVrfObjectAboutToBeLoadedCallback(
679 bool invertFilter =
false);
686 virtual void addVrfObjectAboutToBeRemovedCallback(
689 bool invertFilter =
false);
693 virtual void removeVrfObjectAboutToBeAddedCallback(
696 bool invertFilter =
false);
700 virtual void removeVrfObjectAboutToBeLoadedCallback(
703 bool invertFilter =
false);
707 virtual void removeVrfObjectAddedCallback(
710 bool invertFilter =
false);
714 virtual void removeVrfObjectAboutToBeRemovedCallback(
717 bool invertFilter =
false);
721 virtual void addObjectManagerAboutToRemoveAllCallback(
726 virtual void removeObjectManagerAboutToRemoveAllCallback(
730 virtual void addOrganizationManagerReadyCallback(
734 virtual void removeOrganizationManagerReadyCallback(
738 virtual void enableAutoReorganization();
739 virtual void disableAutoReorganization();
741 virtual bool autoReorganizeEnabled()
const;
744 virtual DtEntityIdentifier mapUUIDToEntityIdentifier(
const DtUUID&)
const;
751 virtual bool objectNameExists(
const DtString&)
const;
762 virtual DtString nextNameWithPrefix(
int maxLength,
766 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
769 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
772 virtual DtString topLevelName(DtForceType forceType);
783 virtual DtString nextUnorganizedName();
791 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
799 virtual void rediscoverObjects(
const std::set<DtGlobalObjectDesignator>& ignore =
800 std::set<DtGlobalObjectDesignator>());
804 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
813 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
850 const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
851 const DtString& aggregateName = DtString::nullString());
854 virtual double timeOfDay()
const;
857 virtual double dateAndTimeOfDay()
const;
863 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
868 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
869 const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
876 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
890 virtual unsigned objectCount()
const;
909 virtual bool uuidExists(
const DtUUID&)
const;
915 virtual void removeNameAlias(
const DtString& alias);
925 virtual bool markingTextExists(
const DtString&)
const;
928 virtual const DtSimulationAddress& simulationAddress()
const;
938 virtual bool createSimObjectList();
942 virtual DtHashlist* hashlist()
const;
947 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
948 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1015 virtual bool processEntityDiscoveryCriteria(
1016 DtReflectedEntity* entity);
1023 virtual bool processAggregateDiscoveryCriteria(
1024 DtReflectedAggregate* aggregate);
1034 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
1039 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1041 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1042 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1046 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
1047 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
1054 virtual void addSimObjectAboutToBeAddedCallback(
1056 virtual void addSimObjectAddedCallback(
1058 virtual void addSimObjectAboutToBeRemovedCallback(
1060 virtual void addSimObjectAboutToBeLoadedCallback(
1066 virtual void addSimObjectAboutToBeAddedCallback(
1069 bool invertFilter =
false);
1074 virtual void addSimObjectAddedCallback(
1077 bool invertFilter =
false);
1082 virtual void addSimObjectAboutToBeRemovedCallback(
1085 bool invertFilter =
false);
1090 virtual void addSimObjectAboutToBeLoadedCallback(
1093 bool invertFilter =
false);
1097 virtual void removeSimObjectAboutToBeAddedCallback(
1100 bool invertFilter =
false);
1102 virtual void removeSimObjectAboutToBeRemovedCallback(
1107 virtual void removeSimObjectAddedCallback(
1110 bool invertFilter =
false);
1114 virtual void removeSimObjectAboutToBeLoadedCallback(
1117 bool invertFilter =
false);
1121 virtual void removeSimObjectAboutToBeAddedCallback(
1123 virtual void removeSimObjectAddedCallback(
1125 virtual void removeSimObjectAboutToBeLoadedCallback(
1130 virtual void removeSimObjectAboutToBeRemovedCallback(
1133 bool invertFilter =
false);
1138 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1144 virtual void invokeSimObjectAddedCallbacks(
1150 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1156 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1168 virtual void setSimObjectType(
const DtString& type);
1169 virtual const DtString& simObjectType()
const;
1174 virtual bool addUUIDMappingForObject(
DtVrfObject* vrfObject);
1177 virtual void removeUUIDMappingForObject(
DtVrfObject* vrfObject);
1180 virtual DtEntityIdentifier nextId(
DtVrfObject* o = NULL);
1187 root =
"Object")
const;
1203 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1215 bool includePseudoAggregates =
true)
const;
1221 static void designatorAddedCallback(DtReflectedDesignator * des,
1228 static void designatorRemovedCallback(DtReflectedDesignator * des,
1235 static void designatorChangedCallback(DtReflectedDesignator * des,
1246 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1248 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1250 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1252 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1255 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1257 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1259 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1261 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1266 virtual bool canSimulate()
const;
1270 virtual void setCanSimulate(
bool);
1273 virtual void printReflectedObjectCounts()
const;
1277 virtual void addStealthType(
const DtEntityType&);
1278 virtual void removeStealthType(
const DtEntityType&);
1279 virtual bool isStealthType(
const DtEntityType&)
const;
1281 const std::vector<DtEntityType>&
stealthTypes()
const {
return myStealthTypes; };
1294 virtual void rediscoverNonVRFEntities();
1301 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1305 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1309 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject);
1320 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1323 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1324 int& totalLeafNodes)
const;
1328 virtual void checkPendingNameRemoval(
const DtString& markingText);
1331 virtual void removeVrfObject(
const DtUUID&);
1344 virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1378 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1379 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1380 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1381 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1382 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1384 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1385 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1395 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1396 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1397 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1398 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1399 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1400 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1403 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1404 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1407 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1411 static void requestJoystickControlsCallback(
DtSimMessage* msg,
void* usr);
1412 virtual void processRequestJoystickControls(
DtSimMessage*);
1416 virtual bool acceptRemoteEnvironmental(
const DtEntityType& et)
const;
1422 static void createVrfObjectPostDrainCallback(
void* usr);
1423 static void deleteVrfObjectPostDrainCallback(
void* usr);
1424 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1425 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1426 static void aggregateAsPostDrainCallback(
void* usr);
1428 static void envProcessAddedCallback(
1430 static void envProcessRemovedCallback(
1432 static bool envProcessDiscoveryCriteria(
1453 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);
1517 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
AddedList;
1524 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
ToBeRemovedList;
1652 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;