TDME2  1.9.200
MiniScriptQuaternion.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <span>
4 
5 #include <miniscript/miniscript/MiniScript.h>
6 
7 #include <tdme/tdme.h>
8 #include <tdme/math/Quaternion.h>
10 
11 using std::span;
12 
13 using miniscript::miniscript::MiniScript;
14 
16 
18 
19 /**
20  * MiniScript Quaternion data type
21  * @author Andreas Drewke
22  */
23 class tdme::utilities::MiniScriptQuaternion final: public MiniScript::ScriptDataType {
24 private:
25  // overridden methods
26  void registerMethods(MiniScript* miniScript) const override;
27  void unsetScriptVariableValue(MiniScript::ScriptVariable& variable) const override;
28  void setScriptVariableValue(MiniScript::ScriptVariable& variable, const void* value) const override;
29  void copyScriptVariable(MiniScript::ScriptVariable& to, const MiniScript::ScriptVariable& from) const override;
30  bool mul(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const override;
31  bool div(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const override;
32  bool add(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const override;
33  bool sub(MiniScript* miniScript, const span<MiniScript::ScriptVariable>& argumentValues, MiniScript::ScriptVariable& returnValue, const MiniScript::ScriptStatement& statement) const override;
34 
35 public:
36  static const string CLASS_NAME;
37  static const string TYPE_NAME;
38 
39  /**
40  * Get quaternion value from given variable
41  * @param TYPE_QUATERNION custom data type for vector3
42  * @param arguments arguments
43  * @param idx argument index
44  * @param value value
45  * @param optional optional
46  * @return success
47  */
48  static inline bool getQuaternionValue(MiniScript::ScriptVariableType TYPE_QUATERNION, const span<MiniScript::ScriptVariable>& arguments, int idx, Quaternion& value, bool optional = false) {
49  if (idx >= arguments.size()) return optional;
50  const auto& argument = arguments[idx];
51  if (argument.getType() == TYPE_QUATERNION) {
52  if (argument.getValuePtr() == 0ll) return optional;
53  value = *static_cast<Quaternion*>((void*)argument.getValuePtr());
54  return true;
55  }
56  return optional;
57 
58  }
59 
60  // forbid class copy
62 
63  /**
64  * MiniScript Quaternion data type
65  */
66  MiniScriptQuaternion(): MiniScript::ScriptDataType(true) {
67  //
68  }
69 
70  // overridden methods
71  const string& getClassName() const override;
72  const string& getTypeAsString() const override;
73  const string getValueAsString(const MiniScript::ScriptVariable& variable) const override;
74 
75 };
Quaternion class representing quaternion mathematical structure and operations with x,...
Definition: Quaternion.h:24
MiniScript Quaternion 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
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.
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
void setScriptVariableValue(MiniScript::ScriptVariable &variable, const void *value) const override
void registerMethods(MiniScript *miniScript) const override
#define FORBID_CLASS_COPY(CLASS)
Definition: tdme.h:6