VR-Forces 4.5 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 
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 
123  virtual int luaSendEmbeddedEntityTask(std::string eeName, std::string taskName, luabind::object const& parms);
124  virtual int luaSendEmbeddedEntityTaskActAsSubtask(std::string eeName, std::string taskName,
125  luabind::object const& parms, bool actAsSubtask);
127  virtual int luaSendEmbeddedEntitySet(std::string eeName, std::string setName, luabind::object const& parms);
129 
131 
132 
133  int luaStartSubtask(const std::string taskName, luabind::object const& parameters);
134  void luaStopSubtask(int subtaskId);
136  void luaStopAllSubtasks();
138  bool luaIsSubtaskRunning(int subtaskId);
140  bool luaIsSubtaskComplete(int subtaskId);
142  bool luaIsSubtaskCanceled(int subtaskId);
144  bool luaSubtaskResult(int subtaskId);
148  void luaCleanupInactiveSubtaskStatus();
150 
152  void luaSendReportWithoutRecipients(const::std::string reportType,
153  luabind::object const& parameters);
154  void luaSendReport(const::std::string reportType,
155  luabind::object const& reciptients,
156  luabind::object const& parameters);
157 
159  int luaSendTask(DtScriptVrfObject& object, const::std::string taskName,
160  luabind::object const& parameters);
161  int luaSendTaskActAsSubtask(DtScriptVrfObject& object, const::std::string taskName,
162  luabind::object const& parameters, bool actAsSubtask);
163 
165  void luaStopAllTasks();
166 
168  void luaSendSetDataToSelf(const::std::string setName,
169  luabind::object const& parameters);
170 
172  void luaSendSetData(DtScriptVrfObject& object, const::std::string setName,
173  luabind::object const& parameters);
174 
175  bool luaIsTaskAvailable(const::std::string taskName);
176  bool luaIsSetAvailable(const::std::string setName);
177 
179  luabind::object luaGetReactionStatus();
180 
182  std::string luaGetScriptId();
183 
185  std::string luaGetSystemName();
186 
187  luabind::object luaGetObjectsNear(const DtLocation3D& loc, double distance);
188  luabind::object luaGetObjectsNearWithFilter(const DtLocation3D& loc, double distance, luabind::object const& parameters);
189 
190  luabind::object luaGetScriptAttribute(const std::string& attributeName, bool& error);
191 
193  luabind::object luaGetVrfObjects();
194 
196 
197 
198  DtLuaFeatureSet luaGetFeaturesWithinArea(luabind::object const& points, luabind::object const& attributes);
200  DtLuaFeatureSet luaGetFeaturesWithinAreaNoAttributes(luabind::object const& points);
201 
204  DtLuaFeatureSet luaGetFeaturesWithinRange(const DtLocation3D&, double range, luabind::object const& attributes);
206  DtLuaFeatureSet luaGetFeaturesWithinRangeNoAttributes(const DtLocation3D&, double range);
207 
209  DtLuaFeatureSet luaGetFeaturesType(const std::string& type);
211  DtLuaFeatureSet luaGetFeatures();
213 
215 
216 
217  DtLuaFeatureGeometry luaMakePointGeometry(const DtLocation3D&);
219  DtLuaFeatureGeometry luaMakePathGeometry(const std::vector<DtLocation3D>&);
221  DtLuaFeatureGeometry luaMakeAreaGeometry(const std::vector<DtLocation3D>&);
223 
225  boost::shared_ptr<DtLuaAsyncJob> generateRandomPoints(const luabind::object& parameters);
226 
228  boost::shared_ptr<DtLuaAsyncJob> findNearbyPointOfInterest(const int type);
229 
231  DtTranslatableStream translateStringFromScript(const std::string& format);
232 
235  boost::shared_ptr<DtLuaAsyncJob> luaNavigateThroughFeatures(const luabind::object& parameters);
236 
237  void luaSendMessage(const DtScriptVrfObject& receiver, const std::string& message);
238  void luaDeleteObject(std::string const& receiver);
239  void luaDeleteScriptObject(const DtScriptVrfObject& receiver);
240 
241  static void textReportCallback(const DtVrfObjectMessage* m, void* usr);
242  virtual void processTextReport(const DtVrfObjectMessage* m);
243 
244  void luaSendInfluence(const DtScriptVrfObject& target,
245  const std::string& influenceName, luabind::object const& influenceParams);
246 
248  static void addReaderWriterToLuaTableFunction(const DtString&, ReaderWriterToLuaTableFcn);
249 
250 #ifdef DtHLA
251  static void influenceCallback(DtInfluenceInteraction* m, void* usr);
252  virtual void processInfluence(DtInfluenceInteraction* m);
253 #endif
254 
256  virtual void processEntityDestroyed();
257 
260  virtual void luaSetPrecipitationIntensity(DtScriptVrfObject& object, double intensity);
261  virtual void luaSetPrecipitationType(DtScriptVrfObject& object, int type);
262  virtual void luaSetCloudCover(DtScriptVrfObject& object, int state);
263  virtual void luaSetVisibilityDistance(DtScriptVrfObject& object, double distance);
264  virtual void luaSetWindDirection(DtScriptVrfObject& object, double);
265  virtual void luaSetWindSpeed(DtScriptVrfObject& object, double);
266  virtual void luaSetUnderwaterVisibility(DtScriptVrfObject& object, double visibility);
267  virtual void luaSetSurfaceTransparency(DtScriptVrfObject& object, double transparency);
268  virtual void luaSetSwellState(DtScriptVrfObject& object, unsigned int state);
269  virtual void luaSetSwellStateDirection(DtScriptVrfObject& object, double direction);
270  virtual void luaSetSeaState(DtScriptVrfObject& object, unsigned int state);
271  virtual void luaSetSeaStateDirection(DtScriptVrfObject& object, double direction);
272  virtual void luaSetWindDrivenSeaStateEnabled(DtScriptVrfObject& object, bool enabled);
273  virtual void luaSetChoppiness(DtScriptVrfObject& object, double choppiness);
274  virtual void luaSetSurgeDepth(DtScriptVrfObject& object, double depth);
275  virtual void luaSetFogHeight(DtScriptVrfObject& object, double depth);
276  virtual void luaSetFogColor(DtScriptVrfObject& object, double red, double green, double blue);
277  virtual void luaSetPriority(DtScriptVrfObject& object, int);
278 
279  virtual bool isWeatherObject(DtScriptVrfObject&) const;
280 
281 
282  virtual double luaGetAirTemperature(DtScriptVrfObject& object);
283  virtual unsigned int luaGetPrecipitation(DtScriptVrfObject& object, double*);
284  virtual double luaGetPrecipitationIntensity(DtScriptVrfObject& object);
285  virtual unsigned int luaGetPrecipitationType(DtScriptVrfObject& object);
286  virtual int luaGetCloudCover(DtScriptVrfObject& object);
287  virtual double luaGetVisibilityDistance(DtScriptVrfObject& object);
288  virtual double luaGetWindDirection(DtScriptVrfObject& object);
289  virtual double luaGetWindSpeed(DtScriptVrfObject& object);
290  virtual double luaGetUnderwaterVisibility(DtScriptVrfObject& object);
291  virtual double luaGetSurfaceTransparency(DtScriptVrfObject& object);
292  virtual unsigned int luaGetSwellState(DtScriptVrfObject& object);
293  virtual double luaGetSwellStateDirection(DtScriptVrfObject& object);
294  virtual unsigned int luaGetSeaState(DtScriptVrfObject& object);
295  virtual double luaGetSeaStateDirection(DtScriptVrfObject& object);
296  virtual bool luaGetWindDrivenSeaStateEnabled(DtScriptVrfObject& object);
297  virtual double luaGetChoppiness(DtScriptVrfObject& object);
298  virtual double luaGetSurgeDepth(DtScriptVrfObject& object);
299  virtual double luaGetFogHeight(DtScriptVrfObject& object);
300  virtual double luaGetFogHeightByLocation(const DtLocation3D& object);
301  virtual void luaGetFogColor(DtScriptVrfObject& object, double* red, double* green, double* blue);
302  virtual void luaGetFogColorByLocation(const DtLocation3D& object, double* red, double* green, double* blue);
303  virtual int luaGetPriority(DtScriptVrfObject& object);
304  virtual double luaGetIllumination(DtScriptVrfObject& object);
305 
306  virtual double luaGetAirTemperatureByLocation(const DtLocation3D& object);
307  virtual unsigned int luaGetPrecipitationByLocation(const DtLocation3D& location, double*);
308  virtual double luaGetPrecipitationIntensityByLocation(const DtLocation3D& object);
309  virtual unsigned int luaGetPrecipitationTypeByLocation(const DtLocation3D& object);
310  virtual int luaGetCloudCoverByLocation(const DtLocation3D& object);
311  virtual double luaGetVisibilityDistanceByLocation(const DtLocation3D& object);
312  virtual double luaGetWindDirectionByLocation(const DtLocation3D& object);
313  virtual double luaGetWindSpeedByLocation(const DtLocation3D& object);
314  virtual double luaGetUnderwaterVisibilityByLocation(const DtLocation3D& object);
315  virtual double luaGetSurfaceTransparencyByLocation(const DtLocation3D& object);
316  virtual unsigned int luaGetSwellStateByLocation(const DtLocation3D& object);
317  virtual double luaGetSwellStateDirectionByLocation(const DtLocation3D& object);
318  virtual unsigned int luaGetSeaStateByLocation(const DtLocation3D& object);
319  virtual double luaGetSeaStateDirectionByLocation(const DtLocation3D& object);
320  virtual bool luaGetWindDrivenSeaStateEnabledByLocation(const DtLocation3D& object);
321  virtual double luaGetChoppinessByLocation(const DtLocation3D& object);
322  virtual double luaGetSurgeDepthByLocation(const DtLocation3D& object);
323  virtual int luaGetPriorityByLocation(const DtLocation3D& object);
324  virtual double luaGetIlluminationByLocation(const DtLocation3D& object);
326 
329  virtual double luaRunDurationTime();
330  virtual void luaRunForDuration(double);
331  virtual void luaStopSimulationDurationTimer();
333 
336  virtual void luaSetCheckpointMode(bool);
337  virtual void initializeCheckpointStateTable(lua_State* L);
338 
347  virtual int luaAskUserQuestion(const DtTranslatableStream& title, const DtTranslatableStream& message,
348  luabind::object const& options, int displayFlags);
349  virtual int luaAskUserQuestionST(const std::string& title, const DtTranslatableStream& message,
350  luabind::object const& options, int displayFlags);
351  virtual int luaAskUserQuestionTS(const DtTranslatableStream& title, const std::string& message,
352  luabind::object const& options, int displayFlags);
353  virtual int luaAskUserQuestionSS(const std::string& title, const std::string& message,
354  luabind::object const& options, int displayFlags);
355 
359  virtual int luaStatusOfUserQuestion(int questionId);
360 
362  virtual void luaCancelUserQuestion(int questionId);
363 
367 
369  DtScriptVrfObject luaCreateEntity(luabind::object const& parameters);
370 
372  DtScriptVrfObject luaGetGlobalWeather();
373 
375  DtScriptVrfObject luaCreateTacticalGraphic(luabind::object const& parameters);
376 
378  DtScriptVrfObject luaCreateObstacle(luabind::object const& parameters);
379 
381  DtScriptVrfObject luaCreateRoute(luabind::object const& parameters);
382 
384  DtScriptVrfObject luaCreateArea(luabind::object const& parameters);
385 
387  DtScriptVrfObject luaCreateWaypoint(luabind::object const& parameters);
388 
390  DtScriptVrfObject luaCreatePhaseLine(luabind::object const& parameters);
392 
394  void luaCreateSelectionGroup(const std::string& name, luabind::object const& parameters);
395 
397  bool luaUpdateTaskVisualization(const std::string& visualizationName,
398  const std::string& visualizationType, luabind::object const& parameters);
399 
401  void luaDeleteTaskVisualization(const std::string& visualizationName);
402 
404  void luaRequire(lua_State* L, const std::string& filename);
405 
408  unsigned luaBitwiseOr(unsigned val1, unsigned val2);
409  unsigned luaBitwiseAnd(unsigned val1, unsigned val2);
410  unsigned luaBitwiseXor(unsigned val1, unsigned val2);
411  unsigned luaBitwiseNot(unsigned val);
412  unsigned luaBitwiseLeftShift(unsigned val, unsigned shift);
413  unsigned luaBitwiseRightShift(unsigned val, unsigned shift);
415 
416  bool luaIntersectSegments2D(const DtLocation3D& p1, const DtLocation3D& p2, const DtLocation3D& p3, const DtLocation3D& p4,
417  DtLocation3D& intersectPoint);
418 
423  {
424  public:
425  DtLuaScriptFunctionReference(const std::string& functionName)
427  , myFunctionName(functionName)
428  {
429 
430  }
431 
433  {
434 
435  }
436 
437  std::string functionName() const
438  {
439  return myFunctionName;
440  }
441 
442  virtual bool operator<(const DtScriptFunctionReference& other) const
443  {
444  try
445  {
446  const DtLuaScriptFunctionReference& rhs =
447  dynamic_cast<const DtLuaScriptFunctionReference&>(other);
448  return myFunctionName.compare(rhs.myFunctionName) < 0;
449  }
450  catch(...)
451  {
452  DtInfo << "DtLuaScriptFunctionReference::operator< attempt to compare with wrong type.\n";
453  return false;
454  }
455  }
456 
457  protected:
458  std::string myFunctionName;
459  };
460 
463  virtual void addPostSetDataCallback(const std::string& setDataType,
464  const std::string& functionName);
467  virtual void removePostSetDataCallback(const std::string& setDataType,
468  const std::string& functionName);
469 
472  virtual void invokePostSetDataCallback(
473  DtScriptFunctionReferencePtr functionReference,
474  DtSetDataRequestMessage* setDatRequest);
475 
477  virtual void putObjectsFromTableIntoGlobalTable(lua_State* state, luabind::object& table);
478  virtual void putObjectsFromGlobalTableIntoTable(lua_State* state, luabind::object& table);
479 
480 protected:
484  virtual bool callLuaNoArgFunction(const std::string& functionName, bool* functionExists = 0);
485 
486  virtual void updateFuncCallCount();
487 
488  lua_State* myLState;
489  unsigned myFuncCallCount;
491 
492  typedef std::vector<DtLuaScriptInterfaceExtension*> LocalInterfaceExtensions;
494 
496  {
497  LuaExtension() : creator(0), onlyForEntity(0), usr(0) {};
498  LuaExtension(const LuaExtension& orig) : creator(orig.creator), onlyForEntity(orig.onlyForEntity),
499  usr(orig.usr) {};
500 
503  void* usr;
504  };
505 
506  typedef std::vector<LuaExtension> GlobalInterfaceExtensions;
507 
509 
510  luabind::object* myCheckpointStateTable;
511 
512  typedef std::map<DtString, ReaderWriterToLuaTableFcn> ReaderWriterToLuaTableMap;
514 };
515 
517 
526 namespace luaScriptInterface
527 {
528  typedef luabind::object (*rwToLuaBindObjectFcn)(
529  DtReaderWriter* rw, lua_State* L);
530 
531  luabind::object luaGetEntityParam(lua_State* L,
532  const DtScriptVrfObject& entity, std::string const& paramName);
533 
534  luabind::object luaGetSystemAttribute(
535  const DtScriptComponentSystem& system, const std::string& attributeName
536  , bool *error
537  , lua_State *L
538  );
539 
541  luabind::object luaGetContactInfo(lua_State* L, const DtScriptVrfObject& thisEntity,
542  const DtScriptVrfObject& otherEntity);
543 
548  std::list<DtScriptVrfObject> luaGetContactsWithFilter(
549  lua_State* L, const DtScriptVrfObject& entity,
550  luabind::object const& typeFilters, bool observedOnly);
551 
554  bool luaSetStateProperty(lua_State* L, const DtScriptVrfObject& entity,
555  const std::string& propertyName, luabind::object const& prop);
556 
560  bool luaSetOrAddStateProperty(lua_State* L, const DtScriptVrfObject& entity,
561  const std::string& propertyName, luabind::object const& prop, bool addIfNotFound);
562 
569  bool luaSetStatePropertyListItem(lua_State* L,
570  const DtScriptVrfObject& entity, const std::string& propertyName,
571  luabind::object const& keyValues, luabind::object const& itemValue);
572 
579  lua_State* L, const DtScriptVrfObject& entity, const std::string& propertyName,
580  int index, luabind::object const& itemValue);
581 
588  bool luaSetStatePropertyMapItem(lua_State* L,
589  const DtScriptVrfObject& entity, const std::string& propertyName,
590  luabind::object const& keyValue, luabind::object const& itemValue);
591 
596  luabind::object luaGetStateProperty(lua_State* L,
597  const DtScriptVrfObject& entity, const std::string& propertyName);
598 
607  luabind::object luaGetStatePropertyListItem(lua_State* L,
608  const DtScriptVrfObject& entity, const std::string& propertyName,
609  luabind::object const& keyValues, int& index);
610 
618  luabind::object luaGetStatePropertyListItemByIndex(lua_State* L,
619  const DtScriptVrfObject& entity, const std::string& propertyName,
620  int index);
621 
629  luabind::object luaGetStatePropertyMapItem(lua_State* L,
630  const DtScriptVrfObject& entity, const std::string& propertyName,
631  luabind::object const& keyValue);
632 
637  luabind::object luaGetParamProperty(lua_State* L,
638  const DtScriptVrfObject& entity, std::string const& paramName);
639 
648  luabind::object luaGetParameterPropertyListItem(lua_State* L,
649  const DtScriptVrfObject& entity, const std::string& propertyName,
650  luabind::object const& keyValues, int& index);
651 
659  luabind::object luaGetParameterPropertyListItemByIndex(lua_State* L,
660  const DtScriptVrfObject& entity, const std::string& propertyName,
661  int index);
662 
670  luabind::object luaGetParameterPropertyMapItem(lua_State* L,
671  const DtScriptVrfObject& entity, const std::string& propertyName,
672  luabind::object const& keyValue);
673 
675  DtScriptComponentSystem& system, const std::string& attributeName,
676  const luabind::object & value,
677  lua_State *L);
678 
679  static const std::map<DtString, rwToLuaBindObjectFcn>& rwToLuaBindObjectMap();
680 };

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)