![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00006 #pragma once 00007 00010 00012 00013 #ifdef WIN32 00014 #include <winsock2.h> 00015 #endif 00016 00017 00018 #include <vlutil/vlFilename.h> 00019 #include <vlutil/vlTime.h> 00020 #include <vl/hostStructs.h> 00021 #include <vector> 00022 #include <vlutil/vlPrint.h> 00023 #include "vrfutil/callbackList.h" 00024 #include "vrfutil/scenario.h" 00025 #include "vrfutil/scenarioExplorer.h" 00026 #include "vrfutil/outputLogger.h" 00027 00028 class DtAdminContent; 00029 class DtSimulationModelSet; 00030 class DtExerciseConn; 00031 class DtScenario; 00032 class DtScenarioExplorer; 00033 class DtPhysicalWorld; 00034 class DtCommModelManager; 00035 class DtTerrainInterface; 00036 class DtVrfCreator; 00037 class DtSimManager; 00038 class DtVrfStatusPublisher; 00039 class DtVrfObjectManager; 00040 class DtAggregateSpatialModel; 00041 class DtDetonationManager; 00042 class DtFireManager; 00043 class DtGlobalPlanManager; 00044 class DtJoyDeviceManager; 00045 class DtHostilityManager; 00046 class DtScenarioExtrasMgr; 00047 class DtCustomReportManager; 00048 class DtFactoryManager; 00049 class DtVrfObject; 00050 class DtObjectType; 00051 class DtList; 00052 class DtSimTask; 00053 class DtSetDataRequest; 00054 class DtPlan; 00055 class DtPaperMapDatabase; 00056 class DtMapDatum; 00057 class DtStealthRemoteController; 00058 class DtVrfParameterDb; 00059 class DtSimMessage; 00060 class DtResourceMonitor; 00061 class DtVrfObjectIdGenerator; 00062 class DtVrfPlugin; 00063 class DtVrfPluginManager; 00064 class DtHlaExerciseClock; 00065 class DtExerciseClock; 00066 class DtSimCommand; 00067 struct DtOrganizationManagerReadyCallbackInfo; 00068 00079 #include "vrfcgf/vrfcgfDefines.h" 00080 class DT_DLL_vrfcgf DtCgf 00081 { 00082 public: 00083 00090 DtCgf(const DtSimulationAddress& addr, DtU32 sessionId = 1); 00091 00115 virtual void init(DtExerciseConn* conn, DtVrfCreator* creator = 0, 00116 int entityAdvisory = 100); 00117 00119 virtual ~DtCgf(); 00120 00123 virtual void tick(); 00124 00127 virtual void sendFinalStatus(); 00128 00129 //------------------------------------------------------- 00131 //------------------------------------------------------- 00132 00136 virtual bool loadScenario(const DtFilename& name); 00137 00144 virtual bool loadScenario(const DtScenario& scenario); 00145 00152 virtual bool newScenario(const DtFilename& dbname = 00153 DtFilename::nullFilename(), const DtFilename& simulationModelSet = 00154 DtFilename::nullFilename()); 00155 00159 virtual bool saveScenario(const DtFilename& savename); 00160 00163 virtual void closeScenario(); 00164 00168 virtual bool loadAdditionalObjectParameters(const DtFilename& paramsFileName); 00169 00172 virtual void loadCoreSimulationModelSets(); 00173 00176 virtual void run(); 00177 00179 virtual void pause(); 00180 00186 virtual void rewind(); 00187 00192 00193 virtual void setForceParameterDbReload(bool reload); 00194 virtual bool forceParameterDbReload() const; 00196 00200 00201 virtual void setEnableResourceMonitor(bool b); 00202 virtual bool isResourceMonitorEnabled() const; 00204 00206 #ifdef WIN32 00207 virtual void setAppInstance(HINSTANCE hInstance); 00208 virtual void setConsoleWindow(HWND consoleWindow); 00209 #endif 00210 00222 00223 virtual const DtFilename& defaultTerrainDirectory(); 00224 virtual void setDefaultTerrainDirectory(const DtFilename& directory); 00226 00231 00232 virtual const DtFilename& defaultSimulationModelSetFilename(); 00233 virtual void setDefaultSimulationModelSetFilename(const DtFilename& filename); 00235 00237 00238 virtual void setUseDIGuy(bool diguy); 00239 virtual bool useDIGuy() const; 00241 00246 00247 virtual const DtFilename& diGuyCharacterDataFilename(); 00248 virtual void setDIGuyCharacterDataFilename(const DtFilename& filename); 00249 00250 virtual const DtFilename& diGuyAnimationsFilename(); 00251 virtual void setDIGuyAnimationsFilename(const DtFilename& filename); 00253 00256 virtual DtSimulationModelSet* defaultModelSet(); 00257 00258 //------------------------------------------------------- 00260 //------------------------------------------------------- 00261 00264 virtual void deleteObject(const DtString& name) const; 00265 00268 virtual void deleteObject(const DtEntityIdentifier& objectIdentifier) const; 00269 00270 //------------------------------------------------------- 00272 //------------------------------------------------------- 00273 00275 00286 virtual DtVrfObject* createWaypoint(const DtVector& localPosition, 00287 const DtString& uniqueName = DtString::nullString()) const; 00288 00290 00303 virtual DtVrfObject* createRoute(const DtList& vertices, 00304 const DtString& uniqueName = DtString::nullString()) const; 00305 00307 00319 virtual DtVrfObject* createPhaseLine( 00320 const DtVector& dbPoint1, 00321 const DtVector& dbPoint2, 00322 const DtString& uniqueName = DtString::nullString()) const; 00323 00325 00337 virtual DtVrfObject* createControlArea( 00338 const DtList& vertices, 00339 const DtString& uniqueName = DtString::nullString()) const; 00340 00342 00354 virtual DtVrfObject* createObstacle( 00355 const DtList& vertices, 00356 const DtString& uniqueName = DtString::nullString()) const; 00357 00359 00372 virtual DtVrfObject* createDisaggregationArea( 00373 const DtList& vertices, 00374 const DtString& uniqueName = DtString::nullString()) const; 00375 00376 //------------------------------------------------------- 00378 //------------------------------------------------------- 00379 00381 00410 virtual DtVrfObject* createEntity( 00411 const DtEntityType& entityType, 00412 DtForceType force, 00413 const DtVector& dbPosition, 00414 DtReal heading, 00415 const DtString& entityName = DtString::nullString(), 00416 bool allowBlocking = true, 00417 std::list<DtAdminContent*>* initialAdminContent = 0) const; 00418 00419 00421 00452 virtual DtVrfObject* createAggregate( 00453 const DtEntityType& aggregateType, 00454 DtForceType force, 00455 const DtVector& localPosition, 00456 DtReal heading, 00457 DtList* subordinateNames = 0, 00458 const DtString& aggregateName = DtString::nullString()) const; 00459 00471 virtual DtVrfObject* createAggregate( 00472 const DtEntityType& aggregateType, 00473 DtForceType force, 00474 const DtVector& localPosition, 00475 DtReal heading, 00476 bool createSubordinates, 00477 const DtString& aggregateName = DtString::nullString(), 00478 bool allowBlocking = true) const; 00479 00491 virtual bool addSubordinate(DtVrfObject* subordinate, 00492 DtVrfObject* aggregate); 00493 00509 virtual bool removeSubordinate(DtVrfObject* subordinate, 00510 DtVrfObject* aggregate); 00511 00512 //------------------------------------------------------- 00514 //------------------------------------------------------- 00515 00522 virtual void assignTask(DtVrfObject* entity, const DtSimTask& task); 00523 00531 virtual void sendSetDataRequest(DtVrfObject* entity, 00532 const DtSetDataRequest& request); 00533 00536 virtual void assignPlanByName(const DtString& name, const DtPlan& plan); 00537 00542 virtual void abandonPlan(DtVrfObject* entity); 00543 00548 virtual void restartPlan(DtVrfObject* entity); 00549 00550 //------------------------------------------------------- 00552 //------------------------------------------------------- 00553 00557 virtual void logObjectConsoleToFile(DtVrfObject* object, 00558 DtFilename filename = DtFilename::nullFilename()); 00559 00561 virtual void stopLoggingObjectConsoleToFile(DtVrfObject* object); 00562 00566 virtual void setObjectConsoleNotificationLevel(DtVrfObject* object, 00567 DtNotifyLevelType level); 00568 00569 //------------------------------------------------------- 00571 //------------------------------------------------------- 00572 00575 virtual DtSimManager* simManager() const; 00576 00579 virtual DtResourceMonitor* resourceMonitor() const; 00580 00582 virtual DtVrfObjectIdGenerator* vrfObjectIdGenerator() const; 00583 00586 virtual DtFactoryManager* factoryManager() const; 00587 00590 virtual DtVrfObjectManager* vrfObjectManager() const; 00591 00594 virtual DtAggregateSpatialModel* aggregateSpatialModel() const; 00595 00598 virtual DtDetonationManager* detonationManager() const; 00599 00602 virtual DtFireManager* fireManager() const; 00603 00608 virtual DtScenarioExtrasMgr* scenarioExtrasMgr() const; 00609 00611 virtual DtVrfParameterDb* parameterDatabase() const; 00612 00614 virtual DtGlobalPlanManager* globalPlanManager(); 00615 00618 00619 virtual DtTerrainInterface* terrainInterface(); 00620 virtual const DtTerrainInterface* terrainInterface() const; 00622 00625 virtual void setTerrainInterface(DtTerrainInterface* newTerrainDatabase); 00626 00627 00630 00631 virtual DtPhysicalWorld* physicalWorld(); 00632 virtual const DtPhysicalWorld* physicalWorld() const; 00634 00636 virtual void setPhysicalWorld(DtPhysicalWorld* newPhysicalWorld); 00637 00639 00640 virtual DtCommModelManager* commModelManager(); 00641 virtual const DtCommModelManager* commModelManager() const; 00643 00645 virtual DtScenario* scenario() const; 00646 00649 virtual const DtSimulationAddress& simulationAddress() const; 00650 00656 virtual int sessionId() const; 00657 00660 virtual DtVrfStatusPublisher* statusPublisher() const; 00661 00664 virtual DtExerciseConn* exerciseConn() const; 00665 00667 virtual DtStealthRemoteController* stealthRemoteController() const; 00668 00672 virtual void useMapDatum(const DtMapDatum& mapDatum); 00673 00675 virtual void setParameterDbLoaded(bool flag); 00676 00677 virtual void setMaxDrainInputTime(DtFloat64 maxTime); 00678 virtual DtFloat64 maxDrainInputTime() const; 00679 00680 #ifdef DtHLA 00681 virtual void setMinDrainInputTime(DtFloat64 minTime); 00682 virtual DtFloat64 minDrainInputTime() const; 00683 #else 00684 virtual void setMaxDrainInputReads(int maxReads); 00685 virtual int maxDrainInputReads() const; 00686 #endif 00687 00688 virtual bool logFrameRateStatistics() const; 00689 virtual void setLogFrameRateStatistics(bool yesOrNo); 00690 virtual void setLogFrameRateOutputDirectory(const DtFilename&); 00691 virtual const DtFilename& logFrameRateOutputDirectory() const; 00692 00698 virtual void setDefaultParameterDbDirectory(const DtFilename& filename); 00699 00700 #if DtHLA 00701 00702 00703 virtual void setRunInTimeManagementMode(bool yesOrNo); 00704 virtual bool runInTimeManagementMode() const; 00705 00709 static void startTimeManagement(void* usr); 00710 static void stopTimeManagement(void* usr); 00711 00714 virtual void processStartTimeManagement(); 00715 virtual void processStopTimeManagement(); 00716 00717 #endif 00718 00719 virtual void setFullyLoadTerrain(bool yesOrNo); 00720 virtual bool fullyLoadTerrain() const; 00721 00725 00726 virtual void setAssertOnBlockingTerrainCalls(bool b); 00727 virtual bool assertOnBlockingTerrainCalls() const; 00729 00730 //------------------------------------------------------- 00732 //------------------------------------------------------- 00733 00736 virtual void addPluginToLoad(const DtString&); 00737 00740 virtual void setLoadPluginsIfVersionMismatch(bool); 00741 virtual bool loadPluginsIfVersionMismatch() const; 00742 00744 00745 DtVrfCreator* vrfCreator(); 00746 const DtVrfCreator* vrfCreator() const; 00748 00752 00753 virtual void addPreLoadTerrainCallback( 00754 DtCallbackList<const DtFilename&>::DtCallbackFunctionType fcn, void* usrData); 00755 virtual void removePreLoadTerrainCallback( 00756 DtCallbackList<const DtFilename&>::DtCallbackFunctionType fcn, void* usrData); 00758 00762 00763 virtual void addPostLoadTerrainCallback( 00764 DtCallbackList<const DtFilename&>::DtCallbackFunctionType fcn, void* usrData); 00765 virtual void removePostLoadTerrainCallback( 00766 DtCallbackList<const DtFilename&>::DtCallbackFunctionType fcn, void* usrData); 00768 00772 00773 virtual void addPreLoadScenarioCallback( 00774 DtCallbackList<DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00775 virtual void removePreLoadScenarioCallback( 00776 DtCallbackList<DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00778 00782 00783 virtual void addPostLoadScenarioCallback( 00784 DtCallbackList<const DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00785 virtual void removePostLoadScenarioCallback( 00786 DtCallbackList<const DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00788 00791 00792 virtual void addPreSaveScenarioCallback( 00793 DtCallbackList<DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00794 virtual void removePreSaveScenarioCallback( 00795 DtCallbackList<DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00797 00800 00801 virtual void addPostSaveScenarioCallback( 00802 DtCallbackList<const DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00803 virtual void removePostSaveScenarioCallback( 00804 DtCallbackList<const DtScenario&>::DtCallbackFunctionType fcn, void* usrData); 00806 00809 00810 virtual void addPreCloseScenarioCallback( 00811 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00812 virtual void removePreCloseScenarioCallback( 00813 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00815 00818 00819 virtual void addPostCloseScenarioCallback( 00820 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00821 virtual void removePostCloseScenarioCallback( 00822 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00824 00827 00828 virtual void addScenarioPauseCallback( 00829 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00830 virtual void removeScenarioPauseCallback( 00831 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00833 00836 00837 virtual void addScenarioRunCallback( 00838 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00839 virtual void removeScenarioRunCallback( 00840 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00842 00845 00846 virtual void addPreScenarioRewindCallback( 00847 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00848 virtual void removePreScenarioRewindCallback( 00849 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00851 00854 00855 virtual void addPostScenarioRewindCallback( 00856 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00857 virtual void removePostScenarioRewindCallback( 00858 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00860 00863 00864 virtual void addPostTickCallback( 00865 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00866 virtual void removePostTickCallback( 00867 DtNoArgumentCallbackList::DtCallbackFunctionType fcn, void* usrData); 00869 00871 00872 virtual void setTimeToQuit(bool); 00873 virtual bool timeToQuit() const; 00875 00879 virtual bool executeSimCommand(const DtSimCommand& simCommand); 00880 00881 public: 00882 00886 static void objectParametersOpCallback(DtSimMessage* msg, void* usr); 00887 00888 protected: 00890 static void scenarioDescriptionCallback(DtSimMessage*, void* usr); 00891 virtual void processScenarioDescription(DtSimMessage*); 00892 00893 private: 00895 DtCgf(const DtCgf& original); 00897 DtCgf& operator=(const DtCgf& original); 00898 00899 protected: 00901 virtual void loadAllPlugins(); 00902 00904 virtual bool loadComponentAttachmentTable(const DtFilename& filename); 00910 virtual bool loadTerrain(const DtFilename& filename); 00911 00915 virtual DtFilename findTerrainFile(const DtFilename& startFile, const std::vector<DtFilename>& searchPaths, 00916 const std::string& extension) const; 00917 00920 virtual void unloadTerrain(); 00921 00923 virtual bool loadOrderOfBattle(const DtFilename& filename); 00924 00927 virtual bool loadParameterDb(const DtFilename& filename); 00928 00930 virtual bool loadObjectParametersDBFile(const DtFilename& opdFile); 00931 00935 virtual bool loadPhysicalWorldFile(const DtFilename& file, bool force = false); 00936 00938 virtual bool loadPlans(const DtFilename& filename); 00939 00941 virtual bool loadGlobalPlans(const DtFilename& filename); 00942 00944 virtual void loadHostilityAndExtras(const DtScenarioExplorer& se); 00945 00946 virtual bool loadForceHostility(const DtFilename& filename); 00947 00948 virtual bool loadScenarioExtras(const DtFilename& filename); 00949 00952 virtual void processObjectParametersOp(DtSimMessage * msg); 00953 00954 00957 virtual void emptyParametersDB(); 00958 00969 virtual void setFrameRateMode(const DtString& mode, DtReal deltaTime); 00970 00972 virtual void setAutoReorganization(bool onOff); 00973 00976 virtual void drainInput(); 00977 00981 virtual DtVrfPlugin* loadPlugin(const DtString&); 00982 00987 #if DtHLA 00988 DtHlaExerciseClock* exerciseClock() const; 00989 #else 00990 DtExerciseClock* exerciseClock() const; 00991 #endif 00992 00995 virtual bool setupCommModelsForScenario(const DtScenarioExplorer& e); 00996 01000 virtual void updateReadyStatus(); 01001 01003 virtual void processOrganizationManagerReady(const DtOrganizationManagerReadyCallbackInfo&); 01004 static void organizationManagerReadyCallback(const DtOrganizationManagerReadyCallbackInfo&, void* usr); 01005 01008 01009 static void simCommandCallback(DtSimMessage* msg, void* usr); 01010 virtual void processSimCommand(DtSimMessage* msg); 01012 01016 01017 static void deferredLoadScenarioCallback(void * data); 01018 virtual void processDeferredLoadScenario(); 01020 01024 01025 static void deferredRewindCallback(void * data); 01026 virtual void processDeferredRewind(); 01028 01029 //------------------------------------------------------- 01031 //------------------------------------------------------- 01032 01033 static DtOutputLogger& getGlobalFrameRateStatsLogger(); 01034 static std::string createStatsLogFilename( 01035 const std::string& originalFilename, const DtSimManager& simManager, 01036 const DtScenario* scenario, const DtFilename& logFrameRateDir); 01037 static void logScenarioLoad(const DtSimManager& simManager, 01038 const DtScenario* scenario, const DtFilename& logFrameOutDir); 01039 static void logScenarioRewind(); 01040 static void logScenarioClose(); 01041 static void logFrameRateStatsToFile(DtSimManager* simManager); 01042 01043 protected: 01044 01046 DtSimulationAddress mySimulationAddress; 01047 01049 DtU32 mySessionId; 01050 01052 bool myOK; 01053 01055 bool myTimeToQuit; 01056 01058 DtVrfPluginManager* myPluginManager; 01059 std::vector<DtString> myPluginsToLoad; 01060 bool myLoadPluginsIfVersionMismatch; 01061 01063 DtTerrainInterface* myTerrainInterface; 01064 01066 DtPhysicalWorld* myPhysicalWorld; 01067 01068 DtCommModelManager* myCommModelManager; 01069 01071 DtExerciseConn* myExerciseConn; 01072 01074 DtSimManager* mySimManager; 01075 01077 DtScenario* myScenario; 01078 01080 DtVrfStatusPublisher* myStatusPublisher; 01081 01083 DtVrfObjectManager* myVrfObjectManager; 01084 01085 DtAggregateSpatialModel* myAggregateSpatialModel; 01086 01087 DtDetonationManager* myDetonationManager; 01088 01089 DtFireManager* myFireManager; 01090 01092 DtResourceMonitor* myResourceMonitor; 01093 01095 DtVrfObjectIdGenerator* myVrfObjectIdGenerator; 01096 01098 DtVrfParameterDb* myParameterDatabase; 01099 01101 bool myForceParameterDbReload; 01102 01103 DtGlobalPlanManager* myGlobalPlanManager; 01104 01106 DtJoyDeviceManager* myJoyDeviceManager; 01107 01108 DtHostilityManager* myHostilityManager; 01109 01110 DtScenarioExtrasMgr* myScenarioExtrasManager; 01111 01113 DtStealthRemoteController* myStealthRemoteController; 01114 01116 DtFactoryManager* myFactoryManager; 01117 01122 DtFilename myVrfTerrainPathDirectory; 01123 01127 DtFilename myDefaultTerrainDirectory; 01128 01130 DtFilename myDefaultSimulationModelSetFilename; 01131 01133 bool myUseDIGuy; 01134 01136 DtFilename myDIGuyCharacterDataFilename; 01137 01139 DtFilename myDIGuyAnimationsFilename; 01140 01143 bool myParameterDbLoaded; 01144 01146 DtFilename myCurrentParameterDatabaseFilename; 01147 01151 DtFilename myDefaultParameterDbDirectory; 01152 01153 DtCallbackList<const DtFilename&> myPreLoadTerrainCallbacks; 01154 DtCallbackList<const DtFilename&> myPostLoadTerrainCallbacks; 01155 DtCallbackList<DtScenario&> myPreLoadScenarioCallbacks; 01156 DtCallbackList<const DtScenario&> myPostLoadScenarioCallbacks; 01157 DtCallbackList<DtScenario&> myPreSaveScenarioCallbacks; 01158 DtCallbackList<const DtScenario&> myPostSaveScenarioCallbacks; 01159 DtNoArgumentCallbackList myPreCloseScenarioCallbacks; 01160 DtNoArgumentCallbackList myPostCloseScenarioCallbacks; 01161 DtNoArgumentCallbackList myScenarioRunCallbacks; 01162 DtNoArgumentCallbackList myScenarioPauseCallbacks; 01163 DtNoArgumentCallbackList myPreScenarioRewindCallbacks; 01164 DtNoArgumentCallbackList myPostScenarioRewindCallbacks; 01165 DtNoArgumentCallbackList myPostTickCallbacks; 01166 01167 DtFloat64 myMaxDrainInputTime; 01168 #if DtHLA 01169 DtFloat64 myMinDrainInputTime; 01170 #else 01171 int myMaxDrainInputReads; 01172 #endif 01173 01178 void setVrfCreator(DtVrfCreator* creator); 01180 01182 01183 bool ownVrfCreator() const; 01184 void setOwnVrfCreator(bool yesOrNo); 01186 01187 protected: 01189 bool myLogFrameRateStatistics; 01190 01192 DtFilename myLogFrameRateOutputDirectory; 01193 01196 bool myOwnVrfCreatorFlag; 01197 DtVrfCreator* myVrfCreator; 01198 01199 #if DtHLA 01200 bool myRunInTimeManagementMode; 01201 #endif 01202 01204 bool myFullyLoadTerrain; 01205 01209 bool myAssertOnBlockingTerrainCalls; 01210 01214 #if DtHLA 01215 DtHlaExerciseClock* myExerciseClockPtr; 01216 #else 01217 DtExerciseClock* myExerciseClockPtr; 01218 #endif 01219 01222 DtSimulationModelSet* myDefaultModelSet; 01223 01227 DtScenario myScenarioToLoad; 01228 01232 bool myWasPaused; 01233 }; 01234