![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: embarkationController.h,v $ $Revision: 1.34 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00009 #ifndef DtEmbarkationController_H_ 00010 #define DtEmbarkationController_H_ 00011 00012 #include "vrfobjcore/singleTaskControllerComponent.h" 00013 #include "vrfobjcore/embarkationPSR.h" 00014 00017 00021 00022 00023 class DtString; 00024 class DtSimManager; 00025 class DtTaskMessage; 00026 class DtEmbarkationDescriptor; 00027 class DtIfEmbarkationInformation; 00028 class DtSetDataRequest; 00029 00030 #include <list> 00031 00042 #include "vrfmodel/vrfmodelDefines.h" 00043 class DT_DLL_vrfmodel DtEmbarkationController : public DtSingleTaskControllerComponent 00044 { 00045 public: 00046 00049 DtEmbarkationController(const DtString& name, 00050 DtVrfObject* owner, 00051 DtSimManager* simManager, 00052 DtComponentDescriptor* desc = 0, 00053 DtReaderWriterRegistry* parentRegistry = 0); 00054 00056 virtual ~DtEmbarkationController(); 00057 00059 virtual bool init(); 00060 00063 virtual DtString type() const; 00064 00068 static DtSimComponent * creator(const DtString& name, 00069 DtVrfObject* owner, 00070 DtSimManager* simManager, 00071 DtComponentDescriptor* desc = 0, 00072 DtReaderWriterRegistry* parentRegistry = 0); 00073 00074 protected: 00076 virtual void registerTaskMsgCallbacks(); 00077 00079 virtual void tick(); 00080 00082 virtual void clearCurrentTaskMessage(); 00083 00085 virtual void clearTask(); 00086 00088 protected: 00090 virtual void processDisembarkTask(DtSimMessage* msg); 00091 static void disembarkTaskCallback(DtSimMessage* msg, void* usr); 00092 00098 virtual void processEmbarkTask(DtSimMessage* msg); 00099 static void embarkTaskCallback(DtSimMessage* msg, void* usr); 00100 00103 static void embarkObjectCallback(DtSimMessage* msg, void* usr); 00104 virtual void processEmbarkObjectCallback(DtSimMessage* msg); 00105 00106 static void disembarkObjectCallback(DtSimMessage* msg, void* usr); 00107 virtual void processDisembarkObjectCallback(DtSimMessage* msg); 00108 00112 static void embarkationInformationCallback(DtSimMessage* msg, void* usr); 00113 virtual void processEmbarkationInformationCallback(DtSimMessage* msg); 00114 00115 protected: 00117 virtual void processLoadEntity(DtSimMessage * msg); 00118 virtual void processUnloadEntity(DtSimMessage * msg); 00119 00120 static void setLoadEntityCallback(DtSimMessage * msg, void * usrData); 00121 static void setUnloadEntityCallback(DtSimMessage * msg, void * usrData); 00122 00124 virtual void unload(const DtVector& point); 00125 00128 static void deleteVrfObjectCallback(DtVrfObject * msg, void * usr); 00129 virtual void processDeleteVrfObjectCallback(DtVrfObject* obj); 00130 00134 static void taskCompleteReportCallback(DtSimMessage * msg, void * usr); 00135 virtual void processTaskComplete(DtSimMessage * msg); 00136 00137 protected: 00138 00141 virtual void moveToEgress(); 00142 00144 virtual void movingToEgress(); 00145 00147 virtual void disembark(); 00148 00150 virtual void sendTask(const DtSimTask& task, const DtString& toName); 00151 00153 virtual void removeControlPoint(); 00154 00158 virtual void moveToIngress(const DtString& parentName); 00159 00160 virtual void createControlPoint(const DtVector& location, 00161 const DtString& parent); 00162 00163 virtual void createRoute(const std::vector<DtVector>&, 00164 const DtString& parent); 00165 00168 virtual void moveToEmbarkationPoint(); 00169 00174 virtual void atEmbarkationPoint(); 00175 00177 virtual void waitingToStop(); 00178 00182 virtual void movingToIngress(); 00183 00185 virtual void embarkObject(bool overridePosition, 00186 const DtVector& loadPosition, 00187 const DtString& parentName, int appearance = 0xFFFFFFFF, 00188 const DtTaitBryan& orientation = DtTaitBryan(), 00189 const DtVector& acceleration = DtVector(), 00190 const DtVector& velocty = DtVector()); 00191 00193 virtual void unloadObject(const DtVector& unloadPoint); 00194 00196 virtual void embark(const DtVector& loadPosition, const DtString& parentName, 00197 int appearance = 0xFFFFFFFF, const DtTaitBryan& orientation = DtTaitBryan(), 00198 const DtVector& acceleration = DtVector(), 00199 const DtVector& velocty = DtVector()); 00200 00203 virtual void movingToEmbarkationPoint(); 00204 00206 virtual void stoppedAtEmbarkedPoint(); 00207 00209 virtual void setState(DtVrfEmbarkationPSR::DtEmbarkationControllerState); 00210 virtual DtVrfEmbarkationPSR::DtEmbarkationControllerState state() const; 00211 00217 virtual bool createPSR(); 00218 00221 virtual void setupExistingConditions(); 00222 00225 virtual void completeEmbarkationInformationRequest( 00226 const DtIfEmbarkationInformation*); 00227 00230 virtual void embarkationRefused(const DtIfEmbarkationInformation*); 00231 00234 virtual void completeDisembarkationInformationRequest( 00235 const DtIfEmbarkationInformation*); 00236 00239 virtual void disembarkationRefused(const DtIfEmbarkationInformation*); 00240 00243 virtual DtTaitBryan embarkedOrientation(const DtTaitBryan&, 00244 const DtString& parent) const; 00245 00248 virtual void moveToIngressPoint(const DtIfEmbarkationInformation* info); 00249 00251 virtual void moveAlongToIngressPoint(const DtIfEmbarkationInformation* info); 00252 00255 virtual void moveToEgressPoint(const DtIfEmbarkationInformation* info); 00256 00259 virtual void moveAlongToEgressPoint(const DtIfEmbarkationInformation* info); 00260 00263 virtual void issueMoveToEgressTask(); 00264 virtual void issueMoveToIngressTask(); 00265 00268 virtual void issueMoveAlongToEgressTask(); 00269 virtual void issueMoveAlongToIngressTask(); 00270 00273 virtual void issueMoveToEmbarkationPointTask(); 00274 00276 virtual DtVector currentBodyPosition(const DtString& parent) const; 00277 virtual DtTaitBryan currentBodyOrientation(const DtString& parent) const; 00278 virtual DtVector currentBodyVelocity(const DtString& parent) const; 00279 virtual DtVector currentBodyAcceleration(const DtString& parent) const; 00280 00281 protected: 00291 virtual bool requestEmbarkationInformationFrom(const DtString& parent, 00292 bool start = false); 00293 virtual bool requestDisembarkationInformationFrom(const DtString& parent, 00294 bool start = false); 00295 00297 virtual void requestGiveUpSlot(const DtString& parent); 00298 00299 virtual void waitingForEmbarkationInformation(); 00300 virtual void waitingForDisembarkationInformation(); 00301 00303 virtual void placeObject(); 00304 00306 virtual void setLocation(const DtVector&); 00307 00314 virtual void calculateAndSetHeading(const DtVector& start, const DtVector& end); 00315 00317 virtual void sendSetRequest(DtSetDataRequest& request); 00318 00319 virtual void processDisembarkationState(const DtVector& bodyExitPosition); 00320 virtual void movingToFinalDestination(); 00321 virtual void moveToFinalDestination(); 00322 00325 virtual void preprocessEmbarkTask(); 00326 virtual void preprocessDisembarkTask(); 00327 00330 virtual bool checkEmbarkOk(const DtString& parent) const; 00331 00334 virtual void updateDisembarkedAppearance(); 00335 00339 virtual void updateEmbarkedAppearance(int); 00340 virtual void updateLifeformEmbarkedAppearance(int); 00341 00344 virtual void attachToEmbarkedParent(const DtString& newParent); 00345 00349 virtual DtVector fallbackOffloadPoint(); 00350 00353 virtual void addSetDataCallbacks(); 00354 00357 void removeSetDataCallbacks(); 00358 00361 virtual void addMessageCallbacks(); 00362 00365 void removeMessageCallbacks(); 00366 00368 virtual void enable(); 00369 00371 virtual void disable(); 00372 00373 private: 00374 00376 DtEmbarkationController(); 00377 00379 DtEmbarkationController(const DtEmbarkationController & 00380 orig); 00381 00383 const DtEmbarkationController & operator=(const 00384 DtEmbarkationController & orig); 00385 00386 protected: 00387 std::list<DtString> myEmbarkedObjects; 00388 00393 DtVrfObject* myControlPoint; 00394 00397 DtVrfEmbarkationPSR* myProcessState; 00398 00399 bool myFirstTick; 00400 00406 bool myWaiting; 00407 00408 DtEmbarkationDescriptor* myEmbarkationDescriptor; 00409 00410 double myRequestTime; 00411 int myRequestRetries; 00412 }; 00413 #endif