shockhitreaction.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. class ShockDealtEffect
  2. {
  3. const float INTENSITY_COEF_OVERALL = 0.8; //intensity percentage multiplier
  4. const float INTENSITY_COEF_BLUR = 1;
  5. const float INTENSITY_COEF_COLOR = 0.2;
  6. const float INTENSITY_COEF_VIGNETTE = 0.7;
  7. const float DURATION_MIN = 0.6;
  8. ref Param3<float,float,float> m_EffectParam;
  9. float m_HitDuration;
  10. float m_BreakPoint;
  11. float m_TimeActive;
  12. float m_ShockIntensityMax;
  13. void ShockDealtEffect(float intensity_max)
  14. {
  15. float duration_coef = Math.Clamp(intensity_max,DURATION_MIN,1);
  16. m_HitDuration = 1 * duration_coef;
  17. m_BreakPoint = 0.2 * duration_coef;
  18. m_ShockIntensityMax = Math.Clamp(intensity_max,0,1);
  19. m_EffectParam = new Param3<float,float,float>(0,0,0);
  20. //Print(intensity_max);
  21. //Print("HitSyncDebug | ShockDealtEffect: " + GetGame().GetPlayer().GetSimulationTimeStamp());
  22. }
  23. void ~ShockDealtEffect()
  24. {
  25. if (GetGame())
  26. PPERequesterBank.GetRequester(PPERequester_ShockHitReaction).Stop();
  27. }
  28. void Update(float deltatime)
  29. {
  30. float value;
  31. if ( m_TimeActive <= m_BreakPoint )
  32. {
  33. value = Math.InverseLerp(0, m_BreakPoint, m_TimeActive);
  34. }
  35. else
  36. {
  37. float tmp_value = Math.InverseLerp(m_BreakPoint, m_HitDuration, m_TimeActive);
  38. value = 1 - tmp_value;
  39. }
  40. m_TimeActive += deltatime;
  41. value = Math.Clamp(value,0,1);
  42. //value calculations
  43. float val = Math.Clamp(Math.Lerp(0, m_ShockIntensityMax, value),0,m_ShockIntensityMax);
  44. float val_color = Math.Clamp(val * INTENSITY_COEF_COLOR,0,m_ShockIntensityMax);
  45. //Postprocess application
  46. float blur = val * INTENSITY_COEF_OVERALL * INTENSITY_COEF_BLUR;
  47. float factor = val_color * INTENSITY_COEF_OVERALL;
  48. float vignette = val * INTENSITY_COEF_OVERALL * INTENSITY_COEF_VIGNETTE;
  49. m_EffectParam.param1 = blur;
  50. m_EffectParam.param2 = vignette;
  51. m_EffectParam.param3 = factor;
  52. PPERequesterBank.GetRequester(PPERequester_ShockHitReaction).Start(m_EffectParam);
  53. if ( m_TimeActive >= m_HitDuration )
  54. {
  55. delete this;
  56. }
  57. }
  58. }