vector3i.hpp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. #ifndef GODOT_VECTOR3I_HPP
  2. #define GODOT_VECTOR3I_HPP
  3. #include <godot_cpp/core/math.hpp>
  4. #include <godot_cpp/variant/string.hpp>
  5. namespace godot {
  6. class Vector3i {
  7. public:
  8. _FORCE_INLINE_ GDNativeTypePtr ptr() const { return (void *)this; }
  9. enum Axis {
  10. AXIS_X,
  11. AXIS_Y,
  12. AXIS_Z,
  13. };
  14. union {
  15. struct {
  16. int32_t x;
  17. int32_t y;
  18. int32_t z;
  19. };
  20. int32_t coord[3] = { 0 };
  21. };
  22. inline const int32_t &operator[](int p_axis) const {
  23. return coord[p_axis];
  24. }
  25. inline int32_t &operator[](int p_axis) {
  26. return coord[p_axis];
  27. }
  28. void set_axis(int p_axis, int32_t p_value);
  29. int32_t get_axis(int p_axis) const;
  30. int min_axis() const;
  31. int max_axis() const;
  32. inline void zero();
  33. inline Vector3i abs() const;
  34. inline Vector3i sign() const;
  35. /* Operators */
  36. inline Vector3i &operator+=(const Vector3i &p_v);
  37. inline Vector3i operator+(const Vector3i &p_v) const;
  38. inline Vector3i &operator-=(const Vector3i &p_v);
  39. inline Vector3i operator-(const Vector3i &p_v) const;
  40. inline Vector3i &operator*=(const Vector3i &p_v);
  41. inline Vector3i operator*(const Vector3i &p_v) const;
  42. inline Vector3i &operator/=(const Vector3i &p_v);
  43. inline Vector3i operator/(const Vector3i &p_v) const;
  44. inline Vector3i &operator%=(const Vector3i &p_v);
  45. inline Vector3i operator%(const Vector3i &p_v) const;
  46. inline Vector3i &operator*=(int32_t p_scalar);
  47. inline Vector3i operator*(int32_t p_scalar) const;
  48. inline Vector3i &operator/=(int32_t p_scalar);
  49. inline Vector3i operator/(int32_t p_scalar) const;
  50. inline Vector3i &operator%=(int32_t p_scalar);
  51. inline Vector3i operator%(int32_t p_scalar) const;
  52. inline Vector3i operator-() const;
  53. inline bool operator==(const Vector3i &p_v) const;
  54. inline bool operator!=(const Vector3i &p_v) const;
  55. inline bool operator<(const Vector3i &p_v) const;
  56. inline bool operator<=(const Vector3i &p_v) const;
  57. inline bool operator>(const Vector3i &p_v) const;
  58. inline bool operator>=(const Vector3i &p_v) const;
  59. operator String() const;
  60. inline Vector3i() {}
  61. inline Vector3i(int32_t p_x, int32_t p_y, int32_t p_z) {
  62. x = p_x;
  63. y = p_y;
  64. z = p_z;
  65. }
  66. };
  67. Vector3i Vector3i::abs() const {
  68. return Vector3i(Math::abs(x), Math::abs(y), Math::abs(z));
  69. }
  70. Vector3i Vector3i::sign() const {
  71. return Vector3i(Math::sign(x), Math::sign(y), Math::sign(z));
  72. }
  73. /* Operators */
  74. Vector3i &Vector3i::operator+=(const Vector3i &p_v) {
  75. x += p_v.x;
  76. y += p_v.y;
  77. z += p_v.z;
  78. return *this;
  79. }
  80. Vector3i Vector3i::operator+(const Vector3i &p_v) const {
  81. return Vector3i(x + p_v.x, y + p_v.y, z + p_v.z);
  82. }
  83. Vector3i &Vector3i::operator-=(const Vector3i &p_v) {
  84. x -= p_v.x;
  85. y -= p_v.y;
  86. z -= p_v.z;
  87. return *this;
  88. }
  89. Vector3i Vector3i::operator-(const Vector3i &p_v) const {
  90. return Vector3i(x - p_v.x, y - p_v.y, z - p_v.z);
  91. }
  92. Vector3i &Vector3i::operator*=(const Vector3i &p_v) {
  93. x *= p_v.x;
  94. y *= p_v.y;
  95. z *= p_v.z;
  96. return *this;
  97. }
  98. Vector3i Vector3i::operator*(const Vector3i &p_v) const {
  99. return Vector3i(x * p_v.x, y * p_v.y, z * p_v.z);
  100. }
  101. Vector3i &Vector3i::operator/=(const Vector3i &p_v) {
  102. x /= p_v.x;
  103. y /= p_v.y;
  104. z /= p_v.z;
  105. return *this;
  106. }
  107. Vector3i Vector3i::operator/(const Vector3i &p_v) const {
  108. return Vector3i(x / p_v.x, y / p_v.y, z / p_v.z);
  109. }
  110. Vector3i &Vector3i::operator%=(const Vector3i &p_v) {
  111. x %= p_v.x;
  112. y %= p_v.y;
  113. z %= p_v.z;
  114. return *this;
  115. }
  116. Vector3i Vector3i::operator%(const Vector3i &p_v) const {
  117. return Vector3i(x % p_v.x, y % p_v.y, z % p_v.z);
  118. }
  119. Vector3i &Vector3i::operator*=(int32_t p_scalar) {
  120. x *= p_scalar;
  121. y *= p_scalar;
  122. z *= p_scalar;
  123. return *this;
  124. }
  125. inline Vector3i operator*(int32_t p_scalar, const Vector3i &p_vec) {
  126. return p_vec * p_scalar;
  127. }
  128. Vector3i Vector3i::operator*(int32_t p_scalar) const {
  129. return Vector3i(x * p_scalar, y * p_scalar, z * p_scalar);
  130. }
  131. Vector3i &Vector3i::operator/=(int32_t p_scalar) {
  132. x /= p_scalar;
  133. y /= p_scalar;
  134. z /= p_scalar;
  135. return *this;
  136. }
  137. Vector3i Vector3i::operator/(int32_t p_scalar) const {
  138. return Vector3i(x / p_scalar, y / p_scalar, z / p_scalar);
  139. }
  140. Vector3i &Vector3i::operator%=(int32_t p_scalar) {
  141. x %= p_scalar;
  142. y %= p_scalar;
  143. z %= p_scalar;
  144. return *this;
  145. }
  146. Vector3i Vector3i::operator%(int32_t p_scalar) const {
  147. return Vector3i(x % p_scalar, y % p_scalar, z % p_scalar);
  148. }
  149. Vector3i Vector3i::operator-() const {
  150. return Vector3i(-x, -y, -z);
  151. }
  152. bool Vector3i::operator==(const Vector3i &p_v) const {
  153. return (x == p_v.x && y == p_v.y && z == p_v.z);
  154. }
  155. bool Vector3i::operator!=(const Vector3i &p_v) const {
  156. return (x != p_v.x || y != p_v.y || z != p_v.z);
  157. }
  158. bool Vector3i::operator<(const Vector3i &p_v) const {
  159. if (x == p_v.x) {
  160. if (y == p_v.y) {
  161. return z < p_v.z;
  162. } else {
  163. return y < p_v.y;
  164. }
  165. } else {
  166. return x < p_v.x;
  167. }
  168. }
  169. bool Vector3i::operator>(const Vector3i &p_v) const {
  170. if (x == p_v.x) {
  171. if (y == p_v.y) {
  172. return z > p_v.z;
  173. } else {
  174. return y > p_v.y;
  175. }
  176. } else {
  177. return x > p_v.x;
  178. }
  179. }
  180. bool Vector3i::operator<=(const Vector3i &p_v) const {
  181. if (x == p_v.x) {
  182. if (y == p_v.y) {
  183. return z <= p_v.z;
  184. } else {
  185. return y < p_v.y;
  186. }
  187. } else {
  188. return x < p_v.x;
  189. }
  190. }
  191. bool Vector3i::operator>=(const Vector3i &p_v) const {
  192. if (x == p_v.x) {
  193. if (y == p_v.y) {
  194. return z >= p_v.z;
  195. } else {
  196. return y > p_v.y;
  197. }
  198. } else {
  199. return x > p_v.x;
  200. }
  201. }
  202. void Vector3i::zero() {
  203. x = y = z = 0;
  204. }
  205. } // namespace godot
  206. #endif // GODOT_VECTOR3I_HPP