22 lines
896 B
Plaintext
22 lines
896 B
Plaintext
shader_type canvas_item;
|
|
render_mode unshaded;
|
|
|
|
uniform vec2 icon_size = vec2(32.0);
|
|
uniform float corner_radius = 4.0;
|
|
uniform float cooldown : hint_range(0.0, 1.0) = 0.0;
|
|
uniform float dimming : hint_range(0.0, 1.0) = 0.0;
|
|
|
|
void fragment() {
|
|
vec4 artwork = texture(TEXTURE, UV);
|
|
vec2 p = abs((UV - 0.5) * icon_size) - icon_size * 0.5 + corner_radius;
|
|
float distance_to_edge = length(max(p, vec2(0.0))) + min(max(p.x, p.y), 0.0) - corner_radius;
|
|
float aa = max(fwidth(distance_to_edge), 0.5);
|
|
float mask = 1.0 - smoothstep(-aa * 0.5, aa * 0.5, distance_to_edge);
|
|
float luminance = dot(artwork.rgb, vec3(0.2126, 0.7152, 0.0722));
|
|
artwork.rgb = mix(artwork.rgb, vec3(luminance), dimming * 0.65);
|
|
artwork.rgb *= 1.0 - dimming * 0.38;
|
|
float cooling = (1.0 - step(cooldown, UV.y)) * step(0.001, cooldown);
|
|
artwork.rgb *= 1.0 - cooling * 0.6;
|
|
COLOR = vec4(artwork.rgb, artwork.a * mask);
|
|
}
|