pperhmp_lvl3.c 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. class PPERequester_HeavyMetalPoisoning_3 extends PPERequester_GameplayBase
  2. {
  3. const float WAVE_PROGRESS_MIN = 0;
  4. const float WAVE_PROGRESS_MAX = Math.PI;
  5. const float WAVE_AMPLITUDE_COEF = 0.7; //utilized values clamped to <-1,1> range, this affects the duration of plateau and steepness of change
  6. const float WAVE_TILT = -0.12; //anything in the closed range of (1,-1), left to right. UNDEFINED for '0' value!
  7. const float DISTORT_MIN = 0;
  8. const float DISTORT_MAX = -0.8;
  9. //const float PULSING_FREQUENCY = 1.0;
  10. float m_ProgressAngle;
  11. float m_CurveValue;
  12. float m_CurveValueClamped;
  13. float m_LenseOffsetAngle;
  14. float m_LenseOffsetDist;
  15. void SetInitialLenseOffset(float offsetAngle, float offsetDistance = 0.5)
  16. {
  17. m_LenseOffsetAngle = offsetAngle;
  18. m_LenseOffsetDist = Math.Clamp(offsetDistance,0,1);
  19. }
  20. void SetEffectProgress(float progress) //0..1
  21. {
  22. m_ProgressAngle = Math.Lerp(WAVE_PROGRESS_MIN,WAVE_PROGRESS_MAX,progress);
  23. m_CurveValue = (1 / WAVE_TILT) * (Math.Atan((WAVE_TILT * Math.Sin(m_ProgressAngle)) / (1 - WAVE_TILT * Math.Cos(m_ProgressAngle)))) * WAVE_AMPLITUDE_COEF;
  24. m_CurveValueClamped = Math.Clamp(m_CurveValue,-1,1);
  25. float distort = Math.Lerp(DISTORT_MIN,DISTORT_MAX,m_CurveValueClamped);
  26. float centerX = Math.Lerp(0,m_LenseOffsetDist,Math.Sin(m_ProgressAngle + m_LenseOffsetAngle));
  27. float centerY = Math.Lerp(0,m_LenseOffsetDist,Math.Cos(m_ProgressAngle + m_LenseOffsetAngle));
  28. float chromAbb = Math.AbsFloat(m_CurveValueClamped); //scale
  29. float chromShiftR = 0.1;
  30. float chromShiftG = 0;
  31. float chromShiftB = 0.75;
  32. float alpha01 = Math.Sin( -Math.PI_HALF + 7 * m_ProgressAngle) * 0.5 + 0.5;
  33. vector colabA = "-1 -1 -0.85";
  34. vector colabB = "0 0 0";
  35. vector absim = vector.Lerp(colabA, colabB, alpha01);
  36. array<float> color_mod = {absim[0], absim[1], absim[2], 1.0};
  37. vector coloverA = "0 0 0";
  38. vector coloverB = "0.25 0.9 0.1";
  39. vector oversim = vector.Lerp(coloverA, coloverB, m_CurveValueClamped);
  40. array<float> color_overlay = {oversim[0], oversim[1], oversim[2], 0.5};
  41. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_DISTORT,false, distort,PPEDistort.L_0_HMP,PPOperators.ADD);
  42. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_CENTERX,false, centerX,PPEDistort.L_1_HMP,PPOperators.ADD);
  43. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_CENTERY,false, centerY,PPEDistort.L_2_HMP,PPOperators.ADD);
  44. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_CHROM_ABB,true, chromAbb,PPEDistort.L_3_HMP,PPOperators.ADD);
  45. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_CHROM_ABB_SHIFTR,true, chromShiftR,PPEDistort.L_4_HMP,PPOperators.SET);
  46. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_CHROM_ABB_SHIFTG,true, chromShiftG,PPEDistort.L_5_HMP,PPOperators.SET);
  47. SetTargetValueFloat(PostProcessEffectType.Distort,PPEDistort.PARAM_CHROM_ABB_SHIFTB,true, chromShiftB,PPEDistort.L_6_HMP,PPOperators.SET);
  48. SetTargetValueColor(PostProcessEffectType.Distort,PPEDistort.PARAM_CHROM_COLOR_MOD,color_mod,PPEDistort.L_7_HMP,PPOperators.ADD);
  49. SetTargetValueColor(PostProcessEffectType.Glow,PPEGlow.PARAM_COLORIZATIONCOLOR,color_overlay,PPEGlow.L_23_HMP,PPOperators.ADD);
  50. }
  51. }