TDME2  1.9.200
MiniScriptVector4.cpp
Go to the documentation of this file.
1 #include <span>
2 #include <string>
3 
4 #include <miniscript/miniscript/MiniScript.h>
5 
6 #include <tdme/tdme.h>
7 #include <tdme/math/Vector4.h>
9 #include <tdme/utilities/Float.h>
11 
12 using std::span;
13 using std::string;
14 
15 using miniscript::miniscript::MiniScript;
16 
21 
22 const string MiniScriptVector4::CLASS_NAME = "vec4";
23 const string MiniScriptVector4::TYPE_NAME = "Vector4";
24 
25 void MiniScriptVector4::registerMethods(MiniScript* miniScript) const {
26  const auto TYPE_VECTOR4 = static_cast<MiniScript::ScriptVariableType>(getType());
27  {
28  //
29  class ScriptMethodVec4: public MiniScript::ScriptMethod {
30  private:
31  MiniScript* miniScript { nullptr };
32  MiniScript::ScriptVariableType TYPE_VECTOR4;
33  public:
34  ScriptMethodVec4(
35  MiniScript* miniScript,
36  MiniScript::ScriptVariableType TYPE_VECTOR4
37  ):
38  MiniScript::ScriptMethod(
39  {
40  { .type = MiniScript::ScriptVariableType::TYPE_FLOAT, .name = "x", .optional = false, .reference = false, .nullable = false },
41  { .type = MiniScript::ScriptVariableType::TYPE_FLOAT, .name = "y", .optional = false, .reference = false, .nullable = false },
42  { .type = MiniScript::ScriptVariableType::TYPE_FLOAT, .name = "z", .optional = false, .reference = false, .nullable = false },
43  { .type = MiniScript::ScriptVariableType::TYPE_FLOAT, .name = "w", .optional = false, .reference = false, .nullable = false }
44  },
45  TYPE_VECTOR4
46  ),
47  miniScript(miniScript),
48  TYPE_VECTOR4(TYPE_VECTOR4) {
49  //
50  }
51 
52  const string getMethodName() override {
53  return "vec4";
54  }
55  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
56  Vector3 result;
57  float xValue;
58  float yValue;
59  float zValue;
60  float wValue;
61  if (MiniScript::getFloatValue(argumentValues, 0, xValue, false) == true &&
62  MiniScript::getFloatValue(argumentValues, 1, yValue, false) == true &&
63  MiniScript::getFloatValue(argumentValues, 2, zValue, false) == true &&
64  MiniScript::getFloatValue(argumentValues, 3, wValue, false) == true) {
65  auto result = Vector4(xValue, yValue, zValue, wValue);
66  returnValue.setType(TYPE_VECTOR4);
67  returnValue.setValue(&result);
68  } else {
69  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
70  miniScript->startErrorScript();
71  }
72  }
73  };
74  miniScript->registerMethod(new ScriptMethodVec4(miniScript, TYPE_VECTOR4));
75  }
76  {
77  //
78  class ScriptMethodVec4ComputeLength: public MiniScript::ScriptMethod {
79  private:
80  MiniScript* miniScript { nullptr };
81  MiniScript::ScriptVariableType TYPE_VECTOR4;
82  public:
83  ScriptMethodVec4ComputeLength(
84  MiniScript* miniScript,
85  MiniScript::ScriptVariableType TYPE_VECTOR4
86  ):
87  MiniScript::ScriptMethod(
88  {
89  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false }
90  },
91  MiniScript::ScriptVariableType::TYPE_FLOAT
92  ),
93  miniScript(miniScript),
94  TYPE_VECTOR4(TYPE_VECTOR4) {
95  //
96  }
97  const string getMethodName() override {
98  return "vec4.computeLength";
99  }
100  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
101  Vector4 vec4;
102  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
103  auto length = vec4.computeLength();
104  returnValue.setValue(Float::isInfinite(length) == true || Float::isNaN(length) == true?0.0f:length);
105  } else {
106  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
107  miniScript->startErrorScript();
108  }
109  }
110  };
111  miniScript->registerMethod(new ScriptMethodVec4ComputeLength(miniScript, TYPE_VECTOR4));
112  }
113  {
114  //
115  class ScriptMethodVec4ComputeLengthSquared: public MiniScript::ScriptMethod {
116  private:
117  MiniScript* miniScript { nullptr };
118  MiniScript::ScriptVariableType TYPE_VECTOR4;
119  public:
120  ScriptMethodVec4ComputeLengthSquared(
121  MiniScript* miniScript,
122  MiniScript::ScriptVariableType TYPE_VECTOR4
123  ):
124  MiniScript::ScriptMethod(
125  {
126  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false }
127  },
128  MiniScript::ScriptVariableType::TYPE_FLOAT
129  ),
130  miniScript(miniScript),
131  TYPE_VECTOR4(TYPE_VECTOR4) {
132  //
133  }
134  const string getMethodName() override {
135  return "vec4.computeLengthSquared";
136  }
137  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
138  Vector4 vec4;
139  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
140  returnValue.setValue(vec4.computeLengthSquared());
141  } else {
142  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
143  miniScript->startErrorScript();
144  }
145  }
146  };
147  miniScript->registerMethod(new ScriptMethodVec4ComputeLengthSquared(miniScript, TYPE_VECTOR4));
148  }
149  {
150  //
151  class ScriptMethodVec4ComputeDotProduct: public MiniScript::ScriptMethod {
152  private:
153  MiniScript* miniScript { nullptr };
154  MiniScript::ScriptVariableType TYPE_VECTOR4;
155  public:
156  ScriptMethodVec4ComputeDotProduct(
157  MiniScript* miniScript,
158  MiniScript::ScriptVariableType TYPE_VECTOR4
159  ):
160  MiniScript::ScriptMethod(
161  {
162  { .type = TYPE_VECTOR4, .name = "a", .optional = false, .reference = false, .nullable = false },
163  { .type = TYPE_VECTOR4, .name = "b", .optional = false, .reference = false, .nullable = false }
164  },
165  MiniScript::ScriptVariableType::TYPE_FLOAT
166  ),
167  miniScript(miniScript),
168  TYPE_VECTOR4(TYPE_VECTOR4) {
169  //
170  }
171  const string getMethodName() override {
172  return "vec4.computeDotProduct";
173  }
174  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
175  Vector4 a;
176  Vector4 b;
177  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, a, false) == true &&
178  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 1, b, false) == true) {
179  returnValue.setValue(Vector4::computeDotProduct(a, b));
180  } else {
181  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
182  miniScript->startErrorScript();
183  }
184  }
185  };
186  miniScript->registerMethod(new ScriptMethodVec4ComputeDotProduct(miniScript, TYPE_VECTOR4));
187  }
188  {
189  //
190  class ScriptMethodVec4Normalize: public MiniScript::ScriptMethod {
191  private:
192  MiniScript* miniScript { nullptr };
193  MiniScript::ScriptVariableType TYPE_VECTOR4;
194  public:
195  ScriptMethodVec4Normalize(
196  MiniScript* miniScript,
197  MiniScript::ScriptVariableType TYPE_VECTOR4
198  ):
199  MiniScript::ScriptMethod(
200  {
201  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false },
202  },
203  TYPE_VECTOR4
204  ),
205  miniScript(miniScript),
206  TYPE_VECTOR4(TYPE_VECTOR4) {
207  //
208  }
209  const string getMethodName() override {
210  return "vec4.normalize";
211  }
212  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
213  Vector4 vec4;
214  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
215  auto length = vec4.computeLength();
216  auto result = length < Math::EPSILON || Float::isInfinite(length) == true || Float::isNaN(length) == true?Vector4(0.0f, 0.0f, 0.0f, 0.0f):vec4.normalize();
217  returnValue.setType(TYPE_VECTOR4);
218  returnValue.setValue(&result);
219  } else {
220  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
221  miniScript->startErrorScript();
222  }
223  }
224  };
225  miniScript->registerMethod(new ScriptMethodVec4Normalize(miniScript, TYPE_VECTOR4));
226  }
227  {
228  //
229  class ScriptMethodVec4GetX: public MiniScript::ScriptMethod {
230  private:
231  MiniScript* miniScript { nullptr };
232  MiniScript::ScriptVariableType TYPE_VECTOR4;
233  public:
234  ScriptMethodVec4GetX(
235  MiniScript* miniScript,
236  MiniScript::ScriptVariableType TYPE_VECTOR4
237  ):
238  MiniScript::ScriptMethod(
239  {
240  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false },
241  },
242  MiniScript::ScriptVariableType::TYPE_FLOAT
243  ),
244  miniScript(miniScript),
245  TYPE_VECTOR4(TYPE_VECTOR4) {
246  //
247  }
248  const string getMethodName() override {
249  return "vec4.getX";
250  }
251  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
252  Vector4 vec4;
253  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
254  returnValue.setValue(vec4.getX());
255  } else {
256  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
257  miniScript->startErrorScript();
258  }
259  }
260  };
261  miniScript->registerMethod(new ScriptMethodVec4GetX(miniScript, TYPE_VECTOR4));
262  }
263  {
264  //
265  class ScriptMethodVec4GetY: public MiniScript::ScriptMethod {
266  private:
267  MiniScript* miniScript { nullptr };
268  MiniScript::ScriptVariableType TYPE_VECTOR4;
269  public:
270  ScriptMethodVec4GetY(
271  MiniScript* miniScript,
272  MiniScript::ScriptVariableType TYPE_VECTOR4
273  ):
274  MiniScript::ScriptMethod(
275  {
276  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false },
277  },
278  MiniScript::ScriptVariableType::TYPE_FLOAT
279  ),
280  miniScript(miniScript),
281  TYPE_VECTOR4(TYPE_VECTOR4) {
282  //
283  }
284  const string getMethodName() override {
285  return "vec4.getY";
286  }
287  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
288  Vector4 vec4;
289  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
290  returnValue.setValue(vec4.getY());
291  } else {
292  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
293  miniScript->startErrorScript();
294  }
295  }
296  };
297  miniScript->registerMethod(new ScriptMethodVec4GetY(miniScript, TYPE_VECTOR4));
298  }
299  {
300  //
301  class ScriptMethodVec4GetZ: public MiniScript::ScriptMethod {
302  private:
303  MiniScript* miniScript { nullptr };
304  MiniScript::ScriptVariableType TYPE_VECTOR4;
305  public:
306  ScriptMethodVec4GetZ(
307  MiniScript* miniScript,
308  MiniScript::ScriptVariableType TYPE_VECTOR4
309  ):
310  MiniScript::ScriptMethod(
311  {
312  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false },
313  },
314  MiniScript::ScriptVariableType::TYPE_FLOAT
315  ),
316  miniScript(miniScript),
317  TYPE_VECTOR4(TYPE_VECTOR4) {
318  //
319  }
320  const string getMethodName() override {
321  return "vec4.getZ";
322  }
323  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
324  Vector4 vec4;
325  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
326  returnValue.setValue(vec4.getZ());
327  } else {
328  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
329  miniScript->startErrorScript();
330  }
331  }
332  };
333  miniScript->registerMethod(new ScriptMethodVec4GetZ(miniScript, TYPE_VECTOR4));
334  }
335  {
336  //
337  class ScriptMethodVec4GetW: public MiniScript::ScriptMethod {
338  private:
339  MiniScript* miniScript { nullptr };
340  MiniScript::ScriptVariableType TYPE_VECTOR4;
341  public:
342  ScriptMethodVec4GetW(
343  MiniScript* miniScript,
344  MiniScript::ScriptVariableType TYPE_VECTOR4
345  ):
346  MiniScript::ScriptMethod(
347  {
348  { .type = TYPE_VECTOR4, .name = "vec4", .optional = false, .reference = false, .nullable = false },
349  },
350  MiniScript::ScriptVariableType::TYPE_FLOAT
351  ),
352  miniScript(miniScript),
353  TYPE_VECTOR4(TYPE_VECTOR4) {
354  //
355  }
356  const string getMethodName() override {
357  return "vec4.getW";
358  }
359  void executeMethod(span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) override {
360  Vector4 vec4;
361  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, vec4, false) == true) {
362  returnValue.setValue(vec4.getW());
363  } else {
364  Console::println(getMethodName() + "(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation(getMethodName()));
365  miniScript->startErrorScript();
366  }
367  }
368  };
369  miniScript->registerMethod(new ScriptMethodVec4GetW(miniScript, TYPE_VECTOR4));
370  }
371 }
372 
373 void MiniScriptVector4::unsetScriptVariableValue(MiniScript::ScriptVariable& variable) const {
374  if (variable.getType() != getType()) return;
375  if (variable.getValuePtr() == 0ll) return;
376  //
377  delete static_cast<Vector4*>((void*)variable.getValuePtr());
378  variable.setValuePtr(0ll);
379 }
380 
381 void MiniScriptVector4::setScriptVariableValue(MiniScript::ScriptVariable& variable, const void* value) const {
382  if (variable.getType() != getType()) return;
383  //
384  Vector4 vector4Value;
385  if (value != 0ll) {
386  vector4Value = *static_cast<const Vector4*>(value);
387  }
388  //
389  if (variable.getValuePtr() != 0ll) {
390  *static_cast<Vector4*>((void*)variable.getValuePtr()) = vector4Value;
391  return;
392  }
393  //
394  variable.setValuePtr((uint64_t)(new Vector4(vector4Value)));
395 }
396 
397 void MiniScriptVector4::copyScriptVariable(MiniScript::ScriptVariable& to, const MiniScript::ScriptVariable& from) const {
398  //
399  Vector4 vector4Value;
400  if (from.getType() == getType() && from.getValuePtr() != 0ll) {
401  vector4Value = *static_cast<Vector4*>((void*)from.getValuePtr());
402  }
403  //
404  to.setType(static_cast<MiniScript::ScriptVariableType>(getType()));
405  *static_cast<Vector4*>((void*)to.getValuePtr()) = vector4Value;
406 }
407 
408 bool MiniScriptVector4::mul(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const {
409  const auto TYPE_VECTOR4 = static_cast<MiniScript::ScriptVariableType>(getType());
410  //
411  if (MiniScript::hasType(argumentValues, TYPE_VECTOR4) == true) {
412  float f;
413  // a
414  Vector4 a;
415  if (argumentValues[0].getType() == TYPE_VECTOR4) {
416  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, a, false);
417  } else
418  if (MiniScript::getFloatValue(argumentValues, 0, f, false) == true) {
419  a = Vector4(f, f, f, f);
420  } else {
421  Console::println("mul(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation("mul"));
422  miniScript->startErrorScript();
423  //
424  return false;
425  }
426  // b
427  Vector4 b;
428  if (argumentValues[1].getType() == TYPE_VECTOR4) {
429  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 1, b, false);
430  } else
431  if (MiniScript::getFloatValue(argumentValues, 1, f, false) == true) {
432  b = Vector4(f, f, f, f);
433  } else {
434  Console::println("mul(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation("mul"));
435  miniScript->startErrorScript();
436  //
437  return false;
438  }
439  //
440  auto result = a.clone().scale(b);
441  returnValue.setType(TYPE_VECTOR4);
442  returnValue.setValue(&result);
443  //
444  return true;
445  }
446  //
447  return false;
448 }
449 
450 bool MiniScriptVector4::div(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const {
451  const auto TYPE_VECTOR4 = static_cast<MiniScript::ScriptVariableType>(getType());
452  //
453  if (argumentValues[0].getType() == TYPE_VECTOR4) {
454  Vector4 a;
455  Vector4 b;
456  float f;
457  // a
458  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, a, false);
459  // b
460  if (argumentValues[1].getType() == TYPE_VECTOR4 &&
461  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 1, b, false) == true) {
462  // nop
463  } else
464  if (MiniScript::getFloatValue(argumentValues, 1, f, false) == true) {
465  b = Vector4(f, f, f, f);
466  } else {
467  Console::println("div(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation("div"));
468  miniScript->startErrorScript();
469  //
470  return false;
471  }
472  //
473  auto result = a / b;
474  returnValue.setType(TYPE_VECTOR4);
475  returnValue.setValue(&result);
476  //
477  return true;
478 
479  }
480  //
481  return false;
482 }
483 
484 bool MiniScriptVector4::add(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const {
485  const auto TYPE_VECTOR4 = static_cast<MiniScript::ScriptVariableType>(getType());
486  //
487  // vector4
488  if (MiniScript::hasType(argumentValues, TYPE_VECTOR4) == true) {
489  Vector4 a;
490  Vector4 b;
491  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, a, false) == true &&
492  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 1, b, false) == true) {
493  //
494  auto result = a.clone().add(b);
495  returnValue.setType(TYPE_VECTOR4);
496  returnValue.setValue(&result);
497  //
498  return true;
499  } else {
500  Console::println("add(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation("add"));
501  miniScript->startErrorScript();
502  //
503  return false;
504  }
505  }
506  //
507  return false;
508 }
509 
510 bool MiniScriptVector4::sub(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const {
511  const auto TYPE_VECTOR4 = static_cast<MiniScript::ScriptVariableType>(getType());
512  //
513  // vector4
514  if (MiniScript::hasType(argumentValues, TYPE_VECTOR4) == true) {
515  Vector4 a;
516  Vector4 b;
517  if (MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 0, a, false) == true &&
518  MiniScriptVector4::getVector4Value(TYPE_VECTOR4, argumentValues, 1, b, false) == true) {
519  //
520  auto result = a.clone().sub(b);
521  returnValue.setType(TYPE_VECTOR4);
522  returnValue.setValue(&result);
523  //
524  return true;
525  } else {
526  Console::println("sub(): " + miniScript->getStatementInformation(statement) + ": argument mismatch: expected arguments: " + miniScript->getArgumentInformation("sub"));
527  miniScript->startErrorScript();
528  //
529  return false;
530  }
531  }
532  //
533  return false;
534 }
535 
536 const string& MiniScriptVector4::getClassName() const {
537  return CLASS_NAME;
538 }
539 
540 const string& MiniScriptVector4::getTypeAsString() const {
541  return TYPE_NAME;
542 }
543 
544 const string MiniScriptVector4::getValueAsString(const MiniScript::ScriptVariable& variable) const {
545  //
546  Vector4 vector4Value;
547  if (variable.getType() == getType() && variable.getValuePtr() != 0ll) {
548  vector4Value = *static_cast<Vector4*>((void*)variable.getValuePtr());
549  }
550  //
551  return
552  "Vector4(" +
553  to_string(vector4Value.getX()) + ", " +
554  to_string(vector4Value.getY()) + ", " +
555  to_string(vector4Value.getZ()) + ", " +
556  to_string(vector4Value.getW()) + ")";
557 
558 }
559 
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
float getY() const
Definition: Vector4.h:159
float getX() const
Definition: Vector4.h:142
Vector4 clone() const
Clones this vector4.
Definition: Vector4.h:365
float computeLength() const
Definition: Vector4.h:327
float getZ() const
Definition: Vector4.h:176
Vector4 & normalize()
Normalizes this vector4.
Definition: Vector4.h:305
Vector4 & sub(float scalar)
Subtracts a scalar.
Definition: Vector4.h:238
float computeLengthSquared() const
Definition: Vector4.h:334
float getW() const
Definition: Vector4.h:193
Vector4 & scale(float scalar)
Scales this vector4.
Definition: Vector4.h:264
Vector4 & add(float scalar)
Adds a scalar.
Definition: Vector4.h:212
Console class.
Definition: Console.h:29
static void println()
Print new line to console.
Definition: Console.cpp:92
Float class.
Definition: Float.h:27
static bool isInfinite(float value)
Check if float is infinite.
Definition: Float.h:75
static bool isNaN(float value)
Check if float is not a number.
Definition: Float.h:66
MiniScript Vector4 data type.
const string & getTypeAsString() const override
bool add(MiniScript *miniScript, const span< MiniScript::ScriptVariable > &argumentValues, MiniScript::ScriptVariable &returnValue, const MiniScript::ScriptStatement &statement) const override
bool sub(MiniScript *miniScript, const span< MiniScript::ScriptVariable > &argumentValues, MiniScript::ScriptVariable &returnValue, const MiniScript::ScriptStatement &statement) const override
void copyScriptVariable(MiniScript::ScriptVariable &to, const MiniScript::ScriptVariable &from) const override
void unsetScriptVariableValue(MiniScript::ScriptVariable &variable) const override
bool div(MiniScript *miniScript, const span< MiniScript::ScriptVariable > &argumentValues, MiniScript::ScriptVariable &returnValue, const MiniScript::ScriptStatement &statement) const override
const string & getClassName() const override
bool mul(MiniScript *miniScript, const span< MiniScript::ScriptVariable > &argumentValues, MiniScript::ScriptVariable &returnValue, const MiniScript::ScriptStatement &statement) const override
const string getValueAsString(const MiniScript::ScriptVariable &variable) const override
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.
void setScriptVariableValue(MiniScript::ScriptVariable &variable, const void *value) const override