BsRadian.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #pragma once
  2. #include "BsPrerequisitesUtil.h"
  3. #include "BsDegree.h"
  4. namespace BansheeEngine
  5. {
  6. /**
  7. * @brief Wrapper class which indicates a given angle value is in Radians.
  8. *
  9. * @note Radian values are interchangeable with Degree values, and conversions
  10. * will be done automatically between them.
  11. */
  12. class BS_UTILITY_EXPORT Radian
  13. {
  14. float mRad;
  15. public:
  16. explicit Radian(float r = 0.0f) : mRad(r) {}
  17. Radian(const Degree& d);
  18. Radian& operator= (const float& f) { mRad = f; return *this; }
  19. Radian& operator= (const Radian& r) { mRad = r.mRad; return *this; }
  20. Radian& operator= (const Degree& d);
  21. float valueDegrees() const;
  22. float valueRadians() const { return mRad; }
  23. const Radian& operator+ () const { return *this; }
  24. Radian operator+ (const Radian& r) const { return Radian (mRad + r.mRad); }
  25. Radian operator+ (const Degree& d) const;
  26. Radian& operator+= (const Radian& r) { mRad += r.mRad; return *this; }
  27. Radian& operator+= (const Degree& d);
  28. Radian operator- () const { return Radian(-mRad); }
  29. Radian operator- (const Radian& r) const { return Radian (mRad - r.mRad); }
  30. Radian operator- (const Degree& d) const;
  31. Radian& operator-= (const Radian& r) { mRad -= r.mRad; return *this; }
  32. Radian& operator-= (const Degree& d);
  33. Radian operator* (float f) const { return Radian (mRad * f); }
  34. Radian operator* (const Radian& f) const { return Radian (mRad * f.mRad); }
  35. Radian& operator*= (float f) { mRad *= f; return *this; }
  36. Radian operator/ (float f) const { return Radian (mRad / f); }
  37. Radian& operator/= (float f) { mRad /= f; return *this; }
  38. friend Radian operator* (float lhs, const Radian& rhs) { return Radian(lhs * rhs.mRad); }
  39. friend Radian operator/ (float lhs, const Radian& rhs) { return Radian(lhs / rhs.mRad); }
  40. friend Radian operator+ (Radian& lhs, float rhs) { return Radian(lhs.mRad + rhs); }
  41. friend Radian operator+ (float lhs, const Radian& rhs) { return Radian(lhs + rhs.mRad); }
  42. friend Radian operator- (const Radian& lhs, float rhs) { return Radian(lhs.mRad - rhs); }
  43. friend Radian operator- (const float lhs, const Radian& rhs) { return Radian(lhs - rhs.mRad); }
  44. bool operator< (const Radian& r) const { return mRad < r.mRad; }
  45. bool operator<= (const Radian& r) const { return mRad <= r.mRad; }
  46. bool operator== (const Radian& r) const { return mRad == r.mRad; }
  47. bool operator!= (const Radian& r) const { return mRad != r.mRad; }
  48. bool operator>= (const Radian& r) const { return mRad >= r.mRad; }
  49. bool operator> (const Radian& r) const { return mRad > r.mRad; }
  50. };
  51. }