Variant.hpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #ifndef VARIANT_H
  2. #define VARIANT_H
  3. #include <gdnative/variant.h>
  4. #include "Defs.hpp"
  5. #include "AABB.hpp"
  6. #include "Basis.hpp"
  7. #include "Color.hpp"
  8. #include "NodePath.hpp"
  9. #include "Plane.hpp"
  10. #include "PoolArrays.hpp"
  11. #include "Quat.hpp"
  12. #include "RID.hpp"
  13. #include "Rect2.hpp"
  14. #include "String.hpp"
  15. #include "Transform.hpp"
  16. #include "Transform2D.hpp"
  17. #include "Vector2.hpp"
  18. #include "Vector3.hpp"
  19. #include <iostream>
  20. namespace godot {
  21. class Dictionary;
  22. class Array;
  23. class Variant {
  24. godot_variant _godot_variant;
  25. friend class Array;
  26. inline explicit Variant(godot_variant v) {
  27. _godot_variant = v;
  28. }
  29. public:
  30. enum Type {
  31. NIL,
  32. // atomic types
  33. BOOL,
  34. INT,
  35. REAL,
  36. STRING,
  37. // math types
  38. VECTOR2, // 5
  39. RECT2,
  40. VECTOR3,
  41. TRANSFORM2D,
  42. PLANE,
  43. QUAT, // 10
  44. RECT3, //sorry naming convention fail :( not like it's used often
  45. BASIS,
  46. TRANSFORM,
  47. // misc types
  48. COLOR,
  49. NODE_PATH, // 15
  50. _RID,
  51. OBJECT,
  52. DICTIONARY,
  53. ARRAY,
  54. // arrays
  55. POOL_BYTE_ARRAY, // 20
  56. POOL_INT_ARRAY,
  57. POOL_REAL_ARRAY,
  58. POOL_STRING_ARRAY,
  59. POOL_VECTOR2_ARRAY,
  60. POOL_VECTOR3_ARRAY, // 25
  61. POOL_COLOR_ARRAY,
  62. VARIANT_MAX
  63. };
  64. enum Operator {
  65. //comparation
  66. OP_EQUAL,
  67. OP_NOT_EQUAL,
  68. OP_LESS,
  69. OP_LESS_EQUAL,
  70. OP_GREATER,
  71. OP_GREATER_EQUAL,
  72. //mathematic
  73. OP_ADD,
  74. OP_SUBSTRACT,
  75. OP_MULTIPLY,
  76. OP_DIVIDE,
  77. OP_NEGATE,
  78. OP_POSITIVE,
  79. OP_MODULE,
  80. OP_STRING_CONCAT,
  81. //bitwise
  82. OP_SHIFT_LEFT,
  83. OP_SHIFT_RIGHT,
  84. OP_BIT_AND,
  85. OP_BIT_OR,
  86. OP_BIT_XOR,
  87. OP_BIT_NEGATE,
  88. //logic
  89. OP_AND,
  90. OP_OR,
  91. OP_XOR,
  92. OP_NOT,
  93. //containment
  94. OP_IN,
  95. OP_MAX
  96. };
  97. Variant();
  98. Variant(const Variant &v);
  99. Variant(bool p_bool);
  100. Variant(signed int p_int);
  101. Variant(unsigned int p_int);
  102. Variant(signed short p_short);
  103. inline Variant(unsigned short p_short) :
  104. Variant((unsigned int)p_short) {}
  105. inline Variant(signed char p_char) :
  106. Variant((signed int)p_char) {}
  107. inline Variant(unsigned char p_char) :
  108. Variant((unsigned int)p_char) {}
  109. Variant(int64_t p_char);
  110. Variant(uint64_t p_char);
  111. Variant(float p_float);
  112. Variant(double p_double);
  113. Variant(const String &p_string);
  114. Variant(const char *const p_cstring);
  115. Variant(const wchar_t *p_wstring);
  116. Variant(const Vector2 &p_vector2);
  117. Variant(const Rect2 &p_rect2);
  118. Variant(const Vector3 &p_vector3);
  119. Variant(const Plane &p_plane);
  120. Variant(const AABB &p_aabb);
  121. Variant(const Quat &p_quat);
  122. Variant(const Basis &p_transform);
  123. Variant(const Transform2D &p_transform);
  124. Variant(const Transform &p_transform);
  125. Variant(const Color &p_color);
  126. Variant(const NodePath &p_path);
  127. Variant(const RID &p_rid);
  128. Variant(const Object *p_object);
  129. Variant(const Dictionary &p_dictionary);
  130. Variant(const Array &p_array);
  131. Variant(const PoolByteArray &p_raw_array);
  132. Variant(const PoolIntArray &p_int_array);
  133. Variant(const PoolRealArray &p_real_array);
  134. Variant(const PoolStringArray &p_string_array);
  135. Variant(const PoolVector2Array &p_vector2_array);
  136. Variant(const PoolVector3Array &p_vector3_array);
  137. Variant(const PoolColorArray &p_color_array);
  138. Variant &operator=(const Variant &v);
  139. operator bool() const;
  140. operator signed int() const;
  141. operator unsigned int() const;
  142. operator signed short() const;
  143. operator unsigned short() const;
  144. operator signed char() const;
  145. operator unsigned char() const;
  146. operator int64_t() const;
  147. operator uint64_t() const;
  148. operator wchar_t() const;
  149. operator float() const;
  150. operator double() const;
  151. operator String() const;
  152. operator Vector2() const;
  153. operator Rect2() const;
  154. operator Vector3() const;
  155. operator Plane() const;
  156. operator AABB() const;
  157. operator Quat() const;
  158. operator Basis() const;
  159. operator Transform() const;
  160. operator Transform2D() const;
  161. operator Color() const;
  162. operator NodePath() const;
  163. operator RID() const;
  164. operator godot_object *() const;
  165. template <typename T>
  166. operator T *() const { return static_cast<T *>(T::___get_from_variant(*this)); }
  167. operator Dictionary() const;
  168. operator Array() const;
  169. operator PoolByteArray() const;
  170. operator PoolIntArray() const;
  171. operator PoolRealArray() const;
  172. operator PoolStringArray() const;
  173. operator PoolVector2Array() const;
  174. operator PoolVector3Array() const;
  175. operator PoolColorArray() const;
  176. Type get_type() const;
  177. Variant call(const String &method, const Variant **args, const int arg_count);
  178. bool has_method(const String &method);
  179. bool operator==(const Variant &b) const;
  180. bool operator!=(const Variant &b) const;
  181. bool operator<(const Variant &b) const;
  182. bool operator<=(const Variant &b) const;
  183. bool operator>(const Variant &b) const;
  184. bool operator>=(const Variant &b) const;
  185. bool hash_compare(const Variant &b) const;
  186. bool booleanize() const;
  187. ~Variant();
  188. };
  189. } // namespace godot
  190. #endif // VARIANT_H