﻿// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Quantum/ColorCrosses"{
	Properties{
		_Rotation ("Rotation", Range (0,360)) = 0
		_Size ("Size", Range (0,100)) = 1
	}

	SubShader{
		Pass{
			CGPROGRAM

			#pragma vertex vertexFunction
			#pragma fragment fragmentFunction

			#include "UnityCG.cginc"

			struct appdata{
				float4 vertex : POSITION;
				float2 uv : TEXCOORD0;
			};

			struct v2f{
				float4 position : SV_POSITION;
				float2 uv : TEXCOORD0;
			};

			float _Size;
			float _Rotation;

			v2f vertexFunction(appdata IN){
				v2f OUT;
				OUT.position = UnityObjectToClipPos(IN.vertex);
				OUT.uv = IN.uv;
				return OUT;
			}

			fixed4 fragmentFunction(v2f IN) : SV_Target{
				float2 st = IN.uv;
				st.y += sin(_Rotation*0.01745329251994329576923690768489)*(_Time.y/100.0);
				st.x += cos(_Rotation*0.01745329251994329576923690768489)*(_Time.y/100.0);
				st = floor(st*100.0*_Size);

				if(!((uint(st.x+st.y*2.0)%5)%5 == 0)){
					if((uint(st.x+1.0+st.y*2.0)%5)%5 == 0){
						st.x+=1.0;
					}else if((uint(st.x-1.0+st.y*2.0)%5)%5 == 0){
						st.x-=1.0;
					}else if((uint(st.x-2.0+st.y*2.0)%5)%5 == 0){
						st.y-=1.0;
					}else if((uint(st.x+2.0+st.y*2.0)%5)%5 == 0){
						st.y+=1.0;
					}
				}
				return float4(clamp(frac(sin(float3(dot(st,float2(127.1,311.7)),
                          dot(st,float2(413.5,197.7)),
                          dot(st,float2(269.5,183.3))
                         ))*43758.5453), 0.0, 1.0), 1.0);
			}
			ENDCG
		}
	}
}
