Vec2.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. // Copyright (C) 2009-2016, Panagiotis Christopoulos Charitos.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <anki/math/CommonIncludes.h>
  7. #include <anki/math/Vec.h>
  8. namespace anki
  9. {
  10. /// @addtogroup math
  11. /// @{
  12. /// 2D vector
  13. template<typename T>
  14. class TVec2 : public TVec<T, 2, Array<T, 2>, TVec2<T>>
  15. {
  16. /// @name Friends
  17. /// @{
  18. template<typename Y>
  19. friend TVec2<Y> operator+(const Y f, const TVec2<Y>& b);
  20. template<typename Y>
  21. friend TVec2<Y> operator-(const Y f, const TVec2<Y>& b);
  22. template<typename Y>
  23. friend TVec2<Y> operator*(const Y f, const TVec2<Y>& b);
  24. template<typename Y>
  25. friend TVec2<Y> operator/(const Y f, const TVec2<Y>& b);
  26. ///@}
  27. public:
  28. using Base = TVec<T, 2, Array<T, 2>, TVec2<T>>;
  29. /// @name Constructors
  30. /// @{
  31. TVec2()
  32. : Base()
  33. {
  34. }
  35. TVec2(const TVec2& b)
  36. : Base(b)
  37. {
  38. }
  39. TVec2(const T x_, const T y_)
  40. : Base(x_, y_)
  41. {
  42. }
  43. explicit TVec2(const T f)
  44. : Base(f)
  45. {
  46. }
  47. explicit TVec2(const T arr[])
  48. : Base(arr)
  49. {
  50. }
  51. /// @}
  52. };
  53. /// @memberof TVec2
  54. template<typename T>
  55. TVec2<T> operator+(const T f, const TVec2<T>& b)
  56. {
  57. return b + f;
  58. }
  59. /// @memberof TVec2
  60. template<typename T>
  61. TVec2<T> operator-(const T f, const TVec2<T>& b)
  62. {
  63. return TVec2<T>(f - b.x(), f - b.y());
  64. }
  65. /// @memberof TVec2
  66. template<typename T>
  67. TVec2<T> operator*(const T f, const TVec2<T>& b)
  68. {
  69. return b * f;
  70. }
  71. /// @memberof TVec2
  72. template<typename T>
  73. TVec2<T> operator/(const T f, const TVec2<T>& b)
  74. {
  75. return TVec2<T>(f / b.x(), f / b.y());
  76. }
  77. /// F32 2D vector
  78. typedef TVec2<F32> Vec2;
  79. static_assert(sizeof(Vec2) == sizeof(F32) * 2, "Incorrect size");
  80. /// Half float 2D vector
  81. typedef TVec2<F16> HVec2;
  82. /// 32bit signed integer 2D vector
  83. typedef TVec2<I32> IVec2;
  84. /// 32bit unsigned integer 2D vector
  85. typedef TVec2<U32> UVec2;
  86. /// @}
  87. } // end namespace anki