![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2003 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00009 #pragma once 00010 00012 #include "vrfobjcore/simObjSR.h" 00013 #include "vrfobjcore/groundInter.h" 00014 #include "vrfobjparam/simSector.h" 00015 #include "vrfutil/rsrcMgr.h" 00016 #include <vrfExtProtocol/objType.h> 00017 #include "vrfutil/echelonId.h" 00018 #include "vrfutil/rwInt.h" 00019 #include "vrfobjcore/groundInter.h" 00020 #include "vrfobjparam/simSector.h" 00021 #include "vrfutil/rsrcMgr.h" 00022 #include "vrfobjcore/taskStatusList.h" 00023 #include "vrfutil/rwTemplatedList.h" 00024 #include "vrfobjcore/filteredObjList.h" 00025 #include "vrfobjcore/attachedTerrain.h" 00026 #include "vrfutil/sensorContactInfoList.h" 00027 #include "vrfExtProtocol/rangeItem.h" 00028 00030 #include <vlpi/appearance.h> 00031 #include <vlpi/apSpec.h> 00032 #include <vlutil/vlString.h> 00033 #include <vlpi/thresholder.h> 00034 00036 #include <vlutil/vlConfig.h> 00037 #include <map> 00038 #include <list> 00039 00040 class DtVrfObjectGeometry; 00041 class DtVrfObject; 00042 class DtVrfObjectParameters; 00043 class DtVrfSubordinateManager; 00044 class DtSimManager; 00045 class DtVrfProcessStateRepositoryManager; 00046 class DtVrfWeaponPSR; 00047 class DtVrfObjectParameters; 00048 class DtRwAppearance; 00049 class DtVrfObject; 00050 class DtVrfObjectParameters; 00051 class DtSimManager; 00052 class DtTaskMessage; 00053 class DtVectorNetworkRecord; 00054 class DtVrfObjectStateRepository; 00055 class DtVrfStateRepositoryUserExtension; 00056 class DtSignatureModifierEvaluator; 00057 class DtAttachmentManager; 00058 class DtArticulatedPartStateRepository; 00059 class DtLegacyProcessStateRepositoryManager; 00060 class DtObjectResourceManager; 00061 00062 const int DtEntityVisibilityTest = 1; 00063 const int DtPolygonVisibilityTest = 2; 00064 const int DtFeatureVisibilityTest = 3; 00065 00066 typedef bool (*DtVisibilityTest)(double rangeSquared, const DtEntityIdentifier& eyeKey, 00067 const DtVector& localEyePoint, const DtVector& localEndPoint, const DtVrfObjectStateRepository* sr); 00068 00071 typedef void (*DtPostInitializeFromParametersCallbackFcn)(DtVrfObjectStateRepository& stateRepository, 00072 void* usr); 00073 00078 #include "vrfobjcore/vrfobjcoreDefines.h" 00079 class DT_DLL_vrfobjcore DtVrfObjectStateRepository : public DtSimObjectStateRepository 00080 { 00081 protected: 00083 DtVrfObjectStateRepository(); 00084 00085 public: 00086 00088 DtVrfObjectStateRepository(DtVrfObject* vrfObject, 00089 const DtObjectType& objectType, DtVrfObjectParameters* parameters, 00090 const DtString& rwName = DtString::nullString(), 00091 DtReaderWriterRegistry* parentRegistry = 0); 00092 00094 DtVrfObjectStateRepository(const DtVrfObjectStateRepository& orig, 00095 const DtString& rwName = DtString::nullString(), 00096 DtReaderWriterRegistry* parentRegistry = 0); 00097 00099 const DtVrfObjectStateRepository& operator=( 00100 const DtVrfObjectStateRepository& orig); 00101 00103 virtual ~DtVrfObjectStateRepository(); 00104 00106 virtual DtSimObjectStateRepository* clone( 00107 const DtString& rwName = DtString::nullString(), 00108 DtReaderWriterRegistry* parentRegistry = 0) const; 00109 00110 virtual DtString type() const; 00111 00113 virtual const int objectStateRepositorySubType() const; 00114 00116 virtual const int vrfObjectStateRepositorySubType() const; 00117 00118 virtual bool init(); 00119 00120 virtual bool createParameters(); 00121 virtual void initializeFromParameters(); 00122 virtual const DtVrfObjectParameters* vrfParameters() const; 00123 00128 virtual DtVrfStateRepositoryUserExtension* userExtension() const; 00129 00132 virtual void restoreEntity(); 00133 00144 00145 virtual const DtObjectResourceManager* objectResourceManager() const; 00146 virtual DtObjectResourceManager* objectResourceManager(); 00148 00157 00158 virtual const DtSimResourceManager& oldResourceManager() const; 00159 virtual DtSimResourceManager& oldResourceManager(); 00160 00162 virtual DtSimResource* oldLookupResource(const DtString & resourceName); 00163 virtual const DtSimResource* oldLookupResource(const DtString & resourceName) const; 00164 00167 virtual void oldAddResource(DtSimResource* resource); 00168 00170 virtual void oldRemoveResource(DtSimResource* resource); 00172 00173 virtual void restoreResourcesFromParameters(); 00174 00177 00178 virtual void setSOR(DtReal center, DtReal size); 00179 00180 virtual DtReal SORSize() const; 00181 virtual DtReal SORCenter() const; 00182 00183 virtual const DtSimSector& SOR() const; 00185 00188 virtual bool inSOR(const DtVrfObject* entity) const; 00189 00190 virtual const DtString& engagementRules() const; 00191 virtual void setEngagementRules(const DtString& engagementRules); 00192 00194 00195 virtual void setRequestTaskNeeded(bool value); 00196 virtual bool requestTaskNeeded() const; 00198 00200 00201 virtual void setTasked(const DtString& componentName, bool tasked); 00202 virtual bool tasked(const DtString& componentName) const; 00204 00207 virtual bool isTasked() const; 00208 00210 virtual void clearCurrentTaskMsg(const DtString& componentName); 00211 00213 virtual void clearCurrentTaskMsg(const DtString& componentName, int taskId); 00214 00216 00217 virtual void setCurrentTaskMsg(const DtString& componentName, 00218 const DtTaskMessage & taskMsg); 00219 00220 virtual void setCurrentTaskMsg(const DtString& componentName, 00221 const DtTaskMessage & taskMsg, int taskId); 00223 00225 virtual const DtTaskStatusList* taskStatusList() const; 00226 00229 virtual DtTaskMessage* currentTaskMsg(const DtString& componentName) const; 00230 00232 virtual DtTaskMessage* currentTaskMsg(const DtString& componentName, int taskId) const; 00233 00235 virtual std::list<DtTaskMessage*> allCurrentTaskMsg(const DtString& componentName) const; 00236 00237 virtual void putSelf(FILE* fp, 00238 int indentLevel = 0, 00239 bool writeUnspecified = false, 00240 const DtFilename& path = DtReaderWriter::appPath()); 00241 00254 virtual bool placePoints(DtAttachedTerrain& attachedTerrain, 00255 std::vector<DtGroundInteractionPt*> groundInteractionPts, 00256 bool* terrainDataAvailable = 0); 00257 00261 virtual void updateSupportPoints(const DtVector& newPosition, 00262 const DtReal newHeading); 00263 00266 00267 virtual void setIndependentlyTasked(bool value); 00268 virtual bool independentlyTasked() const; 00270 00273 00274 static void objectAddedCallback(DtVrfObject * vrfObject, void * usr); 00275 virtual void processObjectAddedCallback(DtVrfObject * vrfObject); 00276 static void objectAboutToBeRemovedCallback(DtVrfObject * vrfObject, void * usr); 00277 virtual void processObjectAboutToBeRemovedCallback(DtVrfObject * vrfObject); 00279 00281 static DtVrfObjectStateRepository* createRepository(const DtString & name, 00282 const DtString & type, DtVrfObject* simObject, 00283 const DtObjectType & objectType, DtVrfObjectParameters* parameters, 00284 DtReaderWriterRegistry* parentRegistry = 0); 00285 00286 static void addSimObjectStateRepositoryCreatorFcn(const DtString & type, 00287 DtSimObjectStateRepositoryCreatorFcn fcn); 00288 00293 00294 static DtSimObjectStateRepositoryFactory* factory(); 00295 static void setFactory(DtSimObjectStateRepositoryFactory* factory); 00297 00300 00301 virtual const DtVrfObjectParameters* parameterEntry() const; 00302 virtual void setParameterEntry(DtVrfObjectParameters* parameterEntry); 00304 00306 virtual const DtVrfObjectParameters* parameters() const; 00307 00309 virtual DtVrfObjectParameters* modifiableParameters(); 00312 virtual void setupParameterInheritance(); 00313 00316 00317 virtual DtForceType forceType() const; 00318 virtual void setForceType(DtForceType force); 00320 00322 virtual bool createAttachments(); 00323 00325 void addPart(DtArticulatedPartStateRepository * part); 00326 void removePart(DtArticulatedPartStateRepository * part); 00327 DtArticulatedPartStateRepository * part(DtArtPartType partType); 00328 00329 DtArticulatedPartStateRepository * findDescendantByType( 00330 DtArtPartType childType); 00331 00335 00336 virtual bool createAppearance(); 00337 virtual const DtAppearance* appearance() const; 00338 virtual DtAppearance* appearance(); 00340 00344 00345 virtual void setCapabilities(int cap); 00346 virtual int capabilities() const; 00348 00351 00352 void setDestroyed(bool isDestroyed); 00353 bool isDestroyed() const; 00355 00363 00364 DtReal healthPct() const; 00365 void setHealthPct(DtReal pct); 00367 00370 00371 bool firePowerKilled() const; 00372 void setFirePowerKilled(const bool firePowerKilled); 00373 00374 bool mobilityKilled() const; 00375 void setMobilityKilled(const bool mobilityKilled); 00376 00377 bool flaming() const; 00378 void setFlaming(const bool flaming); 00379 00380 bool smoking() const; 00381 void setSmoking(const bool smoking); 00383 00387 bool isEntity() const; 00388 00392 bool isLocal() const; 00393 00398 bool isAggregate() const; 00399 00402 00403 virtual DtVrfSubordinateManager* subordinates(); 00404 virtual const DtVrfSubordinateManager* subordinates() const; 00406 00412 void addSubordinate(DtVrfObject* subordinateEntity); 00413 00415 void removeSubordinate(DtVrfObject* subordinateEntity); 00416 00418 virtual DtVrfObject* leadEntity() const; 00419 00421 virtual const DtString& firstSubordinate() const; 00422 00424 virtual const DtString& lastSubordinate() const; 00425 00427 virtual const DtString& firstHealthySubordinate() const; 00428 00431 00432 virtual DtSimManager* simManager(); 00433 virtual const DtSimManager* simManager() const; 00435 00438 00439 virtual DtPhysicalWorld* physicalWorld(); 00440 virtual const DtPhysicalWorld* physicalWorld() const; 00442 00445 virtual void tick(); 00446 00451 virtual void timedTick(); 00452 00455 virtual void setMinTickPeriod(double minTickPeriod); 00456 00458 virtual double minTickPeriod() const; 00459 00461 virtual void setMinTickPeriodVariance(double minTickPeriodVariance); 00462 00464 virtual double minTickPeriodVariance() const; 00465 00469 virtual void setNextTickTime(double nextTickTime); 00470 00472 virtual double nextTickTime() const; 00473 00479 virtual double calculateNextTickTime() const; 00480 00481 virtual bool createSubordinates(); 00482 virtual DtVrfSubordinateManager* vrfSubordinates(); 00483 virtual const DtVrfSubordinateManager* vrfSubordinates() const; 00484 00485 virtual bool createProcessStateRepositoryManager(); 00490 00491 virtual const DtVrfProcessStateRepositoryManager* 00492 systemProcessStateRepositoryManager() const; 00493 virtual DtVrfProcessStateRepositoryManager* systemProcessStateRepositoryManager(); 00495 00498 virtual const DtTaitBryan& localOrientationWrtDatabase() const; 00499 virtual void setLocalOrientationWrtDatabase( 00500 const DtTaitBryan& localOrientation); 00501 00506 virtual DtVrfWeaponPSR* firstWeaponPSR() const; 00507 00512 virtual void processObjectGeometry(const DtList& vertices); 00513 virtual void processObjectGeometry(const DtLocalVertexList& vertices); 00514 00521 virtual void processObjectGeometry(); 00522 00523 virtual const DtVrfObjectParameters* vrfBaseParameters() const; 00524 00525 virtual DtGroundInteractionPt* groundCenter(); 00526 virtual const DtGroundInteractionPt* groundCenter() const; 00527 00528 virtual const DtVector& getPartAttachPoint(const int partType) const; 00529 00544 virtual void place(const DtVector& location, bool* dataAvailable = 0, 00545 bool requireAllData = false); 00546 00561 virtual void place(const DtReal heading, bool* dataAvailable = 0, 00562 bool requireAllData = false); 00563 00576 virtual void place(const DtVector& location, const DtReal heading, 00577 bool clampToGroundFlag = true, bool* dataAvailable = 0, 00578 bool requireAllData = false); 00579 00582 virtual void updatePositionFromModelVertices(); 00583 virtual void updateBVolFromModelVertices(); 00584 00585 00586 virtual DtReal mass() const; 00587 virtual void setMass(const DtReal mass); 00588 00590 virtual const DtArticulatedPartCollection* artPartList() const; 00591 00595 virtual void createParts(); 00596 00597 virtual DtTime lastTimeFiredUpon() const; 00598 virtual void setLastTimeFiredUpon(const DtTime time); 00599 00600 virtual bool underFire() const; 00601 virtual void setUnderFire(bool underFire); 00602 00603 virtual DtDeadReckonTypes deadReckoningAlgorithm() const; 00604 virtual void setDeadReckoningAlgorithm( 00605 DtDeadReckonTypes deadReckoningAlgorithm); 00606 00608 00609 virtual const DtThresholder& deadReckoningThresholder() const; 00610 virtual void setDeadReckoningThresholder( 00611 const DtThresholder& thresholder); 00613 00616 00617 virtual const DtEntityIdentifier & occupyingObjectId() const; 00618 virtual void setOccupyingObjectId(const DtEntityIdentifier & objId); 00620 00623 00624 virtual void setEchelonId(const DtEchelonId& echelonId); 00625 virtual DtEchelonId& echelonId(); 00626 virtual const DtEchelonId& echelonId() const; 00628 00630 00631 virtual void setIsSubordinateOfForceLevel(bool yesNo); 00632 virtual bool isSubordinateOfForceLevel() const; 00634 00637 virtual void putData(FILE *fp, int indentLevel = 0); 00638 00643 virtual void getSelf(DtlObjPtr args, const DtFilename& searchPath, 00644 const DtVariableBindingsList& variableBindings); 00645 00647 virtual int nextTaskId(); 00648 00654 00655 virtual void addPendingSubtaskId(const DtString& componentName, int subtaskId); 00656 virtual void addPendingSubtaskId(const DtString& componentName, int taskId, int subtaskId); 00657 virtual bool findPendingSubtaskId(const DtString& componentName, int subtaskId); 00658 virtual bool findPendingSubtaskId(const DtString& componentName, int taskId, int subtaskId); 00659 virtual void removePendingSubtaskId(const DtString& componentName, int subtaskId); 00660 virtual void removePendingSubtaskId(const DtString& componentName, int taskId, int subtaskId); 00661 virtual void removeAllPendingSubtaskIds(const DtString& componentName); 00662 virtual void removeAllPendingSubtaskIds(const DtString& componentName, int taskId); 00663 virtual void printPendingSubtaskIds(const DtString& componentName) const; 00664 virtual std::vector<int> currentPendingSubstaskIds(const DtString& componentName) const; 00665 virtual std::vector<int> currentPendingSubstaskIds(const DtString& componentName, int taskId) const; 00667 00670 virtual DtTaskMessage* pendingSubtask(int subtaskId, DtString& controller) const; 00671 00675 virtual bool taskedBySuperiorUponTaskComplete() const; 00676 00677 virtual void setParentWasDestroyedWhenEmbarked(bool); 00678 virtual bool parentWasDestroyedWhenEmbarked() const; 00679 00680 virtual void detachFromParent(); 00681 virtual void attachToParent(DtSimObjectStateRepository* parent); 00682 virtual void attachToParent(DtString parent); 00683 00691 virtual void addAttachedTerrain(const DtString& parent); 00692 00695 virtual void removeAttachedTerrain(const DtString& parent); 00696 00699 Dt3dBoundingVolume* boundingVolume() const; 00700 00705 00706 DtReal currentSpeed() const; 00708 00713 DtReal forwardSpeed() const; 00714 00716 00717 DtReal currentHeading() const; 00718 void setCurrentHeading(const DtReal heading); 00720 00723 00724 virtual void addPostInitFromParamsCallback(DtPostInitializeFromParametersCallbackFcn fcn, 00725 void* usr); 00726 virtual void removePostInitFromParamsCallback(DtPostInitializeFromParametersCallbackFcn fcn, 00727 void* usr); 00729 00730 protected: 00731 00734 virtual void initializeNextTaskId(); 00735 00737 virtual void setOrientationRelativeToParent(); 00738 00739 virtual DtAttachedTerrain* createAttachedTerrain(); 00740 00744 virtual DtArticulatedPartStateRepository* createArtPartStateRepository( 00745 DtVrfObject* vrfObject, const DtObjectType& objectType, 00746 const DtString& rwName = DtString::nullString()); 00747 00748 public: 00749 00751 //{@ 00752 virtual void addRangeItem(const DtRangeItem&); 00753 virtual void removeRangeItem(int index); 00754 virtual void setRangeItems(const DtRangeItems&); 00755 const DtRangeItems& rangeItems() const; 00756 DtRangeItems& rangeItems(); 00757 virtual void clearRangeItems(); 00759 00760 DtAttachedTerrain* terrainAttachedTo() const; 00761 00766 virtual double sensorSignature(const DtSymbolString& sensorDomain) const; 00767 00770 virtual std::list<DtSymbolString> sensorSignatureDomains() const; 00771 00778 00779 virtual DtSensorContactInfoList& objectContactList(); 00780 virtual const DtSensorContactInfoList& objectContactList() const; 00782 00783 protected: 00786 virtual double baseSensorSignature(const DtSymbolString& sensorDomain) const; 00787 00791 virtual double modifySensorSignature(const DtSymbolString& sensorDomain, 00792 double baseSignature) const; 00793 00796 virtual bool initSignatureEvaluators(); 00797 00800 void clearSignatureEvaluators(); 00801 00803 virtual bool createObjectResourceManager(); 00804 00806 virtual void invokePostInitFromParamsCallbacks(); 00807 00808 public: 00809 00810 static DtVrfObjectStateRepository * creator(const DtString& name, 00811 DtVrfObject* simObject, const DtObjectType& objectType, 00812 DtVrfObjectParameters * parameters, 00813 DtReaderWriterRegistry * parentRegistry); 00814 00815 static DtVrfObjectStateRepository* isVrfObjectStateRepository( 00816 DtSimObjectStateRepository* repository); 00817 00818 static const DtVrfObjectStateRepository* isVrfObjectStateRepository( 00819 const DtSimObjectStateRepository* repository); 00820 00821 virtual DtVrfObjectStateRepository* toVrfObjectStateRepository(); 00822 virtual const DtVrfObjectStateRepository* toVrfObjectStateRepository() const; 00823 00824 protected: 00825 00827 static bool visibilityFilter(const DtVrfObject * object, void * usr); 00828 00829 protected: 00830 00831 DtVrfStateRepositoryUserExtension* myStateRepositoryUserExtension; 00832 00833 DtRwAppearance* myAppearance; 00834 DtRwInt myCapabilities; 00835 00836 DtRwForceType myForceType; 00837 00839 DtVrfSubordinateManager* mySubordinates; 00840 00843 DtRwString myParentName; 00844 00845 DtVrfProcessStateRepositoryManager* mySystemProcessSRManager; 00847 DtLegacyProcessStateRepositoryManager* myLegacyPSRManager; 00848 00849 DtSimManager* mySimManager; 00850 00851 DtGroundInteractionPt myGroundCenter; 00852 00854 bool myUnderFire; 00855 DtTime myLastTimeFiredUpon; 00856 00857 DtReal myMass; 00858 DtDeadReckonTypes myDeadReckoningAlgorithm; 00859 DtThresholder myDeadReckoningThresholder; 00860 00861 DtEntityIdentifier myOccupyingObjectId; 00862 00865 DtArticulatedPartCollection myArtPartList; 00866 00868 DtManagedObjectListConstPtr myVisibilityFilterList; 00869 00872 DtRwVector myLocalPosition; 00873 DtRwTaitBryan myLocalOrientation; 00874 DtRwBoolean myIsDestroyedFlag; 00875 00876 DtEchelonId myEchelonId; 00877 DtRwBoolean myIsSubordinateOfForceLevel; 00878 00882 DtRwInt myDesignator; 00883 00884 DtRwBoolean myIndependentlyTasked; 00885 00886 static DtSimObjectStateRepositoryFactory* theFactory; 00887 00891 DtSimResourceManager myResourceManager; 00892 00893 DtObjectResourceManager* myObjectResourceManager; 00894 00895 DtRwString myEngagementRules; 00896 00899 DtSimSector mySectorOfResponsibility; 00900 00902 DtRwBoolean myRequestTaskNeeded; 00903 00907 DtTaskStatusList myTaskStatusList; 00908 00910 DtRwInt myNextTaskId; 00911 00915 DtRwBoolean myParentWasDestroyedWhenEmbarked; 00916 00917 protected: 00918 //***** Important API change note 00920 //***** 00948 00952 const DtVrfObjectParameters* myParameterEntry; 00953 00956 DtVrfObjectParameters* myParameters; 00957 00959 double myMinTickPeriod; 00960 double myMinTickPeriodVariance; 00961 double myNextTickTime; 00962 double myLastTickSimTime; 00963 00964 DtAttachedTerrain* myTerrainAttachedTo; 00965 00966 typedef std::list<DtSignatureModifierEvaluator*> DtSignatureModifierEvalList; 00967 typedef std::map<DtSymbolString, DtSignatureModifierEvalList*> DtSignatureModifierEvalMap; 00970 DtSignatureModifierEvalMap mySignatureModifierEvalMap; 00971 00972 typedef std::map<DtSymbolString, double> DtSensorSignatureCacheMap; 00976 mutable DtSensorSignatureCacheMap myMutableSensorSignatureCacheMap; 00977 00980 DtSensorContactInfoList myObjectContactList; 00981 00982 typedef std::pair<DtPostInitializeFromParametersCallbackFcn, void*> DtPostInitializeFromParametersInfo; 00983 typedef std::list<DtPostInitializeFromParametersInfo> DtPostInitializeFromParametersCallbackList; 00984 00985 DtPostInitializeFromParametersCallbackList myPostInitFromParamsCallbackList; 00986 00989 DtRangeItems myRangeItems; 00990 };