VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 
31 typedef luabind::object (*ReaderWriterToLuaTableFcn)(lua_State* LS, const DtReaderWriter* rwString,
32  DtVrfObjectManager* mgr, const DtString& parameterType);
33 
35  : public DtScriptInterface
36  , public DtObjectDebugger<DtLuaScriptInterfaceImpl>
37 {
38 protected:
40 
43 
44 public:
45  virtual ~DtLuaScriptInterfaceImpl();
46 
47  static DtScriptInterface* creator();
48 
49  virtual void init();
50 
51  virtual DtString type() const;
52 
53  virtual bool invokeInit();
54  virtual void invokeSuspend();
55  virtual bool invokeResume();
56  virtual void invokeTick();
57  virtual bool invokeCheck();
58  virtual void invokeCheckInit();
59  virtual void invokeShutdown();
60 
63  virtual void invokeDisable();
64 
65  virtual bool loadScript(bool reload);
66 
67  virtual void setLuaState(lua_State* L);
68  virtual lua_State* getLuaState();
69 
70  virtual std::string dumpLuaStack() const;
71  virtual int luaStackSize() const;
72  virtual void collectGarbage();
73 
74  virtual DtReaderWriter* saveState();
75  virtual bool loadState(const DtReaderWriter* loadState);
76  virtual void processClearForReuse();
77 
82  static void addLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
83 
88  static void addLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension,
89  const DtVrfObject* onlyForEntity, void* usr);
90 
92  static void removeLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension, void* usr);
93 
96  static void removeLuaScriptInterfaceExtension(DtLuaScriptInterfaceExtension::CreatorFcn extension,
97  const DtVrfObject* onlyForEntity, void* usr);
98 
99  virtual bool initializeVRFLuaExtensions(lua_State* L);
100  virtual bool importTaskParams(lua_State* L);
101 
103  virtual bool importSetParams(lua_State* L);
104 
106  virtual luabind::object createLuaTableFromRegistry(lua_State* L, const DtReaderWriterRegistry& rwRegistry, bool requireMetadata = true);
107 
109  static void addKeyToIgnore(const std::string&);
110 
112  static void removeKeyToIgnore(const std::string&);
113 
115  void luaEndTask(bool success);
116  void luaEndSet();
117 
119 
121 
122  virtual void luaPlayScenarioEvent(DtScriptVrfObject eventName);
123  virtual void luaStopScenarioEvent(DtScriptVrfObject eventName);
124  virtual void luaStopScenarioEventWithRewind(DtScriptVrfObject eventName, bool rewind);
125  virtual bool luaIsScenarioEventPlaying(DtScriptVrfObject eventName);
126  virtual void luaSetScenarioEventEnabled(DtScriptVrfObject eventName, bool);
127  virtual bool luaIsScenarioEventEnabled(DtScriptVrfObject eventName);
129 
131 
132 
133  virtual int luaSendEmbeddedEntityTask(std::string eeName, std::string taskName, luabind::object const& parms);
134  virtual int luaSendEmbeddedEntityTaskActAsSubtask(std::string eeName, std::string taskName,
135  luabind::object const& parms, bool actAsSubtask);
137  virtual int luaSendEmbeddedEntitySet(std::string eeName, std::string setName, luabind::object const& parms);
139 
141 
142 
143  int luaStartSubtask(const std::string taskName, luabind::object const& parameters);
144  void luaStopSubtask(int subtaskId);
146  void luaStopAllSubtasks();
148  bool luaIsSubtaskRunning(int subtaskId);
150  bool luaIsSubtaskComplete(int subtaskId);
152  bool luaIsSubtaskCanceled(int subtaskId);
154  bool luaSubtaskResult(int subtaskId);
158  void luaCleanupInactiveSubtaskStatus();
160 
162  void luaSendReportWithoutRecipients(const::std::string reportType,
163  luabind::object const& parameters);
164  void luaSendReport(const::std::string reportType,
165  luabind::object const& reciptients,
166  luabind::object const& parameters);
167 
169  int luaSendTask(DtScriptVrfObject& object, const::std::string taskName,
170  luabind::object const& parameters);
171  int luaSendTaskActAsSubtask(DtScriptVrfObject& object, const::std::string taskName,
172  luabind::object const& parameters, bool actAsSubtask);
173  int luaSendRadioTask(DtScriptVrfObject& object, const::std::string taskName,
174  luabind::object const& parameters);
175  int luaSendRadioTaskActAsSubtask(DtScriptVrfObject& object, const::std::string taskName,
176  luabind::object const& parameters, bool actAsSubtask);
177  int luaSendTaskActAsSubtaskWithRadio(DtScriptVrfObject& object, const::std::string taskName,
178  luabind::object const& parameters, bool actAsSubtask, bool sendWithRadio);
179 
181  void luaStopAllTasks();
182 
184  void luaSendSetDataToSelf(const::std::string setName,
185  luabind::object const& parameters);
186 
188  void luaSendSetData(DtScriptVrfObject& object, const::std::string setName,
189  luabind::object const& parameters);
190  void luaSendRadioSetData(DtScriptVrfObject& object, const::std::string setName,
191  luabind::object const& parameters);
192  void sendSetDataWithRadio(DtScriptVrfObject& object, const::std::string setName,
193  luabind::object const& parameters, bool useRadio);
194 
195  bool luaIsTaskAvailable(const::std::string taskName);
196  bool luaIsSetAvailable(const::std::string setName);
197 
199  luabind::object luaGetReactionStatus();
200 
209  luabind::object luaGetOrbatList();
210 
212  std::string luaGetScriptId();
213 
215  std::string luaGetSystemName();
216 
217  luabind::object luaGetObjectsNear(const DtLocation3D& loc, double distance);
218  luabind::object luaGetObjectsNearWithFilter(const DtLocation3D& loc, double distance, luabind::object const& parameters);
219 
220  luabind::object luaGetScriptAttribute(const std::string& attributeName, bool& error);
221 
223  luabind::object luaGetVrfObjects();
224 
226 
227 
228  DtLuaFeatureSet luaGetFeaturesWithinArea(luabind::object const& points, luabind::object const& attributes);
230  DtLuaFeatureSet luaGetFeaturesWithinAreaNoAttributes(luabind::object const& points);
231 
234  DtLuaFeatureSet luaGetFeaturesWithinRange(const DtLocation3D&, double range, luabind::object const& attributes);
236  DtLuaFeatureSet luaGetFeaturesWithinRangeNoAttributes(const DtLocation3D&, double range);
237 
239  DtLuaFeatureSet luaGetFeaturesType(const std::string& type);
241  DtLuaFeatureSet luaGetFeatures();
243 
245 
246 
247  DtLuaFeatureGeometry luaMakePointGeometry(const DtLocation3D&);
249  DtLuaFeatureGeometry luaMakePathGeometry(const std::vector<DtLocation3D>&);
251  DtLuaFeatureGeometry luaMakeAreaGeometry(const std::vector<DtLocation3D>&);
253 
255  boost::shared_ptr<DtLuaAsyncJob> generateRandomPoints(const luabind::object& parameters);
256 
258  boost::shared_ptr<DtLuaAsyncJob> findNearbyPointOfInterest(const int type);
259 
261  boost::shared_ptr<DtLuaAsyncJob> findCoverPoint(
262  const DtLocation3D& startLocation, const DtLocation3D& threatLocation,
263  double threatRadius, double distanceFromThreat, double range, unsigned numberOfPoints);
264 
266  boost::shared_ptr<DtLuaAsyncJob> findPathToLocation(
267  const DtLocation3D& startLocation, const DtLocation3D& destinationLocation,
268  bool useAbstractGraphs, const DtLocation3D& avoidLocation, double avoidanceRadius);
269 
271  DtTranslatableStream translateStringFromScript(const std::string& format);
272 
275  boost::shared_ptr<DtLuaAsyncJob> luaNavigateThroughFeatures(const luabind::object& parameters);
276 
277  void luaSendMessage(const DtScriptVrfObject& receiver, const std::string& message);
278  void luaSendRadioMessage(const DtScriptVrfObject& receiver, const std::string& message);
279  void luaDeleteObject(std::string const& receiver);
280  void luaDeleteScriptObject(const DtScriptVrfObject& receiver);
281 
282  static void textReportCallback(const DtVrfObjectMessage* m, void* usr);
283  virtual void processTextReport(const DtVrfObjectMessage* m);
284 
285  void luaSendInfluence(const DtScriptVrfObject& target,
286  const std::string& influenceName, luabind::object const& influenceParams);
287 
289  static void addReaderWriterToLuaTableFunction(const DtString&, ReaderWriterToLuaTableFcn);
290 
291 #ifdef DtHLA
292  static void influenceCallback(DtInfluenceInteraction* m, void* usr);
293  virtual void processInfluence(DtInfluenceInteraction* m);
294 #endif
295 
297  virtual void processEntityDestroyed();
298 
301  virtual void luaSetPrecipitationIntensity(DtScriptVrfObject& object, double intensity);
302  virtual void luaSetPrecipitationType(DtScriptVrfObject& object, int type);
303  virtual void luaSetCloudCover(DtScriptVrfObject& object, int state);
304  virtual void luaSetVisibilityDistance(DtScriptVrfObject& object, double distance);
305  virtual void luaSetWindDirection(DtScriptVrfObject& object, double);
306  virtual void luaSetWindSpeed(DtScriptVrfObject& object, double);
307  virtual void luaSetUnderwaterVisibility(DtScriptVrfObject& object, double visibility);
308  virtual void luaSetSurfaceTransparency(DtScriptVrfObject& object, double transparency);
309  virtual void luaSetSwellState(DtScriptVrfObject& object, unsigned int state);
310  virtual void luaSetSwellStateDirection(DtScriptVrfObject& object, double direction);
311  virtual void luaSetSeaState(DtScriptVrfObject& object, unsigned int state);
312  virtual void luaSetSeaStateDirection(DtScriptVrfObject& object, double direction);
313  virtual void luaSetWindDrivenSeaStateEnabled(DtScriptVrfObject& object, bool enabled);
314  virtual void luaSetChoppiness(DtScriptVrfObject& object, double choppiness);
315  virtual void luaSetSurgeDepth(DtScriptVrfObject& object, double depth);
316  virtual void luaSetFogHeight(DtScriptVrfObject& object, double depth);
317  virtual void luaSetFogColor(DtScriptVrfObject& object, double red, double green, double blue);
318  virtual void luaSetPriority(DtScriptVrfObject& object, int);
319 
320  virtual bool isWeatherObject(DtScriptVrfObject&) const;
321 
322 
323  virtual double luaGetAirTemperature(DtScriptVrfObject& object);
324  virtual unsigned int luaGetPrecipitation(DtScriptVrfObject& object, double*);
325  virtual double luaGetPrecipitationIntensity(DtScriptVrfObject& object);
326  virtual unsigned int luaGetPrecipitationType(DtScriptVrfObject& object);
327  virtual int luaGetCloudCover(DtScriptVrfObject& object);
328  virtual double luaGetVisibilityDistance(DtScriptVrfObject& object);
329  virtual double luaGetWindDirection(DtScriptVrfObject& object);
330  virtual double luaGetWindSpeed(DtScriptVrfObject& object);
331  virtual double luaGetUnderwaterVisibility(DtScriptVrfObject& object);
332  virtual double luaGetSurfaceTransparency(DtScriptVrfObject& object);
333  virtual unsigned int luaGetSwellState(DtScriptVrfObject& object);
334  virtual double luaGetSwellStateDirection(DtScriptVrfObject& object);
335  virtual unsigned int luaGetSeaState(DtScriptVrfObject& object);
336  virtual double luaGetSeaStateDirection(DtScriptVrfObject& object);
337  virtual bool luaGetWindDrivenSeaStateEnabled(DtScriptVrfObject& object);
338  virtual double luaGetChoppiness(DtScriptVrfObject& object);
339  virtual double luaGetSurgeDepth(DtScriptVrfObject& object);
340  virtual double luaGetFogHeight(DtScriptVrfObject& object);
341  virtual double luaGetFogHeightByLocation(const DtLocation3D& object);
342  virtual void luaGetFogColor(DtScriptVrfObject& object, double* red, double* green, double* blue);
343  virtual void luaGetFogColorByLocation(const DtLocation3D& object, double* red, double* green, double* blue);
344  virtual int luaGetPriority(DtScriptVrfObject& object);
345  virtual double luaGetIllumination(DtScriptVrfObject& object);
346 
347  virtual double luaGetAirTemperatureByLocation(const DtLocation3D& object);
348  virtual unsigned int luaGetPrecipitationByLocation(const DtLocation3D& location, double*);
349  virtual double luaGetPrecipitationIntensityByLocation(const DtLocation3D& object);
350  virtual unsigned int luaGetPrecipitationTypeByLocation(const DtLocation3D& object);
351  virtual int luaGetCloudCoverByLocation(const DtLocation3D& object);
352  virtual double luaGetVisibilityDistanceByLocation(const DtLocation3D& object);
353  virtual double luaGetWindDirectionByLocation(const DtLocation3D& object);
354  virtual double luaGetWindSpeedByLocation(const DtLocation3D& object);
355  virtual double luaGetUnderwaterVisibilityByLocation(const DtLocation3D& object);
356  virtual double luaGetSurfaceTransparencyByLocation(const DtLocation3D& object);
357  virtual unsigned int luaGetSwellStateByLocation(const DtLocation3D& object);
358  virtual double luaGetSwellStateDirectionByLocation(const DtLocation3D& object);
359  virtual unsigned int luaGetSeaStateByLocation(const DtLocation3D& object);
360  virtual double luaGetSeaStateDirectionByLocation(const DtLocation3D& object);
361  virtual bool luaGetWindDrivenSeaStateEnabledByLocation(const DtLocation3D& object);
362  virtual double luaGetChoppinessByLocation(const DtLocation3D& object);
363  virtual double luaGetSurgeDepthByLocation(const DtLocation3D& object);
364  virtual int luaGetPriorityByLocation(const DtLocation3D& object);
365  virtual double luaGetIlluminationByLocation(const DtLocation3D& object);
367 
370  virtual double luaRunDurationTime();
371  virtual void luaRunForDuration(double);
372  virtual void luaStopSimulationDurationTimer();
374 
377  virtual void luaSetCheckpointMode(bool);
378  virtual void initializeCheckpointStateTable(lua_State* L);
379 
388  virtual int luaAskUserQuestion(const DtTranslatableStream& title, const DtTranslatableStream& message,
389  luabind::object const& options, int displayFlags);
390  virtual int luaAskUserQuestionST(const std::string& title, const DtTranslatableStream& message,
391  luabind::object const& options, int displayFlags);
392  virtual int luaAskUserQuestionTS(const DtTranslatableStream& title, const std::string& message,
393  luabind::object const& options, int displayFlags);
394  virtual int luaAskUserQuestionSS(const std::string& title, const std::string& message,
395  luabind::object const& options, int displayFlags);
396 
400  virtual int luaStatusOfUserQuestion(int questionId);
401 
403  virtual void luaCancelUserQuestion(int questionId);
404 
408 
410  DtScriptVrfObject luaCreateEntity(luabind::object const& parameters);
411 
413  DtScriptVrfObject luaCreateFromOrbat(std::string orbatItem, const DtLocation3D& loc);
414 
416  DtScriptVrfObject luaGetGlobalWeather();
417 
419  DtScriptVrfObject luaCreateTacticalGraphic(luabind::object const& parameters);
420 
422  DtScriptVrfObject luaCreateObstacle(luabind::object const& parameters);
423 
425  DtScriptVrfObject luaCreateRoute(luabind::object const& parameters);
426 
428  DtScriptVrfObject luaCreateArea(luabind::object const& parameters);
429 
431  DtScriptVrfObject luaCreateWaypoint(luabind::object const& parameters);
432 
434  DtScriptVrfObject luaCreatePhaseLine(luabind::object const& parameters);
436 
438  void luaCreateSelectionGroup(const std::string& name, luabind::object const& parameters);
439 
441  bool luaUpdateTaskVisualization(const std::string& visualizationName,
442  const std::string& visualizationType, luabind::object const& parameters);
443 
445  void luaDeleteTaskVisualization(const std::string& visualizationName);
446 
448  void luaRequire(lua_State* L, const std::string& filename);
449 
452  unsigned luaBitwiseOr(unsigned val1, unsigned val2);
453  unsigned luaBitwiseAnd(unsigned val1, unsigned val2);
454  unsigned luaBitwiseXor(unsigned val1, unsigned val2);
455  unsigned luaBitwiseNot(unsigned val);
456  unsigned luaBitwiseLeftShift(unsigned val, unsigned shift);
457  unsigned luaBitwiseRightShift(unsigned val, unsigned shift);
459 
460  bool luaIntersectSegments2D(const DtLocation3D& p1, const DtLocation3D& p2, const DtLocation3D& p3, const DtLocation3D& p4,
461  DtLocation3D& intersectPoint);
462 
467  {
468  public:
469  DtLuaScriptFunctionReference(const std::string& functionName)
471  , myFunctionName(functionName)
472  {
473 
474  }
475 
477  {
478 
479  }
480 
481  std::string functionName() const
482  {
483  return myFunctionName;
484  }
485 
486  virtual bool operator<(const DtScriptFunctionReference& other) const
487  {
488  try
489  {
490  const DtLuaScriptFunctionReference& rhs =
491  dynamic_cast<const DtLuaScriptFunctionReference&>(other);
492  return myFunctionName.compare(rhs.myFunctionName) < 0;
493  }
494  catch(...)
495  {
496  DtInfo << "DtLuaScriptFunctionReference::operator< attempt to compare with wrong type.\n";
497  return false;
498  }
499  }
500 
501  protected:
502  std::string myFunctionName;
503  };
504 
507  virtual void addPostSetDataCallback(const std::string& setDataType,
508  const std::string& functionName);
511  virtual void removePostSetDataCallback(const std::string& setDataType,
512  const std::string& functionName);
513 
516  virtual void invokePostSetDataCallback(
517  DtScriptFunctionReferencePtr functionReference,
518  DtSetDataRequestMessage* setDatRequest);
519 
521  virtual void putObjectsFromTableIntoGlobalTable(lua_State* state, luabind::object& table);
522  virtual void putObjectsFromGlobalTableIntoTable(lua_State* state, luabind::object& table);
523 
524 protected:
528  virtual bool callLuaNoArgFunction(const std::string& functionName, bool* functionExists = 0);
529 
530  virtual void updateFuncCallCount();
531 
532  lua_State* myLState;
533  unsigned myFuncCallCount;
535 
536  typedef std::vector<DtLuaScriptInterfaceExtension*> LocalInterfaceExtensions;
538 
540  {
541  LuaExtension() : creator(0), onlyForEntity(0), usr(0) {};
542  LuaExtension(const LuaExtension& orig) : creator(orig.creator), onlyForEntity(orig.onlyForEntity),
543  usr(orig.usr) {};
544 
547  void* usr;
548  };
549 
550  typedef std::vector<LuaExtension> GlobalInterfaceExtensions;
551 
553 
554  luabind::object* myCheckpointStateTable;
555 
556  typedef std::map<DtString, ReaderWriterToLuaTableFcn> ReaderWriterToLuaTableMap;
558 };
559 
561 
570 namespace luaScriptInterface
571 {
572  typedef luabind::object (*rwToLuaBindObjectFcn)(
573  DtReaderWriter* rw, lua_State* L);
574 
575  luabind::object luaGetEntityParam(lua_State* L,
576  const DtScriptVrfObject& entity, std::string const& paramName);
577 
578  luabind::object luaGetSystemAttribute(
579  const DtScriptComponentSystem& system, const std::string& attributeName
580  , bool *error
581  , lua_State *L
582  );
583 
585  luabind::object luaGetContactInfo(lua_State* L, const DtScriptVrfObject& thisEntity,
586  const DtScriptVrfObject& otherEntity);
587 
592  std::list<DtScriptVrfObject> luaGetContactsWithFilter(
593  lua_State* L, const DtScriptVrfObject& entity,
594  luabind::object const& typeFilters, bool observedOnly);
595 
598  bool luaSetStateProperty(lua_State* L, const DtScriptVrfObject& entity,
599  const std::string& propertyName, luabind::object const& prop);
600 
604  bool luaSetOrAddStateProperty(lua_State* L, const DtScriptVrfObject& entity,
605  const std::string& propertyName, luabind::object const& prop, bool addIfNotFound);
606 
613  bool luaSetStatePropertyListItem(lua_State* L,
614  const DtScriptVrfObject& entity, const std::string& propertyName,
615  luabind::object const& keyValues, luabind::object const& itemValue);
616 
623  lua_State* L, const DtScriptVrfObject& entity, const std::string& propertyName,
624  int index, luabind::object const& itemValue);
625 
632  bool luaSetStatePropertyMapItem(lua_State* L,
633  const DtScriptVrfObject& entity, const std::string& propertyName,
634  luabind::object const& keyValue, luabind::object const& itemValue);
635 
640  luabind::object luaGetStateProperty(lua_State* L,
641  const DtScriptVrfObject& entity, const std::string& propertyName);
642 
651  luabind::object luaGetStatePropertyListItem(lua_State* L,
652  const DtScriptVrfObject& entity, const std::string& propertyName,
653  luabind::object const& keyValues, int& index);
654 
662  luabind::object luaGetStatePropertyListItemByIndex(lua_State* L,
663  const DtScriptVrfObject& entity, const std::string& propertyName,
664  int index);
665 
673  luabind::object luaGetStatePropertyMapItem(lua_State* L,
674  const DtScriptVrfObject& entity, const std::string& propertyName,
675  luabind::object const& keyValue);
676 
681  luabind::object luaGetParamProperty(lua_State* L,
682  const DtScriptVrfObject& entity, std::string const& paramName);
683 
692  luabind::object luaGetParameterPropertyListItem(lua_State* L,
693  const DtScriptVrfObject& entity, const std::string& propertyName,
694  luabind::object const& keyValues, int& index);
695 
703  luabind::object luaGetParameterPropertyListItemByIndex(lua_State* L,
704  const DtScriptVrfObject& entity, const std::string& propertyName,
705  int index);
706 
714  luabind::object luaGetParameterPropertyMapItem(lua_State* L,
715  const DtScriptVrfObject& entity, const std::string& propertyName,
716  luabind::object const& keyValue);
717 
719  DtScriptComponentSystem& system, const std::string& attributeName,
720  const luabind::object & value,
721  lua_State *L);
722 
723  static const std::map<DtString, rwToLuaBindObjectFcn>& rwToLuaBindObjectMap();
724 };

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)