29 #include <vlpi/appearance.h>
30 #include <vlutil/vlFilename.h>
31 #include <vlutil/vlList.h>
32 #include <vlutil/vlHashlist.h>
33 #include <vlutil/vlConfig.h>
34 #include <vlutil/vlSmartPointers.h>
42 #include <boost/unordered_map.hpp>
43 #include <boost/unordered_set.hpp>
46 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0
50 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;
194 DtUseParameterDatabaseAggregateState = 0,
196 DtCreateDisaggregatedEntity
197 } DtAggregateCreationMode;
214 virtual void clearRemoteComponentAttachmentSystem();
221 virtual bool reuseEntityIdentifiersOnScenarioLoad()
const;
222 virtual void setReuseEntityIdentifiersOnScenarioLoad(
bool);
226 virtual DtEntityIdentifier nextEntityIdentifier(
DtVrfObject*,
const DtEntityIdentifier&);
227 virtual void addVrfObjectAboutToBePublishedCallback(
229 virtual void removeVrfObjectAboutToBePublishedCallback(
234 virtual void createRemoteComponentAttachmentManager();
237 virtual bool isRemoteComponentAttachment(
const DtUUID&)
const;
240 virtual bool initializeRemoteComponentAttachmentSystem(
const DtFilename& fromFile);
249 virtual bool create();
256 virtual void createDIGuyCharacterManager(
const DtFilename & diGuyDataFile,
257 const DtFilename & diGuyAnimationsFile);
271 virtual void completeObjectAddition(
DtVrfObject* simObject);
274 virtual bool loadingScenarioInformation()
const;
289 bool reevaluateFlag =
false,
DtTime evaluationPeriod = 0);
292 virtual void setImportingScenario(
bool);
293 virtual bool importingScenario()
const;
301 bool invertFilter =
false)
const;
309 bool invertFilter =
false,
void* usrData = 0)
const;
313 virtual void removeAndDelete(
const DtUUID& objectName);
315 virtual void removeAndDelete(
const DtEntityIdentifier& key);
319 std::set<DtGlobalObjectDesignator> remoteObjectGlobalIds(
bool onlyVrfSimulated =
true)
const;
322 virtual void removeAndDeleteAllLocals();
332 virtual void setExerciseConnection(DtExerciseConn* connection);
333 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn);
337 virtual void setPublishZeroVelocityWhenPaused(
bool);
338 virtual bool publishZeroVelocityWhenPaused()
const;
341 virtual void setDataDir(
const DtFilename&);
342 virtual const DtFilename&
dataDir()
const;
345 virtual void setUserDataDir(
const DtFilename&);
346 virtual const DtFilename& userDataDir()
const;
351 virtual void setSetDeadReckoningAlgorithmToStaticOnPause(
bool);
352 virtual bool setDeadReckoningAlgorithmToStaticOnPause()
const;
360 virtual void setUseDrawControlForTaskVisualizations(
bool);
361 virtual bool useDrawControlForTaskVisualizations()
const;
376 virtual void registerInterfaceCallbacks();
421 virtual void processModifyVrfOverlay(
DtSimMessage* msg);
427 virtual void processDeleteVrfObjectById(
DtSimMessage* msg);
430 virtual void processVrfObjectDeleted(
DtSimMessage* msg);
460 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des);
461 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des);
462 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des);
463 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des);
465 virtual void processActiveSonarAddedCallback(DtReflectedActiveSonar* des);
466 virtual void processActiveSonarRemovedCallback(DtReflectedActiveSonar* des);
467 virtual void processActiveSonarChangedCallback(DtReflectedActiveSonar* des);
468 DtBoolean processActiveSonarDiscoveryCriteria(DtReflectedActiveSonar* des);
474 virtual void processPropulsionNoiseAddedCallback(DtReflectedPropulsionNoise* des);
475 virtual void processPropulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* des);
476 virtual void processPropulsionNoiseChangedCallback(DtReflectedPropulsionNoise* des);
477 DtBoolean processPropulsionNoiseDiscoveryCriteria(DtReflectedPropulsionNoise* des);
479 virtual bool hasEnabledActiveSonar(
const DtVrfObject* host)
const;
481 virtual DtReflectedPropulsionNoise* propulsionNoiseForHost(
const DtVrfObject* host)
const;
486 virtual void processEnvProcessAddedCallback(
488 virtual void processEnvProcessRemovedCallback(
490 virtual bool processEnvProcessDiscoveryCriteria(
495 virtual void removeObjectSubordinates(
DtVrfObject*
object);
499 virtual void queueObjectForRemoval(
const DtEntityIdentifier& key);
500 virtual void queueObjectForRemoval(
const DtUUID& key);
503 virtual void removeObjectsQueuedForRemoval();
524 DtReflectedEntity* entity);
527 DtReflectedAggregate* aggregate,
543 bool publishLocalObject =
true,
544 const DtString& objectName = DtString::nullString(),
545 const DtString& objectLabel = DtString::nullString(),
546 DtForceType forceType = DtForceOther,
547 const DtList* vertices = 0,
548 const DtTaitBryan* orientation = 0,
549 bool projection =
false,
550 bool closedFigure =
false,
551 const DtAppearance& appearance = DtAppearance::nullAppearance(),
552 const DtString& readerWriterName = DtString::nullString(),
554 bool createSubObjects =
false,
556 void* userInitData = 0,
557 bool organize =
true,
561 unsigned long requestId = 0,
562 const DtString& overlayParent =
"");
573 bool publishLocalObject =
true,
574 const DtString& objectName = DtString::nullString(),
575 const DtString& objectLabel = DtString::nullString(),
576 DtForceType forceType = DtForceOther,
577 const DtVector& position = DtVector::zero(),
578 const DtTaitBryan* orientation = 0,
579 bool projection =
false,
580 bool closedFigure =
false,
581 const DtAppearance& appearance = DtAppearance::nullAppearance(),
582 const DtString& readerWriterName = DtString::nullString(),
584 bool createSubObjects =
false,
586 void* userInitData = 0,
587 bool organize =
true,
591 unsigned long requestId = 0,
const DtString& overlayParent =
"");
600 virtual void createSubObjectsFromParameters(
DtVrfObject* parent,
601 bool publishSubobjects,
unsigned long requestId,
const DtString& overlayParent);
609 virtual DtVrfObject* createSubObjectFromParameterEntry(
613 bool publishSubObject,
unsigned long requestId = 0,
const DtString& overlayParent =
"");
616 virtual bool readOrderOfBattleFile(
const DtFilename & filename);
617 virtual bool readOrderOfBattleFile(
const std::vector<std::string*>& oob);
620 virtual bool writeOrderOfBattleFile(
const DtString & filename);
622 virtual bool writeOrderOfBattleFile(std::string& stream);
623 virtual bool writeOrderOfBattleFile(std::vector<std::string*>& vecOfStreams);
627 virtual bool writeSimulationObjectGroupOrderOfBattleFile(
const DtString& filename,
int flags,
628 boost::unordered_set<DtUUID>& uuidsSaved);
633 virtual std::vector<DtVrfObject*> readSimulationObjectGroupOrderOfBattleFile(
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);
640 virtual bool objectShouldBeSavedToOrderOfBattle(
642 virtual bool objectShouldBeSavedToSimulationObjectGroup(
645 virtual DtVrfObject* createObjectFromMemoryBuffer(
const std::string& buffer);
647 virtual DtlObjPtr
getData(DtlObjPtr args,
653 static void tickCallback(
void* args);
658 virtual void addVrfObjectAboutToBeAddedCallback(
661 bool invertFilter =
false);
666 virtual void addVrfObjectAddedCallback(
669 bool invertFilter =
false);
674 virtual void addVrfObjectAboutToBeLoadedCallback(
677 bool invertFilter =
false);
684 virtual void addVrfObjectAboutToBeRemovedCallback(
687 bool invertFilter =
false);
691 virtual void removeVrfObjectAboutToBeAddedCallback(
694 bool invertFilter =
false);
698 virtual void removeVrfObjectAboutToBeLoadedCallback(
701 bool invertFilter =
false);
705 virtual void removeVrfObjectAddedCallback(
708 bool invertFilter =
false);
712 virtual void removeVrfObjectAboutToBeRemovedCallback(
715 bool invertFilter =
false);
719 virtual void addObjectManagerAboutToRemoveAllCallback(
724 virtual void removeObjectManagerAboutToRemoveAllCallback(
728 virtual void addOrganizationManagerReadyCallback(
732 virtual void removeOrganizationManagerReadyCallback(
736 virtual void enableAutoReorganization();
737 virtual void disableAutoReorganization();
739 virtual bool autoReorganizeEnabled()
const;
742 virtual DtEntityIdentifier mapUUIDToEntityIdentifier(
const DtUUID&)
const;
743 virtual DtGlobalObjectDesignator mapUUIDToGlobalId(
const DtUUID&)
const;
744 virtual DtUUID mapGlobalIdToUUID(
const DtGlobalObjectDesignator&)
const;
749 virtual bool objectNameExists(
const DtString&)
const;
760 virtual DtString nextNameWithPrefix(
int maxLength,
764 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType);
767 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType,
770 virtual DtString topLevelName(DtForceType forceType);
781 virtual DtString nextUnorganizedName();
789 virtual unsigned int maxNameLengthForType(
const DtObjectType& objectType);
794 const DtGlobalObjectDesignator& globalId)
const;
797 virtual void rediscoverObjects(
const std::set<DtGlobalObjectDesignator>& ignore =
798 std::set<DtGlobalObjectDesignator>());
802 virtual void requestUpdatesForRemoteNonVrfObjects()
const;
811 virtual void objectUUIDChanged(
const DtUUID& oldUUID,
const DtUUID& newUUID);
848 const std::vector<DtUUID>& subordinates = std::vector<DtUUID>(),
849 const DtString& aggregateName = DtString::nullString());
855 virtual void setSimulationDateTimeBasedOnLocation(
const DtVector& geocentricLocation,
int timeOfDay);
860 virtual bool addSubordinatesToAggregate(
DtVrfObject*
object,
861 const std::vector<DtUUID>& subordinates, DtAggregateState desiredState = DtFullyDisaggregated);
868 static void addSubordinatesToAggregateCompleteCallback(
void* usr);
882 virtual unsigned objectCount()
const;
901 virtual bool uuidExists(
const DtUUID&)
const;
907 virtual void removeNameAlias(
const DtString& alias);
917 virtual bool markingTextExists(
const DtString&)
const;
920 virtual const DtSimulationAddress& simulationAddress()
const;
930 virtual bool createSimObjectList();
934 virtual DtHashlist* hashlist()
const;
939 virtual void createRemoteEntitiesList(DtExerciseConn* exConn);
940 virtual void createRemoteAggregatesList(DtExerciseConn* exConn);
1007 virtual bool processEntityDiscoveryCriteria(
1008 DtReflectedEntity* entity);
1015 virtual bool processAggregateDiscoveryCriteria(
1016 DtReflectedAggregate* aggregate);
1020 virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(
const DtGlobalObjectDesignator&
1026 virtual DtReflectedDesignator* lookupLasedTargetByDesignatorCode(
const int code);
1031 virtual void createRemoteDesignatorsList(DtExerciseConn* exConn);
1033 virtual void createRemoteActiveSonarList(DtExerciseConn* exConn);
1034 virtual void createRemotePropulsionNoiseList(DtExerciseConn* exConn);
1038 DtReflectedActiveSonarList* reflectedActiveSonarList()
const;
1039 DtReflectedPropulsionNoiseList* reflectedPropulsionNoiseList()
const;
1046 virtual void addSimObjectAboutToBeAddedCallback(
1048 virtual void addSimObjectAddedCallback(
1050 virtual void addSimObjectAboutToBeRemovedCallback(
1052 virtual void addSimObjectAboutToBeLoadedCallback(
1058 virtual void addSimObjectAboutToBeAddedCallback(
1061 bool invertFilter =
false);
1066 virtual void addSimObjectAddedCallback(
1069 bool invertFilter =
false);
1074 virtual void addSimObjectAboutToBeRemovedCallback(
1077 bool invertFilter =
false);
1082 virtual void addSimObjectAboutToBeLoadedCallback(
1085 bool invertFilter =
false);
1089 virtual void removeSimObjectAboutToBeAddedCallback(
1092 bool invertFilter =
false);
1094 virtual void removeSimObjectAboutToBeRemovedCallback(
1099 virtual void removeSimObjectAddedCallback(
1102 bool invertFilter =
false);
1106 virtual void removeSimObjectAboutToBeLoadedCallback(
1109 bool invertFilter =
false);
1113 virtual void removeSimObjectAboutToBeAddedCallback(
1115 virtual void removeSimObjectAddedCallback(
1117 virtual void removeSimObjectAboutToBeLoadedCallback(
1122 virtual void removeSimObjectAboutToBeRemovedCallback(
1125 bool invertFilter =
false);
1130 virtual void invokeSimObjectAboutToBeAddedCallbacks(
1136 virtual void invokeSimObjectAddedCallbacks(
1142 virtual void invokeSimObjectAboutToBeRemovedCallbacks(
1148 virtual void invokeSimObjectAboutToBeLoadedCallbacks(
1160 virtual void setSimObjectType(
const DtString& type);
1161 virtual const DtString& simObjectType()
const;
1166 virtual bool addUUIDMappingForObject(
DtVrfObject* vrfObject);
1169 virtual void removeUUIDMappingForObject(
DtVrfObject* vrfObject);
1172 virtual DtEntityIdentifier nextId(
DtVrfObject* o = NULL);
1179 root =
"Object")
const;
1195 virtual bool isLocal(
const DtBaseEntityStateRepository& stateRep);
1207 bool includePseudoAggregates =
true)
const;
1213 static void designatorAddedCallback(DtReflectedDesignator * des,
1220 static void designatorRemovedCallback(DtReflectedDesignator * des,
1227 static void designatorChangedCallback(DtReflectedDesignator * des,
1238 static void activeSonarAddedCallback(DtReflectedActiveSonar* activeSonar,
1240 static void activeSonarRemovedCallback(DtReflectedActiveSonar* activeSonar,
1242 static void activeSonarChangedCallback(DtReflectedActiveSonar* activeSonar,
1244 static DtBoolean activeSonarDiscoveryCriteriaCallback(
1247 static void propulsionNoiseAddedCallback(DtReflectedPropulsionNoise* propNoise,
1249 static void propulsionNoiseRemovedCallback(DtReflectedPropulsionNoise* propNoise,
1251 static void propulsionNoiseChangedCallback(DtReflectedPropulsionNoise* propNoise,
1253 static DtBoolean propulsionNoiseDiscoveryCriteriaCallback(
1258 virtual bool canSimulate()
const;
1262 virtual void setCanSimulate(
bool);
1265 virtual void printReflectedObjectCounts()
const;
1275 virtual void rediscoverNonVRFEntities();
1282 virtual DtVrfObject*
remove(
const DtEntityIdentifier& key);
1286 virtual void invokeObjectManagerAboutToRemoveAllCallbacks()
const;
1290 virtual void onQueueObjectForRemoval(
DtVrfObject* vrfObject);
1301 virtual std::list<DtVector> calculateFormationOffsetsBasedOnFootprints(
const DtList&)
const;
1304 virtual std::vector<Dt3dBoundingVolume> boundingVolumesOfChildren(
const DtList& subObjects,
1305 int& totalLeafNodes)
const;
1319 virtual DtEntityIdentifier findEntityIdentifier(DtlObjPtr);
1327 DtGlobalObjectDesignator nextReservedGlobalObjectId();
1353 static void modifyVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1354 static void modifyVrfOverlayCallback(
DtSimMessage* msg,
void* usr);
1355 static void autoReorganizeCallback(
DtSimMessage* msg,
void* usr);
1356 static void skipTaskCallback(
DtSimMessage* msg,
void* usr);
1357 static void setThresholdsCallback(
DtSimMessage* msg,
void* usr);
1359 #if DT_SINGLE_STATE_UPDATE_MESSAGE
1360 static void vrfObjectStateUpdateCallback(
DtSimMessage* msg,
void* usr);
1370 static void createVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1371 static void deleteVrfObjectCallback(
DtSimMessage* msg,
void* usr);
1372 static void deleteVrfObjectByIdCallback(
DtSimMessage* msg,
void* usr);
1373 static void vrfObjectDeletedCallback(
DtSimMessage* msg,
void* usr);
1374 static void orderOfBattleOpCallback(
DtSimMessage* msg,
void* usr);
1375 static void aggregateAsCallback(
DtSimMessage* msg,
void* usr);
1378 static void extendedLabelsOperationCallback(
DtSimMessage* msg,
void* usr);
1379 virtual void processExtendedLabelsOperation(
DtSimMessage*);
1382 static void requestActivitiesCallback(
DtSimMessage* msg,
void* usr);
1386 static void requestJoystickControlsCallback(
DtSimMessage* msg,
void* usr);
1387 virtual void processRequestJoystickControls(
DtSimMessage*);
1391 virtual bool acceptRemoteEnvironmental(
const DtEntityType& et)
const;
1397 static void createVrfObjectPostDrainCallback(
void* usr);
1398 static void deleteVrfObjectPostDrainCallback(
void* usr);
1399 static void deleteVrfObjectByIdPostDrainCallback(
void* usr);
1400 static void vrfObjectDeletedPostDrainCallback(
void* usr);
1401 static void aggregateAsPostDrainCallback(
void* usr);
1403 static void envProcessAddedCallback(
1405 static void envProcessRemovedCallback(
1407 static bool envProcessDiscoveryCriteria(
1428 static void postInitFromParamsCallback(
DtVrfObject* vrfObject,
void* usr);
1492 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
AddedList;
1498 typedef std::set<DtSimObjectListActivityCallbackInfo*, ObjectCallbackListCmp>
ToBeRemovedList;
1627 std::set<DtGlobalObjectDesignator> myReservedGlobalIds;