building_state.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #pragma once
  2. #include <QVector3D>
  3. namespace Render::GL {
  4. enum class BuildingState { Normal, Damaged, Destroyed };
  5. inline constexpr float HEALTH_THRESHOLD_NORMAL = 0.70F;
  6. inline constexpr float HEALTH_THRESHOLD_DAMAGED = 0.30F;
  7. inline constexpr float HEALTHBAR_PULSE_MIN = 0.7F;
  8. inline constexpr float HEALTHBAR_PULSE_AMPLITUDE = 0.3F;
  9. inline constexpr float HEALTHBAR_PULSE_SPEED = 4.0F;
  10. namespace HealthBarColors {
  11. inline constexpr float NORMAL_BRIGHT_R = 0.10F;
  12. inline constexpr float NORMAL_BRIGHT_G = 1.0F;
  13. inline constexpr float NORMAL_BRIGHT_B = 0.30F;
  14. inline constexpr float NORMAL_DARK_R = 0.05F;
  15. inline constexpr float NORMAL_DARK_G = 0.60F;
  16. inline constexpr float NORMAL_DARK_B = 0.15F;
  17. inline constexpr float DAMAGED_BRIGHT_R = 1.0F;
  18. inline constexpr float DAMAGED_BRIGHT_G = 0.75F;
  19. inline constexpr float DAMAGED_BRIGHT_B = 0.10F;
  20. inline constexpr float DAMAGED_DARK_R = 0.70F;
  21. inline constexpr float DAMAGED_DARK_G = 0.45F;
  22. inline constexpr float DAMAGED_DARK_B = 0.05F;
  23. inline constexpr float CRITICAL_BRIGHT_R = 1.0F;
  24. inline constexpr float CRITICAL_BRIGHT_G = 0.15F;
  25. inline constexpr float CRITICAL_BRIGHT_B = 0.15F;
  26. inline constexpr float CRITICAL_DARK_R = 0.70F;
  27. inline constexpr float CRITICAL_DARK_G = 0.08F;
  28. inline constexpr float CRITICAL_DARK_B = 0.08F;
  29. inline const QVector3D NORMAL_BRIGHT{NORMAL_BRIGHT_R, NORMAL_BRIGHT_G,
  30. NORMAL_BRIGHT_B};
  31. inline const QVector3D NORMAL_DARK{NORMAL_DARK_R, NORMAL_DARK_G, NORMAL_DARK_B};
  32. inline const QVector3D DAMAGED_BRIGHT{DAMAGED_BRIGHT_R, DAMAGED_BRIGHT_G,
  33. DAMAGED_BRIGHT_B};
  34. inline const QVector3D DAMAGED_DARK{DAMAGED_DARK_R, DAMAGED_DARK_G,
  35. DAMAGED_DARK_B};
  36. inline const QVector3D CRITICAL_BRIGHT{CRITICAL_BRIGHT_R, CRITICAL_BRIGHT_G,
  37. CRITICAL_BRIGHT_B};
  38. inline const QVector3D CRITICAL_DARK{CRITICAL_DARK_R, CRITICAL_DARK_G,
  39. CRITICAL_DARK_B};
  40. inline const QVector3D BORDER{0.45F, 0.45F, 0.50F};
  41. inline const QVector3D INNER_BORDER{0.25F, 0.25F, 0.28F};
  42. inline const QVector3D BACKGROUND{0.08F, 0.08F, 0.10F};
  43. inline const QVector3D SEGMENT{0.35F, 0.35F, 0.40F};
  44. inline const QVector3D SEGMENT_HIGHLIGHT{0.55F, 0.55F, 0.60F};
  45. inline const QVector3D SHINE{1.0F, 1.0F, 1.0F};
  46. inline const QVector3D GLOW_ATTACK{0.9F, 0.2F, 0.2F};
  47. } // namespace HealthBarColors
  48. inline auto get_building_state(float health_ratio) -> BuildingState {
  49. if (health_ratio >= HEALTH_THRESHOLD_NORMAL) {
  50. return BuildingState::Normal;
  51. } else if (health_ratio >= HEALTH_THRESHOLD_DAMAGED) {
  52. return BuildingState::Damaged;
  53. } else {
  54. return BuildingState::Destroyed;
  55. }
  56. }
  57. } // namespace Render::GL