summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Camera/BindCameraHeightToShader.cs
blob: 4381e2cc3ac7e0fc0696a0f18ce135363da9f67b (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
using UnityEngine;

namespace Camera
{
    public class BindCameraHeightToShader : MonoBehaviour
    {
        public float layerHeight = 5;
        private static readonly int PlayerHeight = Shader.PropertyToID("_PlayerHeight");
        private static readonly int LayerHeight = Shader.PropertyToID("_LayerHeight");

        private float scaleAverage
        {
            get
            {
                var t = transform;
                var scale = t.localScale;
                var average = (scale.x + scale.y + scale.z) / 3;
                return average;
            }
        }
        
        private void FixedUpdate()
        {
            Shader.SetGlobalFloat(PlayerHeight, transform.position.y);
            Shader.SetGlobalFloat(LayerHeight, layerHeight);
        }

        private void OnDrawGizmos()
        {
            var t = transform;
            var average = this.scaleAverage;
            
            Gizmos.color = Color.yellow;
            Gizmos.DrawWireCube(
                t.position,
                new Vector3(2f, 0.2f, 2f) * average
            );
        }
        
        private void OnDrawGizmosSelected()
        {
            var t = transform;
            var average = this.scaleAverage;
            
            Gizmos.color = Color.green;
            Gizmos.DrawWireCube(
                t.position + Vector3.up * (layerHeight / 2),
                (new Vector3(2.2f, 0f, 2.2f) * average) +
                Vector3.up * layerHeight
            );
        }
    }
}