VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
simComponent.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2022 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
9 
10 #pragma once
11 
15 #include <vrfobjcore/localObject.h>
17 
21 
22 //#include <vrfutil/objectConsole.h>
23 #include <vrfutil/vrf4XAPI.h>
24 
25 #include <boost/shared_ptr.hpp>
26 
27 #include <vlutil/vlHashlist.h>
28 #include <vlutil/vlString.h>
29 #include <vlutil/vlList.h>
30 
31 #include <list>
32 
34 class DtInputPort;
35 class DtOutputPort;
36 class DtInputPortGroup;
37 class DtOutputPortGroup;
38 class DtPhysicalWorld;
39 class Coordinate_System;
40 class DtComponentSystem;
44 class DtLocalObject;
45 class DtSimObject;
47 class DtSimMessage;
48 class DtAttachedTerrain;
49 
71 #ifdef DtObjectDebugger_Enable
72  , public DtObjectDebugger<DtSimComponent>
73 #endif
74 {
75 public:
76 
84  DtSimComponent(const DtString& name,
85  DtLocalObject* owner,
86  DtSimulationServices* simServices,
87  DtComponentDescriptor* desc = 0,
88  DtReaderWriterRegistry* parentRegistry = 0);
89 
91  virtual ~DtSimComponent();
92 
97  virtual void setParentSystem(DtComponentSystem* system);
98  DtComponentSystem * parentSystem() const;
99 
102  virtual bool init();
103 
107  virtual bool postAddComponentsInit() { return true; }
108 
112  virtual void registerAttributeFunctions(){}
113 
117  virtual void enable();
118  virtual void disable();
119  virtual bool isEnabled();
120  virtual void setIsEnabled(bool yesNo);
122 
126  virtual void preFirstTickInit();
127 
131  virtual void tick();
132 
136  virtual void postTick();
137 
145  virtual void timedTick();
146 
149  virtual void setMinTickPeriod(double minTickPeriod);
150 
152  virtual double minTickPeriod() const;
153 
155  virtual void setMinTickPeriodVariance(double minTickPeriodVariance);
156 
158  virtual double minTickPeriodVariance() const;
159 
163  virtual void setNextTickTime(double nextTickTime);
164 
166  virtual double nextTickTime() const;
167 
173  virtual double calculateNextTickTime() const;
174 
179  virtual double calculateFirstTickTime() const;
180 
187  virtual const char* type() const = 0;
188 
195  virtual void setEntity(DtLocalObject* entity);
196 
198  virtual DtSimComponent* nextComponent();
199  virtual DtSimComponent* prevComponent();
200 
202  virtual void setListItem(DtListItem* item);
203  virtual DtListItem* listItem();
204 
207  virtual void putData(std::string& fp, int indentLevel = 0);
208 
211  virtual DtlObjPtr getData(DtlObjPtr args, const DtReaderWriter::SearchPaths& searchPaths,
212  const DtVariableBindingsList& variableBindings);
213 
216  virtual void addInputPort(DtInputPort* port);
217  virtual void removeInputPort(DtInputPort* port);
218 
224  virtual DtInputPort* lookupInputPort(const DtString& portName);
225 
227  virtual DtList inputPortList() const;
228 
231  virtual void addOutputPort(DtOutputPort* port);
232  virtual void removeOutputPort(DtOutputPort* port);
233 
239  virtual DtOutputPort* lookupOutputPort(const DtString& portName);
240 
242  virtual DtList outputPortList() const;
243 
246  virtual void addInputPortGroup(DtInputPortGroup* group);
247  virtual void removeInputPortGroup(DtInputPortGroup* group);
248 
251  virtual DtInputPortGroup* lookupInputPortGroup(const DtString& groupName);
252 
254  virtual DtList inputPortGroupList() const;
255 
258  virtual void addOutputPortGroup(DtOutputPortGroup* group);
259  virtual void removeOutputPortGroup(DtOutputPortGroup* group);
260 
263  virtual DtOutputPortGroup* lookupOutputPortGroup(const DtString& groupName);
264 
266  virtual DtList outputPortGroupList() const;
267 
274  virtual int priority() const;
280  virtual void setPriority(int priority);
281 
285  double dT() const;
286 
291  virtual void setDT(double deltaT);
292 
296  virtual void setComponentDescriptor(DtComponentDescriptor* componentDescriptor);
297  virtual const DtComponentDescriptor* componentDescriptor() const;
298 
303  virtual bool tickWhileDestroyed() const;
304 
310  virtual DtOutputStream& objectConsoleDebug(const DtString& channel = "") const;
312  virtual DtOutputStream& objectConsoleVerbose(const DtString& channel = "") const;
314  virtual DtOutputStream& objectConsoleInfo(const DtString& channel = "") const;
316  virtual DtOutputStream& objectConsoleWarn(const DtString& channel = "") const;
318  virtual DtOutputStream& objectConsoleError(const DtString& channel = "") const;
319  virtual int notifyLevel() const;
321 
327 
330 
331  virtual DtSimResourceManager& resourceManager();
332  virtual const DtSimResourceManager& resourceManager() const;
334 
338  virtual const DtSymbolString& componentFullName() const;
339 
343  static DtSimComponentFactory* factory();
344  static void setFactory(DtSimComponentFactory* factory);
345 
348  static DtSimComponent* createComponent(const DtString& name,
349  const DtString& type, DtLocalObject* owner, DtSimulationServices* simManager, DtComponentSystem* parentSystem,
350  DtComponentDescriptor* desc = 0,
351  DtReaderWriterRegistry* parentRegistry = 0);
352 
358  static void addSimComponentCreatorFcn(const DtString& type,
360 
362  DtPhysicalWorld* physicalWorld();
363  const DtPhysicalWorld* physicalWorld() const;
364 
366  const DtAttachedTerrain* terrainAttachedTo() const;
367 
369  DtLocalObject* entity() { return myEntity; }
370  const DtLocalObject* entity() const { return myEntity; };
371 
373  DtSimulationServices* simulationServices();
374  const DtSimulationServices* simulationServices() const;
375 
380  const Coordinate_System* coordinateSystem() const;
381 
385  virtual bool taskVisualizationsActive() const;
386 
392  virtual bool taskVisualizationsEnabled() const;
393 
395  virtual void onRestore();
396 
398  {
399  return myTaskVisualizations;
400  }
401 
402 protected:
403 
405  virtual double computeCurrentTime();
406 
411  bool testInvariant() const;
412 
416  virtual bool createPortGroups();
417 
421  virtual bool createPorts();
422 
431  DtVrfProcessStateRepository* createComponentPsr(const DtString& defaultPsrType,
432  const DtString& defaultPsrName, bool useDescriptorParams = true);
433 
436  virtual void updateTaskVisualizations() {};
437 
439  virtual void destroyTaskVisualizations();
440 
442  virtual void destroyTaskVisualization(const DtString& name);
443 
445  virtual makVrf::DtPointTaskVisualizationPtr pointTaskVisualization(const DtString& name);
446 
448  virtual makVrf::DtLineTaskVisualizationPtr lineTaskVisualization(const DtString& name);
449 
451  virtual makVrf::DtAreaTaskVisualizationPtr areaTaskVisualization(const DtString& name);
452 
454  virtual makVrf::DtTextTaskVisualizationPtr textTaskVisualization(const DtString& name);
455 
457  double calculateNextTaskVisTickTime() const;
458 
460  DtVrfObjectStateRepository* localStateRepository();
461 
464  const DtVrfObjectStateRepository* localStateRepository() const;
465 
469 
473  void addSimObjectPredicateCallback(DtSimObjectReference,
475  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
476  void* userData = 0);
477  void removeSimObjectPredicateCallback(const DtSimObject*,
479  const DtVrfObjectPredicate& predicate, DtTime evaluationPeriod = 0,
480  void* userData = 0);
481 
486  void invokeSimObjectPredicateCallbacks();
487 
490  virtual void clearPredicateCallbacks();
492 
493 private:
496  DtSimComponent();
497 
499  DtSimComponent(const DtSimComponent& orig);
500 
503 
504 protected:
506 
509  DtListItem* myListItem;
510 
511  typedef std::map<DtString, DtInputPort*> DtInputPortMap;
512  typedef std::map<DtString, DtOutputPort*> DtOutputPortMap;
513  typedef std::map<DtString, DtInputPortGroup*> DtInputPortGroupMap;
514  typedef std::map<DtString, DtOutputPortGroup*> DtOutputPortGroupMap;
515 
520 
522 
524 
529  double myDT;
530 
534 
538 
540 
543  std::list<DtVrfProcessStateRepository*> myComponentPsrs;
544 
547 
550 
553 
555 
558 
559 public:
564 
566  VRF4API_METHOD const DtSimulationServices* simManager() const { return simulationServices(); };
569 };
570 
571 inline double DtSimComponent::dT() const
572 {
573  return myDT;
574 }
575 
const DtComponentDescriptor * myComponentDescriptor
Definition: simComponent.h:539
double myNextTickTime
Definition: simComponent.h:527
virtual bool postAddComponentsInit()
Called after all components have been created, initialized and added to the component manager...
Definition: simComponent.h:107
Definition: attachedTerrain.h:45
Definition: symbolString.h:20
double myMinTickPeriod
Definition: simComponent.h:525
A DtComponentSystem is a collection of DtSimComponents that are associated with each other...
Definition: componentSystem.h:35
DtOutputPortGroupMap myOutputPortGroupList
Definition: simComponent.h:519
virtual DtlObjPtr getData(DtlObjPtr args, const SearchPaths &searchPaths, const DtVariableBindingsList &variableBindings)
Deriving class overrides these to get/put class specific data.
The DtSimObjectReference is a shared pointer that can be used amongst many object for access to the u...
Definition: simObjectReference.h:26
Definition: readerWriter.h:85
class DtSimResourceManager:
Definition: simResourceManager.h:38
A readable, writable type whose name is the name of a component and that has a list of component name...
Definition: componentDescriptor.h:49
#define DT_DEFINE_OBJECT_DEBUGGER_NAME(type)
Definition: objectCounter.h:265
Default on in debug, off in release.
Definition: objectCounter.h:31
std::map< DtString, DtInputPort * > DtInputPortMap
Definition: simComponent.h:511
int myPriority
Definition: simComponent.h:523
Definition: readerWriterRegistry.h:39
double myDT
Definition: simComponent.h:529
class DtSimComponentFactory:
Definition: simComponentFactory.h:36
class DtVrfProcessStateRepositoryManager:
Definition: vrfProcessStateRepositoryManager.h:49
const DtLocalObject * entity() const
Definition: simComponent.h:370
DtOutputPortGroup is a data port group of a data provider. It may contain any number of DtOutputPorts...
Definition: outputPortGroup.h:34
DtLocalObject * myEntity
Definition: simComponent.h:505
Description: This repository is an internal repository accessible only by local objects. It holds all information that is common to all the forms of all entity/aggregate/control objects within VR-Forces.
Definition: vrfObjectStateRepository.h:90
double myMinTickPeriodVariance
Definition: simComponent.h:526
static DtSimComponentFactory * myFactory
Definition: simComponent.h:521
virtual void updateTaskVisualizations()
Called to update task visualizations after every tick. Implemented by subclasses. ...
Definition: simComponent.h:436
Contains the DtVrfObjectPredicate class declaration.
Definition: vrfObjectPredicate.h:20
static DtReaderWriterFactory * factory()
makVrf::DtTaskVisualizationMap myTaskVisualizations
The visualization objects to be drawn for this component.
Definition: simComponent.h:549
DtListItem * myListItem
Definition: simComponent.h:509
DtComponentSystem * mySystem
Pointer to the DtComponentSystem that this component belongs.
Definition: simComponent.h:508
DtInputPortGroupMap myInputPortGroupList
Definition: simComponent.h:518
The DtPhysicalWorld is the primary interface to and manager of all of the &quot;physical&quot; aspects of the s...
Definition: physicalWorld.h:102
Definition: coordSystem.h:54
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
double myLastTickSimTime
Definition: simComponent.h:528
std::list< const DtRwVariableBindings * > DtVariableBindingsList
Definition: readerWriterRegistry.h:29
File: simMsg.h.
Definition: simMessage.h:35
DtPredicateCallbackManager myPredicateCallbackManager
Definition: simComponent.h:557
std::vector< DtFilename > SearchPaths
Definition: readerWriter.h:92
The predicate callback manager allows for registration of callbacks by sim object for predicates...
Definition: predicateCallbackManager.h:19
double dT() const
This is the delta-t for this component, which may or may not be the same as the exerciseClock dT...
Definition: simComponent.h:571
static VRF4API_METHOD DtSimComponent * MarkThreadSafe(DtSimComponent *comp)
This is the deprecated API that can be used as a reference to migrate 4.X code to 5...
Definition: simComponent.h:567
std::map< DtString, DtOutputPortGroup * > DtOutputPortGroupMap
Definition: simComponent.h:514
DtSimComponent *(* DtSimComponentCreatorFcn)(const DtString &name, DtLocalObject *owner, DtSimulationServices *simServices, DtComponentDescriptor *compDescriptor, DtReaderWriterRegistry *registry)
Definition: simComponentFactory.h:25
DtInputPortMap myInputPortList
Definition: simComponent.h:516
std::list< DtVrfProcessStateRepository * > myComponentPsrs
List of PSRs made using createComponentPsr() that will be deleted by this component when it is destro...
Definition: simComponent.h:543
double myNextTaskVisTickTime
The next tick time for updating the task visualizations.
Definition: simComponent.h:552
bool myFirstTick
Initialized to true in the constructor, set to false by the first call to postTick.
Definition: simComponent.h:537
bool myIsEnabled
Indicates whether this component should be enabled for ticking or not.
Definition: simComponent.h:533
DtOutputPortMap myOutputPortList
Definition: simComponent.h:517
DtOutputPorts are data ports owned by data producers. They are connected to DtPortConnections and sen...
Definition: outputPort.h:42
Instances of DtInputPort are are data ports owned by data consumers. They receive data from a DtPortC...
Definition: inputPort.h:42
void(* DtVrfObjectPredicateCallbackFunction)(DtSimObjectReference obj, DtVrfObjectPredicateEvaluator *predicateEval, void *userData)
Callback function that takes a DtSimObjectReference, a pointer to the DtVrfObjectPredicateEvaluator t...
Definition: vrfObjectPredicateCallbackInfo.h:19
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
The DtSimComponent class is the base class for the entire simulation model component hierarchy...
Definition: simComponent.h:70
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:79
virtual void putData(std::string &fp, int indentLevel=0)
Deriving class overrides these to get/put class specific data.
Class DtVrfProcessStateRepository: Abstract base class for all process state repositories. Process state repositories represent (potentially) shared, savable information for one or more components functioning together to achieve some process or set of processes; such as aiming and firing a weapon; moving an object; or just waiting a specified amount of time.
Definition: vrfProcessStateRepository.h:45
VRF4API_METHOD const DtSimulationServices * simManager() const
This is the deprecated API that can be used as a reference to migrate 4.X code to 5...
Definition: simComponent.h:566
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtInputPortGroup is a data port group of a data consumer. It may contain any number of DtInputPorts a...
Definition: inputPortGroup.h:35
DtLocalObject * entity()
Gets the entity.
Definition: simComponent.h:369
virtual void registerAttributeFunctions()
Called to register functions that provide system attribute values. Called by init(). Empty in this class. Overridden in different components to add attribute provider functions.
Definition: simComponent.h:112
const DtReaderWriter & operator=(const DtReaderWriter &orig)
assignment operator
std::map< DtString, DtOutputPort * > DtOutputPortMap
Definition: simComponent.h:512
makVrf::DtTaskVisualizationMap & taskVisualizations()
Definition: simComponent.h:397
std::map< DtString, DtInputPortGroup * > DtInputPortGroupMap
Definition: simComponent.h:513
DtSimulationServices * mySimServices
Definition: simComponent.h:556
1) Define the interface class that will be used to represent the next and current frames...
Definition: taskVisualizationStateComponent.h:260
#define VRF4API_METHOD
Include this header file to allow for the definition/usage of the ability to mark something as deprec...
Definition: vrf4XAPI.h:22
DtSymbolString myFullComponentName
Definition: simComponent.h:554
std::map< DtTaskVisualizationId, DtTaskVisualizationStateComponent * > DtTaskVisualizationMap
Definition: taskVisualizationForwards.h:20
A locally simulated VRF object. Holds all internal and external data for the object, and provides access to both the current frame and next frame state data for the object. All current frame data is read-only, and next-frame data can be written to. No thread safety guarantees are made on this object during the simulation frame and it should only be accessed by the thread that is simulating the object.
Definition: localObject.h:86
bool myTickEveryFrame
Flag indicating that tickPeriod is set to 0, and the component will tick every frame.
Definition: simComponent.h:546

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)