![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00009 #pragma once 00010 00011 #include "vrfobjcore/cntrlCmpnt.h" 00012 #include <bhaveSim/bhaveSimDefines.h> 00013 00014 #include "vrfcore/vrfSimSettingsManager.h" 00015 #include "makSettingsManager/settingsObject.h" 00016 #include "makSettingsManager/boolSetting.h" 00017 #include <vrfmsgs/rwSpawnData.h> 00018 #include <vrfobjcore/vrfObjMgr.h> 00019 00020 class DtString; 00021 class DtVrfObject; 00022 class DtSimManager; 00023 class DtVrfObjectMessage; 00024 class DtRwObjectTypeInfo; 00025 00026 namespace BHAVE 00027 { 00028 00029 const char DtSpawnControllerType[] = "spawn-controller"; 00030 00031 class DtSpawnControllerDescriptor; 00032 class DtSpawnControllerPSR; 00033 00038 class DT_DLL_bhaveSim DtSpawnController : public DtControllerComponent 00039 { 00040 public: 00041 00042 //**************************************************************************** 00044 //**************************************************************************** 00045 DtSpawnController(const DtString& name, 00046 DtVrfObject* owner, 00047 DtSimManager* simManager, 00048 DtComponentDescriptor* desc = 0, 00049 DtReaderWriterRegistry* parentRegistry = 0); 00050 00052 virtual ~DtSpawnController(); 00053 00054 virtual DtString type() const; 00055 00059 static DtSimComponent * creator(const DtString& name, 00060 DtVrfObject* owner, 00061 DtSimManager* simManager, 00062 DtComponentDescriptor* desc = 0, 00063 DtReaderWriterRegistry* parentRegistry = 0); 00064 00065 //**************************************************************************** 00067 //**************************************************************************** 00068 static void settingConsumerCallback(const DtSettingsObject* settingsObject, 00069 void* usr); 00070 00072 00074 virtual void registerTaskMsgCallbacks(); 00076 00078 virtual void unregisterTaskMsgCallbacks(); 00079 00080 virtual bool init(); 00081 00082 protected: 00083 virtual void processSetting(const DtBoolSetting* setting); 00084 00085 virtual DtSpawnControllerPSR* createPSR(); 00086 00087 00088 //**************************************************************************** 00090 //**************************************************************************** 00091 static void updateSpawnInstanceCallback(const DtVrfObjectMessage * msg, 00092 void* usr); 00093 virtual void processUpdateSpawnInstanceCallback( 00094 const DtVrfObjectMessage * msg); 00095 00096 static void setTemplateNameCallback(const DtVrfObjectMessage * msg, 00097 void* usr); 00098 virtual void processSetTemplateNameCallback(const DtVrfObjectMessage * msg); 00099 00100 static void requestSpawnPtDataCallback(const DtVrfObjectMessage * msg, 00101 void* usr); 00102 virtual void processRequestSpawnPtDataCallback(const DtVrfObjectMessage * msg); 00103 00104 static void objectRemovedCallback(DtVrfObject* object, void* usr); 00105 virtual void processObjectRemoved(DtVrfObject *object); 00106 00107 static void objectRenamedCallback( 00108 const DtVrfObjectNameChangedCallbackInfo& info, 00109 void* usr); 00110 virtual void processObjectRenamed( 00111 const DtVrfObjectNameChangedCallbackInfo& info); 00112 00113 //**************************************************************************** 00115 //**************************************************************************** 00116 public: 00118 virtual void tick(); 00119 00121 const DtRwSpawnData& spawnParameters() const; 00122 00125 void setSpawnParameters(const DtRwSpawnData& params); 00126 00127 protected: 00128 00129 //**************************************************************************** 00131 //**************************************************************************** 00134 virtual std::list<DtVrfObject*> testAndSinkTraffic(); 00137 virtual bool shouldSinkObject(DtVrfObject* trafficObject, 00138 DtVrfObject* sinkPoint); 00140 virtual void deleteObjects(const std::list<DtVrfObject*>& objectList); 00141 00153 virtual bool canCreateNow(DtTime timeNow) const; 00154 00156 virtual DtString findSinkPoint(); 00157 00161 virtual DtTime nextCreationTime(DtTime timeNow); 00162 00164 virtual DtVrfObject* createObject(DtVrfObject* sinkPoint, 00165 DtVrfObject* objectToRecycle = 0); 00167 virtual DtVector creationLocationAndOrientation(double& heading, 00168 DtVrfObject* sinkPoint); 00169 00172 virtual void createAndSendDefaultPlan(DtVrfObject* obj, const DtString& sinkName); 00175 virtual double trafficSpeed(); 00176 00178 virtual void sendEntityPlan(DtVrfObject *entity, const DtPlan& plan); 00179 00183 virtual bool trafficObjectType(DtRwObjectTypeInfo& objType); 00184 00185 private: 00187 DtSpawnController(); 00188 00190 DtSpawnController(const DtSpawnController& orig); 00191 00193 const DtSpawnController & operator=(const DtSpawnController & orig); 00194 00195 00196 protected: 00197 00204 bool myFirstTick; 00205 00206 DtSpawnControllerPSR* myProcessState; 00207 const DtSpawnControllerDescriptor* myTrafficSourceDescriptor; 00208 bool myDrivingOnLeftEnabled; 00209 DtReal mySinkPointRadiusSq; 00210 }; 00211 } 00212