![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2001 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00009 #pragma once 00010 00011 #include "vrfutil/rwObjType.h" 00012 #include "vrfutil/callbackList.h" 00013 #include "vrfutil/rwList.h" 00014 #include "vrfobjcore/vrfObjFiltIter.h" 00015 #include "vrfobjcore/orgManager.h" 00016 #include "vrfobjcore/managedObjList.h" 00017 #include "vrfobjcore/fltrFcnPred.h" 00018 #include "vrfobjcore/simObjIter.h" 00019 #include "vrfobjparam/vrfObjParams.h" 00020 #include <vrfExtProtocol/objTypeEnums.h> 00021 #include "vrftasks/extendedAggregateEnums.h" 00022 00024 #include <vlpi/appearance.h> 00025 #include <vlutil/vlFilename.h> 00026 #include <vlutil/vlList.h> 00027 #include <vlutil/vlConfig.h> 00028 #include <vlutil/vlSmartPointers.h> 00029 00031 #include <vector> 00032 #include <list> 00033 #include <set> 00034 00035 00037 #define DT_SINGLE_STATE_UPDATE_MESSAGE 0 00038 00039 class DtTerrainDbFactory; 00040 00041 class DtVrfObject; 00042 class DtHashlist; 00043 class DtExerciseConn; 00044 class DtReflectedObject; 00045 class DtReflectedAggregate; 00046 class DtReflectedExtEntity; 00047 class DtReflectedExtAggregate; 00048 class DtReflectedExtEntityList; 00049 class DtReflectedExtAggregateList; 00050 class DtVrfParameterDb; 00051 class DtSimObjectListActivityCallbackInfo; 00052 class DtSimObjectSubComponentTypes; 00053 class DtVertexList; 00054 class DtAggregateStateRepository; 00055 class DtBaseEntityStateRepository; 00056 class DtManagedObjectListManager; 00057 class DtSimManager; 00058 class DtVrfObjectManagerTickArguments; 00059 class DtSimTickArguments; 00060 class DtSimMessage; 00061 class DtIfCreateVrfObject; 00062 class DtIfAggregateAs; 00063 class DtVrfObjectStateRepository; 00064 class DtReflectedEnvironmentProcess; 00065 class DtReflectedControlObjectList; 00066 class DtVrfObjectSubComponentTypes; 00067 class DtReflectedObject; 00068 class DtEchelonIdTable; 00069 class DtEchelonId; 00070 class Coordinate_System; 00071 class DtObjectGeometricModelsManager; 00072 class DtSimInternalCommunicationManager; 00073 class DtVrfObjectPlanAdministrator; 00074 class DtDIGuyCharacterDataManager; 00075 class DtReflectedDesignator; 00076 class DtRemoteComponentAttachmentManager; 00077 class DtReflectedDesignatorList; 00078 class DtCreateQueueEntry; 00079 class DtModifyQueueEntry; 00080 class DtPrintReflectedObjectsCommand; 00081 00084 typedef void (*DtSimObjectListActivityCallbackFcn)(DtVrfObject* simObject, 00085 void* usr); 00086 00088 typedef bool (*DtSimObjectUserInitFcn)(DtVrfObject* object, void* usr); 00089 00092 typedef void (*DtVrfObjectListActivityCallbackFcn)(DtVrfObject* vrfObject, 00093 void* usr); 00094 00096 typedef bool (*DtVrfObjectUserInitFcn)(DtVrfObject* vrfObject, void* usr); 00097 00100 typedef void (*DtVrfObjectManagerCallbackFcn)(const DtVrfObjectManager& objectManager, 00101 void* usr); 00102 00106 const int DtSimMaxForceTypes = 256; 00107 00109 struct DtVrfObjectManagerCallbackInfo 00110 { 00111 DtVrfObjectManagerCallbackFcn myCallbackFunction; 00112 void* myUserData; 00113 }; 00114 00116 struct DtVrfObjectNameChangedCallbackInfo 00117 { 00118 DtString myOldName; 00119 DtString myNewName; 00120 DtVrfObject* myVrfObject; 00121 }; 00122 00124 typedef DtCallbackList<const DtVrfObjectNameChangedCallbackInfo&>::DtCallbackFunctionType DtVrfObjectNameChangedCallbackFcn; 00125 00133 #include "vrfobjcore/vrfobjcoreDefines.h" 00134 class DT_DLL_vrfobjcore DtVrfObjectManager : public DtRwList 00135 { 00136 public: 00137 typedef DtCallbackList<const DtOrganizationManagerReadyCallbackInfo&> DtOrganizationReadyCallbackList; 00138 00142 typedef enum 00143 { 00144 DtUseParameterDatabaseAggregateState = 0, 00145 DtCreateAggregatedEntity, 00146 DtCreateDisaggregatedEntity 00147 } DtAggregateCreationMode; 00148 00149 public: 00150 00152 DtVrfObjectManager(DtSimManager* simManager, int entityAdvisory = 100); 00153 00159 virtual ~DtVrfObjectManager(); 00162 00164 virtual void clearRemoteComponentAttachmentSystem(); 00165 00168 virtual void createRemoteComponentAttachmentManager(); 00169 00171 virtual bool initializeRemoteComponentAttachmentSystem(const DtFilename& fromFile); 00172 00174 DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager(); 00175 const DtRemoteComponentAttachmentManager* remoteComponentAttachmentManager() const; 00177 00180 virtual bool create(); 00181 00182 virtual bool createObjectNameHashlist(); 00183 00184 #ifdef DtHLA 00185 virtual bool createGlobalIdHashlist(); 00186 #endif 00187 00190 virtual bool init(); 00191 00193 virtual void createDIGuyCharacterManager(const DtFilename & diGuyDataFile, 00194 const DtFilename & diGuyAnimationsFile); 00195 00205 virtual bool add(DtVrfObject* simObject); 00206 00207 private: 00210 using DtRwList::add; 00211 using DtRwList::remove; 00212 00213 public: 00214 00216 virtual void setParameterDatabase(DtVrfParameterDb* parameterDatabase); 00217 virtual DtVrfParameterDb* parameterDatabase(); 00218 00221 virtual DtVrfObject* lookupVrfObject(const DtEntityIdentifier& key); 00222 virtual const DtVrfObject* lookupVrfObject(const DtEntityIdentifier& key) const; 00223 00224 virtual DtVrfObject* lookupVrfObjectByGlobalId( 00225 const DtGlobalObjectDesignator& globalId); 00226 virtual const DtVrfObject* lookupVrfObjectByGlobalId( 00227 const DtGlobalObjectDesignator& globalId) const; 00228 00229 virtual DtVrfObject* lookupVrfObjectByName(const DtString& name, bool 00230 warnOnFailure = true); 00231 virtual const DtVrfObject* lookupVrfObjectByName(const DtString& name, bool 00232 warnOnFailure = true) const; 00233 00234 virtual const DtVrfObject* lookupVrfObjectByEchelonIdString( 00235 const DtString& echIdString) const; 00236 virtual DtVrfObject* lookupVrfObjectByEchelonIdString( 00237 const DtString& echIdString); 00238 00239 virtual const DtVrfObject* lookupVrfObjectByEchelonId( 00240 const DtEchelonId& echId) const; 00241 virtual DtVrfObject* lookupVrfObjectByEchelonId( 00242 const DtEchelonId& echId); 00243 00247 virtual DtVrfObject * lookupVrfObjectByObjectId(const DtObjectId & id) const; 00248 00249 00253 virtual DtGlobalObjectDesignator lookupGlobalId(const DtObjectId & id) const; 00254 00258 virtual DtObjectId lookupObjectId(const DtGlobalObjectDesignator & globalId); 00259 00261 virtual DtManagedObjectListConstPtr getList(const DtVrfObjectPredicate& predicate, 00262 bool reevaluateFlag = false, DtTime evaluationPeriod = 0); 00263 00264 virtual const DtVrfObjectFilterIterator& vrfIterator( 00265 const DtObjectType& filter = DtObjectType::anyType(), 00266 bool invertFilter = false) const; 00267 00268 virtual const DtVrfObjectFilterIterator& vrfIterator( 00269 const DtVrfObjectPredicate& predicate) const; 00270 00273 virtual const DtVrfObjectFilterIterator& vrfIterator(DtFilterFcn filter, 00274 bool invertFilter = false, void* usrData = 0)const; 00275 00278 virtual void removeAndDelete(const DtString& objectName); 00279 virtual void removeAndDelete(const DtEntityIdentifier& key); 00280 virtual void removeAndDelete(DtVrfObject* object); 00281 00283 virtual void removeAndDeleteAllLocals(); 00284 00287 virtual void removeAndDeleteAll(); 00288 00293 virtual void setExerciseConnection(DtExerciseConn* connection); 00294 virtual void createRemoteEnvironmentalsList(DtExerciseConn* exConn); 00295 00297 virtual DtReflectedControlObjectList* reflectedEnvironmentProcessList() const; 00298 00301 virtual DtReflectedControlObjectList* createReflectedControlObjectList(DtExerciseConn* exConn); 00302 00309 virtual void registerInterfaceCallbacks(); 00310 00312 virtual const DtSimManager* simManager() const; 00314 virtual DtSimManager* simManager(); 00315 00325 virtual void processCreateVrfObject(DtSimMessage* msg); 00326 00333 virtual void processCreateVrfObject(DtIfCreateVrfObject ifCreateVrfObject); 00334 00342 virtual void processModifyVrfObject(DtSimMessage* msg); 00343 00350 virtual void processModifyVrfObject(DtIfModifyVrfObject modObj); 00351 00354 virtual void processModifyVrfOverlay(DtSimMessage* msg); 00357 virtual void processDeleteVrfObject(DtSimMessage* msg); 00360 virtual void processDeleteVrfObjectById(DtSimMessage* msg); 00363 virtual void processVrfObjectDeleted(DtSimMessage* msg); 00366 virtual void processOrderOfBattleOp(DtSimMessage* msg); 00369 virtual void processAutoReorganize(DtSimMessage* msg); 00372 virtual void processAggregateAs(DtSimMessage* msg); 00375 virtual void processSkipTask(DtSimMessage* msg); 00376 00377 00382 virtual void processSetThresholds(DtSimMessage* msg); 00383 00385 virtual void processCreateControlObject(DtSimMessage* msg); 00386 virtual void processCreateEntity(DtSimMessage* msg); 00387 virtual void processRemoveEntity(DtSimMessage* msg); 00388 virtual void processRequestEntityName(DtSimMessage* msg); 00389 00394 virtual void processEntityAddedCallback(DtReflectedExtEntity* entity); 00395 virtual void processAggregateAddedCallback(DtReflectedExtAggregate* aggregate); 00396 00399 virtual void processEntityRemovedCallback(DtReflectedExtEntity* entity); 00400 virtual void processAggregateRemovedCallback(DtReflectedExtAggregate* aggregate); 00401 00402 virtual void processDesignatorAddedCallback(DtReflectedDesignator * des); 00403 virtual void processDesignatorRemovedCallback(DtReflectedDesignator * des); 00404 virtual void processDesignatorChangedCallback(DtReflectedDesignator * des); 00405 DtBoolean processDesignatorDiscoveryCriteria(DtReflectedDesignator * des); 00406 00408 virtual void processAggregateChanged(DtReflectedExtAggregate* aggregate); 00409 00410 virtual void processEnvProcessAddedCallback( 00411 DtReflectedEnvironmentProcess* envProcess); 00412 virtual void processEnvProcessRemovedCallback( 00413 DtReflectedEnvironmentProcess* envProcess); 00414 virtual bool processEnvProcessDiscoveryCriteria( 00415 DtReflectedEnvironmentProcess* envProcess); 00416 00419 virtual void removeObjectSubordinates(DtVrfObject* object); 00420 00423 virtual void queueObjectForRemoval(const DtEntityIdentifier& key); 00424 00426 virtual void removeObjectsQueuedForRemoval(); 00427 00436 virtual void tick(); 00437 00439 virtual DtVrfObject* createAndInitVrfObject( 00440 DtIfCreateVrfObject* creationInfo); 00441 00442 virtual DtVrfObject* createAndInitVrfObject( 00443 DtIfAggregateAs* aggInfo); 00444 00446 virtual DtVrfObject* createAndInitVrfObject( 00447 DtReflectedEntity* entity); 00448 00449 virtual DtVrfObject* createAndInitVrfObject( 00450 DtReflectedAggregate* aggregate, 00451 int superType = DtObjectTypeAggregate); 00452 00453 virtual DtVrfObject* createAndInitVrfObject(DtReflectedEnvironmentProcess* envProcess); 00454 00464 virtual DtVrfObject* createAndInitVrfObject( 00465 const DtObjectType& objectType, 00466 bool publishLocalObject = true, 00467 const DtString& objectName = DtString::nullString(), 00468 const DtString& objectLabel = DtString::nullString(), 00469 DtForceType forceType = DtForceOther, 00470 const DtList* vertices = 0, 00471 const DtTaitBryan* orientation = 0, 00472 bool projection = false, 00473 bool closedFigure = false, 00474 const DtAppearance& appearance = DtAppearance::nullAppearance(), 00475 const DtString& readerWriterName = DtString::nullString(), 00476 DtReaderWriterRegistry* parentRegistry = 0, 00477 bool createSubObjects = false, 00478 DtVrfObjectUserInitFcn userInit = 0, 00479 void* userInitData = 0, 00480 bool organize = true, 00481 const DtString& startingFormation = DtDefaultFormationString, 00482 DtVrfObjectManager::DtAggregateCreationMode initialAggregateState = 00483 DtVrfObjectManager::DtUseParameterDatabaseAggregateState); 00484 00492 virtual DtVrfObject* createAndInitVrfObject( 00493 const DtObjectType& objectType, 00494 bool publishLocalObject = true, 00495 const DtString& objectName = DtString::nullString(), 00496 const DtString& objectLabel = DtString::nullString(), 00497 DtForceType forceType = DtForceOther, 00498 const DtVector& position = DtVector::zero(), 00499 const DtTaitBryan* orientation = 0, 00500 bool projection = false, 00501 bool closedFigure = false, 00502 const DtAppearance& appearance = DtAppearance::nullAppearance(), 00503 const DtString& readerWriterName = DtString::nullString(), 00504 DtReaderWriterRegistry* parentRegistry = 0, 00505 bool createSubObjects = false, 00506 DtVrfObjectUserInitFcn userInitFcn = 0, 00507 void* userInitData = 0, 00508 bool organize = true, 00509 const DtString& startingFormation = DtDefaultFormationString, 00510 DtVrfObjectManager::DtAggregateCreationMode initialAggregateState = 00511 DtVrfObjectManager::DtUseParameterDatabaseAggregateState); 00512 00520 virtual void createSubObjectsFromParameters(DtVrfObject* parent, 00521 bool publishSubobjects); 00522 00529 virtual DtVrfObject* createSubObjectFromParameterEntry( 00530 const DtVrfSubObjectParameterEntry& entry, const DtVector& positionOffsetFromParent, 00531 const DtVrfObject& parent, 00532 const DtString& formationName, 00533 bool publishSubObject); 00534 00536 virtual bool readOrderOfBattleFile(const DtString & filename); 00537 virtual bool writeOrderOfBattleFile(const DtString & filename); 00541 virtual bool objectShouldBeSavedToOrderOfBattle( 00542 const DtVrfObject* vrfObject); 00543 00544 virtual DtlObjPtr getData(DtlObjPtr args, const DtFilename& searchPath, 00545 const DtVariableBindingsList& variableBindings); 00546 00549 static void tickCallback(void* args); 00550 00554 virtual void addVrfObjectAboutToBeAddedCallback( 00555 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00556 const DtObjectType& filter = DtObjectType::anyType(), 00557 bool invertFilter = false); 00558 00562 virtual void addVrfObjectAddedCallback( 00563 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00564 const DtObjectType& filter = DtObjectType::anyType(), 00565 bool invertFilter = false); 00566 00570 virtual void addVrfObjectAboutToBeLoadedCallback( 00571 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00572 const DtObjectType& filter = DtObjectType::anyType(), 00573 bool invertFilter = false); 00574 00575 00580 virtual void addVrfObjectAboutToBeRemovedCallback( 00581 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00582 const DtObjectType& filter = DtObjectType::anyType(), 00583 bool invertFilter = false); 00584 00587 virtual void removeVrfObjectAboutToBeAddedCallback( 00588 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00589 const DtObjectType& filter = DtObjectType::anyType(), 00590 bool invertFilter = false); 00591 00594 virtual void removeVrfObjectAboutToBeLoadedCallback( 00595 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00596 const DtObjectType& filter = DtObjectType::anyType(), 00597 bool invertFilter = false); 00598 00601 virtual void removeVrfObjectAddedCallback( 00602 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00603 const DtObjectType& filter = DtObjectType::anyType(), 00604 bool invertFilter = false); 00605 00608 virtual void removeVrfObjectAboutToBeRemovedCallback( 00609 DtVrfObjectListActivityCallbackFcn fcn, void* usrData, 00610 const DtObjectType& filter = DtObjectType::anyType(), 00611 bool invertFilter = false); 00612 00615 virtual void addObjectManagerAboutToRemoveAllCallback( 00616 DtVrfObjectManagerCallbackFcn fcn, void* usrData); 00617 00620 virtual void removeObjectManagerAboutToRemoveAllCallback( 00621 DtVrfObjectManagerCallbackFcn fcn, void* usrData); 00622 00624 virtual void addOrganizationManagerReadyCallback( 00625 DtOrganizationManagerReadyCallbackFcn fcn, void* usrData); 00626 00628 virtual void removeOrganizationManagerReadyCallback( 00629 DtOrganizationManagerReadyCallbackFcn fcn, void* usrData); 00630 00632 virtual void enableAutoReorganization(); 00633 virtual void disableAutoReorganization(); 00635 virtual bool autoReorganizeEnabled() const; 00636 00638 virtual DtVrfObject* lookupTopLevelVrfObject(DtForceType forceType); 00640 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType); 00643 virtual DtVrfObject* createAndInitTopLevelVrfObject(DtForceType forceType, 00644 const DtString& name); 00646 virtual DtString topLevelName(DtForceType forceType); 00647 00655 virtual DtString nextName(const DtObjectType& objectType); 00657 virtual DtString nextUnorganizedName(); 00658 00662 virtual unsigned int maxNameLengthForType(const DtObjectType& objectType); 00663 00666 virtual void processOverlayOp(DtSimMessage* msg); 00667 virtual bool readOverlayFile(const DtString& filename); 00668 00671 virtual DtReflectedObject* lookupReflectedObject( 00672 const DtGlobalObjectDesignator& globalId) const; 00673 00675 virtual void rediscoverObjects(); 00676 00679 virtual void requestUpdatesForRemoteNonVrfObjects() const; 00680 00683 virtual void objectNameChanged(const DtString& oldName, 00684 const DtString& newName); 00685 00687 00688 virtual void addObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr); 00689 virtual void removeObjectNameChangedCallback(DtVrfObjectNameChangedCallbackFcn fcn, void* usr); 00691 00694 virtual bool addNameAlias(const DtString& aliasName, DtVrfObject* object); 00695 00696 virtual void removeNameAlias(const DtString& alias); 00697 00714 virtual DtVrfObject* aggregateAs( 00715 const DtObjectType& aggregateType, 00716 DtForceType force, 00717 const DtVector& dbPosition, 00718 DtReal heading, 00719 DtList* subordinateNames = 0, 00720 const DtString& aggregateName = DtString::nullString()); 00721 00725 virtual bool addSubordinatesToAggregate(DtVrfObject* object, 00726 const DtList* subordinateNames, DtAggregateState desiredState = DtFullyDisaggregated); 00727 00733 static void addSubordinatesToAggregateCompleteCallback(void* usr); 00734 00735 virtual DtOrganizationManager* organizationManager(); 00736 virtual const DtOrganizationManager* organizationManager() const; 00737 00740 virtual DtDIGuyCharacterDataManager * diGuyCharacterManager(); 00741 virtual const DtDIGuyCharacterDataManager * diGuyCharacterManager() const; 00742 00744 virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem); 00745 00747 virtual unsigned objectCount() const; 00748 00750 virtual DtVrfObject* lookup(const DtEntityIdentifier& key); 00751 virtual const DtVrfObject* lookup(const DtEntityIdentifier& key) const; 00752 00754 virtual DtVrfObject* lookupObjectByGlobalId(const DtGlobalObjectDesignator& globalId); 00755 virtual const DtVrfObject* lookupObjectByGlobalId( 00756 const DtGlobalObjectDesignator& globalId) const; 00757 00759 virtual DtVrfObject* lookupObjectByName(const DtString& objectName); 00760 virtual const DtVrfObject* lookupObjectByName(const DtString& objectName) const; 00761 00763 virtual const DtSimulationAddress& simulationAddress() const; 00764 00770 const DtSimObjectIterator& iterator() const; 00771 00773 virtual bool createSimObjectList(); 00774 00777 virtual DtHashlist* hashlist() const; 00778 00782 virtual void createRemoteEntitiesList(DtExerciseConn* exConn); 00783 virtual void createRemoteAggregatesList(DtExerciseConn* exConn); 00784 00789 static void entityAddedCallback(DtReflectedExtEntity* entity, void* userData); 00790 00795 static void entityRemovedCallback(DtReflectedExtEntity* entity, 00796 void* userData); 00797 00802 static void aggregateAddedCallback(DtReflectedExtAggregate* entity, 00803 void* userData); 00804 00809 static void aggregateRemovedCallback(DtReflectedExtAggregate* entity, 00810 void* userData); 00811 00816 static void entityChangedCallback(DtReflectedExtEntity* entity, 00817 void* userData); 00818 00823 static void aggregateChangedCallback(DtReflectedExtAggregate* aggregate, 00824 void* userData); 00825 00827 virtual void processEntityChanged(DtReflectedExtEntity* entity); 00828 00834 static bool entityDiscoveryCriteriaCallback(DtReflectedObject* entity, 00835 void* userData); 00836 00842 static bool aggregateDiscoveryCriteriaCallback(DtReflectedObject* aggregate, 00843 void* userData); 00844 00850 virtual bool processEntityDiscoveryCriteria( 00851 DtReflectedEntity* entity); 00852 00858 virtual bool processAggregateDiscoveryCriteria( 00859 DtReflectedAggregate* aggregate); 00860 00863 virtual DtReflectedDesignator * lookupLasedTargetByGlobalId(const DtGlobalObjectDesignator& 00864 tgtGlobalId); 00865 00869 virtual DtReflectedDesignator * lookupLasedTargetByDesignatorCode(const int code); 00870 00874 virtual void createRemoteDesignatorsList(DtExerciseConn * exConn); 00875 00876 DtReflectedDesignatorList* reflectedDesignatorList() const; 00877 00878 00880 virtual DtVrfParameterDb* objectParametersDB() const; 00881 00884 virtual void addSimObjectAboutToBeAddedCallback( 00885 DtSimObjectListActivityCallbackInfo* cbInfo); 00886 virtual void addSimObjectAddedCallback( 00887 DtSimObjectListActivityCallbackInfo* cbInfo); 00888 virtual void addSimObjectAboutToBeRemovedCallback( 00889 DtSimObjectListActivityCallbackInfo* cbInfo); 00890 virtual void addSimObjectAboutToBeLoadedCallback( 00891 DtSimObjectListActivityCallbackInfo* cbInfo); 00892 00896 virtual void addSimObjectAboutToBeAddedCallback( 00897 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00898 const DtObjectType& filter = DtObjectType::anyType(), 00899 bool invertFilter = false); 00900 00904 virtual void addSimObjectAddedCallback( 00905 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00906 const DtObjectType& filter = DtObjectType::anyType(), 00907 bool invertFilter = false); 00908 00912 virtual void addSimObjectAboutToBeRemovedCallback( 00913 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00914 const DtObjectType& filter = DtObjectType::anyType(), 00915 bool invertFilter = false); 00916 00920 virtual void addSimObjectAboutToBeLoadedCallback( 00921 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00922 const DtObjectType& filter = DtObjectType::anyType(), 00923 bool invertFilter = false); 00924 00927 virtual void removeSimObjectAboutToBeAddedCallback( 00928 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00929 const DtObjectType& filter = DtObjectType::anyType(), 00930 bool invertFilter = false); 00931 00932 virtual void removeSimObjectAboutToBeRemovedCallback( 00933 const DtSimObjectListActivityCallbackInfo& cbInfo); 00934 00937 virtual void removeSimObjectAddedCallback( 00938 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00939 const DtObjectType& filter = DtObjectType::anyType(), 00940 bool invertFilter = false); 00941 00944 virtual void removeSimObjectAboutToBeLoadedCallback( 00945 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00946 const DtObjectType& filter = DtObjectType::anyType(), 00947 bool invertFilter = false); 00948 00951 virtual void removeSimObjectAboutToBeAddedCallback( 00952 const DtSimObjectListActivityCallbackInfo& cbInfo); 00953 virtual void removeSimObjectAddedCallback( 00954 const DtSimObjectListActivityCallbackInfo& cbInfo); 00955 virtual void removeSimObjectAboutToBeLoadedCallback( 00956 const DtSimObjectListActivityCallbackInfo& cbInfo); 00957 00960 virtual void removeSimObjectAboutToBeRemovedCallback( 00961 DtSimObjectListActivityCallbackFcn fcn, void* usrData, 00962 const DtObjectType& filter = DtObjectType::anyType(), 00963 bool invertFilter = false); 00964 00968 virtual void invokeSimObjectAboutToBeAddedCallbacks( 00969 DtVrfObject* simObject) const; 00970 00974 virtual void invokeSimObjectAddedCallbacks( 00975 DtVrfObject* simObject) const; 00976 00980 virtual void invokeSimObjectAboutToBeRemovedCallbacks( 00981 DtVrfObject* simObject) const; 00982 00986 virtual void invokeSimObjectAboutToBeLoadedCallbacks( 00987 DtVrfObject* simObject) const; 00988 00990 virtual DtReflectedExtEntityList* reflectedEntityList() const; 00991 00993 virtual DtReflectedExtAggregateList* reflectedAggregateList() const; 00994 00998 virtual void setSimObjectType(const DtString& type); 00999 virtual const DtString& simObjectType() const; 01001 01003 virtual const DtEntityIdentifier& nextId(); 01004 01009 virtual DtString generateUniqueName(int maxLength, const DtString& 01010 root = "Object") const; 01011 01014 virtual bool isLocal(const DtBaseEntityStateRepository& stateRep); 01015 01019 static int aggregateSuperType(DtAggregateStateRepository* aggregate); 01020 01025 virtual void objectsEmbarkedOn(DtVrfObjectStateRepository* vrfObjSR, std::list<DtString>& list, 01026 bool includePsuedoAggregates = true) const; 01027 01032 static void designatorAddedCallback(DtReflectedDesignator * des, 01033 void * userData); 01034 01039 static void designatorRemovedCallback(DtReflectedDesignator * des, 01040 void * userData); 01041 01046 static void designatorChangedCallback(DtReflectedDesignator * des, 01047 void * userData); 01048 01054 static DtBoolean designatorDiscoveryCriteriaCallback(DtReflectedObject * des, 01055 void * userData); 01056 01059 virtual bool canSimulate() const; 01060 01062 virtual void printReflectedObjectCounts() const; 01063 01064 protected: 01066 virtual void processOrganizationManagerReady(const DtOrganizationManagerReadyCallbackInfo&); 01067 virtual void invokeOrganizationManagerReadyCallbacks(const DtOrganizationManagerReadyCallbackInfo&); 01068 01069 protected: 01072 virtual void rediscoverNonVRFEntities(); 01073 01077 virtual void remove(DtVrfObject* simObject); 01078 virtual DtVrfObject* remove(const DtEntityIdentifier& key); 01079 01082 virtual void invokeObjectManagerAboutToRemoveAllCallbacks() const; 01083 01086 virtual void onQueueObjectForRemoval(DtVrfObject* vrfObject); 01087 01088 01089 virtual const Coordinate_System* coordinateSystem() const; 01090 virtual Coordinate_System* coordinateSystem(); 01091 01092 protected: 01094 virtual DtObjectGeometricModelsManager* createObjectModelsManager() const; 01095 01097 virtual DtVrfObjectPlanAdministrator* createPlanAdministrator(); 01098 01099 public: 01100 DtObjectGeometricModelsManager* objectModelsManager() const; 01101 void setTerrainDbFactory(DtTerrainDbFactory*); 01102 DtTerrainDbFactory* terrainDbFactory(); 01103 01104 virtual DtVrfObjectPlanAdministrator* planAdministrator(); 01105 01106 virtual DtSimInternalCommunicationManager* simInternalCommunicationManager(); 01107 01108 protected: 01110 virtual DtSimInternalCommunicationManager* createSimInternalCommunicationManager( 01111 DtSimManager* simMgr) const; 01112 01113 protected: 01114 01118 static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr); 01119 static void modifyVrfOverlayCallback(DtSimMessage* msg, void* usr); 01120 static void autoReorganizeCallback(DtSimMessage* msg, void* usr); 01121 static void skipTaskCallback(DtSimMessage* msg, void* usr); 01122 static void setThresholdsCallback(DtSimMessage* msg, void* usr); 01123 01124 #if DT_SINGLE_STATE_UPDATE_MESSAGE 01125 static void vrfObjectStateUpdateCallback(DtSimMessage* msg, void* usr); 01126 #endif 01127 01135 static void createVrfObjectCallback(DtSimMessage* msg, void* usr); 01136 static void deleteVrfObjectCallback(DtSimMessage* msg, void* usr); 01137 static void deleteVrfObjectByIdCallback(DtSimMessage* msg, void* usr); 01138 static void vrfObjectDeletedCallback(DtSimMessage* msg, void* usr); 01139 static void orderOfBattleOpCallback(DtSimMessage* msg, void* usr); 01140 static void aggregateAsCallback(DtSimMessage* msg, void* usr); 01141 01146 static void createVrfObjectPostDrainCallback(void* usr); 01147 static void deleteVrfObjectPostDrainCallback(void* usr); 01148 static void deleteVrfObjectByIdPostDrainCallback(void* usr); 01149 static void vrfObjectDeletedPostDrainCallback(void* usr); 01150 static void orderOfBattleOpPostDrainCallback(void* usr); 01151 static void aggregateAsPostDrainCallback(void* usr); 01152 01153 static void envProcessAddedCallback( 01154 DtReflectedEnvironmentProcess* envProcess, void* userData); 01155 static void envProcessRemovedCallback( 01156 DtReflectedEnvironmentProcess* envProcess, void* userData); 01157 static bool envProcessDiscoveryCriteria( 01158 DtReflectedObject* envProcess, void* userData); 01159 01160 static void organizationManagerReadyCallback(const DtOrganizationManagerReadyCallbackInfo& info, void* usr); 01161 01162 protected: 01163 01165 DtVrfObjectManager(); 01166 01168 DtVrfObjectManager(const DtVrfObjectManager& orig); 01169 01171 DtVrfObjectManager& operator=(const DtVrfObjectManager& orig); 01172 01178 static void postInitFromParamsCallback(DtVrfObject* vrfObject, void* usr); 01179 01182 virtual DtCreateQueueEntry* createQueueEntryCreator(DtIfCreateVrfObject msg); 01183 01186 virtual DtModifyQueueEntry* modifyQueueEntryCreator(DtIfModifyVrfObject msg); 01187 01188 protected: 01190 DtRemoteComponentAttachmentManager *pMyRemoteComponentAttachmentManager; 01191 01193 DtHashlist* mySimObjectList; 01194 01196 DtReflectedExtEntityList* myRemoteEntitiesList; 01197 01199 DtReflectedExtAggregateList* myRemoteAggregateEntitiesList; 01200 01202 DtReflectedDesignatorList * myRemoteDesignatorsList; 01203 01205 DtVrfParameterDb* myParameterDatabase; 01206 01210 DtList myAboutToBeLoadedSimObjectCallbackList; 01211 01215 DtList myAboutToBeAddedSimObjectCallbackList; 01216 01220 DtList myAddedSimObjectCallbackList; 01221 01225 DtList myAboutToBeRemovedSimObjectCallbackList; 01226 01228 DtString mySimObjectType; 01229 01233 mutable DtSimObjectIterator* myIterator; 01234 01235 DtExerciseConn* myExerciseConn; 01236 01238 int myIndexSize; 01239 01240 DtManagedObjectListManager* myFilteredObjectListManager; 01241 01245 mutable DtVrfObjectFilterIterator* myVrfIterator; 01246 01247 DtSimManager* mySimManager; 01248 01251 DtList myObjectsToRemoveQueue; 01252 01255 typedef DtBoost::shared_ptr<DtCreateQueueEntry> DtCreateQueueEntryPtr; 01256 typedef std::list<DtCreateQueueEntryPtr> DtVrfObjectCreateQueue; 01257 DtVrfObjectCreateQueue myObjectsToCreateQueue; 01258 01261 typedef DtBoost::shared_ptr<DtModifyQueueEntry> DtModifyQueueEntryPtr; 01262 typedef std::list<DtModifyQueueEntryPtr> DtVrfObjectModifyQueue; 01263 DtVrfObjectModifyQueue myObjectsToModifyQueue; 01264 01266 bool myAutoReorganizeFlag; 01267 01268 DtReflectedControlObjectList* myRemoteEnvironmentalsList; 01269 01270 int myNameCounter; 01271 01272 DtHashlist* myObjectNameHashlist; 01273 01274 #ifdef DtHLA 01275 DtHashlist* myGlobalIdHashlist; 01276 #endif 01277 01278 DtOrganizationManager* myOrganizationManager; 01279 DtEchelonIdTable* myEchelonIdTable; 01280 01281 DtDIGuyCharacterDataManager * myCharacterMgr; 01282 01283 const Coordinate_System* myCoordinateSystemPtr; 01284 01285 double myTimeToPublishNextStateUpdate; 01286 01287 DtObjectGeometricModelsManager* myObjectModelsManager; 01288 01289 DtSimInternalCommunicationManager* mySimInternalCommunicationManager; 01290 01291 DtVrfObjectPlanAdministrator* myPlanAdministrator; 01292 01293 typedef DtCallbackList<const DtVrfObjectNameChangedCallbackInfo&> DtNameChangedCallbackList; 01294 DtNameChangedCallbackList myObjectNameChangedCallbackList; 01295 01296 DtOrganizationReadyCallbackList myOrganizationManagerReadyCallbackList; 01297 01298 DtPrintReflectedObjectsCommand* myPrintReflectedObjectsCommand; 01299 01300 private: 01301 01302 std::vector<DtVrfObjectManagerCallbackInfo> myAboutToRemoveAllCallbackList; 01303 01305 DtTerrainDbFactory* myTerrainDbFactory; 01306 }; 01307 01308 inline DtRemoteComponentAttachmentManager* DtVrfObjectManager::remoteComponentAttachmentManager() 01309 { 01310 return (pMyRemoteComponentAttachmentManager); 01311 } 01312 01313 inline const DtRemoteComponentAttachmentManager* DtVrfObjectManager::remoteComponentAttachmentManager() const 01314 { 01315 return (pMyRemoteComponentAttachmentManager); 01316 } 01317 01318