shader_type canvas_item; uniform vec2[10] wave_centers; uniform float[10] wave_distances; uniform vec3 color : source_color; uniform float max_distance; uniform float bublic_size = 2.0; varying vec2[10] local_position; float smooth_bublic(vec2 center,vec2 pixel_pos,float distance_from_center,float size) { return 1.0-distance(distance_from_center,distance(center,pixel_pos))/size; } float solid_bublic(vec2 center,vec2 pixel_pos,float distance_from_center,float size,float border) { return step(border,smooth_bublic(center,pixel_pos,distance_from_center,size));; } void vertex() { for (int i = 0; i < wave_centers.length(); i++) { local_position[i] = (inverse(MODEL_MATRIX) * vec4(wave_centers[i],0.0,1.0)).xy; } } void fragment() { // Set faction color COLOR = texture(TEXTURE,UV) * vec4(color,1.0); /*for (int i = 0; i < wave_centers.length(); i++) { float wave_distance = wave_distances[i]; float normalized_distance = wave_distance/max_distance; if (normalized_distance >= 1.0 || normalized_distance < 0.0) { break; } float bublic = solid_bublic(local_position[i],(UV-0.5)/TEXTURE_PIXEL_SIZE,wave_distance,bublic_size,0.75); if (bublic == 0.0){ break; } COLOR.rgb = mix(COLOR.rgb,vec3(bublic*color),1.0-normalized_distance); }*/ }