VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
scriptInterface.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2012 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
8 
13 #include "vlutil/vlString.h"
15 
16 #include "vrfutil/asyncJob.h"
17 #include <deque>
18 
19 class DtLocalObject;
23 
30 
32 {
33 public:
34 
43  {
44  public:
47 
49  virtual bool operator<(const DtScriptFunctionReference& other) const = 0;
50  };
51 
53  typedef boost::shared_ptr<DtScriptFunctionReference> DtScriptFunctionReferencePtr;
54 
56  typedef std::pair<DtGenericMessageType, DtScriptFunctionReferencePtr> DtPostCallbackEntry;
57 
60  {
62  {
63  if (lhs.first < rhs.first) return true;
64  else if (lhs.first > rhs.first) return false;
65  else if (*lhs.second.get() < *rhs.second.get()) return true;
66  else return false;
67  }
68  };
69 
70  typedef std::set<DtPostCallbackEntry, PostSetDataCallbackLessThan> DtPostSetDataCallbackSet;
71  typedef std::vector<DtSimMessage*> DtSetDataMessageVector;
72  typedef std::map<DtPostCallbackEntry, bool> DtPostCallbackEntryPendingChanges;
73 
74 protected:
78  DtScriptInterface& operator=(const DtScriptInterface& other);
79 
80 public:
81  virtual ~DtScriptInterface();
82 
83  virtual bool invokeInit() = 0;
84  virtual void invokeSuspend() = 0;
85  virtual bool invokeResume() = 0;
86 
88  virtual void invokeTick() = 0;
89 
91  virtual bool loadScript(bool reload = false) = 0;
92 
93 
94  virtual void invokeCheckInit() = 0;
95  virtual bool invokeCheck() = 0;
96 
97  virtual void invokeShutdown() = 0;
98 
100  virtual void invokeUpdateDisplayGraph() = 0;
101 
104  virtual void invokeDisable() = 0;
105 
107  virtual DtString type() const = 0;
108 
109  virtual void setTaskId(int taskId) { myTaskId = taskId; }
110  virtual int taskId() const { return myTaskId; }
111 
112  virtual void setScriptId(const DtString& scriptId) { myScriptId = scriptId; }
113  virtual const DtGenericMessageType& scriptId() const { return myScriptId; }
114 
115  virtual void setSystemName(const DtString& system) { mySystemName = system; }
116  virtual const DtString& systemName() const { return mySystemName; }
117 
118  virtual void setScriptPath(const DtFilename& scriptPath) { myScriptPath = scriptPath; }
119  virtual const DtFilename& scriptPath() const { return myScriptPath; }
120 
121  virtual void setEntity(DtLocalObject* entity) { myEntity = entity; }
122  virtual DtLocalObject* entity() const { return myEntity; }
123 
125  virtual void init() { }
126 
127 
128  virtual void setTaskVariables(const DtRwVariableBindings& variables) { myTaskVariables = variables; }
129  virtual const DtRwVariableBindings& taskVariables() const { return myTaskVariables; }
130  virtual bool updateTaskVariables();
131 
134  virtual DtReaderWriter* saveState() = 0;
135 
139  virtual bool loadState(const DtReaderWriter* savedState) = 0;
140 
148  virtual void processClearForReuse();
149 
150  virtual void setTaskStarting(bool v);
151  virtual bool taskStarting() const;
152 
154 
155  virtual void setTaskResuming(bool v);
156  virtual bool taskResuming() const;
158 
160 
161  virtual void setIsBackgroundProces(bool isBgProc);
162  virtual bool isBackgroundProcess() const;
164 
166 
167  virtual void setIsSet(bool isSet);
168  virtual bool isSet() const;
170 
174  virtual bool isGraphCapable() const;
175 
178  virtual void setIsGraphCapable(bool isCapable = true);
179 
183  virtual bool shouldGenerateGraphOutput() const;
187  virtual void setShouldGenerateGraphOutput(const bool doGenerate, const DtUUID& sender);
188 
189 
193  virtual void processGraphCommands(const std::string& dotFileName);
194 
195  virtual void setController(DtScriptTaskControllerInterface* controller) { myControllerInterface = controller; }
196  virtual DtScriptTaskControllerInterface* controller() { return myControllerInterface; }
197 
199  virtual void processEntityDestroyed() {}
200 
202 
205  double scriptGetExerciseTime();
206 
207  int scriptGetApplicationId();
208 
209  double scriptGetSimulationTime();
210 
211  double scriptGetTimeMultiplier();
212 
213  double scriptGetTimeOfDay();
214 
215  double scriptGetDateAndTimeOfDay();
216 
218  double scriptGetWindSpeed();
219 
221  double scriptGetWindDirection();
222 
224  double scriptGetMagneticDeclination(const DtLocation3D &location);
225 
226  DtScriptVrfObject scriptGetVrfObjectByName(const std::string name);
227  DtScriptVrfObject scriptGetVrfObjectByUUID(const std::string name);
228  void printError(const std::string message);
229  void printErrorToChannel(const std::string channel, const std::string message);
230  void printErrorTranslatableStream(const DtTranslatableStream& message);
231  void printWarn(const std::string message);
232  void printWarnToChannel(const std::string channel, const std::string message);
233  void printWarnTranslatableStream(const DtTranslatableStream& message);
234  void printInfo(const std::string message);
235  void printInfoToChannel(const std::string channel, const std::string message);
236  void printInfoTranslatableStream(const DtTranslatableStream& message);
237  void printVerbose(const std::string message);
238  void printVerboseToChannel(const std::string channel, const std::string message);
239  void printVerboseTranslatableStream(const DtTranslatableStream& message);
240  void printDebug(const std::string message);
241  void printDebugToChannel(const std::string channel, const std::string message);
242  void printDebugTranslatableStream(const DtTranslatableStream& message);
243  bool entityTypeMatches(const std::string&, const std::string&);
244 
246  void setTickPeriod(double);
247 
249  void setTickWhilePaused(bool);
250 
254  void setRespondToNewSensorContacts(bool);
255 
258  virtual void addPostSetDataCallback(const DtSetMessageType& setDataType,
259  DtScriptFunctionReferencePtr functionReference);
260 
263  virtual void removePostSetDataCallback(const DtSetMessageType& setDataType,
264  DtScriptFunctionReferencePtr functionReference);
265 
268  virtual void clearPostSetDataCallbacks();
269 
275  static void postSetDataCallback(DtSimMessage* msg, void* usr);
276  virtual void processPostSetData(DtSimMessage* msg);
278 
283  static void postTickCallback(void* usr);
284  virtual void processPostTick();
286 
291  virtual void invokePostSetDataCallback(
292  DtScriptFunctionReferencePtr functionReference,
293  DtSetDataRequestMessage* setDatRequest) = 0;
294 
306  virtual double getTerrainAltitude(const double lat, const double lon,
307  bool& dataAvailable, std::string &surface) const;
308 
311  virtual double getTerrainAltitudeBelow(const DtLocation3D& point,
312  bool& available, std::string &surfaceString)
313  const;
314 
330  virtual double getGroundAltitude(const double lat, const double lon,
331  bool&isWater, bool& dataAvailable);
332 
334  virtual void chordIntersectionDebug(const DtLocation3D& startLoc,
335  const DtLocation3D& endLoc);
336 
347  virtual bool doesChordHitTerrain(const DtLocation3D &pt1,
348  const DtLocation3D & pt2,
349  bool& dataAvailable) const;
350 
357  bool chordIntersectsTerrain(const DtLocation3D &pt1,
358  const DtLocation3D & pt2,
359  bool& dataAvailable,
360  DtLocation3D &intersection) const;
361 
367  virtual DtLocation3D findClosestPointInNavigationArea(const DtLocation3D& point,
368  bool& error) const;
369  virtual DtLocation3D findClosestPointInNavigationAreaInRadius(
370  const DtLocation3D& point, const double radius,
371  bool& error) const;
372  virtual DtLocation3D findClosestPointInNavigationAreaInRadiusAndVertLimit(
373  const DtLocation3D& point, const double radius, const double verticalLimit,
374  bool& error) const;
376 
379  bool findFarthestPositionAlongHeading(
380  const DtLocation3D& point,
381  const double heading, const double maxDistance,
382  DtLocation3D& stopPoint, double& distanceReached) const;
383 
384  virtual DtLocation3D findClosestPointToRoad(const DtLocation3D& point,
385  double searchRadius, bool& dataAvailable, bool& success,
386  DtLocation3D& endA, DtLocation3D& endB, double& offsetToOutsideLane) const;
387 
389  virtual std::list<std::string> getDynamicTerrainFeatureChangeTypes(
390  const DtLocation3D& location, double radius, bool& dataVailable);
391 
394  virtual std::list<DtLocation3D> getDynamicTerrainFeatureLocationsForChangeType(
395  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
396 
399  virtual std::list<std::string> getDynamicTerrainFeatureValuesForChangeType(
400  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
401 
403  virtual void changeDynamicTerrain(const std::string& changeType, const std::string& changeValue,
404  const DtLocation3D& location, double radius);
405 
406  bool forcesHostile(std::string force1, std::string force2);
407 
412  std::list<std::string> entityTypesForEquipment(const std::string& equipmentType);
413 
415  virtual double gaussian();
416 
419  virtual void setGraphCapable();
420 
422 
423 protected:
427  virtual void scriptTaskComplete(bool success);
428 
429  virtual void scriptTaskError();
430 
433  virtual bool scriptText(DtString& text);
434 
436  virtual bool scriptPath(DtString& path);
437 
438  virtual const DtReaderWriter* getTaskParam(const DtString& paramName);
439 
440  virtual bool getParamMetaDataType(const DtString& paramName, DtString& typeName);
441 
442  int myTaskId;
445  DtFilename myScriptPath;
454  bool myIsSet;
455 
459 
463 
468 
475 
478 
483 
491 
495 
499 };
500 
501 
503 
504 typedef DtScriptInterface* (*DtScriptInterfaceCreatorFunc)(DtSimulationServices*);
505 
507 {
508 protected:
511  DtScriptInterfaceFactory& operator=(const DtScriptInterfaceFactory& other);
512 
513 public:
514  virtual ~DtScriptInterfaceFactory();
515 
517  static DtScriptInterfaceFactory* instance();
518 
520  virtual DtScriptInterface* createInstance(const DtString& type, DtSimulationServices*);
521 
524  virtual void registerCreator(const DtString& type, DtScriptInterfaceCreatorFunc func);
525 
527  static void setFactory(DtScriptInterfaceFactory* factory);
528  static DtScriptInterfaceFactory* create();
529 
530 protected:
531  std::map<DtString, DtScriptInterfaceCreatorFunc> myCreators;
533 };
534 
DtFilename myScriptPath
Definition: scriptInterface.h:445
UUID is a unique ID wrapper class.
Definition: rwUUID.h:229
bool myTaskResuming
Definition: scriptInterface.h:452
virtual void processEntityDestroyed()
Can be overridden to perform some processing when the entity is destroyed.
Definition: scriptInterface.h:199
bool operator()(DtPostCallbackEntry lhs, DtPostCallbackEntry rhs) const
Definition: scriptInterface.h:61
virtual ~DtScriptFunctionReference()
Definition: scriptInterface.h:46
int myTaskId
Definition: scriptInterface.h:442
bool myExecutingSetDataCallbacks
Set to true when invoking post set data callbacks.
Definition: scriptInterface.h:477
virtual const DtRwVariableBindings & taskVariables() const
Definition: scriptInterface.h:129
virtual void setScriptPath(const DtFilename &scriptPath)
Definition: scriptInterface.h:118
virtual void setTaskVariables(const DtRwVariableBindings &variables)
Definition: scriptInterface.h:128
virtual int taskId() const
Definition: scriptInterface.h:110
DtString mySystemName
Definition: scriptInterface.h:444
std::vector< DtSimMessage * > DtSetDataMessageVector
Definition: scriptInterface.h:71
std::set< DtPostCallbackEntry, PostSetDataCallbackLessThan > DtPostSetDataCallbackSet
Definition: scriptInterface.h:70
Definition: readerWriter.h:85
virtual void setController(DtScriptTaskControllerInterface *controller)
Definition: scriptInterface.h:195
virtual void setEntity(DtLocalObject *entity)
Definition: scriptInterface.h:121
DtScriptFunctionReference()
Definition: scriptInterface.h:45
Comparison operator for DtPostSetDataCallbackSet.
Definition: scriptInterface.h:59
std::pair< DtGenericMessageType, DtScriptFunctionReferencePtr > DtPostCallbackEntry
Matches a set data request type with a DtScriptFunctionReferencePtr.
Definition: scriptInterface.h:56
virtual DtLocalObject * entity() const
Definition: scriptInterface.h:122
bool myIsGraphCapable
Indicates the the script being run by this interface can generate graphs for processing and display i...
Definition: scriptInterface.h:482
bool myShouldGenerateGraphOutput
Indicates that this script should generate graphical output. This flag is made available to scripts t...
Definition: scriptInterface.h:490
virtual const DtFilename & scriptPath() const
Definition: scriptInterface.h:119
ReaderWriter object that maintains a list of reader-writer variable bindings. It keeps a list of name...
Definition: rwVariableBindings.h:27
Definition: scriptMultiTaskController.h:23
DtPostSetDataCallbackSet mySetDataCallbacks
Callbacks registered from the scripting language. Registration/unregistration is done using vrf:addPo...
Definition: scriptInterface.h:458
DtScriptTaskControllerInterface * myControllerInterface
Definition: scriptInterface.h:446
DtLocalObject * myEntity
Definition: scriptInterface.h:447
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
DtPostCallbackEntryPendingChanges myPendingSetDataCallbackEntries
If a post set data callback is added or removed while invoking callbacks add to this map instead of i...
Definition: scriptInterface.h:467
bool myTaskStarting
Indicates that a new task is starting, and should be initialized on the next tick.
Definition: scriptInterface.h:451
File: simMsg.h.
Definition: simMessage.h:35
DtRwVariableBindings myTaskVariables
Definition: scriptInterface.h:449
static DtScriptInterfaceFactory * theFactoryInstance
Definition: scriptInterface.h:532
DtUUID myGraphRecipient
Keep track of who sends the graph requests, and send messages back to them.
Definition: scriptInterface.h:494
boost::shared_ptr< DtScriptFunctionReference > DtScriptFunctionReferencePtr
Shared ptr to DtScriptFunctionReference.
Definition: scriptInterface.h:53
This stream is used by the scripting classes to be able to send out translatable messages from script...
Definition: translatableStream.h:22
Abstract object used to hold a reference to a function defined in the script language, to be used later to invoke that function. Used for registering callbacks to be invoked after specified types of set data requests are executed. For this functionality to be used in a derived script interface implementation, a derived class must be implemented to represent a reference to a function in the script language.
Definition: scriptInterface.h:42
Definition: asyncJobServer.h:39
DtGenericMessageType myScriptId
Definition: scriptInterface.h:443
DtSetDataMessageVector myPendingSetDataMessages
If a set data request is executed while invoking callbacks, add it to this vector instead of mySetDat...
Definition: scriptInterface.h:474
std::map< DtString, DtScriptInterfaceCreatorFunc > myCreators
Definition: scriptInterface.h:531
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
bool myIsBackgroundProcess
Definition: scriptInterface.h:453
DT_DLL_vrfutil bool intersection(const DtRailSegment *currentSegment, const DtRailSegment *nextSegment)
Given two segments, determine if where they meet is an intersection or just a bend in the road...
bool myIsSet
Definition: scriptInterface.h:454
virtual DtScriptTaskControllerInterface * controller()
Definition: scriptInterface.h:196
DtScriptInterface *(* DtScriptInterfaceCreatorFunc)(DtSimulationServices *)
Factory.
Definition: scriptInterface.h:504
virtual void setTaskId(int taskId)
Definition: scriptInterface.h:109
This class is a two-way interface between the script language and its parent controller. There are functions that either the parent controller will call on the script interface (such as tick() ) and there will be functions the script interface will call on the parent controller to inform the parent of status updates and for data access.
Definition: scriptInterface.h:31
virtual void init()
Derived class inits may do things, so init should always be called.
Definition: scriptInterface.h:125
A DtSetDataRequestMessage is a DtRadioMsg with a pointer to a setDataRequest. The type of the DtSetDa...
Definition: setDataRequestMessage.h:29
Definition: scriptTaskControllerInterface.h:19
virtual void setSystemName(const DtString &system)
Definition: scriptInterface.h:115
DtSimulationServices * mySimulationServices
Definition: scriptInterface.h:448
virtual void setScriptId(const DtString &scriptId)
Definition: scriptInterface.h:112
std::map< DtPostCallbackEntry, bool > DtPostCallbackEntryPendingChanges
Definition: scriptInterface.h:72
virtual const DtGenericMessageType & scriptId() const
Definition: scriptInterface.h:113
Definition: scriptInterface.h:506
virtual const DtString & systemName() const
Definition: scriptInterface.h:116
DtSetDataMessageVector mySetDataMessages
Stores copies of set data request messages that callbacks have been registered for. These are deleted after they are used in processPostTick.
Definition: scriptInterface.h:462
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
Definition: scriptVrfObject.h:29
A location3D is a point in space, i.e. a geocentric coordinate.
Definition: scriptGeometry.h:22
bool myCantFindDotMsg
Indicates that the dot program could not be found (and a message to that effect was printed)...
Definition: scriptInterface.h:498

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)