// Has 2 circles, an inner one that is unaffected and an outer one. Anything past the outer one is full red // and in-between is a gradient. light_mode unshaded; uniform highp vec3 color; uniform highp float time; // Uniforms because it makes testing way easier. If needed make it const. uniform highp float outerCircleRadius; uniform highp float outerCircleMaxRadius; uniform highp float innerCircleRadius; uniform highp float innerCircleMaxRadius; uniform highp float darknessAlphaOuter; const highp float darknessAlphaInner = 0.0; void fragment() { highp vec2 pixelSize = vec2(1.0/SCREEN_PIXEL_SIZE.x, 1.0/SCREEN_PIXEL_SIZE.y); highp vec2 pixelCenter = pixelSize*0.5; highp float distance = length(FRAGCOORD.xy - pixelCenter); highp float innerRadius = innerCircleRadius + time * (innerCircleMaxRadius - innerCircleRadius); highp float outerRadius = outerCircleRadius + time * (outerCircleMaxRadius - outerCircleRadius); if(distance > outerRadius) { COLOR = vec4(color.x, color.y, color.z, darknessAlphaOuter); } else if(distance < innerRadius) { COLOR = vec4(0.0, 0.0, 0.0, darknessAlphaInner); } else { highp float ratio = (distance - innerRadius) / (outerRadius - innerRadius); highp float alpha = darknessAlphaInner + (darknessAlphaOuter - darknessAlphaInner) * ratio; COLOR = vec4(color.x, color.y, color.z, alpha); } }