	Shader "Custom/FlipCardUI"
	{
	Properties
	{
	_FrontTexture("Front Texture", 2D) = "white" {}
	_BackTexture("Back Texture", 2D) = "white" {}
	_FlipProgress("Flip Progress", Range(0, 1)) = 0
	_FlipSpeed("Flip Speed", Range(0, 10)) = 5
	}

	SubShader
	{
		Tags {
			"RenderType" = "Opaque"
			"DisableBatching" = "true"
		}

		Cull Off
		Pass
		{
			
		CGPROGRAM
			#pragma vertex vert
			#pragma fragment frag
			#define pi 3.1415926
			struct appdata
			{
			float4 vertex : POSITION;
			float2 uv : TEXCOORD0;
			float3 uv1 : TEXCOORD1;
			};

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

			sampler2D _FrontTexture;
			sampler2D _BackTexture;
			float _FlipProgress;
			float _FlipSpeed;

			float4 flip_base(float4 vertex, float3 uv1)
			{
				float scale = 1 / 0.70710679065997;
				float4 temp = vertex;
				//float theta = (_FlipProgress+0.5) * 0.5 * pi;
				//temp.x = vertex.x * cos(clamp(theta, 0, pi));
				//temp.x = vertex.x * clamp(abs(uv.y <= 0.5 ? cos(clamp(theta, 0, pi)) : sin(clamp(theta, 0, pi))), 0.25, 1);

				//float2 delta;
				//delta.x = temp.x - uv1.x;
				//delta.y = temp.y - uv1.y;
				////temp.x = uv1.x + delta.x * clamp(abs(delta.y <= 0.0 ? cos(theta) : sin(theta)), 0.5, 1);
				////temp.y = uv1.y + delta.y * sin(clamp(theta, 0, pi));
				//temp.x *= _FlipProgress;
				//temp.y *= _FlipProgress;

				////temp.x = uv1.x + (delta.x * _FlipProgress);
				////temp.y = uv1.y + (delta.y * _FlipProgress);
				//vertex = temp;


				float2 pos;
				float2 center = float2(0,0); // uv1.xy;
				float2 dt = vertex.xy - center.xy;
				float len = sqrt(dot(dt, dt));
				//ݾ ת
				float theta = -len * _FlipProgress * pi;
				// ת
				float2x2 rot =
				{
					cos(theta), sin(theta),
					-sin(theta) ,cos(theta)
				};
				dt = mul(rot, dt);
				pos = dt + center;
				vertex.xy = pos;
				
				return vertex;
			}

			v2f vert(appdata v)
			{
				v2f o;
				
				o.uv = v.uv;
				//o.uv.y = (o.uv.y - 0.5) * 2;
				//float flipAngle = _FlipProgress * 180;
				//float sinFlipAngle = sin(flipAngle * 3.1415926 / 180);
				//float flipAxis = step(0.5, _FlipProgress) * 2 - 1;
				//float2 flipVector = float2(flipAxis * sinFlipAngle, cos(flipAngle * 3.1415926 / 180));
				//o.vertex.xy += flipVector * abs(o.uv.y) * _FlipSpeed;
				

				//float4 worldPos = mul(unity_ObjectToWorld, v.vertex);
				//worldPos = flip_base(worldPos, v.uv1);
				//o.vertex = mul(UNITY_MATRIX_VP, worldPos);


				float4 p = flip_base(v.vertex, v.uv1);
				o.vertex = UnityObjectToClipPos(p);

				return o;
			}

			fixed4 frag(v2f i) : SV_Target
			{
				fixed4 frontColor = tex2D(_FrontTexture, i.uv);
				//fixed4 backColor = tex2D(_BackTexture, i.uv);
				return frontColor;
			}
		ENDCG
		}
	}
	FallBack "Diffuse"
}

/*
fixed4 frag (v2f i) : SV_Target
{
    float2 uv = i.uv;

    //uv Ť 
    if (_RotScal > 0)
    {
        //
        float2 dt = uv - center;
        float len = sqrt(dot(dt, dt));

        //ݾ ת
        float theta = -len * _RotScal;

        //ת
        float2x2 rot =
        {
            cos(theta), sin(theta),
            -sin(theta) ,cos(theta)
        };
        dt = mul(rot, dt);
        uv = dt + center;
    }


    
    fixed4 col = tex2D(_MainTex, uv);
    return col;
}

*/