Fix alpha fade-outs on receptors

This commit is contained in:
Luke Hubmayer-Werner 2021-01-06 23:10:50 +10:30
parent 1dfb70de8f
commit 448cf998b0
2 changed files with 11 additions and 7 deletions

View File

@ -7,6 +7,7 @@ export var shadow_px := 8 # Outer edge, analogous to radius
export var line_color := Color.blue
export var dot_color := Color.blue
export var shadow_color := Color(0.0, 0.0, 0.0, 0.57)
var alpha := 1.0
var center := Vector2(0.0, 0.0)
var ring_vertex_count := 36
@ -115,18 +116,17 @@ func _draw():
# var ring_thickness = receptor_px + shadow_px*2
# var estimated_area = circumscribe_polygon_area(GameTheme.receptor_ring_radius+ring_thickness*0.5, mesh_v) - inscribe_polygon_area(GameTheme.receptor_ring_radius-ring_thickness*0.5, mesh_v)
# var ideal_ring_area = PI * (pow(GameTheme.receptor_ring_radius+receptor_px/2+shadow_px, 2) - pow(GameTheme.receptor_ring_radius-receptor_px/2-shadow_px, 2))
var quad_area = 4*pow(GameTheme.receptor_ring_radius+receptor_px/2+shadow_px, 2)
# var quad_area = 4*pow(GameTheme.receptor_ring_radius+receptor_px/2+shadow_px, 2)
material.set_shader_param("dot_radius", 0.5*receptor_px/GameTheme.receptor_ring_radius)
material.set_shader_param("line_thickness", 0.5*ring_px/GameTheme.receptor_ring_radius)
material.set_shader_param("shadow_thickness", shadow_px/GameTheme.receptor_ring_radius)
# material.set_shader_param("shadow_thickness_taper", -0.75)
material.set_shader_param("px", 0.5/GameTheme.receptor_ring_radius)
material.set_shader_param("px2", 1.0/GameTheme.receptor_ring_radius)
material.set_shader_param("line_color", line_color)
material.set_shader_param("dot_color", dot_color)
material.set_shader_param("shadow_color", shadow_color)
material.set_shader_param("alpha", alpha)
func set_ring_vertex_count(num: int):
assert(num > 3)
@ -155,7 +155,10 @@ func _ready():
# set_receptor_positions(sin(OS.get_ticks_msec()*0.001*0.0125*PI)*PI)
# update()
func set_alpha(a):
alpha = a
material.set_shader_param("alpha", alpha)
func fade(visible: bool):
# $Tween.interpolate_property(self, "modulate", modulate, Color(1.0, 1.0, 1.0, float(visible)), 1.0)
$Tween.interpolate_property(self, "position", position, Vector2(0.0, float(!visible)*1080), 1.0)
$Tween.interpolate_method(self, "set_alpha", alpha, float(visible), abs(alpha-float(visible))*2.0)
$Tween.start()

View File

@ -17,6 +17,7 @@ uniform float dot_radius = 0.033;
uniform float shadow_thickness = 0.01;
uniform float px = 0.002; // Represents 1px in UV space, for AA purposes
uniform float px2 = 0.004; // Represents 2px in UV space, for AA purposes
uniform float alpha = 1.0;
//void vertex() {
//}
@ -49,7 +50,6 @@ vec2 dot_alpha(vec2 uv) {
void fragment() {
if (COLOR.rgba != dbg_color) { // Can't use return in fragment() function
COLOR.rgba = vec4(0.0);
lowp float dist = distance(UV, vec2(0.0));
lowp float angle = atan(-UV.y, UV.x);
vec4 lds_alpha = vec4(0.0);
@ -65,5 +65,6 @@ void fragment() {
COLOR.rgb = (line_color.rgb*lds_alpha.x) + (dot_color.rgb*lds_alpha.y) + (shadow_color.rgb*lds_alpha.z);
COLOR.a = lds_alpha.y + lds_alpha.x*(1.0-lds_alpha.y);
COLOR.a += lds_alpha.z*(1.0-COLOR.a);
COLOR = clamp(COLOR, 0.0, 1.0); }
COLOR = clamp(COLOR, 0.0, 1.0);
COLOR *= alpha; }
}