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 boost::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 
210  int scriptGetApplicationId();
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 
251  void setTickPeriod(double);
252 
254  void setTickWhilePaused(bool);
255 
259  void setRespondToNewSensorContacts(bool);
260 
263  virtual void addPostSetDataCallback(const DtSetMessageType& setDataType,
264  DtScriptFunctionReferencePtr functionReference);
265 
268  virtual void removePostSetDataCallback(const DtSetMessageType& setDataType,
269  DtScriptFunctionReferencePtr functionReference);
270 
273  virtual void clearPostSetDataCallbacks();
274 
280  static void postSetDataCallback(DtSimMessage* msg, void* usr);
281  virtual void processPostSetData(DtSimMessage* msg);
283 
288  static void postTickCallback(void* usr);
289  virtual void processPostTick();
291 
296  virtual void invokePostSetDataCallback(
297  DtScriptFunctionReferencePtr functionReference,
298  DtSetDataRequestMessage* setDatRequest) = 0;
299 
311  virtual double getTerrainAltitude(const double lat, const double lon,
312  bool& dataAvailable, std::string &surface) const;
313 
316  virtual double getTerrainAltitudeBelow(const DtLocation3D& point,
317  bool& available, std::string &surfaceString)
318  const;
319 
335  virtual double getGroundAltitude(const double lat, const double lon,
336  bool&isWater, bool& dataAvailable);
337 
339  virtual void chordIntersectionDebug(const DtLocation3D& startLoc,
340  const DtLocation3D& endLoc);
341 
352  virtual bool doesChordHitTerrain(const DtLocation3D &pt1,
353  const DtLocation3D & pt2,
354  bool& dataAvailable) const;
355 
362  bool chordIntersectsTerrain(const DtLocation3D &pt1,
363  const DtLocation3D & pt2,
364  bool& dataAvailable,
365  DtLocation3D &intersection) const;
366 
372  virtual DtLocation3D findClosestPointInNavigationArea(const DtLocation3D& point,
373  bool& error) const;
374  virtual DtLocation3D findClosestPointInNavigationAreaInRadius(
375  const DtLocation3D& point, const double radius,
376  bool& error) const;
377  virtual DtLocation3D findClosestPointInNavigationAreaInRadiusAndVertLimit(
378  const DtLocation3D& point, const double radius, const double verticalLimit,
379  bool& error) const;
381 
384  bool findFarthestPositionAlongHeading(
385  const DtLocation3D& point,
386  const double heading, const double maxDistance,
387  DtLocation3D& stopPoint, double& distanceReached) const;
388 
389  virtual DtLocation3D findClosestPointToRoad(const DtLocation3D& point,
390  double searchRadius, bool& dataAvailable, bool& success,
391  DtLocation3D& endA, DtLocation3D& endB, double& offsetToOutsideLane) const;
392 
394  virtual std::list<std::string> getDynamicTerrainFeatureChangeTypes(
395  const DtLocation3D& location, double radius, bool& dataVailable);
396 
399  virtual std::list<DtLocation3D> getDynamicTerrainFeatureLocationsForChangeType(
400  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
401 
404  virtual std::list<std::string> getDynamicTerrainFeatureValuesForChangeType(
405  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
406 
408  virtual void changeDynamicTerrain(const std::string& changeType, const std::string& changeValue,
409  const DtLocation3D& location, double radius);
410 
411  bool forcesHostile(std::string force1, std::string force2);
412 
417  std::list<std::string> entityTypesForEquipment(const std::string& equipmentType);
418 
420  virtual double gaussian();
421 
424  virtual void setGraphCapable();
425 
427 
428 protected:
432  virtual void scriptTaskComplete(bool success);
433 
434  virtual void scriptTaskError();
435 
438  virtual bool scriptText(DtString& text);
439 
441  virtual bool scriptPath(DtString& path);
442 
443  virtual const DtReaderWriter* getTaskParam(const DtString& paramName);
444 
445  virtual bool getParamMetaDataType(const DtString& paramName, DtString& typeName);
446 
447  int myTaskId;
450  DtFilename myScriptPath;
459  bool myIsSet;
460 
464 
468 
473 
480 
483 
488 
496 
500 
504 };
505 
506 
508 
509 typedef DtScriptInterface* (*DtScriptInterfaceCreatorFunc)(DtSimulationServices*);
510 
512 {
513 protected:
516  DtScriptInterfaceFactory& operator=(const DtScriptInterfaceFactory& other);
517 
518 public:
519  virtual ~DtScriptInterfaceFactory();
520 
522  static DtScriptInterfaceFactory* instance();
523 
525  virtual DtScriptInterface* createInstance(const DtString& type, DtSimulationServices*);
526 
529  virtual void registerCreator(const DtString& type, DtScriptInterfaceCreatorFunc func);
530 
532  static void setFactory(DtScriptInterfaceFactory* factory);
533  static DtScriptInterfaceFactory* create();
534 
535 protected:
536  std::map<DtString, DtScriptInterfaceCreatorFunc> myCreators;
538 };
539 
DtFilename myScriptPath
Definition: scriptInterface.h:450
UUID is a unique ID wrapper class.
Definition: uuid.h:59
bool myTaskResuming
Definition: scriptInterface.h:457
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:447
bool myExecutingSetDataCallbacks
Set to true when invoking post set data callbacks.
Definition: scriptInterface.h:482
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:449
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:487
bool myShouldGenerateGraphOutput
Indicates that this script should generate graphical output. This flag is made available to scripts t...
Definition: scriptInterface.h:495
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
Definition: scriptMultiTaskController.h:23
DtPostSetDataCallbackSet mySetDataCallbacks
Callbacks registered from the scripting language. Registration/unregistration is done using vrf:addPo...
Definition: scriptInterface.h:463
DtScriptTaskControllerInterface * myControllerInterface
Definition: scriptInterface.h:451
DtLocalObject * myEntity
Definition: scriptInterface.h:452
#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:472
bool myTaskStarting
Indicates that a new task is starting, and should be initialized on the next tick.
Definition: scriptInterface.h:456
File: simMsg.h.
Definition: simMessage.h:35
DtRwVariableBindings myTaskVariables
Definition: scriptInterface.h:454
static DtScriptInterfaceFactory * theFactoryInstance
Definition: scriptInterface.h:537
DtUUID myGraphRecipient
Keep track of who sends the graph requests, and send messages back to them.
Definition: scriptInterface.h:499
boost::shared_ptr< DtScriptFunctionReference > DtScriptFunctionReferencePtr
Shared ptr to DtScriptFunctionReference.
Definition: scriptInterface.h:54
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:448
DtSetDataMessageVector myPendingSetDataMessages
If a set data request is executed while invoking callbacks, add it to this vector instead of mySetDat...
Definition: scriptInterface.h:479
std::map< DtString, DtScriptInterfaceCreatorFunc > myCreators
Definition: scriptInterface.h:536
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:94
bool myIsBackgroundProcess
Definition: scriptInterface.h:458
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:459
virtual DtScriptTaskControllerInterface * controller()
Definition: scriptInterface.h:197
DtScriptInterface *(* DtScriptInterfaceCreatorFunc)(DtSimulationServices *)
Factory.
Definition: scriptInterface.h:509
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:453
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:511
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:467
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: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:503

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)