2
0

BsRadian.h 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsPrerequisitesUtil.h"
  5. #include "BsDegree.h"
  6. namespace BansheeEngine
  7. {
  8. /** @addtogroup Math
  9. * @{
  10. */
  11. /**
  12. * Wrapper class which indicates a given angle value is in radians.
  13. *
  14. * @note
  15. * Radian values are interchangeable with Degree values, and conversions will be done automatically between them.
  16. */
  17. class BS_UTILITY_EXPORT Radian
  18. {
  19. public:
  20. explicit Radian(float r = 0.0f) : mRad(r) {}
  21. Radian(const Degree& d);
  22. Radian& operator= (const float& f) { mRad = f; return *this; }
  23. Radian& operator= (const Radian& r) { mRad = r.mRad; return *this; }
  24. Radian& operator= (const Degree& d);
  25. /** Returns the value of the angle in degrees. */
  26. float valueDegrees() const;
  27. /** Returns the value of the angle in radians. */
  28. float valueRadians() const { return mRad; }
  29. /** Wraps the angle in [0, 2 * PI) range. */
  30. Radian wrap();
  31. const Radian& operator+ () const { return *this; }
  32. Radian operator+ (const Radian& r) const { return Radian (mRad + r.mRad); }
  33. Radian operator+ (const Degree& d) const;
  34. Radian& operator+= (const Radian& r) { mRad += r.mRad; return *this; }
  35. Radian& operator+= (const Degree& d);
  36. Radian operator- () const { return Radian(-mRad); }
  37. Radian operator- (const Radian& r) const { return Radian (mRad - r.mRad); }
  38. Radian operator- (const Degree& d) const;
  39. Radian& operator-= (const Radian& r) { mRad -= r.mRad; return *this; }
  40. Radian& operator-= (const Degree& d);
  41. Radian operator* (float f) const { return Radian (mRad * f); }
  42. Radian operator* (const Radian& f) const { return Radian (mRad * f.mRad); }
  43. Radian& operator*= (float f) { mRad *= f; return *this; }
  44. Radian operator/ (float f) const { return Radian (mRad / f); }
  45. Radian& operator/= (float f) { mRad /= f; return *this; }
  46. friend Radian operator* (float lhs, const Radian& rhs) { return Radian(lhs * rhs.mRad); }
  47. friend Radian operator/ (float lhs, const Radian& rhs) { return Radian(lhs / rhs.mRad); }
  48. friend Radian operator+ (Radian& lhs, float rhs) { return Radian(lhs.mRad + rhs); }
  49. friend Radian operator+ (float lhs, const Radian& rhs) { return Radian(lhs + rhs.mRad); }
  50. friend Radian operator- (const Radian& lhs, float rhs) { return Radian(lhs.mRad - rhs); }
  51. friend Radian operator- (const float lhs, const Radian& rhs) { return Radian(lhs - rhs.mRad); }
  52. bool operator< (const Radian& r) const { return mRad < r.mRad; }
  53. bool operator<= (const Radian& r) const { return mRad <= r.mRad; }
  54. bool operator== (const Radian& r) const { return mRad == r.mRad; }
  55. bool operator!= (const Radian& r) const { return mRad != r.mRad; }
  56. bool operator>= (const Radian& r) const { return mRad >= r.mRad; }
  57. bool operator> (const Radian& r) const { return mRad > r.mRad; }
  58. private:
  59. float mRad;
  60. };
  61. /** @} */
  62. /** @cond SPECIALIZATIONS */
  63. BS_ALLOW_MEMCPY_SERIALIZATION(Radian);
  64. /** @endcond */
  65. }