rabidus-test/Assets/Graphy - Ultimate Stats Mon.../Shaders/GraphStandard.shader

190 lines
3.9 KiB
Plaintext

Shader "Graphy/Graph Standard"
{
Properties
{
[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
_Color("Tint", Color) = (1,1,1,1)
[MaterialToggle] PixelSnap("Pixel snap", Float) = 0
_GoodColor("Good Color", Color) = (1,1,1,1)
_CautionColor("Caution Color", Color) = (1,1,1,1)
_CriticalColor("Critical Color", Color) = (1,1,1,1)
_GoodThreshold("Good Threshold", Float) = 0.5
_CautionThreshold("Caution Threshold", Float) = 0.25
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Cull Off
Lighting Off
ZWrite Off
ZTest Off
Blend One OneMinusSrcAlpha
Pass
{
Name "Default"
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile _ PIXELSNAP_ON
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
UNITY_SETUP_INSTANCE_ID(IN);
UNITY_INITIALIZE_OUTPUT(v2f, OUT);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(OUT);
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color * _Color;
#ifdef PIXELSNAP_ON
OUT.vertex = UnityPixelSnap(OUT.vertex);
#endif
return OUT;
}
sampler2D _MainTex;
sampler2D _AlphaTex;
float _AlphaSplitEnabled;
fixed4 SampleSpriteTexture(float2 uv)
{
fixed4 color = tex2D(_MainTex, uv);
#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED
if (_AlphaSplitEnabled)
color.a = tex2D(_AlphaTex, uv).r;
#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED
return color;
}
fixed4 _GoodColor;
fixed4 _CautionColor;
fixed4 _CriticalColor;
fixed _GoodThreshold;
fixed _CautionThreshold;
uniform float Average;
// NOTE: The size of this array can break compatibility with some older GPUs
// If you see a pink box or that the graphs are not working, try lowering this value
// or using the GraphMobile.shader
uniform float GraphValues[512];
uniform float GraphValues_Length;
fixed4 frag(v2f IN) : SV_Target
{
fixed4 color = IN.color;
fixed xCoord = IN.texcoord.x;
fixed yCoord = IN.texcoord.y;
float graphValue = GraphValues[floor(xCoord * GraphValues_Length)];
// Define the width of each element of the graph
float increment = 1.0f / (GraphValues_Length - 1);
// Assign the corresponding color
if (graphValue > _GoodThreshold)
{
color *= _GoodColor;
}
else if (graphValue > _CautionThreshold)
{
color *= _CautionColor;
}
else
{
color *= _CriticalColor;
}
// Point coloring
if (graphValue - yCoord > increment * 4)
{
//color.a = yCoord * graphValue * 0.3;
color.a *= yCoord * 0.3 / graphValue;
}
// Set as transparent the part on top of the current point value
if (yCoord > graphValue)
{
color.a = 0;
}
// Average white bar
if (yCoord < Average && yCoord > Average - 0.02)
{
color = fixed4(1, 1, 1, 1);
}
// CautionColor bar
if (yCoord < _CautionThreshold && yCoord > _CautionThreshold - 0.02)
{
color = _CautionColor;
}
// GoodColor bar
if (yCoord < _GoodThreshold && yCoord > _GoodThreshold - 0.02)
{
color = _GoodColor;
}
// Fade the alpha of the sides of the graph
if (xCoord < 0.03)
{
color.a *= 1 - (0.03 - xCoord) / 0.03;
}
else if (xCoord > 0.97)
{
color.a *= (1 - xCoord) / 0.03;
}
fixed4 c = SampleSpriteTexture(IN.texcoord) * color;
c.rgb *= c.a;
return c;
}
ENDCG
}
}
}