Variant.hpp 4.7 KB

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