vector2i.hpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #ifndef GODOT_VECTOR2I_HPP
  2. #define GODOT_VECTOR2I_HPP
  3. #include <godot_cpp/core/math.hpp>
  4. #include <godot_cpp/variant/string.hpp>
  5. #include <godot_cpp/variant/vector2.hpp>
  6. namespace godot {
  7. class Vector2i {
  8. public:
  9. _FORCE_INLINE_ GDNativeTypePtr ptr() const { return (void *)this; }
  10. enum Axis {
  11. AXIS_X,
  12. AXIS_Y,
  13. };
  14. union {
  15. int32_t x = 0;
  16. int32_t width;
  17. };
  18. union {
  19. int32_t y = 0;
  20. int32_t height;
  21. };
  22. inline int32_t &operator[](int p_idx) {
  23. return p_idx ? y : x;
  24. }
  25. inline const int32_t &operator[](int p_idx) const {
  26. return p_idx ? y : x;
  27. }
  28. Vector2i operator+(const Vector2i &p_v) const;
  29. void operator+=(const Vector2i &p_v);
  30. Vector2i operator-(const Vector2i &p_v) const;
  31. void operator-=(const Vector2i &p_v);
  32. Vector2i operator*(const Vector2i &p_v1) const;
  33. Vector2i operator*(const int32_t &rvalue) const;
  34. void operator*=(const int32_t &rvalue);
  35. Vector2i operator/(const Vector2i &p_v1) const;
  36. Vector2i operator/(const int32_t &rvalue) const;
  37. void operator/=(const int32_t &rvalue);
  38. Vector2i operator%(const Vector2i &p_v1) const;
  39. Vector2i operator%(const int32_t &rvalue) const;
  40. void operator%=(const int32_t &rvalue);
  41. Vector2i operator-() const;
  42. bool operator<(const Vector2i &p_vec2) const { return (x == p_vec2.x) ? (y < p_vec2.y) : (x < p_vec2.x); }
  43. bool operator>(const Vector2i &p_vec2) const { return (x == p_vec2.x) ? (y > p_vec2.y) : (x > p_vec2.x); }
  44. bool operator<=(const Vector2i &p_vec2) const { return x == p_vec2.x ? (y <= p_vec2.y) : (x < p_vec2.x); }
  45. bool operator>=(const Vector2i &p_vec2) const { return x == p_vec2.x ? (y >= p_vec2.y) : (x > p_vec2.x); }
  46. bool operator==(const Vector2i &p_vec2) const;
  47. bool operator!=(const Vector2i &p_vec2) const;
  48. real_t aspect() const { return width / (real_t)height; }
  49. Vector2i sign() const { return Vector2i(Math::sign(x), Math::sign(y)); }
  50. Vector2i abs() const { return Vector2i(Math::abs(x), Math::abs(y)); }
  51. operator String() const;
  52. operator Vector2() const { return Vector2(x, y); }
  53. inline Vector2i() {}
  54. inline Vector2i(const Vector2 &p_vec2) {
  55. x = (int32_t)p_vec2.x;
  56. y = (int32_t)p_vec2.y;
  57. }
  58. inline Vector2i(int32_t p_x, int32_t p_y) {
  59. x = p_x;
  60. y = p_y;
  61. }
  62. };
  63. inline Vector2i operator*(const int32_t &p_scalar, const Vector2i &p_vector) {
  64. return p_vector * p_scalar;
  65. }
  66. inline Vector2i operator*(const int64_t &p_scalar, const Vector2i &p_vector) {
  67. return p_vector * p_scalar;
  68. }
  69. inline Vector2i operator*(const float &p_scalar, const Vector2i &p_vector) {
  70. return p_vector * p_scalar;
  71. }
  72. inline Vector2i operator*(const double &p_scalar, const Vector2i &p_vector) {
  73. return p_vector * p_scalar;
  74. }
  75. typedef Vector2i Size2i;
  76. typedef Vector2i Point2i;
  77. } // namespace godot
  78. #endif // GODOT_VECTOR2I_HPP