You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
915B

  1. #pragma once
  2. namespace DHE {
  3. inline auto scale(float proportion, float lower_bound, float upper_bound)
  4. -> float {
  5. return proportion * (upper_bound - lower_bound) + lower_bound;
  6. }
  7. class Range {
  8. public:
  9. constexpr Range(float lower_bound, float upper_bound) noexcept
  10. : lower_bound(lower_bound), upper_bound(upper_bound) {}
  11. auto scale(float proportion) const -> float {
  12. return DHE::scale(proportion, lower_bound, upper_bound);
  13. }
  14. auto scale(bool state) const -> float {
  15. return state ? upper_bound : lower_bound;
  16. }
  17. auto normalize(float member) const -> float {
  18. return (member - lower_bound) / (upper_bound - lower_bound);
  19. }
  20. auto clamp(float f) const -> float {
  21. if (f < lower_bound) {
  22. return lower_bound;
  23. }
  24. if (f > upper_bound) {
  25. return upper_bound;
  26. }
  27. return f;
  28. }
  29. const float lower_bound;
  30. const float upper_bound;
  31. };
  32. } // namespace DHE