![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00011 00012 00013 #pragma once 00014 00015 00016 #include "vrfmodel/gndAutoCntlr.h" 00017 #include <matrix/vlVector.h> 00018 #include "vrfobjcore/automotivePSR.h" 00019 00020 class DtString; 00021 class DtSimManager; 00022 class DtSimMessage; 00023 class DtGroundMoveToDescriptor; 00024 class DtRangeAndDirectionNetworkSegmentMetric; 00025 class DtCollisionInputPort; 00026 class DtInputPortGroup; 00027 00042 #include "vrfmodel/vrfmodelDefines.h" 00043 class DT_DLL_vrfmodel DtGroundMoveToDestinationControllerComponent : public DtGroundAutoControllerComponent 00044 { 00045 public: 00046 00049 DtGroundMoveToDestinationControllerComponent(const DtString& name, 00050 DtVrfObject* owner, 00051 DtSimManager* simManager, 00052 DtComponentDescriptor* desc = 0, 00053 DtReaderWriterRegistry* parentRegistry = 0); 00054 00056 virtual ~DtGroundMoveToDestinationControllerComponent(); 00057 00059 virtual bool init(); 00060 00063 virtual void setComponentDescriptor(DtComponentDescriptor *componentDescriptor); 00064 00070 virtual void tick(); 00071 00074 virtual DtString type() const; 00075 00077 static void setLocationCallback(DtSimMessage* msg, void* usr); 00080 virtual void processSetLocation(DtSimMessage* msg); 00081 00083 static void modifyVrfObjectCallback(DtSimMessage* msg, void* usr); 00087 virtual void processModifyVrfObject(DtSimMessage* msg); 00088 00090 static void setStayInLaneCallback(DtSimMessage* msg, void* usr); 00094 virtual void processSetStayInLane(DtSimMessage* msg); 00095 00099 static DtSimComponent * creator(const DtString& name, 00100 DtVrfObject* owner, 00101 DtSimManager* simManager, 00102 DtComponentDescriptor* desc = 0, 00103 DtReaderWriterRegistry* parentRegistry = 0); 00104 00106 virtual void registerTaskMsgCallbacks(); 00107 00116 virtual bool getDestination(DtVector & destination); 00117 00122 virtual const DtVector& destinationVector() const; 00123 00130 virtual double findDesiredSpeed(); 00131 00140 virtual double findDesiredHeading(); 00141 00148 virtual DtAutoTransmissionGearEnum determineGearSetting(); 00149 00160 virtual bool nearDestination(); 00161 00170 virtual bool atDestination(); 00171 00181 virtual bool passedDestination(); 00182 00184 virtual void stop(); 00185 00189 virtual bool findUsableRoad(double targetHeading); 00190 00193 virtual double calculateSteeringForRoad(double currentHeading); 00194 00197 virtual void doMoving(); 00198 00199 protected: 00203 virtual bool setupDestination(); 00204 00213 virtual void setupDestinationVector() const; 00214 00216 virtual void invalidateDestinationVector() const; 00217 00219 virtual double desiredHeadingFromDestination(const DtDcm& localToTopoDcm); 00220 00222 virtual void moveToDestination(); 00223 virtual double distanceToDestination() const; 00224 00228 virtual void setupRoadMetric(); 00229 00233 virtual bool stayInLaneEnabled(); 00234 00238 virtual bool decideToGiveUpTask() const; 00239 00240 virtual bool createPortGroups(); 00241 virtual bool createPorts(); 00242 00245 virtual void setDestinationIsInsideObstruction(bool yesNo); 00246 00249 virtual bool destinationIsInsideObstruction() const; 00250 00251 virtual double sideOfRoad(); 00252 00253 private: 00256 DtGroundMoveToDestinationControllerComponent(); 00257 00259 DtGroundMoveToDestinationControllerComponent(const DtGroundMoveToDestinationControllerComponent &orig); 00260 00262 const DtGroundMoveToDestinationControllerComponent & operator=(const 00263 DtGroundMoveToDestinationControllerComponent & orig); 00264 00265 protected: 00266 00267 double myDistanceSquared; 00268 00269 DtVector myLocalDestination; 00270 DtVector myWorldDestination; 00271 00272 mutable DtVector myDestinationVector; 00273 mutable bool myDestinationVectorIsValid; 00274 00275 double myDesiredSpeed; 00276 double myCurrentSpeed; 00277 00278 bool myAtDestination; 00279 bool myNearDestination; 00280 bool myPassedDestination; 00281 00282 const DtGroundMoveToDescriptor* myMoveToDescriptor; 00284 DtRangeAndDirectionNetworkSegmentMetric* myRoadMetric; 00285 00288 00294 DtCollisionInputPort* myCollisionAvoidancePort; 00295 00298 DtInputPortGroup* myCollisionAvoidancePortGroup; 00299 00301 00302 bool myDestinationIsInsideObstruction; 00303 }; 00304 00305