package funkin.graphics.shaders;

import flixel.math.FlxPoint;
import flixel.system.FlxAssets.FlxShader;

@:keep
class OverlayBlend extends FlxShader
{
  // these r copypaste
  public var funnyX(default, set):Float = 0;
  public var funnyY(default, set):Float = 0;

  function set_funnyX(x:Float):Float
  {
    xPos.value[0] = x;

    return x;
  }

  function set_funnyY(y:Float):Float
  {
    yPos.value[0] = y;

    return y;
  }

  @:glFragmentSource('
        #pragma header

        uniform float alphaShit;
		uniform float yPos;
		uniform float xPos;

		uniform sampler2D funnyShit;


		vec4 blendOverlay(vec4 base, vec4 blend)
		{
			vec4 mixed = mix(1.0 - 2.0 * (1.0 - base) * (1.0 - blend), 2.0 * base * blend, step(base, vec4(0.5)));

			// mixed = mix(mixed, blend, base.a); // proper alpha mixing?

			return mixed;
		}

        void main()
        {
			vec2 funnyUv = openfl_TextureCoordv;
            vec4 color = flixel_texture2D(bitmap, funnyUv);

			vec2 reallyFunnyUv = vec2(vec2(0.0, 0.0) - gl_FragCoord.xy / openfl_TextureSize.xy);

			vec4 gf = flixel_texture2D(funnyShit, openfl_TextureCoordv.xy + vec2(0.1, 0.2));


			vec4 mixedCol = blendOverlay(color, gf);

            gl_FragColor = mixedCol;
        }

    ')
  public function new()
  {
    super();

    xPos.value = [0];
    yPos.value = [0];
  }
}