Variant.hpp 4.5 KB

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