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); }