![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: convoyTaskController.h,v $ $Revision: 1.0 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #ifndef convoyTaskController_H_ 00016 #define convoyTaskController_H_ 00017 00018 #include "vrfmodel/vrfmodelDefines.h" 00019 #include "vrfobjcore/convoyPSR.h" 00020 #include "vrfobjcore/singleTaskControllerComponent.h" 00021 #include "vrfobjparam/convoyDescriptor.h" 00022 #include "vrftasks/setDataReq.h" 00023 #include "vrfutil/rwRailSegment.h" 00024 #include "vrfutil/rwReal.h" 00025 #include "vrfutil/rwTemplatedList.h" 00026 #include "terrainCS/coordSystem.h" 00027 00028 class DtVrfObjectMessage; 00029 00047 class DT_DLL_vrfmodel DtConvoyTaskController : public DtSingleTaskControllerComponent 00048 { 00049 public: 00052 DtConvoyTaskController(const DtString& name, 00053 DtVrfObject* owner, 00054 DtSimManager* simManager, 00055 DtComponentDescriptor* desc = 0, 00056 DtReaderWriterRegistry* parentRegistry = 0); 00057 00059 virtual ~DtConvoyTaskController(); 00060 00062 virtual bool init(); 00063 00066 virtual DtString type() const; 00067 00069 virtual void clearTask(); 00070 00072 virtual void registerTaskMsgCallbacks(); 00073 00078 static void convoyTaskCallback(DtSimMessage * msg, void * usr); 00079 00083 static void taskCompleteReportCallback(const DtVrfObjectMessage* msg, void * usr); 00084 00086 static void destinationChangedCallback(DtVrfObject* obj, void* usr); 00087 00089 static void objectAboutToBeRemovedCallback(DtVrfObject* obj, void* usr); 00090 00094 static DtSimComponent * creator(const DtString& name, 00095 DtVrfObject* owner, 00096 DtSimManager* simManager, 00097 DtComponentDescriptor* desc = 0, 00098 DtReaderWriterRegistry* parentRegistry = 0); 00099 00100 virtual void tick(); 00101 00102 virtual bool createPSR(); 00103 00104 protected: 00108 void onObjectAboutToBeRemoved(DtVrfObject* obj); 00109 00113 virtual void onModifyVrfObject(DtVrfObject* obj); 00114 00119 virtual void onConvoyTask(DtSimMessage * msg); 00120 00123 virtual void onTaskComplete(const DtVrfObjectMessage* msg); 00124 00129 virtual void sendTaskToSubordinate(const DtSimTask& task, 00130 const DtString& subordinateObjectName); 00131 00136 virtual void sendSetToSubordinate(DtSetDataRequest& request, 00137 const DtString& subordinateObjectName); 00138 00145 virtual bool setupTask(const DtVrfObject* aggregate, const DtVrfObject* destination, 00146 bool pathPlan, const Coordinate_System* coordSys); 00147 00155 virtual DtVector findAssemblyPoint(const DtVrfObject* aggregate, const DtVector& destination, 00156 bool haveRails, const Coordinate_System* coordSys); 00157 00164 virtual DtRwRailSegment* createEntrySegment(const DtVrfObject* entity, 00165 const DtVector& assemblyPoint, const Coordinate_System* coordSys) const; 00166 00173 virtual bool setupSubordinates(const DtVrfObject* aggregate, bool clearSubs, bool leaderSet = false); 00174 00179 virtual void setupLeadOnDistance(int numberOfEntities, float distanceBetween); 00180 00188 virtual bool createRailPath(const DtVrfObject* leadEntity, const DtVrfObject* destination, 00189 bool pathPlan, const Coordinate_System* coordSys); 00190 00198 virtual bool areSeparationDistancesWithinRange(const DtConvoyPSR::DtRwSubordinateList& subordinates, 00199 const float distance, const float tolerance, const Coordinate_System* coordSys); 00200 00204 virtual void setLeaderSpeed(const float speed); 00205 00209 virtual void resettingPhaseTick(bool retask = true); 00210 00213 virtual void startingPhaseTick(); 00214 00218 virtual void assemblingPhaseTick(); 00219 00222 virtual void convoyingPhaseTick(); 00223 00227 virtual void finishingPhaseTick(); 00228 00235 virtual DtVector findIntersectionOfLineAndCircle(const DtVector& centerPoint, 00236 const DtVector& endPoint, double radius, const Coordinate_System* coordSys) const; 00237 00245 virtual bool getEntityToPathEntry(const DtVrfObject* entity, const DtVector& assemblyPoint, 00246 const Coordinate_System* coordSys); 00247 00257 virtual DtRailSegment* findClosestEntryRail(const DtVrfObject* aggregate, 00258 const double& radius, 00259 DtRailSegmentList* rails, 00260 int& railNumber, 00261 const Coordinate_System* coordSys) const; 00262 00270 virtual bool isPointWithinRadius(const DtVector& center, double radius, 00271 const DtVector& point, const Coordinate_System* coordSys) const; 00272 00280 virtual bool findPointOnRailOutsideSphere(const DtVector& center, const double& radius, 00281 const DtRailSegment* segment, DtVector& resultPoint, const Coordinate_System* coordSys) const; 00282 00284 virtual void registerDestinationChangedCallback(); 00285 00287 virtual void unregisterDestinationChangedCallback(); 00288 00297 virtual bool updateConvoySubordinates(DtVrfObject* aggregate, 00298 std::vector<DtString>& tempList, 00299 bool recursive = false); 00300 00301 virtual bool isEntityPartOfConvoy(const DtString& name) const; 00302 00303 virtual bool isEntityIndependentlyTasked(const DtVrfObject* entity) const; 00304 00305 virtual void setConvoyFollowing(); 00306 00307 virtual void destroyedPhaseTick(); 00308 00309 private: 00310 00312 DtConvoyTaskController(const DtConvoyTaskController& orig); 00313 00315 DtConvoyTaskController& operator=(const DtConvoyTaskController& orig); 00316 00317 const DtConvoyDescriptor* myDescriptor; 00318 DtConvoyPSR* myProcessState; 00319 bool myDestinationChangedCallbackRegistered; 00320 }; 00321 00322 #endif