![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: occupancyDirectorController.h,v $ $Revision: 1.19 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 00016 #ifndef DtOccupancyDirectorController_H_ 00017 #define DtOccupancyDirectorController_H_ 00018 00019 #include "vrfobjcore/singleTaskControllerComponent.h" 00020 #include "vrfobjcore/occupancyDirectorPSR.h" 00021 #include "vrfobjcore/embarkationSlotManager.h" 00022 00023 #include <list> 00024 00025 class DtEmbarkationSlotEntry; 00026 class DtOccupancyDirectorDescriptor; 00027 class DtSimMessage; 00028 class DtEmbarkationSlotManager; 00029 class DtCollisionDetector; 00030 00047 #include "vrfmodel/vrfmodelDefines.h" 00048 class DT_DLL_vrfmodel DtOccupancyDirectorController : public DtSingleTaskControllerComponent 00049 { 00050 public: 00051 00054 DtOccupancyDirectorController(const DtString& name, 00055 DtVrfObject* owner, 00056 DtSimManager* simManager, 00057 DtComponentDescriptor* desc = 0, 00058 DtReaderWriterRegistry* parentRegistry = 0); 00059 00061 virtual ~DtOccupancyDirectorController(); 00062 00064 virtual bool init(); 00065 00068 virtual DtString type() const; 00069 00073 static DtSimComponent * creator(const DtString& name, 00074 DtVrfObject* owner, 00075 DtSimManager* simManager, 00076 DtComponentDescriptor* desc = 0, 00077 DtReaderWriterRegistry* parentRegistry = 0); 00078 00079 public: 00080 static void requestEmbarkationInformationCallback(DtSimMessage* msg, void* usr); 00081 virtual void processRequestEmbarkationInformation(DtSimMessage* msg); 00082 00083 protected: 00085 virtual void registerTaskMsgCallbacks(); 00086 00088 virtual void tick(); 00089 00095 virtual bool createPSR(); 00096 00098 virtual void giveUpSlot(int iSlot, const DtString& name); 00099 00101 virtual DtEmbarkationSlotInformation embarkationSlotEntryFor(const DtString&) const; 00102 00105 virtual DtEmbarkationSlotInformation disembarkationInformationFor(const DtString&, int& iResult) const; 00106 00108 virtual int disembarkationResult(const DtEmbarkationSlotInformation&) const; 00109 00112 virtual bool reserveSlot(const DtEmbarkationSlotInformation& entry, const DtString& name); 00113 00116 virtual void sendSlotInformationTo(const DtString& name, 00117 const DtEmbarkationSlotInformation& entry, int, int reqId = 0xFFFFFFFF); 00118 00120 static void deleteVrfObjectCallback(DtVrfObject * msg, void * usr); 00121 virtual void processDeleteVrfObjectCallback(DtVrfObject* obj); 00122 00127 virtual void processDisembarkAllTask(DtSimMessage* msg); 00128 static void disembarkAllTaskCallback(DtSimMessage* msg, void* usr); 00129 00131 virtual bool objectDisembarked(const DtString& objectName); 00135 virtual void disembarkNextObject(); 00136 00138 virtual void sendTask(const DtSimTask& task, const DtString& objectName); 00139 00141 static void disembarkObjectCallback(DtSimMessage* msg, void* usr); 00144 virtual void processDisembarkObjectCallback(DtSimMessage* msg); 00145 00157 virtual DtVector disembarkedPositionFor(const DtString& entityName, const DtEmbarkationSlotInformation&) const; 00158 00161 virtual bool nextEntityCanDisembark(const DtVrfObject* curEntity) const; 00162 00164 virtual bool isValidForDisembarkLayout(const DtVrfObject*) const; 00165 00167 virtual bool createCollisionDetector(); 00168 00170 virtual void setObstructionIDsInCollisionDetector(); 00171 00172 protected: 00176 virtual void setupSlots(); 00177 00180 virtual void initializeSlotManager(); 00181 00184 virtual void calculateDisembarkPositions(const std::list<DtString>&); 00185 00188 virtual void generateListForDisembarkation(std::list<DtString>& list); 00189 00191 virtual void removeAllSubordinates(DtVrfObject* obj); 00192 00193 private: 00194 00196 DtOccupancyDirectorController(); 00197 00199 DtOccupancyDirectorController(const DtOccupancyDirectorController & 00200 orig); 00201 00203 const DtOccupancyDirectorController & operator=(const 00204 DtOccupancyDirectorController & orig); 00205 00206 protected: 00207 00210 DtVrfOccupancyDirectorPSR* myProcessState; 00211 00212 bool myFirstTick; 00213 const DtOccupancyDirectorDescriptor* myOccupancyDirectorDescriptor; 00214 DtEmbarkationSlotManager* mySlotManager; 00215 DtCollisionDetector* myCollisionDetector; 00216 00219 std::set<DtString> myObjectsToDisembark; 00220 }; 00221 #endif