summaryrefslogtreecommitdiff
path: root/GameCode/ChomaticAberrationFeeler.cs
blob: ebe7c165f486cec4dd9bb246faf59dafac27d01f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class ChomaticAberrationFeeler : GameFeeler
{
	public float force = 10f;

	public float damper = 0.95f;

	public float damperSpring = 0.95f;

	public float threshold;

	private PostProcessVolume postProcessVolume;

	private ChromaticAberration chromaticAberration;

	private float intensity;

	private float velocity;

	private float targetIntensity;

	public override void OnAwake()
	{
		postProcessVolume = GetComponent<PostProcessVolume>();
		if (!postProcessVolume.profile.TryGetSettings<ChromaticAberration>(out chromaticAberration))
		{
			Debug.LogError("No ChromaticAberration in post!");
		}
		else
		{
			targetIntensity = chromaticAberration.intensity.value;
		}
	}

	public override void OnGameFeel(Vector2 feelDirection)
	{
		feelDirection = Vector2.ClampMagnitude(feelDirection, 50f);
		if (feelDirection.magnitude < threshold)
		{
			feelDirection = feelDirection.normalized * threshold * 0.3f;
		}
		velocity += feelDirection.sqrMagnitude * 0.2f * force;
	}

	private void Update()
	{
		velocity *= damper;
		intensity *= damperSpring;
		intensity += velocity * Mathf.Clamp(TimeHandler.deltaTime, 0f, 0.02f);
		chromaticAberration.intensity.value = intensity + targetIntensity;
	}

	private void FixedUpdate()
	{
		intensity *= 0.9f;
	}

	public override void OnUIGameFeel(Vector2 feelDirection)
	{
	}
}