TDME2  1.9.200
EngineMiniScript.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <span>
4 #include <string>
5 #include <unordered_map>
6 #include <unordered_set>
7 #include <vector>
8 
9 #include <miniscript/miniscript/MiniScript.h>
10 
11 #include <tdme/tdme.h>
12 #include <tdme/engine/Transform.h>
13 #include <tdme/math/Matrix3x3.h>
14 #include <tdme/math/Matrix4x4.h>
15 #include <tdme/math/Matrix4x4.h>
16 #include <tdme/math/Quaternion.h>
17 #include <tdme/math/Vector2.h>
18 #include <tdme/math/Vector3.h>
19 #include <tdme/math/Vector4.h>
29 
30 using std::span;
31 using std::string;
32 using std::unordered_map;
33 using std::unordered_set;
34 using std::vector;
35 
36 using miniscript::miniscript::MiniScript;
37 
54 
56 
57 /**
58  * Engine MiniScript
59  * @author Andreas Drewke
60  */
61 class tdme::utilities::EngineMiniScript: public MiniScript {
62 public:
63  // forbid class copy
65 
66  // custom data types, which needs to be created in this particular order
67  // we could also read the types dynamically, but this works for now :)
68  static constexpr ScriptVariableType TYPE_TRANSFORM { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES) };
69  static constexpr ScriptVariableType TYPE_MATRIX4x4 { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES + 1) };
70  static constexpr ScriptVariableType TYPE_MATRIX3x3 { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES + 2) };
71  static constexpr ScriptVariableType TYPE_QUATERNION { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES + 3) };
72  static constexpr ScriptVariableType TYPE_VECTOR2 { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES + 4) };
73  static constexpr ScriptVariableType TYPE_VECTOR3 { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES + 5) };
74  static constexpr ScriptVariableType TYPE_VECTOR4 { static_cast<ScriptVariableType>(ScriptVariableType::TYPE_PSEUDO_CUSTOM_DATATYPES + 6) };
75 
76  /**
77  * Register data types
78  */
79  static void registerDataTypes();
80 
81  /**
82  * Load script
83  * @param pathName path name
84  * @param fileName file name
85  */
86  static EngineMiniScript* loadScript(const string& pathName, const string& fileName);
87 
88  /**
89  * Public constructor
90  */
92 
93  // overridden methods
94  const string getBaseClass();
95  const vector<string> getTranspilationUnits();
96 
97  /**
98  * Get vector2 value from given variable
99  * @param arguments arguments
100  * @param idx argument index
101  * @param value value
102  * @param optional optional
103  * @return success
104  */
105  inline bool getVector2Value(const span<ScriptVariable>& arguments, int idx, Vector2& value, bool optional = false) {
106  return MiniScriptVector2::getVector2Value(TYPE_VECTOR2, arguments, idx, value, optional);
107  }
108 
109  /**
110  * Get vector3 value from given variable
111  * @param arguments arguments
112  * @param idx argument index
113  * @param value value
114  * @param optional optional
115  * @return success
116  */
117  inline bool getVector3Value(const span<ScriptVariable>& arguments, int idx, Vector3& value, bool optional = false) {
118  return MiniScriptVector3::getVector3Value(TYPE_VECTOR3, arguments, idx, value, optional);
119  }
120 
121  /**
122  * Get vector4 value from given variable
123  * @param arguments arguments
124  * @param idx argument index
125  * @param value value
126  * @param optional optional
127  * @return success
128  */
129  inline bool getVector4Value(const span<ScriptVariable>& arguments, int idx, Vector4& value, bool optional = false) {
130  return MiniScriptVector4::getVector4Value(TYPE_VECTOR4, arguments, idx, value, optional);
131  }
132 
133  /**
134  * Get vector4 value from given variable
135  * @param arguments arguments
136  * @param idx argument index
137  * @param value value
138  * @param optional optional
139  * @return success
140  */
141  inline static bool getQuaternionValue(const span<ScriptVariable>& arguments, int idx, Quaternion& value, bool optional = false) {
142  return MiniScriptQuaternion::getQuaternionValue(TYPE_QUATERNION, arguments, idx, value, optional);
143  }
144 
145  /**
146  * Get matrix3x3 value from given variable
147  * @param arguments arguments
148  * @param idx argument index
149  * @param value value
150  * @param optional optional
151  * @return success
152  */
153  inline static bool getMatrix3x3Value(const span<ScriptVariable>& arguments, int idx, Matrix3x3& value, bool optional = false) {
154  return MiniScriptMatrix3x3::getMatrix3x3Value(TYPE_MATRIX3x3, arguments, idx, value, optional);
155  }
156 
157  /**
158  * Get matrix4x4 value from given variable
159  * @param arguments arguments
160  * @param idx argument index
161  * @param value value
162  * @param optional optional
163  * @return success
164  */
165  inline static bool getMatrix4x4Value(const span<ScriptVariable>& arguments, int idx, Matrix4x4& value, bool optional = false) {
166  return MiniScriptMatrix4x4::getMatrix4x4Value(TYPE_MATRIX4x4, arguments, idx, value, optional);
167  }
168 
169  /**
170  * Get transform value from given variable
171  * @param arguments arguments
172  * @param idx argument index
173  * @param value value
174  * @param optional optional
175  * @return success
176  */
177  inline static bool getTransformValue(const span<ScriptVariable>& arguments, int idx, Transform& value, bool optional = false) {
178  return MiniScriptTransform::getTransformValue(TYPE_TRANSFORM, arguments, idx, value, optional);
179  }
180 
181  /**
182  * Set boolean value from given value into variable
183  * @param variable variable
184  * @param value value
185  */
186  inline void setValue(ScriptVariable& variable, bool value) {
187  variable.setValue(value);
188  }
189 
190  /**
191  * Set integer value from given value into variable
192  * @param variable variable
193  * @param value value
194  */
195  inline void setValue(ScriptVariable& variable, int64_t value) {
196  variable.setValue(value);
197  }
198 
199  /**
200  * Set float value from given value into variable
201  * @param variable variable
202  * @param value value
203  */
204  inline void setValue(ScriptVariable& variable, float value) {
205  variable.setValue(value);
206  }
207 
208  /**
209  * Set string value from given value into variable
210  * @param variable variable
211  * @param value value
212  */
213  inline void setValue(ScriptVariable& variable, const string& value) {
214  variable.setValue(value);
215  }
216 
217  /**
218  * Set array value from given value into variable
219  * @param variable variable
220  * @param value value
221  */
222  inline void setValue(ScriptVariable& variable, const vector<ScriptVariable*>& value) {
223  variable.setValue(value);
224  }
225 
226  /**
227  * Set map value from given value into variable
228  * @param variable variable
229  * @param value value
230  */
231  inline void setValue(ScriptVariable& variable, const unordered_map<string, ScriptVariable*>& value) {
232  variable.setValue(value);
233  }
234 
235  /**
236  * Set set value from given value into variable
237  * @param variable variable
238  * @param value value
239  */
240  inline void setValue(ScriptVariable& variable, const unordered_set<string>& value) {
241  variable.setValue(value);
242  }
243 
244  /**
245  * Set vector2 value from given value into variable
246  * @param variable variable
247  * @param value value
248  */
249  inline void setValue(ScriptVariable& variable, const Vector2& value) {
250  variable.setType(TYPE_VECTOR2);
251  variable.setValue(&value);
252  }
253 
254  /**
255  * Set vector3 value from given value into variable
256  * @param variable variable
257  * @param value value
258  */
259  inline void setValue(ScriptVariable& variable, const Vector3& value) {
260  variable.setType(TYPE_VECTOR3);
261  variable.setValue(&value);
262  }
263 
264  /**
265  * Set vector3 value from given value into variable
266  * @param variable variable
267  * @param value value
268  */
269  inline void setValue(ScriptVariable& variable, const Vector4& value) {
270  variable.setType(TYPE_VECTOR4);
271  variable.setValue(&value);
272  }
273 
274  /**
275  * Set vector3 value from given value into variable
276  * @param value value
277  */
278  inline void setValue(ScriptVariable& variable, const Quaternion& value) {
279  variable.setType(TYPE_QUATERNION);
280  variable.setValue(&value);
281  }
282 
283  /**
284  * Set matrix3x3 value from given value into variable
285  * @param variable variable
286  * @param value value
287  */
288  inline void setValue(ScriptVariable& variable, const Matrix3x3& value) {
289  variable.setType(TYPE_MATRIX3x3);
290  variable.setValue(&value);
291  }
292 
293  /**
294  * Set matrix4x4 value from given value into variable
295  * @param variable variable
296  * @param value value
297  */
298  inline void setValue(ScriptVariable& variable, const Matrix4x4& value) {
299  variable.setType(TYPE_MATRIX4x4);
300  variable.setValue(&value);
301  }
302 
303  /**
304  * Set transform value from given value into variable
305  * @param variable variable
306  * @param value value
307  */
308  inline void setValue(ScriptVariable& variable, const Transform& value) {
309  variable.setType(TYPE_TRANSFORM);
310  variable.setValue(&value);
311  }
312 
313 };
Transform which contain scale, rotations and translation.
Definition: Transform.h:29
Matrix3x3 class representing matrix3x3 mathematical structure and operations for 2d space.
Definition: Matrix3x3.h:20
Matrix4x4 class representing matrix4x4 mathematical structure and operations for 3d space.
Definition: Matrix4x4.h:23
Quaternion class representing quaternion mathematical structure and operations with x,...
Definition: Quaternion.h:24
Vector2 class representing vector2 mathematical structure and operations with x, y components.
Definition: Vector2.h:20
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20
Vector4 class representing vector4 mathematical structure and operations with x, y,...
Definition: Vector4.h:22
Console class.
Definition: Console.h:29
static constexpr ScriptVariableType TYPE_MATRIX4x4
void setValue(ScriptVariable &variable, float value)
Set float value from given value into variable.
void setValue(ScriptVariable &variable, const vector< ScriptVariable * > &value)
Set array value from given value into variable.
static bool getMatrix3x3Value(const span< ScriptVariable > &arguments, int idx, Matrix3x3 &value, bool optional=false)
Get matrix3x3 value from given variable.
void setValue(ScriptVariable &variable, const Matrix4x4 &value)
Set matrix4x4 value from given value into variable.
bool getVector2Value(const span< ScriptVariable > &arguments, int idx, Vector2 &value, bool optional=false)
Get vector2 value from given variable.
void setValue(ScriptVariable &variable, const Vector3 &value)
Set vector3 value from given value into variable.
void setValue(ScriptVariable &variable, const Vector2 &value)
Set vector2 value from given value into variable.
void setValue(ScriptVariable &variable, int64_t value)
Set integer value from given value into variable.
static constexpr ScriptVariableType TYPE_QUATERNION
static constexpr ScriptVariableType TYPE_TRANSFORM
static constexpr ScriptVariableType TYPE_VECTOR3
static bool getTransformValue(const span< ScriptVariable > &arguments, int idx, Transform &value, bool optional=false)
Get transform value from given variable.
static void registerDataTypes()
Register data types.
void setValue(ScriptVariable &variable, const Vector4 &value)
Set vector3 value from given value into variable.
static constexpr ScriptVariableType TYPE_VECTOR2
void setValue(ScriptVariable &variable, const Quaternion &value)
Set vector3 value from given value into variable.
const vector< string > getTranspilationUnits()
bool getVector4Value(const span< ScriptVariable > &arguments, int idx, Vector4 &value, bool optional=false)
Get vector4 value from given variable.
void setValue(ScriptVariable &variable, const string &value)
Set string value from given value into variable.
static bool getQuaternionValue(const span< ScriptVariable > &arguments, int idx, Quaternion &value, bool optional=false)
Get vector4 value from given variable.
bool getVector3Value(const span< ScriptVariable > &arguments, int idx, Vector3 &value, bool optional=false)
Get vector3 value from given variable.
void setValue(ScriptVariable &variable, bool value)
Set boolean value from given value into variable.
static constexpr ScriptVariableType TYPE_MATRIX3x3
void setValue(ScriptVariable &variable, const unordered_map< string, ScriptVariable * > &value)
Set map value from given value into variable.
static bool getMatrix4x4Value(const span< ScriptVariable > &arguments, int idx, Matrix4x4 &value, bool optional=false)
Get matrix4x4 value from given variable.
static constexpr ScriptVariableType TYPE_VECTOR4
void setValue(ScriptVariable &variable, const unordered_set< string > &value)
Set set value from given value into variable.
void setValue(ScriptVariable &variable, const Transform &value)
Set transform value from given value into variable.
void setValue(ScriptVariable &variable, const Matrix3x3 &value)
Set matrix3x3 value from given value into variable.
static EngineMiniScript * loadScript(const string &pathName, const string &fileName)
Load script.
MiniScript Matrix3x3 data type.
static bool getMatrix3x3Value(MiniScript::ScriptVariableType TYPE_MATRIX3x3, const span< MiniScript::ScriptVariable > &arguments, int idx, Matrix3x3 &value, bool optional=false)
Get matrix3x3 value from given variable.
MiniScript Matrix4x4 data type.
static bool getMatrix4x4Value(MiniScript::ScriptVariableType TYPE_MATRIX4x4, const span< MiniScript::ScriptVariable > &arguments, int idx, Matrix4x4 &value, bool optional=false)
Get matrix4x4 value from given variable.
MiniScript Quaternion data type.
static bool getQuaternionValue(MiniScript::ScriptVariableType TYPE_QUATERNION, const span< MiniScript::ScriptVariable > &arguments, int idx, Quaternion &value, bool optional=false)
Get quaternion value from given variable.
MiniScript Transform data type.
static bool getTransformValue(MiniScript::ScriptVariableType TYPE_TRANSFORM, const span< MiniScript::ScriptVariable > &arguments, int idx, Transform &value, bool optional=false)
Get quaternion value from given variable.
MiniScript Vector2 data type.
static bool getVector2Value(MiniScript::ScriptVariableType TYPE_VECTOR2, const span< MiniScript::ScriptVariable > &arguments, int idx, Vector2 &value, bool optional=false)
Get vector2 value from given variable.
MiniScript Vector3 data type.
static bool getVector3Value(MiniScript::ScriptVariableType TYPE_VECTOR3, const span< MiniScript::ScriptVariable > &arguments, int idx, Vector3 &value, bool optional=false)
Get vector3 value from given variable.
MiniScript Vector4 data type.
static bool getVector4Value(MiniScript::ScriptVariableType TYPE_VECTOR4, const span< MiniScript::ScriptVariable > &arguments, int idx, Vector4 &value, bool optional=false)
Get vector4 value from given variable.
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6