VR-Forces 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"
16 
17 #include "vrfutil/asyncJob.h"
18 #include <deque>
19 
20 class DtLocalObject;
24 
31 
33 {
34 public:
35 
44  {
45  public:
48 
50  virtual bool operator<(const DtScriptFunctionReference& other) const = 0;
51  };
52 
54  typedef std::shared_ptr<DtScriptFunctionReference> DtScriptFunctionReferencePtr;
55 
57  typedef std::pair<DtGenericMessageType, DtScriptFunctionReferencePtr> DtPostCallbackEntry;
58 
61  {
63  {
64  if (lhs.first < rhs.first) return true;
65  else if (lhs.first > rhs.first) return false;
66  else if (*lhs.second.get() < *rhs.second.get()) return true;
67  else return false;
68  }
69  };
70 
71  typedef std::set<DtPostCallbackEntry, PostSetDataCallbackLessThan> DtPostSetDataCallbackSet;
72  typedef std::vector<DtSimMessage*> DtSetDataMessageVector;
73  typedef std::map<DtPostCallbackEntry, bool> DtPostCallbackEntryPendingChanges;
74 
75 protected:
79  DtScriptInterface& operator=(const DtScriptInterface& other);
80 
81 public:
82  virtual ~DtScriptInterface();
83 
84  virtual bool invokeInit() = 0;
85  virtual void invokeSuspend() = 0;
86  virtual bool invokeResume() = 0;
87 
89  virtual void invokeTick() = 0;
90 
92  virtual bool loadScript(bool reload = false) = 0;
93 
94 
95  virtual void invokeCheckInit() = 0;
96  virtual bool invokeCheck() = 0;
97 
98  virtual void invokeShutdown() = 0;
99 
101  virtual void invokeUpdateDisplayGraph() = 0;
102 
105  virtual void invokeDisable() = 0;
106 
108  virtual DtString type() const = 0;
109 
110  virtual void setTaskId(int taskId) { myTaskId = taskId; }
111  virtual int taskId() const { return myTaskId; }
112 
113  virtual void setScriptId(const DtString& scriptId) { myScriptId = scriptId; }
114  virtual const DtGenericMessageType& scriptId() const { return myScriptId; }
115 
116  virtual void setSystemName(const DtString& system) { mySystemName = system; }
117  virtual const DtString& systemName() const { return mySystemName; }
118 
119  virtual void setScriptPath(const DtFilename& scriptPath) { myScriptPath = scriptPath; }
120  virtual const DtFilename& scriptPath() const { return myScriptPath; }
121 
122  virtual void setEntity(DtLocalObject* entity) { myEntity = entity; }
123  virtual DtLocalObject* entity() const { return myEntity; }
124 
126  virtual void init() { }
127 
128 
129  virtual void setTaskVariables(const DtRwVariableBindings& variables) { myTaskVariables = variables; }
130  virtual const DtRwVariableBindings& taskVariables() const { return myTaskVariables; }
131  virtual bool updateTaskVariables();
132 
135  virtual DtReaderWriter* saveState() = 0;
136 
140  virtual bool loadState(const DtReaderWriter* savedState) = 0;
141 
149  virtual void processClearForReuse();
150 
151  virtual void setTaskStarting(bool v);
152  virtual bool taskStarting() const;
153 
155 
156  virtual void setTaskResuming(bool v);
157  virtual bool taskResuming() const;
159 
161 
162  virtual void setIsBackgroundProces(bool isBgProc);
163  virtual bool isBackgroundProcess() const;
165 
167 
168  virtual void setIsSet(bool isSet);
169  virtual bool isSet() const;
171 
175  virtual bool isGraphCapable() const;
176 
179  virtual void setIsGraphCapable(bool isCapable = true);
180 
184  virtual bool shouldGenerateGraphOutput() const;
188  virtual void setShouldGenerateGraphOutput(const bool doGenerate, const DtUUID& sender);
189 
190 
194  virtual void processGraphCommands(const std::string& dotFileName);
195 
196  virtual void setController(DtScriptTaskControllerInterface* controller) { myControllerInterface = controller; }
197  virtual DtScriptTaskControllerInterface* controller() { return myControllerInterface; }
198 
200  virtual void processEntityDestroyed() {}
201 
203 
206  double scriptGetExerciseTime();
207 
208  double scriptGetWallClockTime();
209 
211 
212  double scriptGetSimulationTime();
213 
214  double scriptGetTimeMultiplier();
215 
216  double scriptGetTimeOfDay();
217 
218  double scriptGetDateAndTimeOfDay();
219 
221  double scriptGetWindSpeed();
222 
224  double scriptGetWindDirection();
225 
227  double scriptGetMagneticDeclination(const DtLocation3D &location);
228 
229  DtScriptAerodromeObject scriptGetAerodrome(const std::string name);
230  std::list<DtScriptAerodromeObject> scriptGetAerodromesWithinRange(DtLocation3D center, double range);
231  DtScriptVrfObject scriptGetVrfObjectByName(const std::string name);
232  DtScriptVrfObject scriptGetVrfObjectByUUID(const std::string name);
233  void printError(const std::string message);
234  void printErrorToChannel(const std::string channel, const std::string message);
235  void printErrorTranslatableStream(const DtTranslatableStream& message);
236  void printWarn(const std::string message);
237  void printWarnToChannel(const std::string channel, const std::string message);
238  void printWarnTranslatableStream(const DtTranslatableStream& message);
239  void printInfo(const std::string message);
240  void printInfoToChannel(const std::string channel, const std::string message);
241  void printInfoTranslatableStream(const DtTranslatableStream& message);
242  void printVerbose(const std::string message);
243  void printVerboseToChannel(const std::string channel, const std::string message);
244  void printVerboseTranslatableStream(const DtTranslatableStream& message);
245  void printDebug(const std::string message);
246  void printDebugToChannel(const std::string channel, const std::string message);
247  void printDebugTranslatableStream(const DtTranslatableStream& message);
248  bool entityTypeMatches(const std::string&, const std::string&);
249  std::string getEntityTypeDescription(const std::string& entityType);
250 
252  void setTickPeriod(double);
253 
255  void setTickWhilePaused(bool);
256 
260  void setRespondToNewSensorContacts(bool);
261 
264  virtual void addPostSetDataCallback(const DtSetMessageType& setDataType,
265  DtScriptFunctionReferencePtr functionReference);
266 
269  virtual void removePostSetDataCallback(const DtSetMessageType& setDataType,
270  DtScriptFunctionReferencePtr functionReference);
271 
274  virtual void clearPostSetDataCallbacks();
275 
281  static void postSetDataCallback(DtSimMessage* msg, void* usr);
282  virtual void processPostSetData(DtSimMessage* msg);
284 
289  static void postTickCallback(void* usr);
290  virtual void processPostTick();
292 
297  virtual void invokePostSetDataCallback(
298  DtScriptFunctionReferencePtr functionReference,
299  DtSetDataRequestMessage* setDatRequest) = 0;
300 
312  virtual double getTerrainAltitude(const double lat, const double lon,
313  bool& dataAvailable, std::string &surface) const;
314 
317  virtual double getTerrainAltitudeBelow(const DtLocation3D& point,
318  bool& available, std::string &surfaceString)
319  const;
320 
336  virtual double getGroundAltitude(const double lat, const double lon,
337  bool&isWater, bool& dataAvailable);
338 
340  virtual void chordIntersectionDebug(const DtLocation3D& startLoc,
341  const DtLocation3D& endLoc);
342 
353  virtual bool doesChordHitTerrain(const DtLocation3D &pt1,
354  const DtLocation3D & pt2,
355  bool& dataAvailable) const;
356 
363  bool chordIntersectsTerrain(const DtLocation3D &pt1,
364  const DtLocation3D & pt2,
365  bool& dataAvailable,
366  DtLocation3D &intersection) const;
367 
368  bool chordIntersectsTerrainWithOptions(const DtLocation3D& pt1,
369  const DtLocation3D& pt2,
370  const DtU32 options,
371  bool& dataAvailable,
372  DtLocation3D& intersection) const;
373 
375  virtual std::string getResourceTypeFromResourceName(std::string resourceName);
376 
382  virtual DtLocation3D findClosestPointInNavigationArea(const DtLocation3D& point,
383  bool& error) const;
384  virtual DtLocation3D findClosestPointInNavigationAreaInRadius(
385  const DtLocation3D& point, const double radius,
386  bool& error) const;
387  virtual DtLocation3D findClosestPointInNavigationAreaInRadiusAndVertLimit(
388  const DtLocation3D& point, const double radius, const double verticalLimit,
389  bool& error) const;
391 
393  virtual bool matchPattern(std::string, std::string) const;
394 
397  bool findFarthestPositionAlongHeading(
398  const DtLocation3D& point,
399  const double heading, const double maxDistance,
400  DtLocation3D& stopPoint, double& distanceReached) const;
401 
402  virtual DtLocation3D findClosestPointToRoad(const DtLocation3D& point,
403  double searchRadius, bool& dataAvailable, bool& success,
404  DtLocation3D& endA, DtLocation3D& endB, double& offsetToOutsideLane) const;
405 
407  virtual std::list<std::string> getDynamicTerrainFeatureChangeTypes(
408  const DtLocation3D& location, double radius, bool& dataVailable);
409 
412  virtual std::list<DtLocation3D> getDynamicTerrainFeatureLocationsForChangeType(
413  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
414 
417  virtual std::list<std::string> getDynamicTerrainFeatureValuesForChangeType(
418  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
419 
421  virtual void changeDynamicTerrain(const std::string& changeType, const std::string& changeValue,
422  const DtLocation3D& location, double radius);
423 
424  bool forcesHostile(std::string force1, std::string force2);
425 
430  std::list<std::string> entityTypesForEquipment(const std::string& equipmentType);
431 
433  virtual double gaussian();
434 
437  virtual void setGraphCapable();
438 
440 
441 protected:
445  virtual void scriptTaskComplete(bool success);
446 
447  virtual void scriptTaskError();
448 
451  virtual bool scriptText(DtString& text);
452 
454  virtual bool scriptPath(DtString& path);
455 
456  virtual const DtReaderWriter* getTaskParam(const DtString& paramName);
457 
458  virtual bool getParamMetaDataType(const DtString& paramName, DtString& typeName);
459 
460  int myTaskId;
463  DtFilename myScriptPath;
472  bool myIsSet;
473 
477 
481 
486 
493 
496 
501 
509 
513 
517 };
518 
519 
521 
522 typedef DtScriptInterface* (*DtScriptInterfaceCreatorFunc)(DtSimulationServices*);
523 
525 {
526 protected:
529  DtScriptInterfaceFactory& operator=(const DtScriptInterfaceFactory& other);
530 
531 public:
532  virtual ~DtScriptInterfaceFactory();
533 
535  static DtScriptInterfaceFactory* instance();
536 
538  virtual DtScriptInterface* createInstance(const DtString& type, DtSimulationServices*);
539 
542  virtual void registerCreator(const DtString& type, DtScriptInterfaceCreatorFunc func);
543 
545  static void setFactory(DtScriptInterfaceFactory* factory);
546  static DtScriptInterfaceFactory* create();
547 
548 protected:
549  std::map<DtString, DtScriptInterfaceCreatorFunc> myCreators;
551 };
552 
DtFilename myScriptPath
Definition: scriptInterface.h:463
UUID is a unique ID wrapper class.
Definition: uuid.h:59
bool myTaskResuming
Definition: scriptInterface.h:470
virtual void processEntityDestroyed()
Can be overridden to perform some processing when the entity is destroyed.
Definition: scriptInterface.h:200
bool operator()(DtPostCallbackEntry lhs, DtPostCallbackEntry rhs) const
Definition: scriptInterface.h:62
virtual ~DtScriptFunctionReference()
Definition: scriptInterface.h:47
int myTaskId
Definition: scriptInterface.h:460
bool myExecutingSetDataCallbacks
Set to true when invoking post set data callbacks.
Definition: scriptInterface.h:495
virtual const DtRwVariableBindings & taskVariables() const
Definition: scriptInterface.h:130
virtual void setScriptPath(const DtFilename &scriptPath)
Definition: scriptInterface.h:119
virtual void setTaskVariables(const DtRwVariableBindings &variables)
Definition: scriptInterface.h:129
virtual int taskId() const
Definition: scriptInterface.h:111
DtString mySystemName
Definition: scriptInterface.h:462
std::vector< DtSimMessage * > DtSetDataMessageVector
Definition: scriptInterface.h:72
std::set< DtPostCallbackEntry, PostSetDataCallbackLessThan > DtPostSetDataCallbackSet
Definition: scriptInterface.h:71
Definition: readerWriter.h:85
virtual void setController(DtScriptTaskControllerInterface *controller)
Definition: scriptInterface.h:196
virtual void setEntity(DtLocalObject *entity)
Definition: scriptInterface.h:122
DtScriptFunctionReference()
Definition: scriptInterface.h:46
Comparison operator for DtPostSetDataCallbackSet.
Definition: scriptInterface.h:60
std::pair< DtGenericMessageType, DtScriptFunctionReferencePtr > DtPostCallbackEntry
Matches a set data request type with a DtScriptFunctionReferencePtr.
Definition: scriptInterface.h:57
virtual DtLocalObject * entity() const
Definition: scriptInterface.h:123
bool myIsGraphCapable
Indicates the the script being run by this interface can generate graphs for processing and display i...
Definition: scriptInterface.h:500
bool myShouldGenerateGraphOutput
Indicates that this script should generate graphical output. This flag is made available to scripts t...
Definition: scriptInterface.h:508
virtual const DtFilename & scriptPath() const
Definition: scriptInterface.h:120
ReaderWriter object that maintains a list of reader-writer variable bindings. It keeps a list of name...
Definition: rwVariableBindings.h:27
std::shared_ptr< DtScriptFunctionReference > DtScriptFunctionReferencePtr
Shared ptr to DtScriptFunctionReference.
Definition: scriptInterface.h:54
Definition: scriptMultiTaskController.h:23
DtPostSetDataCallbackSet mySetDataCallbacks
Callbacks registered from the scripting language. Registration/unregistration is done using vrf:addPo...
Definition: scriptInterface.h:476
DtScriptTaskControllerInterface * myControllerInterface
Definition: scriptInterface.h:464
DtLocalObject * myEntity
Definition: scriptInterface.h:465
#define DT_DLL_vrfobjcore
This file is used to determine how to build.
Definition: vrfobjcoreDefines.h:24
Definition: scriptAerodromeObject.h:13
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:485
bool myTaskStarting
Indicates that a new task is starting, and should be initialized on the next tick.
Definition: scriptInterface.h:469
File: simMsg.h.
Definition: simMessage.h:35
DtRwVariableBindings myTaskVariables
Definition: scriptInterface.h:467
static DtScriptInterfaceFactory * theFactoryInstance
Definition: scriptInterface.h:550
DtUUID myGraphRecipient
Keep track of who sends the graph requests, and send messages back to them.
Definition: scriptInterface.h:512
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:43
Definition: asyncJobServer.h:39
DtGenericMessageType myScriptId
Definition: scriptInterface.h:461
DtSetDataMessageVector myPendingSetDataMessages
If a set data request is executed while invoking callbacks, add it to this vector instead of mySetDat...
Definition: scriptInterface.h:492
std::map< DtString, DtScriptInterfaceCreatorFunc > myCreators
Definition: scriptInterface.h:549
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
bool myIsBackgroundProcess
Definition: scriptInterface.h:471
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:472
virtual DtScriptTaskControllerInterface * controller()
Definition: scriptInterface.h:197
DtScriptInterface *(* DtScriptInterfaceCreatorFunc)(DtSimulationServices *)
Factory.
Definition: scriptInterface.h:522
virtual void setTaskId(int taskId)
Definition: scriptInterface.h:110
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:32
virtual void init()
Derived class inits may do things, so init should always be called.
Definition: scriptInterface.h:126
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:116
DtSimulationServices * mySimulationServices
Definition: scriptInterface.h:466
virtual void setScriptId(const DtString &scriptId)
Definition: scriptInterface.h:113
std::map< DtPostCallbackEntry, bool > DtPostCallbackEntryPendingChanges
Definition: scriptInterface.h:73
virtual const DtGenericMessageType & scriptId() const
Definition: scriptInterface.h:114
Definition: scriptInterface.h:524
virtual const DtString & systemName() const
Definition: scriptInterface.h:117
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:480
A locally simulated VRF object.
Definition: localObject.h:98
Definition: scriptVrfObject.h:30
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:516

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)