warmthnotfr.c 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. class WarmthNotfr: NotifierBase
  2. {
  3. private const float DEC_TRESHOLD_LOW = -0.01;
  4. private const float DEC_TRESHOLD_MED = -0.12;
  5. private const float DEC_TRESHOLD_HIGH = -0.25;
  6. private const float INC_TRESHOLD_LOW = 0.01;
  7. private const float INC_TRESHOLD_MED = 0.12;
  8. private const float INC_TRESHOLD_HIGH = 0.25;
  9. protected ref SimpleMovingAverage<float> m_AverageHeatComfortDeltaBuffer; //! replaces the original delta of values from NotifierBase
  10. void WarmthNotfr(NotifiersManager manager)
  11. {
  12. m_AverageHeatComfortDeltaBuffer = new SimpleMovingAverage<float>(6, 0.0);
  13. }
  14. override int GetNotifierType()
  15. {
  16. return eNotifiers.NTF_WARMTH;
  17. }
  18. protected DSLevelsTemp DetermineLevel(float value, float m_warning_treshold, float m_critical_treshold, float m_empty_treshold, float p_warning_treshold, float p_critical_treshold, float p_empty_treshold )
  19. {
  20. DSLevelsTemp level = DSLevelsTemp.NORMAL;
  21. if (value < 0)
  22. {
  23. if (value < m_warning_treshold)
  24. level = DSLevelsTemp.WARNING_MINUS;
  25. if (value < m_critical_treshold)
  26. level = DSLevelsTemp.CRITICAL_MINUS;
  27. if (value <= m_empty_treshold)
  28. level = DSLevelsTemp.BLINKING_MINUS;
  29. }
  30. else
  31. {
  32. if (value > p_warning_treshold)
  33. level = DSLevelsTemp.WARNING_PLUS;
  34. if (value > p_critical_treshold)
  35. level = DSLevelsTemp.CRITICAL_PLUS;
  36. if (value >= p_empty_treshold)
  37. level = DSLevelsTemp.BLINKING_PLUS;
  38. }
  39. return level;
  40. }
  41. override void DisplayTendency(float delta)
  42. {
  43. int tendency = CalculateTendency(
  44. GetObservedValue(),
  45. INC_TRESHOLD_LOW,
  46. INC_TRESHOLD_MED,
  47. INC_TRESHOLD_HIGH,
  48. DEC_TRESHOLD_LOW,
  49. DEC_TRESHOLD_MED,
  50. DEC_TRESHOLD_HIGH,
  51. );
  52. DSLevelsTemp level = DetermineLevel(
  53. m_Player.GetStatHeatComfort().Get(),
  54. PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_WARNING,
  55. PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_CRITICAL,
  56. PlayerConstants.THRESHOLD_HEAT_COMFORT_MINUS_EMPTY,
  57. PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_WARNING,
  58. PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_CRITICAL,
  59. PlayerConstants.THRESHOLD_HEAT_COMFORT_PLUS_EMPTY,
  60. );
  61. DisplayElementTendency displayElement = DisplayElementTendency.Cast(GetVirtualHud().GetElement(eDisplayElements.DELM_TDCY_TEMPERATURE));
  62. if (displayElement)
  63. {
  64. displayElement.SetTendency(tendency);
  65. displayElement.SetSeriousnessLevel(level);
  66. }
  67. }
  68. override protected float GetObservedValue()
  69. {
  70. return m_AverageHeatComfortDeltaBuffer.Add(m_Player.m_Environment.GetTargetHeatComfort() - m_Player.GetStatHeatComfort().Get());
  71. }
  72. }