VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/vrfObjSR.h
Go to the documentation of this file.
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 };

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)