28 #include <vlpi/appearance.h>
29 #include <vlutil/vlFilename.h>
30 #include <vlutil/vlList.h>
31 #include <vlutil/vlHashlist.h>
32 #include <vlutil/vlConfig.h>
33 #include <vlutil/vlSmartPointers.h>
41 #include <boost/unordered_map.hpp>
42 #include <boost/unordered_set.hpp>
45 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
49 class DtReflectedAggregate;
56 class DtSimObjectSubComponentTypes;
60 class DtBaseEntityStateRepository;
63 class DtVrfObjectManagerTickArguments;
65 class DtSimTickArguments;
80 class DtReflectedDesignator;
83 class DtReflectedActiveSonar;
84 class DtReflectedActiveSonarList;
85 class DtReflectedPropulsionNoise;
86 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 void createDIGuyCharacterManager(
const DtFilename & diGuyDataFile,
261 const DtFilename & diGuyAnimationsFile);
275 virtual void completeObjectAddition(
DtVrfObject* simObject);
278 virtual bool loadingScenarioInformation()
const;
293 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
296 virtual void setImportingScenario(
bool);
297 virtual bool importingScenario()
const;
305 bool invertFilter =
false)
const;
313 bool invertFilter =
false,
void* usrData = 0)
const;
317 virtual void removeAndDelete(
const DtUUID& objectName);
319 virtual void removeAndDelete(
const DtEntityIdentifier& key);
323 std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(
bool onlyVrfSimulated =
true)
const;
326 virtual void removeAndDeleteAllLocals();
336 virtual void setExerciseConnection(DtExerciseConn* connection);
337 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
341 virtual void setPublishZeroVelocityWhenPaused(
bool);
342 virtual bool publishZeroVelocityWhenPaused()
const;
345 virtual void setDataDir(
const DtFilename&);
346 virtual const DtFilename&
dataDir()
const;
349 virtual void setUserDataDir(
const DtFilename&);
350 virtual const DtFilename& userDataDir()
const;
355 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
356 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
364 virtual void setUseDrawControlForTaskVisualizations(
bool);
365 virtual bool useDrawControlForTaskVisualizations()
const;
380 virtual void registerInterfaceCallbacks();
425 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
431 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
434 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
464 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
465 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
466 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
467 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
469 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
470 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
471 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
472 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
478 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
479 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
480 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
481 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
483 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
485 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
490 virtual void processEnvProcessAddedCallback(
492 virtual void processEnvProcessRemovedCallback(
494 virtual bool processEnvProcessDiscoveryCriteria(
499 virtual void removeObjectSubordinates(
DtVrfObject*
object);
503 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key);
504 virtual void queueObjectForRemoval(
const DtUUID& key);
507 virtual void removeObjectsQueuedForRemoval();
528 DtReflectedEntity* entity);
531 DtReflectedAggregate* aggregate,
547 bool publishLocalObject =
true,
548 const DtString& objectName = DtString::nullString(),
549 const DtString& objectLabel = DtString::nullString(),
550 DtForceType forceType = DtForceOther,
551 const DtList* vertices = 0,
552 const DtTaitBryan* orientation = 0,
553 bool projection =
false,
554 bool closedFigure =
false,
555 const DtAppearance& appearance = DtAppearance::nullAppearance(),
556 const DtString& readerWriterName = DtString::nullString(),
558 bool createSubObjects =
false,
560 void* userInitData = 0,
561 bool organize =
true,
565 unsigned long requestId = 0,
566 const DtString& overlayParent =
"");
577 bool publishLocalObject =
true,
578 const DtString& objectName = DtString::nullString(),
579 const DtString& objectLabel = DtString::nullString(),
580 DtForceType forceType = DtForceOther,
581 const DtVector& position = DtVector::zero(),
582 const DtTaitBryan* orientation = 0,
583 bool projection =
false,
584 bool closedFigure =
false,
585 const DtAppearance& appearance = DtAppearance::nullAppearance(),
586 const DtString& readerWriterName = DtString::nullString(),
588 bool createSubObjects =
false,
590 void* userInitData = 0,
591 bool organize =
true,
595 unsigned long requestId = 0,
const DtString& overlayParent =
"");
604 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
605 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent);
613 virtual DtVrfObject* createSubObjectFromParameterEntry(
617 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"");
620 virtual bool readOrderOfBattleFile(
const DtString & filename);
621 virtual bool writeOrderOfBattleFile(
const DtString & filename);
625 virtual bool writeSimulationObjectGroupOrderOfBattleFile(
const DtString& filename,
int flags,
626 boost::unordered_set<DtUUID>& uuidsSaved);
631 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
const DtString& filename,
int flags, DtForceType force,
632 DtlObjPtr* retArgs = 0,
bool* errorLoading = 0);
633 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
int flags, DtForceType force, DtlObjPtr& args);
638 virtual bool objectShouldBeSavedToOrderOfBattle(
640 virtual bool objectShouldBeSavedToSimulationObjectGroup(
643 virtual DtlObjPtr
getData(DtlObjPtr args,
649 static void tickCallback(
void* args);
654 virtual void addVrfObjectAboutToBeAddedCallback(
657 bool invertFilter =
false);
662 virtual void addVrfObjectAddedCallback(
665 bool invertFilter =
false);
670 virtual void addVrfObjectAboutToBeLoadedCallback(
673 bool invertFilter =
false);
680 virtual void addVrfObjectAboutToBeRemovedCallback(
683 bool invertFilter =
false);
687 virtual void removeVrfObjectAboutToBeAddedCallback(
690 bool invertFilter =
false);
694 virtual void removeVrfObjectAboutToBeLoadedCallback(
697 bool invertFilter =
false);
701 virtual void removeVrfObjectAddedCallback(
704 bool invertFilter =
false);
708 virtual void removeVrfObjectAboutToBeRemovedCallback(
711 bool invertFilter =
false);
715 virtual void addObjectManagerAboutToRemoveAllCallback(
720 virtual void removeObjectManagerAboutToRemoveAllCallback(
724 virtual void addOrganizationManagerReadyCallback(
728 virtual void removeOrganizationManagerReadyCallback(
732 virtual void enableAutoReorganization();
733 virtual void disableAutoReorganization();
735 virtual bool autoReorganizeEnabled()
const;
738 virtual DtEntityIdentifier mapUUIDToEntityIdentifier(
const DtUUID&)
const;
739 virtual DtGlobalObjectDesignator mapUUIDToGlobalId(
const DtUUID&)
const;
740 virtual DtUUID mapGlobalIdToUUID(
const DtGlobalObjectDesignator&)
const;
745 virtual bool objectNameExists(
const DtString&)
const;
756 virtual DtString nextNameWithPrefix(
int maxLength,
760 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
763 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
766 virtual DtString topLevelName(DtForceType forceType);
777 virtual DtString nextUnorganizedName();
785 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
790 const DtGlobalObjectDesignator& globalId)
const;
793 virtual void rediscoverObjects(
const std::set<DtGlobalObjectDesignator>& ignore =
794 std::set<DtGlobalObjectDesignator>());
798 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
807 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
844 const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
845 const DtString& aggregateName = DtString::nullString());
851 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
856 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
857 const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
864 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
878 virtual unsigned objectCount()
const;
897 virtual bool uuidExists(
const DtUUID&)
const;
903 virtual void removeNameAlias(
const DtString& alias);
913 virtual bool markingTextExists(
const DtString&)
const;
916 virtual const DtSimulationAddress& simulationAddress()
const;
926 virtual bool createSimObjectList();
930 virtual DtHashlist* hashlist()
const;
935 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
936 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1003 virtual bool processEntityDiscoveryCriteria(
1004 DtReflectedEntity* entity);
1011 virtual bool processAggregateDiscoveryCriteria(
1012 DtReflectedAggregate* aggregate);
1016 virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(
const DtGlobalObjectDesignator&
1022 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
1027 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1029 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1030 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1034 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
1035 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
1042 virtual void addSimObjectAboutToBeAddedCallback(
1044 virtual void addSimObjectAddedCallback(
1046 virtual void addSimObjectAboutToBeRemovedCallback(
1048 virtual void addSimObjectAboutToBeLoadedCallback(
1054 virtual void addSimObjectAboutToBeAddedCallback(
1057 bool invertFilter =
false);
1062 virtual void addSimObjectAddedCallback(
1065 bool invertFilter =
false);
1070 virtual void addSimObjectAboutToBeRemovedCallback(
1073 bool invertFilter =
false);
1078 virtual void addSimObjectAboutToBeLoadedCallback(
1081 bool invertFilter =
false);
1085 virtual void removeSimObjectAboutToBeAddedCallback(
1088 bool invertFilter =
false);
1090 virtual void removeSimObjectAboutToBeRemovedCallback(
1095 virtual void removeSimObjectAddedCallback(
1098 bool invertFilter =
false);
1102 virtual void removeSimObjectAboutToBeLoadedCallback(
1105 bool invertFilter =
false);
1109 virtual void removeSimObjectAboutToBeAddedCallback(
1111 virtual void removeSimObjectAddedCallback(
1113 virtual void removeSimObjectAboutToBeLoadedCallback(
1118 virtual void removeSimObjectAboutToBeRemovedCallback(
1121 bool invertFilter =
false);
1126 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1132 virtual void invokeSimObjectAddedCallbacks(
1138 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1144 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1156 virtual void setSimObjectType(
const DtString& type);
1157 virtual const DtString& simObjectType()
const;
1162 virtual void addUUIDMappingForObject(
DtVrfObject* vrfObject);
1165 virtual void removeUUIDMappingForObject(
DtVrfObject* vrfObject);
1168 virtual DtEntityIdentifier nextId(
DtVrfObject* o = NULL);
1175 root =
"Object")
const;
1191 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1203 bool includePseudoAggregates =
true)
const;
1209 static void designatorAddedCallback(DtReflectedDesignator * des,
1216 static void designatorRemovedCallback(DtReflectedDesignator * des,
1223 static void designatorChangedCallback(DtReflectedDesignator * des,
1234 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1236 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1238 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1240 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1243 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1245 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1247 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1249 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1254 virtual bool canSimulate()
const;
1257 virtual void printReflectedObjectCounts()
const;
1267 virtual void rediscoverNonVRFEntities();
1274 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1278 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1282 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject);
1293 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1296 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1297 int& totalLeafNodes)
const;
1311 virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1340 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1341 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1342 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1343 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1344 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1346 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1347 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1357 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1358 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1359 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1360 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1361 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1362 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1365 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1366 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1369 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1373 static void requestJoystickControlsCallback(
DtSimMessage* msg,
void* usr);
1374 virtual void processRequestJoystickControls(
DtSimMessage*);
1378 virtual bool acceptRemoteEnvironmental(
const DtEntityType& et)
const;
1384 static void createVrfObjectPostDrainCallback(
void* usr);
1385 static void deleteVrfObjectPostDrainCallback(
void* usr);
1386 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1387 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1388 static void aggregateAsPostDrainCallback(
void* usr);
1390 static void envProcessAddedCallback(
1392 static void envProcessRemovedCallback(
1394 static bool envProcessDiscoveryCriteria(
1415 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);