shader_type canvas_item;

uniform sampler2D SCREEN_TEXTURE: hint_screen_texture, filter_linear_mipmap;
uniform float distortionView : hint_range(0.0, 0.3, 0.005) = 0.03;
uniform float speedView : hint_range(0.0, 1.0, 0.005) = 0.5;
uniform sampler2D noiseViewX;
uniform sampler2D noiseViewY;

// vertex uniforms
uniform float distortionVertex : hint_range(0.0, 0.3, 0.005) = 0.03;
uniform float speedVertex : hint_range(0.0, 1.0, 0.005) = 0.1;
uniform sampler2D noiseVertex;

void vertex() {
	VERTEX += vec2(sin(TIME * 15.0f) * 7.5f, 0);
}

void fragment() {
	vec4 pixel_color = texture(TEXTURE, UV);

	float noiseValueX  = (texture(noiseViewX, UV + (TIME * speedView)).r * 2.0) - 1.0; // Range: -1.0 to 1.0
	float noiseValueY  = (texture(noiseViewY, UV + (TIME * speedView)).r * 2.0) - 1.0; // Range: -1.0 to 1.0
	vec2 noiseDistort = vec2(noiseValueX, noiseValueY) * distortionView;
	vec3 distortedScreenTexture = vec3(texture(SCREEN_TEXTURE, SCREEN_UV + noiseDistort).rgb);

	if (pixel_color.a > 0.6f) {
		vec4 new_color = vec4(0.2f, 0.1f, 0.3f, 0.4f);
		COLOR = vec4(new_color.r + distortedScreenTexture.r, new_color.r + distortedScreenTexture.r, new_color.r + distortedScreenTexture.r, 0.4f);
	}
}