VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
luaScriptInterfaceImpl.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 #pragma once
6 
7 #include <vrfLua/vrfLuaDefines.h>
8 #include <vrfLua/luaFeatureSet.h>
9 #include <vrfLua/luaPathJob.h>
10 
13 #include "vrfutil/scriptGeometry.h"
15 #include <luabind/luabind.hpp>
18 #include <vrfutil/objectCounter.h>
19 //TMP
20 #include <vrfcore/simManager.h>
21 #include <vrfcore/exerciseClock.h>
22 
23 #include <lua.hpp>
24 #include <lauxlib.h>
25 #include <lualib.h>
26 
28  : public DtScriptInterface
29  , public DtObjectDebugger<DtLuaScriptInterfaceImpl>
30 {
31 protected:
33 
36 
37 public:
38  virtual ~DtLuaScriptInterfaceImpl();
39 
40  static DtScriptInterface* creator();
41 
42  virtual void init();
43 
44  virtual DtString type() const;
45 
46  virtual bool invokeInit();
47  virtual void invokeSuspend();
48  virtual bool invokeResume();
49  virtual void invokeTick();
50  virtual bool invokeCheck();
51  virtual void invokeCheckInit();
52  virtual void invokeShutdown();
53 
56  virtual void invokeDisable();
57 
58  virtual bool loadScript(bool reload);
59 
60  virtual void setLuaState(lua_State* L);
61  virtual lua_State* getLuaState();
62 
63  virtual std::string dumpLuaStack() const;
64  virtual int luaStackSize() const;
65  virtual void collectGarbage();
66 
67  virtual DtReaderWriter* saveState();
68  virtual bool loadState(const DtReaderWriter* loadState);
69  virtual void processClearForReuse();
70 
75  static void addLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
76 
81  static void addLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension,
82  const DtVrfObject* onlyForEntity, void* usr);
83 
85  static void removeLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
86 
89  static void removeLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension,
90  const DtVrfObject* onlyForEntity, void* usr);
91 
92  virtual bool initializeVRFLuaExtensions(lua_State* L);
93  virtual bool importTaskParams(lua_State* L);
94 
96  virtual luabind::object createLuaTableFromRegistry(lua_State* L, const DtReaderWriterRegistry& rwRegistry, bool requireMetadata = true);
97 
99  static void addKeyToIgnore(const std::string&);
100 
102  static void removeKeyToIgnore(const std::string&);
103 
105  void luaEndTask(bool success);
106 
108 
110 
111 
112  virtual int luaSendEmbeddedEntityTask(std::string eeName, std::string taskName, luabind::object const& parms);
113  virtual int luaSendEmbeddedEntityTaskActAsSubtask(std::string eeName, std::string taskName,
114  luabind::object const& parms, bool actAsSubtask);
116  virtual int luaSendEmbeddedEntitySet(std::string eeName, std::string setName, luabind::object const& parms);
118 
120 
121 
122  int luaStartSubtask(const std::string taskName, luabind::object const& parameters);
123  void luaStopSubtask(int subtaskId);
125  void luaStopAllSubtasks();
127  bool luaIsSubtaskRunning(int subtaskId);
129  bool luaIsSubtaskComplete(int subtaskId);
131  bool luaIsSubtaskCanceled(int subtaskId);
133  bool luaSubtaskResult(int subtaskId);
135 
137  void luaSendReportWithoutRecipients(const::std::string reportType,
138  luabind::object const& parameters);
139  void luaSendReport(const::std::string reportType,
140  luabind::object const& reciptients,
141  luabind::object const& parameters);
142 
144  int luaSendTask(DtScriptVrfObject& object, const::std::string taskName,
145  luabind::object const& parameters);
146  int luaSendTaskActAsSubtask(DtScriptVrfObject& object, const::std::string taskName,
147  luabind::object const& parameters, bool actAsSubtask);
148 
150  void luaStopAllTasks();
151 
153  void luaSendSetDataToSelf(const::std::string setName,
154  luabind::object const& parameters);
155 
157  void luaSendSetData(DtScriptVrfObject& object, const::std::string setName,
158  luabind::object const& parameters);
159 
161  luabind::object luaGetReactionStatus();
162 
164  std::string luaGetScriptId();
165 
167  std::string luaGetSystemName();
168 
169  luabind::object luaGetObjectsNear(const DtLocation3D& loc, double distance);
170  luabind::object luaGetObjectsNearWithFilter(const DtLocation3D& loc, double distance, luabind::object const& parameters);
171 
172  luabind::object luaGetScriptAttribute(const std::string& attributeName, bool& error);
173 
175  luabind::object luaGetVrfObjects();
176 
179  DtLuaFeatureSet luaGetFeaturesWithinArea(luabind::object const& points, luabind::object const& attributes);
180  DtLuaFeatureSet luaGetFeaturesWithinAreaNoAttributes(luabind::object const& points);
181 
184  DtLuaFeatureSet luaGetFeaturesWithinRange(const DtLocation3D&, double range, luabind::object const& attributes);
185  DtLuaFeatureSet luaGetFeaturesWithinRangeNoAttributes(const DtLocation3D&, double range);
186 
188  boost::shared_ptr<DtLuaAsyncJob> generateRandomPoints(const luabind::object& parameters);
189 
191  boost::shared_ptr<DtLuaAsyncJob> findNearbyPointOfInterest(const int type);
192 
194  DtTranslatableStream translateStringFromScript(const std::string& format);
195 
198  boost::shared_ptr<DtLuaAsyncJob> luaNavigateThroughFeatures(const luabind::object& parameters);
199 
200  void luaSendMessage(const DtScriptVrfObject& receiver, const std::string& message);
201  void luaDeleteObject(std::string const& receiver);
202  void luaDeleteScriptObject(const DtScriptVrfObject& receiver);
203 
204  static void textReportCallback(const DtVrfObjectMessage* m, void* usr);
205  virtual void processTextReport(const DtVrfObjectMessage* m);
206 
207  void luaSendInfluence(const DtScriptVrfObject& target,
208  const std::string& influenceName, luabind::object const& influenceParams);
209 
210 #ifdef DtHLA
211  static void influenceCallback(DtInfluenceInteraction* m, void* usr);
212  virtual void processInfluence(DtInfluenceInteraction* m);
213 #endif
214 
216  virtual void processEntityDestroyed();
217 
220  virtual void luaSetPrecipitationIntensity(DtScriptVrfObject& object, double intensity);
221  virtual void luaSetPrecipitationType(DtScriptVrfObject& object, int type);
222  virtual void luaSetCloudCover(DtScriptVrfObject& object, int state);
223  virtual void luaSetVisibilityDistance(DtScriptVrfObject& object, double distance);
224  virtual void luaSetWindDirection(DtScriptVrfObject& object, double);
225  virtual void luaSetWindSpeed(DtScriptVrfObject& object, double);
226  virtual void luaSetUnderwaterVisibility(DtScriptVrfObject& object, double visibility);
227  virtual void luaSetSurfaceTransparency(DtScriptVrfObject& object, double transparency);
228  virtual void luaSetSwellState(DtScriptVrfObject& object, unsigned int state);
229  virtual void luaSetSwellStateDirection(DtScriptVrfObject& object, double direction);
230  virtual void luaSetSeaState(DtScriptVrfObject& object, unsigned int state);
231  virtual void luaSetSeaStateDirection(DtScriptVrfObject& object, double direction);
232  virtual void luaSetWindDrivenSeaStateEnabled(DtScriptVrfObject& object, bool enabled);
233  virtual void luaSetChoppiness(DtScriptVrfObject& object, double choppiness);
234  virtual void luaSetSurgeDepth(DtScriptVrfObject& object, double depth);
235  virtual void luaSetPriority(DtScriptVrfObject& object, int);
236 
237  virtual bool isWeatherObject(DtScriptVrfObject&) const;
238 
239 
240  virtual unsigned int luaGetPrecipitation(DtScriptVrfObject& object, double*);
241  virtual double luaGetPrecipitationIntensity(DtScriptVrfObject& object);
242  virtual unsigned int luaGetPrecipitationType(DtScriptVrfObject& object);
243  virtual int luaGetCloudCover(DtScriptVrfObject& object);
244  virtual double luaGetVisibilityDistance(DtScriptVrfObject& object);
245  virtual double luaGetWindDirection(DtScriptVrfObject& object);
246  virtual double luaGetWindSpeed(DtScriptVrfObject& object);
247  virtual double luaGetUnderwaterVisibility(DtScriptVrfObject& object);
248  virtual double luaGetSurfaceTransparency(DtScriptVrfObject& object);
249  virtual unsigned int luaGetSwellState(DtScriptVrfObject& object);
250  virtual double luaGetSwellStateDirection(DtScriptVrfObject& object);
251  virtual unsigned int luaGetSeaState(DtScriptVrfObject& object);
252  virtual double luaGetSeaStateDirection(DtScriptVrfObject& object);
253  virtual bool luaGetWindDrivenSeaStateEnabled(DtScriptVrfObject& object);
254  virtual double luaGetChoppiness(DtScriptVrfObject& object);
255  virtual double luaGetSurgeDepth(DtScriptVrfObject& object);
256  virtual int luaGetPriority(DtScriptVrfObject& object);
257  virtual double luaGetIllumination(DtScriptVrfObject& object);
258 
259  virtual unsigned int luaGetPrecipitationByLocation(const DtLocation3D& location, double*);
260  virtual double luaGetPrecipitationIntensityByLocation(const DtLocation3D& object);
261  virtual unsigned int luaGetPrecipitationTypeByLocation(const DtLocation3D& object);
262  virtual int luaGetCloudCoverByLocation(const DtLocation3D& object);
263  virtual double luaGetVisibilityDistanceByLocation(const DtLocation3D& object);
264  virtual double luaGetWindDirectionByLocation(const DtLocation3D& object);
265  virtual double luaGetWindSpeedByLocation(const DtLocation3D& object);
266  virtual double luaGetUnderwaterVisibilityByLocation(const DtLocation3D& object);
267  virtual double luaGetSurfaceTransparencyByLocation(const DtLocation3D& object);
268  virtual unsigned int luaGetSwellStateByLocation(const DtLocation3D& object);
269  virtual double luaGetSwellStateDirectionByLocation(const DtLocation3D& object);
270  virtual unsigned int luaGetSeaStateByLocation(const DtLocation3D& object);
271  virtual double luaGetSeaStateDirectionByLocation(const DtLocation3D& object);
272  virtual bool luaGetWindDrivenSeaStateEnabledByLocation(const DtLocation3D& object);
273  virtual double luaGetChoppinessByLocation(const DtLocation3D& object);
274  virtual double luaGetSurgeDepthByLocation(const DtLocation3D& object);
275  virtual int luaGetPriorityByLocation(const DtLocation3D& object);
276  virtual double luaGetIlluminationByLocation(const DtLocation3D& object);
278 
281  virtual double luaRunDurationTime();
282  virtual void luaRunForDuration(double);
283  virtual void luaStopSimulationDurationTimer();
285 
288  virtual void luaSetCheckpointMode(bool);
289  virtual void initializeCheckpointStateTable(lua_State* L);
290 
299  virtual int luaAskUserQuestion(const DtTranslatableStream& title, const DtTranslatableStream& message,
300  luabind::object const& options, int displayFlags);
301  virtual int luaAskUserQuestionST(const std::string& title, const DtTranslatableStream& message,
302  luabind::object const& options, int displayFlags);
303  virtual int luaAskUserQuestionTS(const DtTranslatableStream& title, const std::string& message,
304  luabind::object const& options, int displayFlags);
305  virtual int luaAskUserQuestionSS(const std::string& title, const std::string& message,
306  luabind::object const& options, int displayFlags);
307 
311  virtual int luaStatusOfUserQuestion(int questionId);
312 
314  virtual void luaCancelUserQuestion(int questionId);
315 
319 
321  DtScriptVrfObject luaCreateEntity(luabind::object const& parameters);
322 
324  DtScriptVrfObject luaGetGlobalWeather();
325 
327  DtScriptVrfObject luaCreateTacticalGraphic(luabind::object const& parameters);
328 
330  DtScriptVrfObject luaCreateObstacle(luabind::object const& parameters);
331 
333  DtScriptVrfObject luaCreateRoute(luabind::object const& parameters);
334 
336  DtScriptVrfObject luaCreateArea(luabind::object const& parameters);
337 
339  DtScriptVrfObject luaCreateWaypoint(luabind::object const& parameters);
340 
342  DtScriptVrfObject luaCreatePhaseLine(luabind::object const& parameters);
344 
346  void luaCreateSelectionGroup(const std::string& name, luabind::object const& parameters);
347 
349  bool luaUpdateTaskVisualization(const std::string& visualizationName,
350  const std::string& visualizationType, luabind::object const& parameters);
351 
353  void luaDeleteTaskVisualization(const std::string& visualizationName);
354 
356  void luaRequire(lua_State* L, const std::string& filename);
357 
360 
361  unsigned luaBitwiseOr(unsigned val1, unsigned val2);
362  unsigned luaBitwiseAnd(unsigned val1, unsigned val2);
363  unsigned luaBitwiseXor(unsigned val1, unsigned val2);
364  unsigned luaBitwiseNot(unsigned val);
365  unsigned luaBitwiseLeftShift(unsigned val, unsigned shift);
366  unsigned luaBitwiseRightShift(unsigned val, unsigned shift);
367 
369 
370  bool luaIntersectSegments2D(const DtLocation3D& p1, const DtLocation3D& p2, const DtLocation3D& p3, const DtLocation3D& p4,
371  DtLocation3D& intersectPoint);
372 
377  {
378  public:
379  DtLuaScriptFunctionReference(const std::string& functionName)
381  , myFunctionName(functionName)
382  {
383 
384  }
385 
387  {
388 
389  }
390 
391  std::string functionName() const
392  {
393  return myFunctionName;
394  }
395 
396  virtual bool operator<(const DtScriptFunctionReference& other) const
397  {
398  try
399  {
400  const DtLuaScriptFunctionReference& rhs =
401  dynamic_cast<const DtLuaScriptFunctionReference&>(other);
402  return myFunctionName.compare(rhs.myFunctionName) < 0;
403  }
404  catch(...)
405  {
406  DtInfo << "DtLuaScriptFunctionReference::operator< attempt to compare with wrong type.\n";
407  return false;
408  }
409  }
410 
411  protected:
412  std::string myFunctionName;
413  };
414 
417  virtual void addPostSetDataCallback(const std::string& setDataType,
418  const std::string& functionName);
421  virtual void removePostSetDataCallback(const std::string& setDataType,
422  const std::string& functionName);
423 
426  virtual void invokePostSetDataCallback(
427  DtScriptFunctionReferencePtr functionReference,
428  DtSetDataRequestMessage* setDatRequest);
429 
431  virtual void putObjectsFromTableIntoGlobalTable(lua_State* state, luabind::object& table);
432  virtual void putObjectsFromGlobalTableIntoTable(lua_State* state, luabind::object& table);
433 
434 protected:
438  virtual bool callLuaNoArgFunction(const std::string& functionName, bool* functionExists = 0);
439 
440  virtual void updateFuncCallCount();
441 
442  lua_State* myLState;
443  unsigned myFuncCallCount;
445 
446  typedef std::vector<DtLuaScriptInterfaceExtension*> LocalInterfaceExtensions;
448 
450  {
451  LuaExtension() : creator(0), onlyForEntity(0), usr(0) {};
452  LuaExtension(const LuaExtension& orig) : creator(orig.creator), onlyForEntity(orig.onlyForEntity),
453  usr(orig.usr) {};
454 
457  void* usr;
458  };
459 
460  typedef std::vector<LuaExtension> GlobalInterfaceExtensions;
461 
463 
464  luabind::object* myCheckpointStateTable;
465 };
466 
468 
477 namespace luaScriptInterface
478 {
479  typedef luabind::object (*rwToLuaBindObjectFcn)(
480  DtReaderWriter* rw, lua_State* L);
481 
482  luabind::object luaGetEntityParam(lua_State* L,
483  const DtScriptVrfObject& entity, std::string const& paramName);
484 
485  luabind::object luaGetSystemAttribute(
486  const DtScriptComponentSystem& system, const std::string& attributeName
487  , bool *error
488  , lua_State *L
489  );
490 
492  luabind::object luaGetContactInfo(lua_State* L, const DtScriptVrfObject& thisEntity,
493  const DtScriptVrfObject& otherEntity);
494 
499  std::list<DtScriptVrfObject> luaGetContactsWithFilter(
500  lua_State* L, const DtScriptVrfObject& entity,
501  luabind::object const& typeFilters, bool observedOnly);
502 
505  bool luaSetStateProperty(lua_State* L, const DtScriptVrfObject& entity,
506  const std::string& propertyName, luabind::object const& prop);
507 
511  bool luaSetOrAddStateProperty(lua_State* L, const DtScriptVrfObject& entity,
512  const std::string& propertyName, luabind::object const& prop, bool addIfNotFound);
513 
520  bool luaSetStatePropertyListItem(lua_State* L,
521  const DtScriptVrfObject& entity, const std::string& propertyName,
522  luabind::object const& keyValues, luabind::object const& itemValue);
523 
530  bool luaSetStatePropertyMapItem(lua_State* L,
531  const DtScriptVrfObject& entity, const std::string& propertyName,
532  luabind::object const& keyValue, luabind::object const& itemValue);
533 
538  luabind::object luaGetStateProperty(lua_State* L,
539  const DtScriptVrfObject& entity, const std::string& propertyName);
540 
548  luabind::object luaGetStatePropertyListItem(lua_State* L,
549  const DtScriptVrfObject& entity, const std::string& propertyName,
550  luabind::object const& keyValues);
551 
559  luabind::object luaGetStatePropertyMapItem(lua_State* L,
560  const DtScriptVrfObject& entity, const std::string& propertyName,
561  luabind::object const& keyValue);
562 
567  luabind::object luaGetParamProperty(lua_State* L,
568  const DtScriptVrfObject& entity, std::string const& paramName);
569 
577  luabind::object luaGetParameterPropertyListItem(lua_State* L,
578  const DtScriptVrfObject& entity, const std::string& propertyName,
579  luabind::object const& keyValues);
580 
588  luabind::object luaGetParameterPropertyMapItem(lua_State* L,
589  const DtScriptVrfObject& entity, const std::string& propertyName,
590  luabind::object const& keyValue);
591 
593  DtScriptComponentSystem& system, const std::string& attributeName,
594  const luabind::object & value,
595  lua_State *L);
596 
597  static const std::map<DtString, rwToLuaBindObjectFcn>& rwToLuaBindObjectMap();
598 };

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)