VR-Forces 4.3.1 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>
17 #include <vrfExtObjects/influenceInteractionHLA.h>
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  DtTranslatableStream translateStringFromScript(const std::string& format);
189 
192  boost::shared_ptr<DtLuaAsyncJob> luaNavigateThroughFeatures(const luabind::object& parameters);
193 
194  void luaSendMessage(const DtScriptVrfObject& receiver, const std::string& message);
195  void luaDeleteObject(std::string const& receiver);
196  void luaDeleteScriptObject(const DtScriptVrfObject& receiver);
197 
198  static void textReportCallback(const DtVrfObjectMessage* m, void* usr);
199  virtual void processTextReport(const DtVrfObjectMessage* m);
200 
201  void luaSendInfluence(const DtScriptVrfObject& target,
202  const std::string& influenceName, luabind::object const& influenceParams);
203 
204 #ifdef DtHLA
205  static void influenceCallback(DtInfluenceInteraction* m, void* usr);
206  virtual void processInfluence(DtInfluenceInteraction* m);
207 #endif
208 
210  virtual void processEntityDestroyed();
211 
214  virtual void luaSetPrecipitationIntensity(DtScriptVrfObject& object, double intensity);
215  virtual void luaSetPrecipitationType(DtScriptVrfObject& object, int type);
216  virtual void luaSetCloudCover(DtScriptVrfObject& object, int state);
217  virtual void luaSetVisibilityDistance(DtScriptVrfObject& object, double distance);
218  virtual void luaSetWindDirection(DtScriptVrfObject& object, double);
219  virtual void luaSetWindSpeed(DtScriptVrfObject& object, double);
220  virtual void luaSetUnderwaterVisibility(DtScriptVrfObject& object, double visibility);
221  virtual void luaSetSurfaceTransparency(DtScriptVrfObject& object, double transparency);
222  virtual void luaSetSwellState(DtScriptVrfObject& object, unsigned int state);
223  virtual void luaSetSwellStateDirection(DtScriptVrfObject& object, double direction);
224  virtual void luaSetSeaState(DtScriptVrfObject& object, unsigned int state);
225  virtual void luaSetSeaStateDirection(DtScriptVrfObject& object, double direction);
226  virtual void luaSetWindDrivenSeaStateEnabled(DtScriptVrfObject& object, bool enabled);
227  virtual void luaSetChoppiness(DtScriptVrfObject& object, double choppiness);
228  virtual void luaSetSurgeDepth(DtScriptVrfObject& object, double depth);
229  virtual void luaSetPriority(DtScriptVrfObject& object, int);
230 
231  virtual bool isWeatherObject(DtScriptVrfObject&) const;
232 
233 
234  virtual unsigned int luaGetPrecipitation(DtScriptVrfObject& object, double*);
235  virtual double luaGetPrecipitationIntensity(DtScriptVrfObject& object);
236  virtual unsigned int luaGetPrecipitationType(DtScriptVrfObject& object);
237  virtual int luaGetCloudCover(DtScriptVrfObject& object);
238  virtual double luaGetVisibilityDistance(DtScriptVrfObject& object);
239  virtual double luaGetWindDirection(DtScriptVrfObject& object);
240  virtual double luaGetWindSpeed(DtScriptVrfObject& object);
241  virtual double luaGetUnderwaterVisibility(DtScriptVrfObject& object);
242  virtual double luaGetSurfaceTransparency(DtScriptVrfObject& object);
243  virtual unsigned int luaGetSwellState(DtScriptVrfObject& object);
244  virtual double luaGetSwellStateDirection(DtScriptVrfObject& object);
245  virtual unsigned int luaGetSeaState(DtScriptVrfObject& object);
246  virtual double luaGetSeaStateDirection(DtScriptVrfObject& object);
247  virtual bool luaGetWindDrivenSeaStateEnabled(DtScriptVrfObject& object);
248  virtual double luaGetChoppiness(DtScriptVrfObject& object);
249  virtual double luaGetSurgeDepth(DtScriptVrfObject& object);
250  virtual int luaGetPriority(DtScriptVrfObject& object);
251  virtual double luaGetIllumination(DtScriptVrfObject& object);
252 
253  virtual unsigned int luaGetPrecipitationByLocation(const DtLocation3D& location, double*);
254  virtual double luaGetPrecipitationIntensityByLocation(const DtLocation3D& object);
255  virtual unsigned int luaGetPrecipitationTypeByLocation(const DtLocation3D& object);
256  virtual int luaGetCloudCoverByLocation(const DtLocation3D& object);
257  virtual double luaGetVisibilityDistanceByLocation(const DtLocation3D& object);
258  virtual double luaGetWindDirectionByLocation(const DtLocation3D& object);
259  virtual double luaGetWindSpeedByLocation(const DtLocation3D& object);
260  virtual double luaGetUnderwaterVisibilityByLocation(const DtLocation3D& object);
261  virtual double luaGetSurfaceTransparencyByLocation(const DtLocation3D& object);
262  virtual unsigned int luaGetSwellStateByLocation(const DtLocation3D& object);
263  virtual double luaGetSwellStateDirectionByLocation(const DtLocation3D& object);
264  virtual unsigned int luaGetSeaStateByLocation(const DtLocation3D& object);
265  virtual double luaGetSeaStateDirectionByLocation(const DtLocation3D& object);
266  virtual bool luaGetWindDrivenSeaStateEnabledByLocation(const DtLocation3D& object);
267  virtual double luaGetChoppinessByLocation(const DtLocation3D& object);
268  virtual double luaGetSurgeDepthByLocation(const DtLocation3D& object);
269  virtual int luaGetPriorityByLocation(const DtLocation3D& object);
270  virtual double luaGetIlluminationByLocation(const DtLocation3D& object);
272 
275  virtual double luaRunDurationTime();
276  virtual void luaRunForDuration(double);
277  virtual void luaStopSimulationDurationTimer();
279 
288  virtual int luaAskUserQuestion(const DtTranslatableStream& title, const DtTranslatableStream& message,
289  luabind::object const& options, int displayFlags);
290  virtual int luaAskUserQuestionST(const std::string& title, const DtTranslatableStream& message,
291  luabind::object const& options, int displayFlags);
292  virtual int luaAskUserQuestionTS(const DtTranslatableStream& title, const std::string& message,
293  luabind::object const& options, int displayFlags);
294  virtual int luaAskUserQuestionSS(const std::string& title, const std::string& message,
295  luabind::object const& options, int displayFlags);
296 
300  virtual int luaStatusOfUserQuestion(int questionId);
301 
303  virtual void luaCancelUserQuestion(int questionId);
304 
308 
310  DtScriptVrfObject luaCreateEntity(luabind::object const& parameters);
311 
313  DtScriptVrfObject luaGetGlobalWeather();
314 
316  DtScriptVrfObject luaCreateTacticalGraphic(luabind::object const& parameters);
317 
319  DtScriptVrfObject luaCreateObstacle(luabind::object const& parameters);
320 
322  DtScriptVrfObject luaCreateRoute(luabind::object const& parameters);
323 
325  DtScriptVrfObject luaCreateArea(luabind::object const& parameters);
326 
328  DtScriptVrfObject luaCreateWaypoint(luabind::object const& parameters);
329 
331  DtScriptVrfObject luaCreatePhaseLine(luabind::object const& parameters);
333 
336 
337  unsigned luaBitwiseOr(unsigned val1, unsigned val2);
338  unsigned luaBitwiseAnd(unsigned val1, unsigned val2);
339  unsigned luaBitwiseXor(unsigned val1, unsigned val2);
340  unsigned luaBitwiseNot(unsigned val);
341  unsigned luaBitwiseLeftShift(unsigned val, unsigned shift);
342  unsigned luaBitwiseRightShift(unsigned val, unsigned shift);
343 
345 
350  {
351  public:
352  DtLuaScriptFunctionReference(const std::string& functionName)
354  , myFunctionName(functionName)
355  {
356 
357  }
358 
360  {
361 
362  }
363 
364  std::string functionName() const
365  {
366  return myFunctionName;
367  }
368 
369  virtual bool operator<(const DtScriptFunctionReference& other) const
370  {
371  try
372  {
373  const DtLuaScriptFunctionReference& rhs =
374  dynamic_cast<const DtLuaScriptFunctionReference&>(other);
375  return myFunctionName.compare(rhs.myFunctionName) < 0;
376  }
377  catch(...)
378  {
379  DtInfo << "DtLuaScriptFunctionReference::operator< attempt to compare with wrong type.\n";
380  return false;
381  }
382  }
383 
384  protected:
385  std::string myFunctionName;
386  };
387 
390  virtual void addPostSetDataCallback(const std::string& setDataType,
391  const std::string& functionName);
394  virtual void removePostSetDataCallback(const std::string& setDataType,
395  const std::string& functionName);
396 
399  virtual void invokePostSetDataCallback(
400  DtScriptFunctionReferencePtr functionReference,
401  DtSetDataRequestMessage* setDatRequest);
402 
403 protected:
404  virtual bool callLuaNoArgFunction(const std::string& functionName);
405 
406  virtual void updateFuncCallCount();
407 
408  lua_State* myLState;
409  unsigned myFuncCallCount;
411 
412  typedef std::vector<DtLuaScriptInterfaceExtension*> LocalInterfaceExtensions;
414 
416  {
417  LuaExtension() : creator(0), onlyForEntity(0), usr(0) {};
418  LuaExtension(const LuaExtension& orig) : creator(orig.creator), onlyForEntity(orig.onlyForEntity),
419  usr(orig.usr) {};
420 
423  void* usr;
424  };
425 
426  typedef std::vector<LuaExtension> GlobalInterfaceExtensions;
427 
429 };
430 
432 
434 //
439 //
441 namespace luaScriptInterface
442 {
443  typedef luabind::object (*rwToLuaBindObjectFcn)(
444  DtReaderWriter* rw, lua_State* L);
445 
446  luabind::object luaGetEntityParam(lua_State* L,
447  const DtScriptVrfObject& entity, std::string const& paramName);
448 
449  luabind::object luaGetSystemAttribute(
450  const DtScriptComponentSystem& system, const std::string& attributeName
451  , bool *error
452  , lua_State *L
453  );
454 
456  luabind::object luaGetContactInfo(lua_State* L, const DtScriptVrfObject& thisEntity,
457  const DtScriptVrfObject& otherEntity);
458 
463  std::list<DtScriptVrfObject> luaGetContactsWithFilter(
464  lua_State* L, const DtScriptVrfObject& entity,
465  luabind::object const& typeFilters, bool observedOnly);
466 
469  bool luaSetStateProperty(lua_State* L, const DtScriptVrfObject& entity,
470  const std::string& propertyName, luabind::object const& prop);
471 
478  bool luaSetStatePropertyListItem(lua_State* L,
479  const DtScriptVrfObject& entity, const std::string& propertyName,
480  luabind::object const& keyValues, luabind::object const& itemValue);
481 
488  bool luaSetStatePropertyMapItem(lua_State* L,
489  const DtScriptVrfObject& entity, const std::string& propertyName,
490  luabind::object const& keyValue, luabind::object const& itemValue);
491 
496  luabind::object luaGetStateProperty(lua_State* L,
497  const DtScriptVrfObject& entity, const std::string& propertyName);
498 
506  luabind::object luaGetStatePropertyListItem(lua_State* L,
507  const DtScriptVrfObject& entity, const std::string& propertyName,
508  luabind::object const& keyValues);
509 
517  luabind::object luaGetStatePropertyMapItem(lua_State* L,
518  const DtScriptVrfObject& entity, const std::string& propertyName,
519  luabind::object const& keyValue);
520 
525  luabind::object luaGetParamProperty(lua_State* L,
526  const DtScriptVrfObject& entity, std::string const& paramName);
527 
535  luabind::object luaGetParameterPropertyListItem(lua_State* L,
536  const DtScriptVrfObject& entity, const std::string& propertyName,
537  luabind::object const& keyValues);
538 
546  luabind::object luaGetParameterPropertyMapItem(lua_State* L,
547  const DtScriptVrfObject& entity, const std::string& propertyName,
548  luabind::object const& keyValue);
549 
551  DtScriptComponentSystem& system, const std::string& attributeName,
552  const luabind::object & value,
553  lua_State *L);
554 
555  static const std::map<DtString, rwToLuaBindObjectFcn>& rwToLuaBindObjectMap();
556 };

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)