123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- class PPERequester_HMPGhosts extends PPERequester_GameplayBase
- {
- protected bool m_PulseActive;
- protected float m_PulseProgress;
-
- protected ref array<float> m_ChannelWeights = { 0, 0, 0, 0 };
- protected ref array<float> m_ColorMod = { 1, 1, 1, 1 };
-
- protected bool m_Stopping;
- protected bool m_StopNext;
- protected float m_FadeOutTimeTarget;
- protected float m_FadingTimeElapsed;
- protected float m_FadingProgress;
- protected float m_ElapsedTime;
-
- override protected void OnStart(Param par = null)
- {
- super.OnStart(par);
-
- m_Stopping = false;
- m_StopNext = false;
- m_ElapsedTime = 0.0;
- m_FadingTimeElapsed = 0.0;
- m_FadingProgress = 0.0;
-
- //following changes only performed once, on start
- //noise
- float nScaleX = 0.05; //inverse scaling!
- float nScaleY = 0.05; //inverse scaling!
- //ghosts
- float gOffsetX = 30;
- float gOffsetY = 13;
- float gScaleX = 1; //inverse scaling!
- float gScaleY = 1; //inverse scaling!
- //color modulation
- m_ColorMod[0] = 0.8;
- m_ColorMod[1] = 0.8;
- m_ColorMod[2] = 0.8;
- m_ColorMod[3] = 0.85;
-
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_SCALE_X,false, nScaleX,PPEGhost.L_4_HMP,PPOperators.LOWEST);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_SCALE_Y,false, nScaleY,PPEGhost.L_5_HMP,PPOperators.LOWEST);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_GHOST_OFFSET_X,false, gOffsetX,PPEGhost.L_6_HMP,PPOperators.ADD);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_GHOST_OFFSET_Y,false, gOffsetY,PPEGhost.L_7_HMP,PPOperators.ADD);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_GHOST_SCALE_X,false, gScaleX,PPEGhost.L_8_HMP,PPOperators.LOWEST);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_GHOST_SCALE_Y,false, gScaleY,PPEGhost.L_9_HMP,PPOperators.LOWEST);
- SetTargetValueColor(PostProcessEffectType.Ghost,PPEGhost.PARAM_GHOST_COLOR_MOD,m_ColorMod,PPEGhost.L_1_HMP,PPOperators.SET);
- }
-
- override protected void OnUpdate(float delta)
- {
- if (m_StopNext)
- {
- if (m_IsRunning)
- Stop();
- return;
- }
-
- ProcessSimulation(delta);
-
- super.OnUpdate(delta);
-
- SetRequesterUpdating(true);
- }
-
- protected void ProcessSimulation(float delta)
- {
- if (m_Stopping)
- ProcessFading(delta);
-
- if (m_PulseActive)
- {
- //channel weights
- float time = m_ElapsedTime * 0.65;
- SampleChannels(time);
- ReSampleChannels(time);
-
- //noise
- float nOffsetX = (Math.Sin( time * 0.29 ) * 0.5 + 0.5) * 0.3;
- float nOffsetY = (Math.Cos( time * 0.17 ) * 0.5 + 0.5) * 0.3;
-
- //channel remapping
- float animLo = (Math.Sin( time ) * 0.5 + 0.5) * 1;
- float animHi = (Math.Sin( time ) * 0.5 + 0.5) * 1;
- float rmpLoAll = Math.Lerp(0.1,0.3,animLo);
- float rmpHiAll = Math.Lerp(0.9,1.2,animHi);
-
- SetTargetValueColor(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_CHANNEL_WEIGHT,m_ChannelWeights,PPEGhost.L_1_HMP,PPOperators.SET);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_OFFSET_X,false, nOffsetX,PPEGhost.L_2_HMP,PPOperators.ADD);
- SetTargetValueFloat(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_OFFSET_Y,false, nOffsetY,PPEGhost.L_3_HMP,PPOperators.ADD);
- SetTargetValueColor(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_REMAP_LO,{rmpLoAll,rmpLoAll,rmpLoAll,rmpLoAll},PPEGhost.L_1_HMP,PPOperators.SET);
- SetTargetValueColor(PostProcessEffectType.Ghost,PPEGhost.PARAM_NOISE_REMAP_HI,{rmpHiAll,rmpHiAll,rmpHiAll,rmpHiAll},PPEGhost.L_1_HMP,PPOperators.SET);
-
- m_PulseActive = m_PulseProgress < 1.0;
- }
-
- m_ElapsedTime += delta;
- }
-
- protected void SampleChannels(float time)
- {
- float offset;
- // luckily 4 channels * 90 fit into 360 nicely, so no need to distribute weights other way
- for (int i = 0; i < 4; ++i)
- {
- offset = i * Math.PI_HALF;
- m_ChannelWeights[i] = Math.Sin( time + offset );
- }
- }
-
- protected void ReSampleChannels(float time)
- {
- float rampingCoef = 1.1;
- float w = Math.Clamp((Math.Sin(m_PulseProgress * Math.PI) * rampingCoef),0,1);
- w = Math.Lerp(0,w,1 - m_FadingProgress);
-
- for (int i = 0; i < 4; ++i)
- m_ChannelWeights[i] = w * m_ChannelWeights[i];
- }
-
- protected void ProcessFading(float delta)
- {
- m_FadingTimeElapsed += delta;
- m_FadingProgress = m_FadingTimeElapsed/m_FadeOutTimeTarget;
-
- m_StopNext = m_FadingProgress >= 1.0;
- }
-
- void SetPulseProgress(float progress) //0..1
- {
- m_PulseActive = true;
- m_PulseProgress = progress;
- }
-
- void FadeOutEffect(float targetTime)
- {
- m_Stopping = true;
- m_FadeOutTimeTarget = targetTime;
- m_FadingTimeElapsed = 0.0;
- }
- }
|