![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: embarkationSlotManager.h,v $ $Revision: 1.8 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00012 #ifndef DtEmbarkationSlotManager_H_ 00013 #define DtEmbarkationSlotManager_H_ 00014 00015 #include <vlutil/vlConfig.h> 00016 #include <map> 00017 #include "vrfobjparam/loadPoint.h" 00018 #include "vrfobjparam/slotExclusion.h" 00019 #include "vrfutil/rwTemplatedList.h" 00020 #include "vrfutil/rwString.h" 00021 #include "vrfutil/rwInt.h" 00022 00023 class DtEmbarkationSlotEntry; 00024 class DtVrfObject; 00025 class DtSimManager; 00026 00027 #include "vrfobjcore/vrfobjcoreDefines.h" 00028 class DT_DLL_vrfobjcore DtReservedEmbarkationSlotEntry 00029 { 00030 public: 00031 const DtEmbarkationSlotEntry* myEntry; 00032 std::list<DtString> myReservedBy; 00033 00034 void addReservedBy(const DtString&); 00035 void removeReservedBy(const DtString&); 00036 bool reservedBy(const DtString&) const; 00037 00038 }; 00039 00040 class DT_DLL_vrfobjcore DtEmbarkationSlotInformation 00041 { 00042 public: 00043 DtEmbarkationSlotInformation() : myEntry(NULL), mySlot(-1) {}; 00044 00045 DtEmbarkationSlotInformation& operator=(const DtEmbarkationSlotInformation& orig) 00046 { 00047 myEntry = orig.myEntry; 00048 mySlot = orig.mySlot; 00049 myLoadPath = orig.myLoadPath; 00050 00051 return *this; 00052 } 00053 00054 public: 00055 const DtEmbarkationSlotEntry* myEntry; 00056 int mySlot; 00057 std::vector<DtVector> myLoadPath; 00058 }; 00059 00060 class DT_DLL_vrfobjcore DtReservedSlot : public DtReaderWriter 00061 { 00062 public: 00063 DtReservedSlot(const DtString& name, DtReaderWriterRegistry* 00064 parentRegistry = NULL); 00065 DtReservedSlot(const DtSymbolString& name, DtReaderWriterRegistry* 00066 parentRegistry = NULL); 00067 00069 DtReservedSlot(const DtString& name, const 00070 DtReservedSlot& orig, DtReaderWriterRegistry* 00071 parentRegistry = NULL); 00072 00073 DtReservedSlot(const DtSymbolString& name, const 00074 DtReservedSlot& orig, DtReaderWriterRegistry* 00075 parentRegistry = NULL); 00076 00077 virtual ~DtReservedSlot(); 00078 00079 int reservedSlot() const; 00080 void setReservedSlot(int); 00081 00082 const DtRwTemplatedListPtr<DtRwString>& reservedBy() const; 00083 void addReservedBy(const DtString&); 00084 00085 protected: 00086 DtRwInt myReservedSlot; 00087 DtRwTemplatedListPtr<DtRwString> myReservedBy; 00088 }; 00089 00090 typedef std::map<int, DtReservedEmbarkationSlotEntry> DtEmbarkationSlotEntryMap; 00091 typedef std::vector<DtLoadPoint> DtLoadPathPoints; 00092 00093 class DT_DLL_vrfobjcore DtEmbarkationSlotManager : public DtReaderWriter 00094 { 00095 public: 00096 DtEmbarkationSlotManager(const DtString& name, DtReaderWriterRegistry* 00097 parentRegistry = NULL); 00098 DtEmbarkationSlotManager(const DtSymbolString& name, DtReaderWriterRegistry* 00099 parentRegistry = NULL); 00100 00102 DtEmbarkationSlotManager(const DtString& name, const 00103 DtEmbarkationSlotManager& orig, DtReaderWriterRegistry* 00104 parentRegistry = NULL); 00105 00106 DtEmbarkationSlotManager(const DtSymbolString& name, const 00107 DtEmbarkationSlotManager& orig, DtReaderWriterRegistry* 00108 parentRegistry = NULL); 00109 00110 virtual ~DtEmbarkationSlotManager(); 00111 00112 virtual void addSlot(int iSlot, const DtEmbarkationSlotEntry*); 00115 virtual DtEmbarkationSlotInformation slotFor(const DtVrfObject* embarkingObject, 00116 const DtVrfObject* hostObject) const; 00117 00119 virtual DtEmbarkationSlotInformation entityEmbarkationSlotInformation(const DtVrfObject*) const; 00120 00123 virtual bool blocked(int iSlot) const; 00124 virtual void addSlotExclusion(const DtSlotExclusion&); 00125 00127 virtual bool canEmbark(const DtEmbarkationSlotEntry*, const DtVrfObject*) const; 00128 00130 virtual bool reserveSlot(int iSlot, const DtString&); 00131 00132 virtual void addIngressPoint(const DtLoadPoint&); 00134 virtual void ingressPoints(int iSlot, const DtVrfObject* embarkingObject, 00135 const DtVrfObject* hostObject, DtEmbarkationSlotInformation& info) const; 00136 00137 virtual void addEgressPoint(const DtLoadPoint&); 00138 virtual void egressPoints(int iSlot, DtEmbarkationSlotInformation& info) const; 00139 00141 virtual void giveUpSlot(int, const DtString&); 00142 00144 virtual DtEmbarkationSlotManager* clone(const DtString& name, DtReaderWriterRegistry* 00145 parentRegistry = NULL); 00146 00150 virtual void calculateDisembarkPositions(const std::list<DtString>&, DtSimManager*); 00151 00157 virtual DtVector nextDisembarkPosition(const DtVrfObject* parent, const DtVrfObject* disembarking, 00158 const DtSimManager* simMgr, const DtVector& lastBodyPos, bool tasked); 00159 00162 virtual void setScalingFactor(double); 00163 virtual double scalingFactor() const; 00164 00165 protected: 00168 virtual void calculateGridSize(const std::list<DtString>&, DtSimManager*); 00169 00172 virtual void calculateGridCellSize(const std::list<DtString>&, DtSimManager*); 00173 00176 virtual DtDcm finalPositionTransformationMatrix(const DtVrfObject* parent, const DtVector& lastBodyPos) const; 00177 00178 protected: 00180 virtual bool slotMatches(const DtLoadPoint*, int iSlot) const; 00181 00183 virtual void putData(FILE *fp, int indentLevel = 0); 00184 00185 virtual bool blocked(int iSlot, const DtSlotExclusion&) const; 00186 00193 virtual const DtLoadPoint* bestIngressFor(const DtLoadPoint* ingressA, 00194 const DtLoadPoint* ingressB, const DtVrfObject* embarkingObject, 00195 const DtVrfObject* hostObject) const; 00196 00199 virtual DtVector bodyPositionToLocalPosition(const DtVector& bodyPosition, 00200 const DtVrfObject* body) const; 00201 00202 protected: 00203 DtEmbarkationSlotEntryMap mySlots; 00204 DtRwTemplatedListPtr<DtLoadPoint> myIngressPoints; 00205 DtRwTemplatedListPtr<DtLoadPoint> myEgressPoints; 00206 DtRwTemplatedListPtr<DtSlotExclusion> mySlotExclusions; 00207 00210 DtRwVector myDisembarkGridSize; 00211 00213 DtRwVector myDisembarkGridCellSize; 00214 00216 DtRwInt myDisembarkGridCell; 00217 00219 DtRwTemplatedListPtr<DtReservedSlot> myReservedSlots; 00220 00222 double myScalingFactor; 00223 }; 00224 00225 inline int DtReservedSlot::reservedSlot() const 00226 { 00227 return myReservedSlot; 00228 } 00229 00230 inline void DtReservedSlot::setReservedSlot(int s) 00231 { 00232 myReservedSlot = s; 00233 } 00234 00235 inline void DtReservedSlot::addReservedBy(const DtString& s) 00236 { 00237 myReservedBy.add(new DtRwString("reserved-by", s)); 00238 } 00239 00240 inline const DtRwTemplatedListPtr<DtRwString>& DtReservedSlot::reservedBy() const 00241 { 00242 return myReservedBy; 00243 } 00244 00245 #endif