VR-Forces 4.10 Class Documentation
 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 
14 #include "vlutil/vlString.h"
15 
16 #include <deque>
17 
18 class DtVrfObject;
20 
27 
29 {
30 public:
31 
40  {
41  public:
44 
46  virtual bool operator<(const DtScriptFunctionReference& other) const = 0;
47  };
48 
50  typedef boost::shared_ptr<DtScriptFunctionReference> DtScriptFunctionReferencePtr;
51 
53  typedef std::pair<DtGenericMessageType, DtScriptFunctionReferencePtr> DtPostCallbackEntry;
54 
57  {
59  {
60  if (lhs.first < rhs.first) return true;
61  else if (lhs.first > rhs.first) return false;
62  else if (*lhs.second.get() < *rhs.second.get()) return true;
63  else return false;
64  }
65  };
66 
67  typedef std::set<DtPostCallbackEntry, PostSetDataCallbackLessThan> DtPostSetDataCallbackSet;
68  typedef std::vector<DtSimMessage*> DtSetDataMessageVector;
69  typedef std::map<DtPostCallbackEntry, bool> DtPostCallbackEntryPendingChanges;
70 
71 protected:
75  DtScriptInterface& operator=(const DtScriptInterface& other);
76 
77 public:
78  virtual ~DtScriptInterface();
79 
80  virtual bool invokeInit() = 0;
81  virtual void invokeSuspend() = 0;
82  virtual bool invokeResume() = 0;
83 
85  virtual void invokeTick() = 0;
86 
88  virtual bool loadScript(bool reload = false) = 0;
89 
90  virtual void invokeCheckInit() = 0;
91  virtual bool invokeCheck() = 0;
92 
93  virtual void invokeShutdown() = 0;
94 
97  virtual void invokeDisable() = 0;
98 
100  virtual DtString type() const = 0;
101 
102  virtual void setTaskId(int taskId) { myTaskId = taskId; }
103  virtual int taskId() const { return myTaskId; }
104 
105  virtual void setScriptId(const DtString& scriptId) { myScriptId = scriptId; }
106  virtual const DtGenericMessageType& scriptId() const { return myScriptId; }
107 
108  virtual void setSystemName(const DtString& system) { mySystemName = system; }
109  virtual const DtString& systemName() const { return mySystemName; }
110 
111  virtual void setScriptPath(const DtFilename& scriptPath) { myScriptPath = scriptPath; }
112  virtual const DtFilename& scriptPath() const { return myScriptPath; }
113 
114  virtual void setEntity(DtVrfObject* entity) { myEntity = entity; }
115  virtual DtVrfObject* entity() const { return myEntity; }
116 
118  virtual void init() { }
119 
120 
121  virtual void setTaskVariables(const DtRwVariableBindings& variables) { myTaskVariables = variables; }
122  virtual const DtRwVariableBindings& taskVariables() const { return myTaskVariables; }
123  virtual bool updateTaskVariables();
124 
127  virtual DtReaderWriter* saveState() = 0;
128 
132  virtual bool loadState(const DtReaderWriter* savedState) = 0;
133 
141  virtual void processClearForReuse();
142 
143  virtual void setTaskStarting(bool v);
144  virtual bool taskStarting() const;
145 
147 
148  virtual void setTaskResuming(bool v);
149  virtual bool taskResuming() const;
151 
153 
154  virtual void setIsBackgroundProces(bool isBgProc);
155  virtual bool isBackgroundProcess() const;
157 
159 
160  virtual void setIsSet(bool isSet);
161  virtual bool isSet() const;
163 
164  virtual void setController(DtScriptTaskControllerInterface* controller) { myControllerInterface = controller; }
165  virtual DtScriptTaskControllerInterface* controller() { return myControllerInterface; }
166 
168  virtual void processEntityDestroyed() {}
169 
172  double scriptGetExerciseTime();
173 
174  int scriptGetApplicationId();
175 
176  double scriptGetSimulationTime();
177 
178  double scriptGetTimeMultiplier();
179 
180  double scriptGetTimeOfDay();
181 
182  double scriptGetDateAndTimeOfDay();
183 
185  double scriptGetWindSpeed();
186 
188  double scriptGetWindDirection();
189 
191  double scriptGetMagneticDeclination(const DtLocation3D &location);
192 
193  DtScriptVrfObject scriptGetVrfObjectByName(const std::string name);
194  DtScriptVrfObject scriptGetVrfObjectByUUID(const std::string name);
195  void printError(const std::string message);
196  void printErrorToChannel(const std::string channel, const std::string message);
197  void printErrorTranslatableStream(const DtTranslatableStream& message);
198  void printWarn(const std::string message);
199  void printWarnToChannel(const std::string channel, const std::string message);
200  void printWarnTranslatableStream(const DtTranslatableStream& message);
201  void printInfo(const std::string message);
202  void printInfoToChannel(const std::string channel, const std::string message);
203  void printInfoTranslatableStream(const DtTranslatableStream& message);
204  void printVerbose(const std::string message);
205  void printVerboseToChannel(const std::string channel, const std::string message);
206  void printVerboseTranslatableStream(const DtTranslatableStream& message);
207  void printDebug(const std::string message);
208  void printDebugToChannel(const std::string channel, const std::string message);
209  void printDebugTranslatableStream(const DtTranslatableStream& message);
210  bool entityTypeMatches(const std::string&, const std::string&);
211 
213  void setTickPeriod(double);
214 
216  void setTickWhilePaused(bool);
217 
221  void setRespondToNewSensorContacts(bool);
222 
225  virtual void addPostSetDataCallback(const DtSetMessageType& setDataType,
226  DtScriptFunctionReferencePtr functionReference);
227 
230  virtual void removePostSetDataCallback(const DtSetMessageType& setDataType,
231  DtScriptFunctionReferencePtr functionReference);
232 
235  virtual void clearPostSetDataCallbacks();
236 
242  static void postSetDataCallback(DtSimMessage* msg, void* usr);
243  virtual void processPostSetData(DtSimMessage* msg);
245 
250  static void postTickCallback(void* usr);
251  virtual void processPostTick();
253 
258  virtual void invokePostSetDataCallback(
259  DtScriptFunctionReferencePtr functionReference,
260  DtSetDataRequestMessage* setDatRequest) = 0;
261 
273  virtual double getTerrainAltitude(const double lat, const double lon,
274  bool& dataAvailable, std::string &surface) const;
275 
278  virtual double getTerrainAltitudeBelow(const DtLocation3D& point,
279  bool& available, std::string &surfaceString)
280  const;
281 
297  virtual double getGroundAltitude(const double lat, const double lon,
298  bool&isWater, bool& dataAvailable);
299 
301  virtual void chordIntersectionDebug(const DtLocation3D& startLoc,
302  const DtLocation3D& endLoc);
303 
314  virtual bool doesChordHitTerrain(const DtLocation3D &pt1,
315  const DtLocation3D & pt2,
316  bool& dataAvailable) const;
317 
324  bool chordIntersectsTerrain(const DtLocation3D &pt1,
325  const DtLocation3D & pt2,
326  bool& dataAvailable,
327  DtLocation3D &intersection) const;
328 
334  virtual DtLocation3D findClosestPointInNavigationArea(const DtLocation3D& point,
335  bool& error) const;
336  virtual DtLocation3D findClosestPointInNavigationAreaInRadius(
337  const DtLocation3D& point, const double radius,
338  bool& error) const;
339  virtual DtLocation3D findClosestPointInNavigationAreaInRadiusAndVertLimit(
340  const DtLocation3D& point, const double radius, const double verticalLimit,
341  bool& error) const;
343 
346  bool findFarthestPositionAlongHeading(
347  const DtLocation3D& point,
348  const double heading, const double maxDistance,
349  DtLocation3D& stopPoint, double& distanceReached) const;
350 
351  virtual DtLocation3D findClosestPointToRoad(const DtLocation3D& point,
352  double searchRadius, bool& dataAvailable, bool& success,
353  DtLocation3D& endA, DtLocation3D& endB, double& offsetToOutsideLane) const;
354 
356  virtual std::list<std::string> getDynamicTerrainFeatureChangeTypes(
357  const DtLocation3D& location, double radius, bool& dataVailable);
358 
361  virtual std::list<DtLocation3D> getDynamicTerrainFeatureLocationsForChangeType(
362  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
363 
366  virtual std::list<std::string> getDynamicTerrainFeatureValuesForChangeType(
367  const std::string& changeType, const DtLocation3D& location, double radius, bool& dataVailable);
368 
370  virtual void changeDynamicTerrain(const std::string& changeType, const std::string& changeValue,
371  const DtLocation3D& location, double radius);
372 
373  bool forcesHostile(std::string force1, std::string force2);
374 
379  std::list<std::string> entityTypesForEquipment(const std::string& equipmentType);
380 
382  virtual double gaussian();
384 
385 protected:
389  virtual void scriptTaskComplete(bool success);
390 
391  virtual void scriptTaskError();
392 
395  virtual bool scriptText(DtString& text);
396 
398  virtual bool scriptPath(DtString& path);
399 
400  virtual const DtReaderWriter* getTaskParam(const DtString& paramName);
401 
402  virtual bool getParamMetaDataType(const DtString& paramName, DtString& typeName);
403 
404  int myTaskId;
407  DtFilename myScriptPath;
415  bool myIsSet;
416 
420 
424 
429 
436 
439 };
440 
441 
443 
444 typedef DtScriptInterface* (*DtScriptInterfaceCreatorFunc)();
445 
447 {
448 protected:
451  DtScriptInterfaceFactory& operator=(const DtScriptInterfaceFactory& other);
452 
453 public:
454  virtual ~DtScriptInterfaceFactory();
455 
457  static DtScriptInterfaceFactory* instance();
458 
460  virtual DtScriptInterface* createInstance(const DtString& type);
461 
464  virtual void registerCreator(const DtString& type, DtScriptInterfaceCreatorFunc func);
465 
467  static void setFactory(DtScriptInterfaceFactory* factory);
468  static DtScriptInterfaceFactory* create();
469 
470 protected:
471  std::map<DtString, DtScriptInterfaceCreatorFunc> myCreators;
473 };
DtFilename myScriptPath
Definition: scriptInterface.h:407
bool myTaskResuming
Definition: scriptInterface.h:413
virtual void processEntityDestroyed()
Can be overridden to perform some processing when the entity is destroyed.
Definition: scriptInterface.h:168
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
bool operator()(DtPostCallbackEntry lhs, DtPostCallbackEntry rhs) const
Definition: scriptInterface.h:58
DtScriptInterface *(* DtScriptInterfaceCreatorFunc)()
Factory.
Definition: scriptInterface.h:444
virtual ~DtScriptFunctionReference()
Definition: scriptInterface.h:43
int myTaskId
Definition: scriptInterface.h:404
bool myExecutingSetDataCallbacks
Set to true when invoking post set data callbacks.
Definition: scriptInterface.h:438
virtual const DtRwVariableBindings & taskVariables() const
Definition: scriptInterface.h:122
virtual void setScriptPath(const DtFilename &scriptPath)
Definition: scriptInterface.h:111
virtual void setTaskVariables(const DtRwVariableBindings &variables)
Definition: scriptInterface.h:121
virtual int taskId() const
Definition: scriptInterface.h:103
DtString mySystemName
Definition: scriptInterface.h:406
std::vector< DtSimMessage * > DtSetDataMessageVector
Definition: scriptInterface.h:68
virtual Instance * createInstance()
Definition: bdiQPropTree_subclasses.h:693
std::set< DtPostCallbackEntry, PostSetDataCallbackLessThan > DtPostSetDataCallbackSet
Definition: scriptInterface.h:67
Definition: readerWriter.h:85
virtual void setController(DtScriptTaskControllerInterface *controller)
Definition: scriptInterface.h:164
DtScriptFunctionReference()
Definition: scriptInterface.h:42
virtual DtVrfObject * entity() const
Definition: scriptInterface.h:115
Comparison operator for DtPostSetDataCallbackSet.
Definition: scriptInterface.h:56
std::pair< DtGenericMessageType, DtScriptFunctionReferencePtr > DtPostCallbackEntry
Matches a set data request type with a DtScriptFunctionReferencePtr.
Definition: scriptInterface.h:53
DtVrfObject * myEntity
Definition: scriptInterface.h:409
virtual const DtFilename & scriptPath() const
Definition: scriptInterface.h:112
ReaderWriter object that maintains a list of reader-writer variable bindings.
Definition: rwVariableBindings.h:27
DtPostSetDataCallbackSet mySetDataCallbacks
Callbacks registered from the scripting language.
Definition: scriptInterface.h:419
DtScriptTaskControllerInterface * myControllerInterface
Definition: scriptInterface.h:408
virtual void setEntity(DtVrfObject *entity)
Definition: scriptInterface.h:114
#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:428
bool myTaskStarting
Indicates that a new task is starting, and should be initialized on the next tick.
Definition: scriptInterface.h:412
File: simMsg.h.
Definition: simMessage.h:35
DtRwVariableBindings myTaskVariables
Definition: scriptInterface.h:410
static DtScriptInterfaceFactory * theFactoryInstance
Definition: scriptInterface.h:472
boost::shared_ptr< DtScriptFunctionReference > DtScriptFunctionReferencePtr
Shared ptr to DtScriptFunctionReference.
Definition: scriptInterface.h:50
This stream is used by the scripting classes to be able to send out translatable messages from script...
Definition: translatableStream.h:22
*array controller(no time code)*/template< class Instance
//!//!//!//!//!//!//!//!//!//!//!//
Abstract object used to hold a reference to a function defined in the script language, to be used later to invoke that function.
Definition: scriptInterface.h:39
Definition: asyncJobServer.h:39
DtGenericMessageType myScriptId
Definition: scriptInterface.h:405
DtSetDataMessageVector myPendingSetDataMessages
If a set data request is executed while invoking callbacks, add it to this vector instead of mySetDat...
Definition: scriptInterface.h:435
std::map< DtString, DtScriptInterfaceCreatorFunc > myCreators
Definition: scriptInterface.h:471
bool myIsBackgroundProcess
Definition: scriptInterface.h:414
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:415
virtual DtScriptTaskControllerInterface * controller()
Definition: scriptInterface.h:165
virtual void setTaskId(int taskId)
Definition: scriptInterface.h:102
This class is a two-way interface between the script language and its parent controller.
Definition: scriptInterface.h:28
virtual void init()
Derived class inits may do things, so init should always be called.
Definition: scriptInterface.h:118
A DtSetDataRequestMessage is a DtRadioMsg with a pointer to a setDataRequest.
Definition: setDataRequestMessage.h:23
Definition: scriptTaskControllerInterface.h:22
virtual void setSystemName(const DtString &system)
Definition: scriptInterface.h:108
virtual void setScriptId(const DtString &scriptId)
Definition: scriptInterface.h:105
std::map< DtPostCallbackEntry, bool > DtPostCallbackEntryPendingChanges
Definition: scriptInterface.h:69
virtual const DtGenericMessageType & scriptId() const
Definition: scriptInterface.h:106
Definition: scriptInterface.h:446
virtual const DtString & systemName() const
Definition: scriptInterface.h:109
DtSetDataMessageVector mySetDataMessages
Stores copies of set data request messages that callbacks have been registered for.
Definition: scriptInterface.h:423
Definition: scriptVrfObject.h:24
A location3D is a point in space, i.e. a geocentric coordinate.
Definition: scriptGeometry.h:22

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)