![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2011 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00006 #pragma once 00007 00011 00015 00016 #include <vlutil/vlString.h> 00017 #include <vlutil/vlList.h> 00018 #include "vrfutil/rdrWritr.h" 00019 #include "vrfobjcore/compFactory.h" 00020 #include "vrfobjcore/vrfObjSR.h" 00021 #include <vlutil/vlHashlist.h> 00022 #include "vrfobjcore/vrfobjcoreDefines.h" 00023 00024 class DtSimManager; 00025 class DtVrfObject; 00026 class DtComponentDescriptor; 00027 class DtInputPort; 00028 class DtOutputPort; 00029 class DtInputPortGroup; 00030 class DtOutputPortGroup; 00031 class DtAttachedTerrain; 00032 class DtPhysicalWorld; 00033 class Coordinate_System; 00034 class DtComponentSystem; 00035 class DtVrfProcessStateRepositoryManager; 00036 class DtSimResourceManager; 00037 00060 class DT_DLL_vrfobjcore DtSimComponent : public DtReaderWriter 00061 { 00062 00063 public: 00064 00072 DtSimComponent(const DtString& name, 00073 DtVrfObject* owner, 00074 DtSimManager* simManager, 00075 DtComponentDescriptor* desc = 0, 00076 DtReaderWriterRegistry* parentRegistry = 0); 00077 00079 virtual ~DtSimComponent(); 00080 00085 void setParentSystem(DtComponentSystem* system); 00086 00089 virtual bool init(); 00090 00094 virtual bool postAddComponentsInit() { return true; } 00095 00099 virtual void enable(); 00100 virtual void disable(); 00101 virtual bool isEnabled(); 00102 virtual void setIsEnabled(bool yesNo); 00104 00108 virtual void tick(); 00109 00112 virtual void postTick(); 00113 00121 virtual void timedTick(); 00122 00125 virtual void setMinTickPeriod(double minTickPeriod); 00126 00128 virtual double minTickPeriod() const; 00129 00131 virtual void setMinTickPeriodVariance(double minTickPeriodVariance); 00132 00134 virtual double minTickPeriodVariance() const; 00135 00139 virtual void setNextTickTime(double nextTickTime); 00140 00142 virtual double nextTickTime() const; 00143 00149 virtual double calculateNextTickTime() const; 00150 00155 virtual double calculateFirstTickTime() const; 00156 00161 virtual DtString type() const; 00162 00169 virtual void setEntity(DtVrfObject* entity); 00170 00172 virtual DtSimComponent* nextComponent(); 00173 virtual DtSimComponent* prevComponent(); 00174 00176 virtual void setListItem(DtListItem* item); 00177 virtual DtListItem* listItem(); 00178 00181 virtual void putData(FILE* fp, int indentLevel = 0); 00182 00185 virtual DtlObjPtr getData(DtlObjPtr args, const DtFilename& searchPath, 00186 const DtVariableBindingsList& variableBindings); 00187 00190 virtual void addInputPort(DtInputPort* port); 00191 virtual void removeInputPort(DtInputPort* port); 00192 00198 virtual DtInputPort* lookupInputPort(const DtString& portName); 00199 00201 virtual DtList inputPortList() const; 00202 00205 virtual void addOutputPort(DtOutputPort* port); 00206 virtual void removeOutputPort(DtOutputPort* port); 00207 00213 virtual DtOutputPort* lookupOutputPort(const DtString& portName); 00214 00216 virtual DtList outputPortList() const; 00217 00220 virtual void addInputPortGroup(DtInputPortGroup* group); 00221 virtual void removeInputPortGroup(DtInputPortGroup* group); 00222 00225 virtual DtInputPortGroup* lookupInputPortGroup(const DtString& groupName); 00226 00228 virtual DtList inputPortGroupList() const; 00229 00232 virtual void addOutputPortGroup(DtOutputPortGroup* group); 00233 virtual void removeOutputPortGroup(DtOutputPortGroup* group); 00234 00237 virtual DtOutputPortGroup* lookupOutputPortGroup(const DtString& groupName); 00238 00240 virtual DtList outputPortGroupList() const; 00241 00248 virtual int priority() const; 00254 virtual void setPriority(int priority); 00255 00259 double dT() const; 00260 00265 virtual void setDT(double deltaT); 00266 00270 virtual void setComponentDescriptor(DtComponentDescriptor* componentDescriptor); 00271 virtual const DtComponentDescriptor* componentDescriptor() const; 00272 00277 virtual bool tickWhileDestroyed() const; 00278 00281 virtual DtOutputStream& objectConsoleDebug() const; 00282 virtual DtOutputStream& objectConsoleVerbose() const; 00283 virtual DtOutputStream& objectConsoleInfo() const; 00284 virtual DtOutputStream& objectConsoleWarn() const; 00285 virtual DtOutputStream& objectConsoleError() const; 00287 00292 DtVrfProcessStateRepositoryManager* psrManager(); 00293 00296 00297 virtual DtSimResourceManager& resourceManager(); 00298 virtual const DtSimResourceManager& resourceManager() const; 00300 00304 virtual DtString componentFullName() const; 00305 00309 static DtSimComponentFactory* factory(); 00310 static void setFactory(DtSimComponentFactory* factory); 00311 00314 static DtSimComponent* createComponent(const DtString& name, 00315 const DtString& type, DtVrfObject* owner, DtSimManager* simManager, 00316 DtComponentSystem* parentSystem, 00317 DtComponentDescriptor* desc = 0, 00318 DtReaderWriterRegistry* parentRegistry = 0); 00319 00325 static void addSimComponentCreatorFcn(const DtString& type, 00326 DtSimComponentCreatorFcn fcn); 00327 00328 protected: 00329 00334 bool testInvariant() const; 00335 00339 virtual bool createPortGroups(); 00340 00344 virtual bool createPorts(); 00345 00347 virtual DtPhysicalWorld* physicalWorld(); 00348 virtual const DtPhysicalWorld* physicalWorld() const; 00349 00351 virtual DtAttachedTerrain* terrainAttachedTo(); 00352 virtual const DtAttachedTerrain* terrainAttachedTo() const; 00353 00355 virtual DtVrfObject* entity(); 00356 virtual const DtVrfObject* entity() const; 00357 00359 virtual DtSimManager* simManager(); 00360 virtual const DtSimManager* simManager() const; 00361 00366 virtual const Coordinate_System* coordinateSystem() const; 00367 virtual Coordinate_System* coordinateSystem(); 00368 00370 virtual DtVrfObjectStateRepository* localStateRepository(); 00371 virtual const DtVrfObjectStateRepository* localStateRepository() const; 00372 00373 00374 private: 00377 DtSimComponent(); 00378 00380 DtSimComponent(const DtSimComponent& orig); 00381 00383 DtSimComponent& operator=(const DtSimComponent& orig); 00384 00385 00386 protected: 00387 DtVrfObject* myEntity; 00388 DtVrfObjectStateRepository* myLocalStateRepository; 00389 DtSimManager* mySimManager; 00391 DtComponentSystem* mySystem; 00392 DtListItem* myListItem; 00393 00394 typedef std::map<DtString, DtInputPort*> DtInputPortMap; 00395 typedef std::map<DtString, DtOutputPort*> DtOutputPortMap; 00396 typedef std::map<DtString, DtInputPortGroup*> DtInputPortGroupMap; 00397 typedef std::map<DtString, DtOutputPortGroup*> DtOutputPortGroupMap; 00398 00399 DtInputPortMap myInputPortList; 00400 DtOutputPortMap myOutputPortList; 00401 DtInputPortGroupMap myInputPortGroupList; 00402 DtOutputPortGroupMap myOutputPortGroupList; 00403 00404 static DtSimComponentFactory* myFactory; 00405 00406 int myPriority; 00407 00408 double myMinTickPeriod; 00409 double myMinTickPeriodVariance; 00410 double myNextTickTime; 00411 double myLastTickSimTime; 00412 double myDT; 00413 00416 bool myIsEnabled; 00417 00418 const DtComponentDescriptor* myComponentDescriptor; 00419 }; 00420 00421 inline double DtSimComponent::dT() const 00422 { 00423 return myDT; 00424 }